private IList <ResultadoPolizaModel> GenerarPolizaCierreDiaPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA, List <EstatusInfo> listaEstatusInventario, bool imprimePoliza) { EstatusInfo estatusAplicado = listaEstatusInventario.FirstOrDefault( esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoAplicado.Trim())); if (estatusAplicado == null) { return(null); } var filtros = new FiltroAlmacenMovimientoInfo { AlmacenID = cierreDiaInventarioPA.AlmacenID, OrganizacionID = cierreDiaInventarioPA.OrganizacionID, TipoMovimientoID = TipoMovimiento.InventarioFisico.GetHashCode(), EstatusID = estatusAplicado.EstatusId, FolioMovimiento = cierreDiaInventarioPA.FolioMovimiento }; var almacenMovimientoDAL = new AlmacenMovimientoDAL(); List <ContenedorAlmacenMovimientoCierreDia> movimientos = almacenMovimientoDAL.ObtenerMovimientosInventarioFiltros(filtros); if (movimientos == null || !movimientos.Any()) { return(null); } var resultadosPolizaModel = new List <ResultadoPolizaModel>(); var listaDatosPolizaEntrada = new List <PolizaEntradaSalidaPorAjusteModel>(); var listaDatosPolizaSalida = new List <PolizaEntradaSalidaPorAjusteModel>(); foreach (var detalles in cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Where(det => (det.InventarioFisico - det.InventarioTeorico > 0))) { ContenedorAlmacenMovimientoCierreDia almacenMovimientoDetalle; if (detalles.ManejaLote) { almacenMovimientoDetalle = movimientos.FirstOrDefault( mov => mov.Producto.ProductoId == detalles.ProductoID && mov.AlmacenMovimientoDetalle.AlmacenInventarioLoteId == detalles.AlmacenInventarioLoteID); } else { almacenMovimientoDetalle = movimientos.FirstOrDefault( mov => mov.Producto.ProductoId == detalles.ProductoID); } if (almacenMovimientoDetalle == null) { continue; } int cantidadEntrada = Math.Abs(detalles.InventarioFisico - detalles.InventarioTeorico); var polizaDetalle = new PolizaEntradaSalidaPorAjusteModel { Importe = detalles.CostoUnitario * cantidadEntrada, Cantidad = cantidadEntrada, Precio = almacenMovimientoDetalle.AlmacenMovimientoDetalle.Precio, AlmacenMovimientoDetalleID = almacenMovimientoDetalle.AlmacenMovimientoDetalle.AlmacenMovimientoDetalleID, ProductoID = detalles.ProductoID, CantidadInventarioFisico = detalles.InventarioFisico, CantidadInventarioTeorico = detalles.InventarioTeorico, Observaciones = almacenMovimientoDetalle.AlmacenMovimiento.Observaciones, Lote = detalles.Lote }; listaDatosPolizaEntrada.Add(polizaDetalle); } foreach (var detalles in cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Where(det => (det.InventarioFisico - det.InventarioTeorico < 0))) { ContenedorAlmacenMovimientoCierreDia almacenMovimientoDetalle; if (detalles.ManejaLote) { almacenMovimientoDetalle = movimientos.FirstOrDefault( mov => mov.Producto.ProductoId == detalles.ProductoID && mov.AlmacenMovimientoDetalle.AlmacenInventarioLoteId == detalles.AlmacenInventarioLoteID); } else { almacenMovimientoDetalle = movimientos.FirstOrDefault( mov => mov.Producto.ProductoId == detalles.ProductoID); } if (almacenMovimientoDetalle == null) { continue; } int cantidadSalida = Math.Abs(detalles.InventarioFisico - detalles.InventarioTeorico); var polizaDetalle = new PolizaEntradaSalidaPorAjusteModel { Importe = detalles.CostoUnitario * cantidadSalida, Cantidad = cantidadSalida, Precio = almacenMovimientoDetalle.AlmacenMovimientoDetalle.Precio, AlmacenMovimientoDetalleID = almacenMovimientoDetalle.AlmacenMovimientoDetalle.AlmacenMovimientoDetalleID, ProductoID = detalles.ProductoID, CantidadInventarioFisico = detalles.InventarioFisico, CantidadInventarioTeorico = detalles.InventarioTeorico, Observaciones = almacenMovimientoDetalle.AlmacenMovimiento.Observaciones, Lote = detalles.Lote }; listaDatosPolizaSalida.Add(polizaDetalle); } if (listaDatosPolizaSalida.Any()) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaAjuste); IList <PolizaInfo> polizas = poliza.GeneraPoliza(listaDatosPolizaSalida); if (polizas != null) { MemoryStream stream = null; if (imprimePoliza) { stream = poliza.ImprimePoliza(listaDatosPolizaSalida, polizas); } var polizaBL = new PolizaBL(); polizas.ToList().ForEach(datos => { datos.UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID; datos.OrganizacionID = cierreDiaInventarioPA.OrganizacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaAjuste); var resultadoPolizaModel = new ResultadoPolizaModel { Polizas = polizas, PDFs = new Dictionary <TipoPoliza, MemoryStream> { { TipoPoliza.SalidaAjuste, stream } } }; resultadosPolizaModel.Add(resultadoPolizaModel); } } if (listaDatosPolizaEntrada.Any()) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaAjuste); IList <PolizaInfo> polizas = poliza.GeneraPoliza(listaDatosPolizaEntrada); if (polizas != null) { MemoryStream stream = null; if (imprimePoliza) { stream = poliza.ImprimePoliza(listaDatosPolizaEntrada, polizas); } var polizaBL = new PolizaBL(); polizas.ToList().ForEach(datos => { datos.UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID; datos.OrganizacionID = cierreDiaInventarioPA.OrganizacionID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizas, TipoPoliza.EntradaAjuste); var resultadoPolizaModel = new ResultadoPolizaModel { Polizas = polizas, PDFs = new Dictionary <TipoPoliza, MemoryStream> { { TipoPoliza.EntradaAjuste, stream } } }; resultadosPolizaModel.Add(resultadoPolizaModel); } } return(resultadosPolizaModel); }
/// <summary> /// Obtiene los parametros necesarios para la /// ejecucion del procedimiento almacenado /// AlmacenMovimiento_ObtenerMovimientosCierreDia /// </summary> /// <param name="filtros"></param> /// <returns></returns> internal static Dictionary <string, object> ObtenerParametrosMovimientosInventarioFiltros(FiltroAlmacenMovimientoInfo filtros) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@AlmacenID", filtros.AlmacenID }, { "@OrganizacionID", filtros.OrganizacionID }, { "@FolioMovimiento", filtros.FolioMovimiento }, { "@TipoMovimientoID", filtros.TipoMovimientoID }, { "@EstatusID", filtros.EstatusID }, }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene los movimientos de inventario para generar /// poliza de consumo de producto /// </summary> /// <param name="filtros"></param> /// <returns></returns> internal List <ContenedorAlmacenMovimientoCierreDia> ObtenerMovimientosInventarioFiltros(FiltroAlmacenMovimientoInfo filtros) { List <ContenedorAlmacenMovimientoCierreDia> almacenesMovimiento = null; try { Logger.Info(); Dictionary <string, object> parameters = AuxAlmacenMovimientoDAL.ObtenerParametrosMovimientosInventarioFiltros(filtros); DataSet ds = Retrieve("AlmacenMovimiento_ObtenerMovimientosFiltros", parameters); if (ValidateDataSet(ds)) { almacenesMovimiento = MapAlmacenMovimientoDAL.ObtenerMovimientosInventarioFiltros(ds); } return(almacenesMovimiento); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }