/// <summary> /// Guardar la lista de almacenmovimientodetalle /// </summary> /// <param name="listaAlmacenMovimientoDetalle"></param> /// <param name="almacenMovimientoID"></param> /// <returns></returns> internal void GuardarAlmacenMovimientoDetalle(List <AlmacenMovimientoDetalle> listaAlmacenMovimientoDetalle, long almacenMovimientoID) { try { Logger.Info(); var almacenMovimientoDetalleDal = new AlmacenMovimientoDetalleDAL(); almacenMovimientoDetalleDal.GuardarAlmacenMovimientoDetalle(listaAlmacenMovimientoDetalle, almacenMovimientoID); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Termina la salida del producto /// </summary> /// <param name="salida"></param> /// <returns></returns> internal MemoryStream TerminarSalidaProducto(SalidaProductoInfo salida) { try { Logger.Info(); bool generaFactura = salida.GeneraFactura; MemoryStream resultado = null; var almacenBl = new AlmacenBL(); var almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL(); var almacenMovimiento = new AlmacenMovimientoInfo(); var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); var almacenInventarioBl = new AlmacenInventarioBL(); var salidaProductoDal = new SalidaProductoDAL(); PolizaAbstract poliza = null; IList <PolizaInfo> polizas = null; using (var transaction = new TransactionScope()) { almacenMovimiento.AlmacenID = salida.Almacen.AlmacenID; almacenMovimiento.TipoMovimientoID = salida.TipoMovimiento.TipoMovimientoID; almacenMovimiento.UsuarioCreacionID = salida.UsuarioModificacionId; almacenMovimiento.Status = (int)EstatusInventario.Aplicado; AlmacenMovimientoInfo almacenMovimientoGenerado = almacenBl.GuardarAlmacenMovimiento(almacenMovimiento); if (almacenMovimientoGenerado != null) { AlmacenInventarioLoteInfo almacenInventarioLote = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId( salida.AlmacenInventarioLote.AlmacenInventarioLoteId); var listaAlmacenInventarioDetalle = new List <AlmacenMovimientoDetalle>(); var movimientoDetalle = new AlmacenMovimientoDetalle { AlmacenMovimientoID = almacenMovimientoGenerado.AlmacenMovimientoID, AlmacenInventarioLoteId = salida.AlmacenInventarioLote.AlmacenInventarioLoteId, Precio = almacenInventarioLote.PrecioPromedio, ProductoID = salida.Producto.ProductoId, Cantidad = salida.PesoBruto - salida.PesoTara, Piezas = salida.Piezas, Importe = (salida.PesoBruto - salida.PesoTara) * almacenInventarioLote.PrecioPromedio, UsuarioCreacionID = salida.UsuarioModificacionId }; listaAlmacenInventarioDetalle.Add(movimientoDetalle); almacenMovimientoDetalleDAL.GuardarAlmacenMovimientoDetalle(listaAlmacenInventarioDetalle, almacenMovimientoGenerado. AlmacenMovimientoID); if (almacenInventarioLote != null) { almacenInventarioLote.Cantidad = almacenInventarioLote.Cantidad - (salida.PesoBruto - salida.PesoTara); almacenInventarioLote.Importe = almacenInventarioLote.PrecioPromedio * almacenInventarioLote.Cantidad; almacenInventarioLote.UsuarioModificacionId = salida.UsuarioModificacionId; almacenInventarioLoteBl.Actualizar(almacenInventarioLote); AlmacenInfo almacen = almacenBl.ObtenerPorID(almacenMovimiento.AlmacenID); List <AlmacenInventarioInfo> listaAlmacenlmacenInventario = almacenInventarioBl.ObtienePorAlmacenId(almacen); if (listaAlmacenlmacenInventario != null) { AlmacenInventarioInfo inventarioProducto = listaAlmacenlmacenInventario.FirstOrDefault( registro => registro.ProductoID == salida.Producto.ProductoId); if (inventarioProducto != null) { inventarioProducto.Cantidad = inventarioProducto.Cantidad - (salida.PesoBruto - salida.PesoTara); inventarioProducto.Importe = (inventarioProducto.PrecioPromedio * inventarioProducto.Cantidad); //Actualiza inventario inventarioProducto.UsuarioModificacionID = salida.UsuarioModificacionId; inventarioProducto.ProductoID = salida.Producto.ProductoId; inventarioProducto.AlmacenID = almacen.AlmacenID; almacenInventarioBl.ActualizarPorProductoId(inventarioProducto); salida.GeneraFactura = generaFactura; salidaProductoDal.TerminarSalidaProducto(salida, almacenMovimientoGenerado); #region POLIZA poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza( TipoPoliza.SalidaVentaProducto); salida.Importe = (salida.PesoBruto - salida.PesoTara) * salida.Precio; salida = ObtenerFolioPorReimpresion(salida); polizas = poliza.GeneraPoliza(salida); if (polizas != null) { var polizaBL = new PolizaBL(); polizas.ToList().ForEach(datos => { datos.OrganizacionID = salida.Organizacion.OrganizacionID; datos.UsuarioCreacionID = salida.UsuarioCreacionId; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaVentaProducto); if (salida.Almacen == null) { salida.Almacen = new AlmacenInfo(); } salida.Almacen.Organizacion = new OrganizacionInfo { OrganizacionID = salida.Organizacion.OrganizacionID }; resultado = poliza.ImprimePoliza(salida, polizas); } #endregion POLIZA if (generaFactura) { #region FACTURA if (salida.TipoMovimiento.TipoMovimientoID == TipoMovimiento.ProductoSalidaVenta.GetHashCode()) { //Genera el xml y lo guarda en la ruta especificada en la configuración var facturaBl = new FacturaBL(); facturaBl.GenerarDatosFacturaVentaDeMateriaPrima(salida); } #endregion } transaction.Complete(); } else { throw new ExcepcionDesconocida( Properties.ResourceServices.InventarioNormal_ErrorMovimientos); } } else { throw new ExcepcionDesconocida( Properties.ResourceServices.InventarioNormal_ErrorMovimientos); } } else { throw new ExcepcionDesconocida( Properties.ResourceServices.InventarioNormal_ErrorMovimientos); } } else { throw new ExcepcionDesconocida( Properties.ResourceServices.InventarioNormal_ErrorMovimientos); } } return(resultado); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (ExcepcionDesconocida) { throw; } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metodo para actualizar los ajustes de inventario contenidos en el grid /// </summary> /// <param name="articulosDiferenciasInventario"></param> /// <param name="almacenMovimientoInfo"></param> /// <returns></returns> public IList <ResultadoPolizaModel> GuardarAjusteDeInventario(List <AjusteDeInventarioDiferenciasInventarioInfo> articulosDiferenciasInventario, AlmacenMovimientoInfo almacenMovimientoInfo) { try { var resultadosPolizaModel = new List <ResultadoPolizaModel>(); PolizaAbstract poliza = null; var cierreDiaInventarioDAL = new CierreDiaInventarioDAL(); var almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL(); var articulosEntrada = new List <AjusteDeInventarioDiferenciasInventarioInfo>(); var articulosSalida = new List <AjusteDeInventarioDiferenciasInventarioInfo>(); using (var transaction = new TransactionScope()) { Logger.Info(); if (articulosDiferenciasInventario != null) { var seleccionados = articulosDiferenciasInventario.Any(articulosComprobar => articulosComprobar.Seleccionado); if (seleccionados) { foreach (var articulos in articulosDiferenciasInventario.Where(art => art.Seleccionado)) { ActualizarArticulosDiferencias(articulos, almacenMovimientoInfo); } almacenMovimientoInfo.Status = (int)EstatusInventario.Aplicado; var almacenBL = new AlmacenBL(); almacenBL.ActualizarAlmacenMovimiento(almacenMovimientoInfo); articulosEntrada = articulosDiferenciasInventario.Where(mov => (mov.Seleccionado && mov.Cantidad > 0)). ToList(); articulosSalida = articulosDiferenciasInventario.Where(mov => (mov.Seleccionado && mov.Cantidad < 0)). ToList(); //Generar los Movimientos de Entrada y Salida #region Movimientos Entrada if (articulosEntrada.Any()) { var movimientoEntrada = new AlmacenCierreDiaInventarioInfo { Almacen = almacenMovimientoInfo.Almacen, TipoMovimiento = TipoMovimiento.EntradaPorAjuste.GetHashCode(), Observaciones = almacenMovimientoInfo.Observaciones, Estatus = EstatusInventario.Autorizado.GetHashCode(), UsuarioCreacionId = almacenMovimientoInfo.UsuarioModificacionID }; var movimientosEntrada = (from detalle in articulosEntrada select new AlmacenMovimientoDetalle { ProductoID = detalle.ProductoID, Precio = detalle.Precio, Cantidad = Math.Abs(detalle.Cantidad), Importe = Math.Round( Convert.ToDecimal( Math.Abs(detalle.Cantidad)) * detalle.Precio, 2), UsuarioCreacionID = almacenMovimientoInfo.UsuarioModificacionID }).ToList(); AlmacenCierreDiaInventarioInfo resultadoAlmacenMovimiento = cierreDiaInventarioDAL.GuardarAlmacenMovimiento(movimientoEntrada); almacenMovimientoDetalleDAL.GuardarAlmacenMovimientoDetalle(movimientosEntrada, resultadoAlmacenMovimiento. AlmacenMovimientoID); } #endregion Movimientos Entrada #region Movimientos Salida if (articulosSalida.Any()) { var movimientoSalida = new AlmacenCierreDiaInventarioInfo { Almacen = almacenMovimientoInfo.Almacen, TipoMovimiento = TipoMovimiento.SalidaPorAjuste.GetHashCode(), Observaciones = almacenMovimientoInfo.Observaciones, Estatus = EstatusInventario.Autorizado.GetHashCode(), UsuarioCreacionId = almacenMovimientoInfo.UsuarioModificacionID }; var movimientosSalida = (from detalle in articulosSalida select new AlmacenMovimientoDetalle { ProductoID = detalle.ProductoID, Precio = detalle.Precio, Cantidad = Math.Abs(detalle.Cantidad), Importe = Math.Round( Convert.ToDecimal( Math.Abs(detalle.Cantidad)) * detalle.Precio, 2), UsuarioCreacionID = almacenMovimientoInfo.UsuarioModificacionID }).ToList(); AlmacenCierreDiaInventarioInfo resultadoAlmacenMovimiento = cierreDiaInventarioDAL.GuardarAlmacenMovimiento(movimientoSalida); almacenMovimientoDetalleDAL.GuardarAlmacenMovimientoDetalle(movimientosSalida, resultadoAlmacenMovimiento. AlmacenMovimientoID); } #endregion Movimientos Entrada } else { almacenMovimientoInfo.Status = (int)EstatusInventario.Cancelado; var almacenBL = new AlmacenBL(); almacenBL.ActualizarAlmacenMovimiento(almacenMovimientoInfo); } #region POLIZA #region PolizaSalida MemoryStream stream; if (articulosSalida.Any()) { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaAjuste); List <PolizaEntradaSalidaPorAjusteModel> salidasPorAjuste = articulosSalida.Select(ajuste => new PolizaEntradaSalidaPorAjusteModel { Importe = Math.Abs(ajuste.Importe), Cantidad = Math.Abs(ajuste.Cantidad), TipoAjuste = TipoAjusteEnum.Merma, Precio = ajuste.Precio, AlmacenInventarioID = ajuste.AlmacenInventarioID, AlmacenMovimientoDetalleID = ajuste.AlmacenMovimientoDetalleID, ProductoID = ajuste.ProductoID, CantidadInventarioFisico = ajuste.CantidadInventarioFisico, CantidadInventarioTeorico = ajuste.CantidadInventarioTeorico, Observaciones = almacenMovimientoInfo.Observaciones }).ToList(); if (salidasPorAjuste.Any()) { IList <PolizaInfo> polizasSalida = poliza.GeneraPoliza(salidasPorAjuste); if (polizasSalida != null) { stream = poliza.ImprimePoliza(salidasPorAjuste, polizasSalida); var polizaBL = new PolizaBL(); polizasSalida.ToList().ForEach(datos => { datos.UsuarioCreacionID = almacenMovimientoInfo. UsuarioModificacionID; datos.OrganizacionID = almacenMovimientoInfo.OrganizacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizasSalida, TipoPoliza.SalidaAjuste); var resultadoPolizaModel = new ResultadoPolizaModel { Polizas = polizasSalida, PDFs = new Dictionary <TipoPoliza, MemoryStream> { { TipoPoliza.SalidaAjuste, stream } } }; resultadosPolizaModel.Add(resultadoPolizaModel); } } } #endregion PolizaSalida #region PolizaEntrada if (articulosEntrada.Any()) { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaAjuste); List <PolizaEntradaSalidaPorAjusteModel> entradasPorAjuste = articulosEntrada.Select(ajuste => new PolizaEntradaSalidaPorAjusteModel { Importe = Math.Abs(ajuste.Importe), Cantidad = Math.Abs(ajuste.Cantidad), TipoAjuste = TipoAjusteEnum.Merma, Precio = ajuste.Precio, AlmacenInventarioID = ajuste.AlmacenInventarioID, AlmacenMovimientoDetalleID = ajuste.AlmacenMovimientoDetalleID, ProductoID = ajuste.ProductoID, CantidadInventarioFisico = ajuste.CantidadInventarioFisico, CantidadInventarioTeorico = ajuste.CantidadInventarioTeorico, Observaciones = almacenMovimientoInfo.Observaciones }).ToList(); if (entradasPorAjuste.Any()) { IList <PolizaInfo> polizasEntrada = poliza.GeneraPoliza(entradasPorAjuste); if (polizasEntrada != null) { stream = poliza.ImprimePoliza(entradasPorAjuste, polizasEntrada); var polizaBL = new PolizaBL(); polizasEntrada.ToList().ForEach(datos => { datos.UsuarioCreacionID = almacenMovimientoInfo. UsuarioModificacionID; datos.OrganizacionID = almacenMovimientoInfo.OrganizacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizasEntrada, TipoPoliza.EntradaAjuste); var resultadoPolizaModel = new ResultadoPolizaModel { Polizas = polizasEntrada, PDFs = new Dictionary <TipoPoliza, MemoryStream> { { TipoPoliza.EntradaAjuste, stream } } }; resultadosPolizaModel.Add(resultadoPolizaModel); } } } #endregion PolizaEntrada #endregion POLIZA } else { almacenMovimientoInfo.Status = (int)EstatusInventario.Cancelado; var almacenBL = new AlmacenBL(); almacenBL.ActualizarAlmacenMovimiento(almacenMovimientoInfo); } transaction.Complete(); } return(resultadosPolizaModel); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (ExcepcionGenerica ex) { Logger.Error(ex); throw; } catch (Exception ex) { Logger.Error(ex); return(null); } }