/// <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> /// Actualiza registro almacenmovimientodetalle /// </summary> /// <param name="almacenMovimientoDetalleInfo"></param> /// <returns></returns> internal void ActualizarAlmacenMovimientoDetalle(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo) { try { Logger.Info(); var almacenMovimientoDetalleDal = new AlmacenMovimientoDetalleDAL(); almacenMovimientoDetalleDal.ActualizarAlmacenMovimientoDetalle(almacenMovimientoDetalleInfo); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtener por almacenmovimientodetalleid /// </summary> /// <param name="almacenMovimientoDetalleInfo"></param> /// <returns></returns> internal AlmacenMovimientoDetalle ObtenerPorAlmacenMovimientoDetalleId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo) { try { Logger.Info(); var almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL(); AlmacenMovimientoDetalle result = almacenMovimientoDetalleDAL.ObtenerPorAlmacenMovimientoDetalleId(almacenMovimientoDetalleInfo); return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un listado de almacenmovimientodetalle /// </summary> /// <param name="almacenMovimientoDetalleInfo"></param> /// <param name="listaTipoMovimiento"></param> /// <returns></returns> internal List <AlmacenMovimientoDetalle> ObtenerAlmacenMovimientoDetallePorLoteId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo, List <TipoMovimientoInfo> listaTipoMovimiento) { try { Logger.Info(); var almacenMovimientoDetalleDal = new AlmacenMovimientoDetalleDAL(); List <AlmacenMovimientoDetalle> result = almacenMovimientoDetalleDal.ObtenerAlmacenMovimientoDetallePorLoteId(almacenMovimientoDetalleInfo, listaTipoMovimiento); return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Crea un registro en almacen movimiento detalle /// </summary> /// <param name="almacenMovimientoDetalleInfo"></param> /// <returns></returns> internal int Crear(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo) { try { Logger.Info(); var almacenMovimientoDetalleDal = new AlmacenMovimientoDetalleDAL(); int result = almacenMovimientoDetalleDal.Crear(almacenMovimientoDetalleInfo); return(result); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene un listado de almacenmovimientodetalle /// </summary> /// <returns></returns> internal List <AlmacenMovimientoDetalle> ObtenerAlmacenMovimientoDetalleEntregadosPlanta(DateTime fechaInicial, DateTime fechaFinal, int organizacionID) { try { Logger.Info(); var almacenMovimientoDetalleDal = new AlmacenMovimientoDetalleDAL(); List <AlmacenMovimientoDetalle> result = almacenMovimientoDetalleDal.ObtenerAlmacenMovimientoDetalleEntregadosPlanta(fechaInicial, fechaFinal, organizacionID); return(result); } 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> /// Genera el Cierre de Dia de Inventario /// </summary> /// <param name="cierreDiaInventarioPA"></param> internal void GuardarAutorizarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA) { var listaMovimientosFinal = new List <AlmacenMovimientoInfo>(); var listaMovimientosDetalleFinal = new List <AlmacenMovimientoDetalle>(); var listaAlmacenInventario = new List <AlmacenInventarioInfo>(); var listaAlmacenInventarioLote = new List <AlmacenInventarioLoteInfo>(); var listaOriginalDetalles = new List <CierreDiaInventarioPADetalleInfo>(); listaOriginalDetalles.AddRange(cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle); GenerarAjustesInventario(listaAlmacenInventarioLote, listaAlmacenInventario, cierreDiaInventarioPA); var estatusDAL = new EstatusDAL(); List <EstatusInfo> listaEstatusInventario = estatusDAL.ObtenerEstatusTipoEstatus(TipoEstatus.Inventario.GetHashCode()); //Toma los registros a los que se le van a generar los Movimientos de Entrada de Almacen cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where( det => !det.RequiereAutorizacion && (det.InventarioFisico - det.InventarioTeorico) > 0).ToList(); if (cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Any()) { ArmarAlmacenMovimientoEntradaSalidaAlmacen(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario, true); } //Toma los registros a los que se le van a generar los Movimientos de Salida de Almacen cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where( det => !det.RequiereAutorizacion && (det.InventarioFisico - det.InventarioTeorico) < 0).ToList(); if (cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Any()) { ArmarAlmacenMovimientoEntradaSalidaAlmacen(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario, false); } EstatusInfo estatusAplicado = listaEstatusInventario.FirstOrDefault( esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoAplicado.Trim())); EstatusInfo estatusPendiente = listaEstatusInventario.FirstOrDefault( esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoPendiente.Trim())); EstatusInfo estatusCancelado = listaEstatusInventario.FirstOrDefault( esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoCancelado.Trim())); if (estatusAplicado == null || estatusPendiente == null || estatusCancelado == null) { return; } var filtrosActualizar = new FiltroCambiarEstatusInfo { AlmacenID = cierreDiaInventarioPA.AlmacenID, FolioMovimiento = cierreDiaInventarioPA.FolioMovimiento, EstatusAnterior = estatusPendiente.EstatusId, EstatusNuevo = cierreDiaInventarioPA.EsCancelacion ? estatusCancelado.EstatusId : estatusAplicado.EstatusId, UsuarioModificacionID = cierreDiaInventarioPA.UsuarioCreacionID }; if (cierreDiaInventarioPA.EsCancelacion) { var almacenMovimientoDAL = new AlmacenMovimientoDAL(); almacenMovimientoDAL.ActualizarEstatusAlmacenMovimiento(filtrosActualizar); return; } using (var transaction = new TransactionScope()) { var almacenMovimientoDAL = new AlmacenMovimientoDAL(); var almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL(); var almacenInventarioDAL = new AlmacenInventarioDAL(); var almacenInventarioLoteDAL = new AlmacenInventarioLoteDAL(); foreach (var almacenMovimiento in listaMovimientosFinal) { long almacenMovimientoID = almacenMovimientoDAL.GuardarMovimientoCierreDiaPA(almacenMovimiento); almacenMovimientoDAL.ActualizarEstatusAlmacenMovimiento(filtrosActualizar); almacenMovimiento.ListaAlmacenMovimientoDetalle.ForEach( det => det.AlmacenMovimientoID = almacenMovimientoID); listaMovimientosDetalleFinal.AddRange(almacenMovimiento.ListaAlmacenMovimientoDetalle); } almacenMovimientoDetalleDAL.GuardarDetalleCierreDiaInventarioPA(listaMovimientosDetalleFinal); if (listaAlmacenInventario.Any()) { almacenInventarioDAL.AjustarAlmacenInventario(listaAlmacenInventario); } if (listaAlmacenInventarioLote.Any()) { almacenInventarioLoteDAL.AjustarAlmacenInventarioLote(listaAlmacenInventarioLote); } cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles; GenerarPolizaCierreDiaPA(cierreDiaInventarioPA, listaEstatusInventario, false); transaction.Complete(); } }
/// <summary> /// Genera el Cierre de Dia de Inventario /// </summary> /// <param name="cierreDiaInventarioPA"></param> internal IList <ResultadoPolizaModel> GuardarCierreDiaInventarioPA(CierreDiaInventarioPAInfo cierreDiaInventarioPA) { try { var listaMovimientosFinal = new List <AlmacenMovimientoInfo>(); var listaMovimientosDetalleFinal = new List <AlmacenMovimientoDetalle>(); var listaOriginalDetalles = new List <CierreDiaInventarioPADetalleInfo>(); var listaAlmacenInventario = new List <AlmacenInventarioInfo>(); var listaAlmacenInventarioLote = new List <AlmacenInventarioLoteInfo>(); GenerarAjustesInventario(listaAlmacenInventarioLote, listaAlmacenInventario, cierreDiaInventarioPA); listaOriginalDetalles.AddRange(cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle); var estatusDAL = new EstatusDAL(); List <EstatusInfo> listaEstatusInventario = estatusDAL.ObtenerEstatusTipoEstatus(TipoEstatus.Inventario.GetHashCode()); //Toma los registros que no necesitan autorización para generar sus movimientos Fisicos cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where(det => !det.RequiereAutorizacion).ToList(); ArmarAlmacenMovimientoInventarioFisico(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario); //Toma los registros a los que se le van a generar los Movimientos de Entrada de Almacen cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where( det => !det.RequiereAutorizacion && (det.InventarioFisico - det.InventarioTeorico) > 0).ToList(); if (cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Any()) { ArmarAlmacenMovimientoEntradaSalidaAlmacen(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario, true); } //Toma los registros a los que se le van a generar los Movimientos de Salida de Almacen cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where( det => !det.RequiereAutorizacion && (det.InventarioFisico - det.InventarioTeorico) < 0).ToList(); if (cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Any()) { ArmarAlmacenMovimientoEntradaSalidaAlmacen(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario, false); } //Toma los registros a los que se le van a generar los Fisicos como estatus de Pendientes cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles.Where(det => det.RequiereAutorizacion).ToList(); if (cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle.Any()) { ArmarAlmacenMovimientoInventarioFisicoPendiente(listaMovimientosFinal, cierreDiaInventarioPA, listaEstatusInventario); } IList <ResultadoPolizaModel> pdfs = null; using (var transaction = new TransactionScope()) { var almacenMovimientoDAL = new AlmacenMovimientoDAL(); var almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL(); var almacenInventarioDAL = new AlmacenInventarioDAL(); var almacenInventarioLoteDAL = new AlmacenInventarioLoteDAL(); foreach (var almacenMovimiento in listaMovimientosFinal) { long almacenMovimientoID = almacenMovimientoDAL.GuardarMovimientoCierreDiaPA(almacenMovimiento); almacenMovimiento.ListaAlmacenMovimientoDetalle.ForEach( det => det.AlmacenMovimientoID = almacenMovimientoID); listaMovimientosDetalleFinal.AddRange(almacenMovimiento.ListaAlmacenMovimientoDetalle); } almacenMovimientoDetalleDAL.GuardarDetalleCierreDiaInventarioPA(listaMovimientosDetalleFinal); if (listaAlmacenInventario.Any()) { almacenInventarioDAL.AjustarAlmacenInventario(listaAlmacenInventario); } if (listaAlmacenInventarioLote.Any()) { almacenInventarioLoteDAL.AjustarAlmacenInventarioLote(listaAlmacenInventarioLote); } ActualizarFolioAlmacen(cierreDiaInventarioPA.AlmacenID); cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle = listaOriginalDetalles; pdfs = GenerarPolizaCierreDiaPA(cierreDiaInventarioPA, listaEstatusInventario, true); transaction.Complete(); } return(pdfs); } catch (ExcepcionServicio) { 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); } }