public static async Task ActualizarSucursalPorEmpresa(SucursalPorEmpresa sucursal, string strToken) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; StringContent contentJson = serializarEntidad(sucursal); if (strToken != "") { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", strToken); } HttpResponseMessage httpResponse = await httpClient.PostAsync(strServicioURL + "/actualizarsucursalporempresa", contentJson); if (httpResponse.StatusCode == HttpStatusCode.InternalServerError) { string strError = serializer.Deserialize <string>(httpResponse.Content.ReadAsStringAsync().Result); throw new Exception(strError); } if (httpResponse.StatusCode != HttpStatusCode.OK) { throw new Exception(httpResponse.ReasonPhrase); } } catch (Exception ex) { throw ex; } }
public IList <TrasladoDetalle> ObtenerListadoTrasladosPorAplicar(int intIdEmpresa, int intIdSucursalDestino, bool bolAplicado, int numPagina, int cantRec) { using (IDbContext dbContext = localContainer.Resolve <IDbContext>()) { var listaTraslado = new List <TrasladoDetalle>(); try { var listado = dbContext.TrasladoRepository.Where(x => !x.Nulo && x.IdEmpresa == intIdEmpresa && x.IdSucursalDestino == intIdSucursalDestino && x.Aplicado == bolAplicado); listado = listado.OrderByDescending(x => x.IdTraslado).Skip((numPagina - 1) * cantRec).Take(cantRec); var lineas = listado.ToList(); foreach (var traslado in lineas) { string strNombreSucursal = "NOMBRE DE SUCURSAL NO DISPONIBLE"; SucursalPorEmpresa sucursalDestino = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == intIdEmpresa && x.IdSucursal == traslado.IdSucursalOrigen); if (sucursalDestino != null) { strNombreSucursal = sucursalDestino.NombreSucursal; } TrasladoDetalle item = new TrasladoDetalle(traslado.IdTraslado, traslado.Fecha.ToString("dd/MM/yyyy"), strNombreSucursal, traslado.Total); listaTraslado.Add(item); } return(listaTraslado); } catch (Exception ex) { log.Error("Error al obtener el listado de registros de traslados por aplicar: ", ex); throw new Exception("Se produjo un error consultando el listado de traslados por aplicar. Por favor consulte con su proveedor."); } } }
public static async Task <SucursalPorEmpresa> ObtenerSucursalPorEmpresa(int intIdEmpresa, int intIdSucursal, string strToken) { try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; if (strToken != "") { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", strToken); } HttpResponseMessage httpResponse = await httpClient.GetAsync(strServicioURL + "/obtenersucursalporempresa?idempresa=" + intIdEmpresa + "&idsucursal=" + intIdSucursal); if (httpResponse.StatusCode == HttpStatusCode.InternalServerError) { string strError = serializer.Deserialize <string>(httpResponse.Content.ReadAsStringAsync().Result); throw new Exception(strError); } if (httpResponse.StatusCode != HttpStatusCode.OK) { throw new Exception(httpResponse.ReasonPhrase); } SucursalPorEmpresa sucursal = null; string responseContent = await httpResponse.Content.ReadAsStringAsync(); string strResponse = serializer.Deserialize <string>(responseContent); if (strResponse != "") { sucursal = serializer.Deserialize <SucursalPorEmpresa>(strResponse); } return(sucursal); } catch (Exception ex) { throw ex; } }
private async void CargarSucursalPorEmpresa() { if (txtIdEmpresa.Text != "" && txtIdSucursal.Text != "") { sucursal = await Administrador.ObtenerSucursalPorEmpresa(int.Parse(txtIdEmpresa.Text), int.Parse(txtIdSucursal.Text), strToken); if (sucursal == null) { bolSucursalNueva = true; bolTerminalNueva = true; sucursal = new SucursalPorEmpresa(); sucursal.IdEmpresa = int.Parse(txtIdEmpresa.Text); sucursal.IdSucursal = int.Parse(txtIdSucursal.Text); txtNombreSucursal.Text = txtNombreComercial.Text != "" ? txtNombreComercial.Text : txtNombreEmpresa.Text; txtDireccionSucursal.Text = txtDireccion.Text; txtTelefonoSucursal.Text = txtTelefono.Text; txtIdTerminal.Text = "1"; txtDescripcionTerminal.Text = "Terminal 1"; txtValorRegistro.Text = ""; terminal = new TerminalPorSucursal(); terminal.IdEmpresa = int.Parse(txtIdEmpresa.Text); terminal.IdSucursal = int.Parse(txtIdSucursal.Text); terminal.IdTerminal = 1; terminal.ValorRegistro = ""; terminal.ImpresoraFactura = ""; terminal.AnchoLinea = 0; terminal.UltimoDocFE = 0; terminal.UltimoDocND = 0; terminal.UltimoDocNC = 0; terminal.UltimoDocTE = 0; terminal.UltimoDocMR = 0; terminal.IdTipoDispositivo = chkDispositivoMovil.Checked ? StaticTipoDispisitivo.AppMovil : StaticTipoDispisitivo.AppEscritorio; txtIdTerminal.Enabled = false; txtValorRegistro.Enabled = false; btnCargarTerminal.Enabled = false; MessageBox.Show("La sucursal no están registrada para la empresa actual. Ingrese la información y proceda a guardar los cambios. . .", "Leandro Software", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { bolSucursalNueva = false; bolTerminalNueva = false; terminal = null; txtIdTerminal.Text = ""; txtDescripcionTerminal.Text = ""; chkDispositivoMovil.Checked = false; txtNombreSucursal.Text = sucursal.NombreSucursal; txtDireccionSucursal.Text = sucursal.Direccion; txtTelefonoSucursal.Text = sucursal.Telefono; txtIdTerminal.Enabled = true; txtValorRegistro.Enabled = true; btnCargarTerminal.Enabled = true; } } }
public void AnularTraslado(int intIdTraslado, int intIdUsuario, string strMotivoAnulacion) { using (IDbContext dbContext = localContainer.Resolve <IDbContext>()) { try { Traslado traslado = dbContext.TrasladoRepository.Include("DetalleTraslado").FirstOrDefault(x => x.IdTraslado == intIdTraslado); if (traslado == null) { throw new Exception("El registro de traslado por anular no existe."); } if (traslado.Nulo) { throw new Exception("El registro de traslado ya ha sido anulado."); } Empresa empresa = dbContext.EmpresaRepository.Find(traslado.IdEmpresa); if (empresa == null) { throw new BusinessException("Empresa no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } SucursalPorEmpresa sucursal = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalOrigen); if (sucursal == null) { throw new BusinessException("Sucursal no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } if (sucursal.CierreEnEjecucion) { throw new BusinessException("Se está ejecutando el cierre en este momento. No es posible registrar la transacción."); } traslado.Nulo = true; traslado.IdAnuladoPor = intIdUsuario; traslado.MotivoAnulacion = strMotivoAnulacion; dbContext.NotificarModificacion(traslado); if (traslado.IdAsiento > 0) { IContabilidadService servicioContabilidad = new ContabilidadService(); servicioContabilidad.ReversarAsientoContable(dbContext, traslado.IdAsiento); } dbContext.Commit(); } catch (BusinessException ex) { dbContext.RollBack(); throw ex; } catch (Exception ex) { dbContext.RollBack(); log.Error("Error al anular el registro de traslado: ", ex); throw new Exception("Se produjo un error anulando el traslado. Por favor consulte con su proveedor."); } } }
public void ActualizarSucursalPorEmpresa(string strDatos) { try { JObject parametrosJO = JObject.Parse(strDatos); string strEntidad = parametrosJO.Property("Entidad").Value.ToString(); SucursalPorEmpresa sucursal = serializer.Deserialize <SucursalPorEmpresa>(strEntidad); servicioMantenimiento.ActualizarSucursalPorEmpresa(sucursal); } catch (Exception ex) { throw new WebFaultException <string>(ex.Message, HttpStatusCode.InternalServerError); } }
public string AgregarTraslado(Traslado traslado) { using (IDbContext dbContext = localContainer.Resolve <IDbContext>()) { try { Empresa empresa = dbContext.EmpresaRepository.Find(traslado.IdEmpresa); if (empresa == null) { throw new BusinessException("Empresa no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } SucursalPorEmpresa sucursal = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalOrigen); if (sucursal == null) { throw new BusinessException("Sucursal no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } if (sucursal.CierreEnEjecucion) { throw new BusinessException("Se está ejecutando el cierre en este momento. No es posible registrar la transacción."); } traslado.IdAsiento = 0; foreach (var detalle in traslado.DetalleTraslado) { var existencias = dbContext.ExistenciaPorSucursalRepository.AsNoTracking().Where(x => x.IdEmpresa == empresa.IdEmpresa && x.IdSucursal == traslado.IdSucursalOrigen && x.IdProducto == detalle.IdProducto).FirstOrDefault(); if (existencias == null) { throw new BusinessException("El producto " + detalle.IdProducto + " no posee registro de existencias en la sucursal origen del traslado."); } if (detalle.Cantidad > existencias.Cantidad) { throw new BusinessException("La cantidad indicada para el produco " + detalle.IdProducto + " supera las existencias en la sucursal origen del traslado."); } } dbContext.TrasladoRepository.Add(traslado); dbContext.Commit(); } catch (BusinessException ex) { dbContext.RollBack(); throw ex; } catch (Exception ex) { dbContext.RollBack(); log.Error("Error al agregar el registro de devolución: ", ex); throw new Exception("Se produjo un error agregando la información de la devolución. Por favor consulte con su proveedor."); } } return(traslado.IdTraslado.ToString()); }
public string ObtenerSucursalPorEmpresa(int intIdEmpresa, int intIdSucursal) { try { SucursalPorEmpresa sucursal = servicioMantenimiento.ObtenerSucursalPorEmpresa(intIdEmpresa, intIdSucursal); string strRespuesta = ""; if (sucursal != null) { strRespuesta = serializer.Serialize(sucursal); } return(strRespuesta); } catch (Exception ex) { throw new WebFaultException <string>(ex.Message, HttpStatusCode.InternalServerError); } }
public Traslado ObtenerTraslado(int intIdTraslado) { using (IDbContext dbContext = localContainer.Resolve <IDbContext>()) { try { Traslado traslado = dbContext.TrasladoRepository.Include("DetalleTraslado.Producto.ParametroImpuesto").FirstOrDefault(x => x.IdTraslado == intIdTraslado); SucursalPorEmpresa sucursalOrigen = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalOrigen); traslado.NombreSucursalOrigen = sucursalOrigen.NombreSucursal; SucursalPorEmpresa sucursalDestino = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalDestino); traslado.NombreSucursalDestino = sucursalDestino.NombreSucursal; foreach (var detalle in traslado.DetalleTraslado) { detalle.Traslado = null; } return(traslado); } catch (Exception ex) { log.Error("Error al obtener el registro de traslado: ", ex); throw new Exception("Se produjo un error consultado la información del traslado. Por favor consulte con su proveedor."); } } }
public void AplicarTraslado(int intIdTraslado, int intIdUsuario) { decimal decTotalInventario = 0; ParametroContable ivaPorPagarParam = null; ParametroContable efectivoParam = null; ParametroContable trasladosParam = null; ParametroContable lineaParam = null; DataTable dtbInventarios = new DataTable(); dtbInventarios.Columns.Add("IdLinea", typeof(int)); dtbInventarios.Columns.Add("Total", typeof(decimal)); dtbInventarios.PrimaryKey = new DataColumn[] { dtbInventarios.Columns[0] }; Asiento asiento = null; using (IDbContext dbContext = localContainer.Resolve <IDbContext>()) { try { Traslado traslado = dbContext.TrasladoRepository.Include("DetalleTraslado").Where(x => x.IdTraslado == intIdTraslado).FirstOrDefault(); if (traslado == null) { throw new Exception("El registro de traslado por aplicar no existe."); } Empresa empresa = dbContext.EmpresaRepository.Find(traslado.IdEmpresa); if (empresa == null) { throw new BusinessException("Empresa no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } SucursalPorEmpresa sucursal = dbContext.SucursalPorEmpresaRepository.FirstOrDefault(x => x.IdEmpresa == traslado.IdEmpresa && x.IdSucursal == traslado.IdSucursalDestino); if (sucursal == null) { throw new BusinessException("Sucursal no registrada en el sistema. Por favor, pongase en contacto con su proveedor del servicio."); } if (sucursal.CierreEnEjecucion) { throw new BusinessException("Se está ejecutando el cierre en este momento. No es posible registrar la transacción."); } if (empresa.Contabiliza) { ivaPorPagarParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.IVAPorPagar).FirstOrDefault(); efectivoParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Efectivo).FirstOrDefault(); if (ivaPorPagarParam == null || efectivoParam == null) { throw new BusinessException("La parametrización contable está incompleta y no se puede continuar. Por favor verificar."); } } traslado.Aplicado = true; traslado.IdAplicadoPor = intIdUsuario; dbContext.NotificarModificacion(traslado); foreach (var detalleTraslado in traslado.DetalleTraslado) { Producto producto = dbContext.ProductoRepository.Include("Linea").FirstOrDefault(x => x.IdProducto == detalleTraslado.IdProducto); if (producto == null) { throw new Exception("El producto asignado al detalle del traslado no existe"); } if (producto.Tipo != StaticTipoProducto.Producto) { throw new BusinessException("El tipo de producto por trasladar no puede ser un servicio. Por favor verificar."); } ExistenciaPorSucursal existencias = dbContext.ExistenciaPorSucursalRepository.Where(x => x.IdEmpresa == producto.IdEmpresa && x.IdProducto == producto.IdProducto && x.IdSucursal == traslado.IdSucursalOrigen).FirstOrDefault(); if (existencias != null) { existencias.Cantidad -= detalleTraslado.Cantidad; dbContext.NotificarModificacion(existencias); } else { ExistenciaPorSucursal nuevoRegistro = new ExistenciaPorSucursal { IdEmpresa = traslado.IdEmpresa, IdSucursal = traslado.IdSucursalOrigen, IdProducto = detalleTraslado.IdProducto, Cantidad = detalleTraslado.Cantidad * -1 }; dbContext.ExistenciaPorSucursalRepository.Add(nuevoRegistro); } MovimientoProducto movimiento = new MovimientoProducto { IdProducto = producto.IdProducto, IdSucursal = traslado.IdSucursalOrigen, Fecha = DateTime.Now, PrecioCosto = detalleTraslado.PrecioCosto, Origen = "Salida de mercancía por traslado entre sucursales", Tipo = StaticTipoMovimientoProducto.Salida, Cantidad = detalleTraslado.Cantidad }; producto.MovimientoProducto.Add(movimiento); existencias = dbContext.ExistenciaPorSucursalRepository.Where(x => x.IdEmpresa == producto.IdEmpresa && x.IdProducto == producto.IdProducto && x.IdSucursal == traslado.IdSucursalDestino).FirstOrDefault(); if (existencias != null) { existencias.Cantidad += detalleTraslado.Cantidad; dbContext.NotificarModificacion(existencias); } else { ExistenciaPorSucursal nuevoRegistro = new ExistenciaPorSucursal { IdEmpresa = traslado.IdEmpresa, IdSucursal = traslado.IdSucursalDestino, IdProducto = detalleTraslado.IdProducto, Cantidad = detalleTraslado.Cantidad }; dbContext.ExistenciaPorSucursalRepository.Add(nuevoRegistro); } movimiento = new MovimientoProducto { IdProducto = producto.IdProducto, IdSucursal = traslado.IdSucursalDestino, Fecha = DateTime.Now, PrecioCosto = detalleTraslado.PrecioCosto, Origen = "Ingreso de mercancía por traslado entre sucursales", Tipo = StaticTipoMovimientoProducto.Entrada, Cantidad = detalleTraslado.Cantidad }; producto.MovimientoProducto.Add(movimiento); if (empresa.Contabiliza) { decimal decTotalPorLinea = Math.Round(detalleTraslado.PrecioCosto * detalleTraslado.Cantidad, 2, MidpointRounding.AwayFromZero); decTotalInventario += decTotalPorLinea; int intExiste = dtbInventarios.Rows.IndexOf(dtbInventarios.Rows.Find(producto.Linea.IdLinea)); if (intExiste >= 0) { dtbInventarios.Rows[intExiste]["Total"] = (decimal)dtbInventarios.Rows[intExiste]["Total"] + decTotalPorLinea; } else { DataRow data = dtbInventarios.NewRow(); data["IdLinea"] = producto.Linea.IdLinea; data["Total"] = decTotalPorLinea; dtbInventarios.Rows.Add(data); } } } if (empresa.Contabiliza) { decimal decTotalDiff = decTotalInventario - traslado.Total; if (decTotalDiff != 0) { if (decTotalDiff >= 1 || decTotalDiff <= -1) { throw new Exception("La diferencia de ajuste sobrepasa el valor permitido."); } dtbInventarios.Rows[0]["Total"] = (decimal)dtbInventarios.Rows[0]["Total"] - decTotalDiff; decTotalInventario -= decTotalDiff; } asiento = new Asiento { IdEmpresa = traslado.IdEmpresa, Fecha = traslado.Fecha, TotalCredito = 0, TotalDebito = 0 }; asiento.Detalle = "Registro de traslado de mercancías entre sucursales."; //Detalle asiento sucursal origne DetalleAsiento detalleAsiento = new DetalleAsiento(); int intLineaDetalleAsiento = 1; detalleAsiento.Linea = intLineaDetalleAsiento; trasladosParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Traslados && x.IdProducto == traslado.IdSucursalOrigen).FirstOrDefault(); if (trasladosParam == null) { throw new BusinessException("No existe parametrización contable para la sucursal origen " + traslado.IdSucursalOrigen + " y no se puede continuar. Por favor verificar."); } detalleAsiento.IdCuenta = trasladosParam.IdCuenta; detalleAsiento.Debito = traslado.Total; detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual; asiento.DetalleAsiento.Add(detalleAsiento); asiento.TotalDebito += detalleAsiento.Debito; foreach (DataRow data in dtbInventarios.Rows) { detalleAsiento = new DetalleAsiento(); intLineaDetalleAsiento += 1; detalleAsiento.Linea = intLineaDetalleAsiento; int intIdLinea = (int)data["IdLinea"]; lineaParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.LineaDeProductos && x.IdProducto == intIdLinea).FirstOrDefault(); if (lineaParam == null) { throw new BusinessException("No existe parametrización contable para la línea de producto " + intIdLinea + " y no se puede continuar. Por favor verificar."); } detalleAsiento.IdCuenta = lineaParam.IdCuenta; detalleAsiento.Credito = (decimal)data["Total"]; detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual; asiento.DetalleAsiento.Add(detalleAsiento); asiento.TotalCredito += detalleAsiento.Credito; } //Detalle asiento sucursal destino detalleAsiento = new DetalleAsiento(); intLineaDetalleAsiento = 2; detalleAsiento.Linea = intLineaDetalleAsiento; trasladosParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.Traslados && x.IdProducto == traslado.IdSucursalDestino).FirstOrDefault(); if (trasladosParam == null) { throw new BusinessException("No existe parametrización contable para la sucursal destino " + traslado.IdSucursalOrigen + " y no se puede continuar. Por favor verificar."); } detalleAsiento.IdCuenta = trasladosParam.IdCuenta; detalleAsiento.Credito = traslado.Total; detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual; asiento.DetalleAsiento.Add(detalleAsiento); asiento.TotalCredito += detalleAsiento.Credito; foreach (DataRow data in dtbInventarios.Rows) { detalleAsiento = new DetalleAsiento(); intLineaDetalleAsiento += 1; detalleAsiento.Linea = intLineaDetalleAsiento; int intIdLinea = (int)data["IdLinea"]; lineaParam = dbContext.ParametroContableRepository.Where(x => x.IdTipo == StaticTipoCuentaContable.LineaDeProductos && x.IdProducto == intIdLinea).FirstOrDefault(); if (lineaParam == null) { throw new BusinessException("No existe parametrización contable para la línea de producto " + intIdLinea + " y no se puede continuar. Por favor verificar."); } detalleAsiento.IdCuenta = lineaParam.IdCuenta; detalleAsiento.Debito = (decimal)data["Total"]; detalleAsiento.SaldoAnterior = dbContext.CatalogoContableRepository.Find(detalleAsiento.IdCuenta).SaldoActual; asiento.DetalleAsiento.Add(detalleAsiento); asiento.TotalDebito += detalleAsiento.Debito; } IContabilidadService servicioContabilidad = new ContabilidadService(); servicioContabilidad.AgregarAsiento(dbContext, asiento); } dbContext.Commit(); if (asiento != null) { traslado.IdAsiento = asiento.IdAsiento; dbContext.NotificarModificacion(traslado); asiento.Detalle += traslado.IdTraslado; dbContext.NotificarModificacion(asiento); } dbContext.Commit(); } catch (BusinessException ex) { dbContext.RollBack(); throw ex; } catch (Exception ex) { dbContext.RollBack(); log.Error("Error al aplicar el registro de traslado: ", ex); throw new Exception("Se produjo un error aplicando la información del traslado. Por favor consulte con su proveedor."); } } }