コード例 #1
0
        /// <summary>
        /// Obtiene un listado de productos por almacen y obtiene los datos del producto
        /// </summary>
        /// <param name="almacenInfo"></param>
        /// <returns></returns>
        internal List <AlmacenInventarioInfo> ObtienePorAlmacenIdLlenaProductoInfo(AlmacenInfo almacenInfo)
        {
            List <AlmacenInventarioInfo> almacen = null;

            try
            {
                var productoBl = new ProductoBL();
                var almacenDal = new AlmacenInventarioDAL();
                almacen = almacenDal.ObtenerPorAlmacenId(almacenInfo);
                if (almacen != null)
                {
                    foreach (var almacenInventarioInfo in almacen)
                    {
                        var productoInfo = new ProductoInfo()
                        {
                            ProductoId = almacenInventarioInfo.ProductoID
                        };
                        almacenInventarioInfo.Producto = productoBl.ObtenerPorID(productoInfo);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(almacen);
        }
コード例 #2
0
 /// <summary>
 /// Obtiene una lista de AlmacenInventario
 /// por un conjunto de productos
 /// </summary>
 /// <param name="almacenId"></param>
 /// <param name="productos"></param>
 /// <returns></returns>
 internal IList <AlmacenInventarioInfo> ExistenciaPorProductos(int almacenId, IList <ProductoInfo> productos)
 {
     try
     {
         var almacenDAL = new AlmacenInventarioDAL();
         IList <AlmacenInventarioInfo> lista = almacenDAL.ExistenciaPorProductos(almacenId, productos);
         return(lista);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #3
0
 /// <summary>
 /// Obtiene una lista de AlmacenInventario
 /// por sus almacenes ID
 /// </summary>
 /// <param name="almacenes"></param>
 /// <returns></returns>
 internal IList <AlmacenInventarioInfo> ObtenerPorAlmacenXML(List <AlmacenInfo> almacenes)
 {
     try
     {
         Logger.Info();
         var almacenDAL = new AlmacenInventarioDAL();
         IList <AlmacenInventarioInfo> lista = almacenDAL.ObtenerPorAlmacenXML(almacenes);
         return(lista);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #4
0
        /// <summary>
        /// Obtener inventario por almacenid, productoid
        /// </summary>
        /// <param name="almacenInventarioInfo"></param>
        /// <returns></returns>
        internal AlmacenInventarioInfo ObtenerPorOrganizacionIdAlmacenIdProductoIdParaPlantaCentroCadisDesc(AlmacenInventarioInfo almacenInventarioInfo, int organizacionId)
        {
            AlmacenInventarioInfo result;

            try
            {
                var almacenDal = new AlmacenInventarioDAL();
                result = almacenDal.ObtenerPorOrganizacionIdAlmacenIdProductoIdParaPlantaCentroCadisDesc(almacenInventarioInfo, organizacionId);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Obtener inventario por almacenid, productoid
        /// </summary>
        /// <param name="almacenInventarioInfo"></param>
        /// <returns></returns>
        internal AlmacenInventarioInfo ObtenerPorAlmacenIdProductoId(AlmacenInventarioInfo almacenInventarioInfo)
        {
            AlmacenInventarioInfo result;

            try
            {
                var almacenDal = new AlmacenInventarioDAL();
                result = almacenDal.ObtenerPorAlmacenIdProductoId(almacenInventarioInfo);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(result);
        }
コード例 #6
0
        /// <summary>
        /// Obtiene un listado de almacen inventario por almacen id
        /// </summary>
        /// <returns></returns>
        internal List <AlmacenInventarioInfo> ObtienePorAlmacenId(AlmacenInfo almacenInfo)
        {
            List <AlmacenInventarioInfo> almacen = null;

            try
            {
                var almacenDAL = new AlmacenInventarioDAL();
                almacen = almacenDAL.ObtenerPorAlmacenId(almacenInfo);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(almacen);
        }
コード例 #7
0
        /// <summary>
        /// Obtiene un listado de almaceninventario por almacenid
        /// </summary>
        /// <param name="organizacionID"></param>
        /// <param name="almacenID"></param>
        /// <returns></returns>
        internal List <CierreDiaInventarioPAInfo> ObtenerDatosCierreDiaInventarioPlantaAlimentos(int organizacionID, int almacenID)
        {
            List <CierreDiaInventarioPAInfo> lista;

            try
            {
                var almacenDAL = new AlmacenInventarioDAL();
                lista = almacenDAL.ObtenerDatosCierreDiaInventarioPlantaAlimentos(organizacionID, almacenID);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(lista);
        }
コード例 #8
0
 /// <summary>
 /// Actualiza un registro
 /// </summary>
 /// <param name="almacenInventario"></param>
 internal void ActualizarPorProductoId(AlmacenInventarioInfo almacenInventario)
 {
     try
     {
         Logger.Info();
         var almacenInventarioDal = new AlmacenInventarioDAL();
         almacenInventarioDal.ActualizarPorProductoId(almacenInventario);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #9
0
 /// <summary>
 /// Crea un registro en almacen inventario
 /// </summary>
 /// <returns></returns>
 internal int Crear(AlmacenInventarioInfo almacenInventarioInfo)
 {
     try
     {
         Logger.Info();
         var almacenInventarioDal = new AlmacenInventarioDAL();
         int result = almacenInventarioDal.Crear(almacenInventarioInfo);
         return(result);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
コード例 #10
0
        /// <summary>
        /// Obtiene el almacen en base al id
        /// </summary>
        /// <param name="almacenInventarioId"></param>
        /// <returns></returns>
        internal AlmacenInventarioInfo ObtenerAlmacenInventarioPorId(int almacenInventarioId)
        {
            AlmacenInventarioInfo almacen = null;

            try
            {
                var almacenDAL = new AlmacenInventarioDAL();
                var almacenBl  = new AlmacenBL();

                almacen = almacenDAL.ObtenerAlmacenInventarioPorId(almacenInventarioId);

                if (almacen != null)
                {
                    almacen.Almacen = almacenBl.ObtenerPorID(almacen.AlmacenID);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(almacen);
        }
コード例 #11
0
        /// <summary>
        /// Guarda los datos para un gasto materia prima
        /// </summary>
        /// <param name="gasto"></param>
        /// <returns></returns>
        internal long Guardar(GastoMateriaPrimaInfo gasto)
        {
            long folioGasto = 0;

            try
            {
                Logger.Info();
                IList <PolizaInfo> polizas;
                PolizaAbstract     poliza;
                using (var transaction = new TransactionScope())
                {
                    var tipoOrg = gasto.Organizacion.TipoOrganizacion.TipoOrganizacionID;
                    var gastoMateriaPrimaDal = new GastoMateriaPrimaDAL();

                    if (gasto.GuardaAretes)
                    {
                        gastoMateriaPrimaDal.GuardarAretes(gasto);
                    }

                    if (tipoOrg == TipoOrganizacion.Centro.GetHashCode() || tipoOrg == TipoOrganizacion.Cadis.GetHashCode() || tipoOrg == TipoOrganizacion.Descanso.GetHashCode())
                    {
                        #region CENTROS

                        gasto.TipoFolio           = TipoFolio.GastoMateriaPrima;
                        gasto.AlmacenMovimientoID = null;
                        folioGasto = gastoMateriaPrimaDal.Guardar(gasto);

                        #endregion CENTROS
                    }
                    else
                    {
                        #region SIAP

                        #region MOVIMIENTOS

                        var listaAlmacenDetalle = new List <AlmacenMovimientoDetalle>();

                        var almacenMovimiento = new AlmacenMovimientoInfo
                        {
                            AlmacenID         = gasto.AlmacenID,
                            TipoMovimientoID  = gasto.TipoMovimiento.TipoMovimientoID,
                            ProveedorId       = gasto.Proveedor.ProveedorID,
                            Observaciones     = gasto.Observaciones,
                            Status            = (int)EstatusInventario.Aplicado,
                            UsuarioCreacionID = gasto.UsuarioCreacionID
                        };
                        var almacenMovimientoBl = new AlmacenMovimientoBL();
                        var almacenMovimientoID = almacenMovimientoBl.Crear(almacenMovimiento);
                        gasto.AlmacenMovimientoID = almacenMovimientoID;

                        var almacenMovimientoDetalle = new AlmacenMovimientoDetalle
                        {
                            AlmacenMovimientoID = almacenMovimientoID,
                            ProductoID          = gasto.Producto.ProductoId,
                            UsuarioCreacionID   = gasto.UsuarioCreacionID,
                            Importe             = gasto.Importe,
                            Cantidad            = 0,
                            Precio = 0
                        };
                        if (gasto.UnidadMedida)
                        {
                            almacenMovimientoDetalle.Cantidad = gasto.Kilogramos;
                            if (gasto.Kilogramos > 0)
                            {
                                almacenMovimientoDetalle.Precio = gasto.Importe / gasto.Kilogramos;
                            }
                            else
                            {
                                almacenMovimientoDetalle.Precio = 0;
                            }
                        }
                        gasto.TipoFolio = TipoFolio.GastoMateriaPrima;
                        int gastoMateriaPrimaID = gastoMateriaPrimaDal.Guardar(gasto);
                        //Actualizamos en AlmacenInventarioLote
                        if (gasto.AlmacenInventarioLote.AlmacenInventarioLoteId != 0)
                        {
                            almacenMovimientoDetalle.AlmacenInventarioLoteId =
                                gasto.AlmacenInventarioLote.AlmacenInventarioLoteId;

                            var almacenInventarioLote     = new AlmacenInventarioLoteDAL();
                            var almacenInventarioLoteInfo = new AlmacenInventarioLoteInfo();
                            almacenInventarioLoteInfo =
                                almacenInventarioLote.ObtenerAlmacenInventarioLotePorId(
                                    gasto.AlmacenInventarioLote.AlmacenInventarioLoteId);
                            almacenInventarioLoteInfo.UsuarioModificacionId = gasto.UsuarioCreacionID;
                            if (gasto.TipoMovimiento.TipoMovimientoID == (int)TipoMovimiento.EntradaPorAjuste)
                            {
                                almacenInventarioLoteInfo.Importe  += gasto.Importe;
                                almacenInventarioLoteInfo.Cantidad += gasto.Kilogramos;
                            }
                            else // Salida por Ajuste
                            {
                                almacenInventarioLoteInfo.Importe  -= gasto.Importe;
                                almacenInventarioLoteInfo.Cantidad -= gasto.Kilogramos;
                            }
                            if (almacenInventarioLoteInfo.Cantidad == 0)
                            {
                                almacenInventarioLoteInfo.PrecioPromedio = 0;
                            }
                            else
                            {
                                almacenInventarioLoteInfo.PrecioPromedio = almacenInventarioLoteInfo.Importe /
                                                                           almacenInventarioLoteInfo.Cantidad;
                            }
                            almacenInventarioLote.Actualizar(almacenInventarioLoteInfo);
                        }
                        // Actualizamos en AlmacenInventario
                        var almacenInventario     = new AlmacenInventarioDAL();
                        var almacenInventarioInfo = new AlmacenInventarioInfo
                        {
                            AlmacenID  = gasto.AlmacenID,
                            ProductoID = gasto.Producto.ProductoId
                        };
                        almacenInventarioInfo = almacenInventario.ObtenerPorAlmacenIdProductoId(almacenInventarioInfo);
                        if (gasto.TipoMovimiento.TipoMovimientoID == (int)TipoMovimiento.EntradaPorAjuste)
                        {
                            almacenInventarioInfo.Importe  += gasto.Importe;
                            almacenInventarioInfo.Cantidad += gasto.Kilogramos;
                            gasto.EsEntrada = true;
                        }
                        else // Salida por Ajuste
                        {
                            almacenInventarioInfo.Importe  -= gasto.Importe;
                            almacenInventarioInfo.Cantidad -= gasto.Kilogramos;
                        }
                        almacenInventarioInfo.UsuarioModificacionID = gasto.UsuarioCreacionID;
                        if (almacenInventarioInfo.Cantidad == 0)
                        {
                            almacenInventarioInfo.PrecioPromedio = 0;
                        }
                        else
                        {
                            almacenInventarioInfo.PrecioPromedio = almacenInventarioInfo.Importe / almacenInventarioInfo.Cantidad;
                        }
                        almacenInventario.Actualizar(almacenInventarioInfo);

                        listaAlmacenDetalle.Add(almacenMovimientoDetalle);
                        var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
                        almacenMovimientoDetalleBL.GuardarAlmacenMovimientoDetalle(listaAlmacenDetalle, almacenMovimientoID);

                        #endregion MOVIMIENTOS

                        #region POLIZA

                        GastoMateriaPrimaInfo gastoMateriaGuardado = gastoMateriaPrimaDal.ObtenerPorID(gastoMateriaPrimaID);

                        gasto.Fecha      = gastoMateriaGuardado.Fecha;
                        gasto.FolioGasto = gastoMateriaGuardado.FolioGasto;
                        folioGasto       = gastoMateriaGuardado.FolioGasto;
                        poliza           = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.GastosMateriaPrima);
                        polizas          = poliza.GeneraPoliza(gasto);
                        if (polizas != null && polizas.Any())
                        {
                            polizas.ToList().ForEach(datos =>
                            {
                                datos.OrganizacionID         = gasto.Organizacion.OrganizacionID;
                                datos.UsuarioCreacionID      = gasto.UsuarioCreacionID;
                                datos.ArchivoEnviadoServidor = 1;
                            });
                            var polizaBL = new PolizaBL();
                            if (gasto.EsEntrada)
                            {
                                polizaBL.GuardarServicioPI(polizas, TipoPoliza.EntradaAjuste);
                            }
                            else
                            {
                                polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaAjuste);
                            }
                        }

                        #endregion POLIZA

                        #endregion SIAP
                    }

                    transaction.Complete();
                }
                return(folioGasto);
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #12
0
        /// <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();
            }
        }
コード例 #13
0
        /// <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);
            }
        }