Ejemplo n.º 1
0
        /// <summary>
        /// Obtiene un Almacen por su Id
        /// </summary>
        /// <returns> </returns>
        public EstatusInfo ObtenerEstatusInfo(AlmacenMovimientoInfo almacenMovimientoInfo)
        {
            EstatusInfo info = null;

            try
            {
                Logger.Info();
                var estatusBL        = new EstatusBL();
                var resultadoEstatus = estatusBL.ObtenerEstatusTipoEstatus((int)TipoEstatus.Inventario);

                if (resultadoEstatus != null)
                {
                    foreach (var estatus in resultadoEstatus.Where(estatus => estatus.EstatusId == almacenMovimientoInfo.Status))
                    {
                        info = new EstatusInfo
                        {
                            EstatusId   = estatus.EstatusId,
                            Descripcion = estatus.Descripcion
                        };
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(info);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Carga los valores del combo de estatus
        /// </summary>
        private void CargarCboEstatus()
        {
            try
            {
                //IList<EstatusContratoEnum> estatusEnums = Enum.GetValues(typeof(EstatusContratoEnum)).Cast<EstatusContratoEnum>().ToList();
                //CboEstatus.ItemsSource = estatusEnums;
                //CboEstatus.SelectedItem = EstatusContratoEnum.Activo;

                var estatusPl         = new EstatusPL();
                var listaEstatus      = estatusPl.ObtenerEstatusTipoEstatus(TipoEstatusEnum.Contratos.GetHashCode());
                var estatusSeleccione = new EstatusInfo
                {
                    EstatusId   = 0,
                    Descripcion = Properties.Resources.cbo_Seleccionar
                };
                listaEstatus.Insert(0, estatusSeleccione);
                CboEstatus.ItemsSource = listaEstatus;
                Contexto.Estatus       = new EstatusInfo
                {
                    EstatusId = Estatus.ConActivo.GetHashCode()
                };
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                //Agregar excepcion
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad Estatus
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public int Guardar(EstatusInfo info)
 {
     try
     {
         Logger.Info();
         var id = 0;
         if (info.EstatusId > 0)
         {
             info.FechaModificacion = da.FechaServidor();
             id = da.Actualizar <EstatusInfo>(info);
         }
         else
         {
             id = da.Insertar <EstatusInfo>(info);
         }
         return(id);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Se utiliza para guardar datos en la tabla RegistroVigilancia
        /// </summary>
        /// <param name="registrovigilanciainfo"></param>
        /// <returns></returns>
        internal int GuardarDatos(RegistroVigilanciaInfo registrovigilanciainfo)
        {
            try
            {
                using (var transaction = new TransactionScope())
                {
                    Logger.Info();
                    var registrovigilanciaBl = new RegistroVigilanciaBL();
                    int resultado            = registrovigilanciaBl.GuardarDatos(registrovigilanciainfo);

                    if (resultado > 0 &&
                        registrovigilanciainfo.Producto.SubFamilia.SubFamiliaID == (int)SubFamiliasEnum.MicroIngredientes)
                    {
                        //Obtener Info RegistroVigilancia
                        var registroVigilanciaInfo = new RegistroVigilanciaInfo
                        {
                            FolioTurno   = resultado,
                            Organizacion = registrovigilanciainfo.Organizacion
                        };
                        var registroVigilanciaBL = new RegistroVigilanciaBL();
                        registroVigilanciaInfo = registroVigilanciaBL.ObtenerRegistroVigilanciaPorFolioTurno(registroVigilanciaInfo);

                        //Almacenar entrada Producto
                        var entradaProductoBL = new EntradaProductoBL();

                        var estatus = new EstatusInfo()
                        {
                            EstatusId = (int)Estatus.Aprobado
                        };

                        var entradaProducto = new EntradaProductoInfo
                        {
                            Organizacion       = registrovigilanciainfo.Organizacion,
                            Producto           = registrovigilanciainfo.Producto,
                            RegistroVigilancia = registroVigilanciaInfo,
                            UsuarioCreacionID  = registrovigilanciainfo.UsuarioCreacionID,
                            Estatus            = estatus,
                            Observaciones      = "Entrada de premezcla"
                        };

                        entradaProducto =
                            entradaProductoBL.GuardarEntradaProductoSinDetalle(entradaProducto,
                                                                               (int)TipoFolio.EntradaProducto);
                        resultado = entradaProducto.Folio;
                    }

                    transaction.Complete();
                    return(resultado);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 5
0
        private void AgregarElementoInicialEstatus(IList <EstatusInfo> listEstatus)
        {
            var listInicial = new EstatusInfo {
                EstatusId = 0, Descripcion = Properties.Resources.ProcesarAutoFacturacion_Todos
            };

            if (!listEstatus.Contains(listInicial))
            {
                listEstatus.Insert(0, listInicial);
            }
        }
Ejemplo n.º 6
0
        public object Delete(EstatusInfo deleted)
        {
            string msgError = "";
            bool   result   = repository.Remove(deleted, ref msgError);

            object json = new
            {
                success = result,
                message = msgError
            };

            return(json);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Genera los registros de los movimientos para entrada y/o salida del Almacen
        /// </summary>
        private void ArmarAlmacenMovimientoEntradaSalidaAlmacen(List <AlmacenMovimientoInfo> listaMovimientosFinal,
                                                                CierreDiaInventarioPAInfo cierreDiaInventarioPA,
                                                                IEnumerable <EstatusInfo> listaEstatusInventario,
                                                                bool esEntrada)
        {
            EstatusInfo estatusAutorizado =
                listaEstatusInventario.FirstOrDefault(
                    esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoAutorizado.Trim()));

            if (estatusAutorizado == null)
            {
                return;
            }
            var movimiento = new AlmacenMovimientoInfo
            {
                AlmacenID        = cierreDiaInventarioPA.AlmacenID,
                TipoMovimientoID =
                    esEntrada
                            ? TipoMovimiento.EntradaPorAjuste.GetHashCode()
                            : TipoMovimiento.SalidaPorAjuste.GetHashCode(),
                FolioMovimiento = cierreDiaInventarioPA.FolioMovimiento,
                Observaciones   = cierreDiaInventarioPA.Observaciones,
                //FechaMovimiento = DateTime.Now,
                Status            = estatusAutorizado.EstatusId,
                UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID
            };

            var movimientoDetalles = (from detalle in cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle
                                      select new AlmacenMovimientoDetalle
            {
                AlmacenInventarioLoteId = detalle.AlmacenInventarioLoteID,
                ProductoID = detalle.ProductoID,
                Precio = detalle.CostoUnitario,
                Cantidad = Math.Abs(detalle.InventarioFisico - detalle.InventarioTeorico),
                Piezas = Math.Abs((detalle.PiezasFisicas - detalle.PiezasTeoricas)),
                Importe =
                    Math.Round(
                        Convert.ToDecimal(Math.Abs(detalle.InventarioFisico - detalle.InventarioTeorico)) *
                        detalle.CostoUnitario, 2),
                UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID
            }).ToList();

            movimiento.ListaAlmacenMovimientoDetalle = movimientoDetalles;
            listaMovimientosFinal.Add(movimiento);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Obtiene una lista paginada de Estatus
        /// </summary>
        /// <param name="pagina"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public ResultadoInfo <EstatusInfo> ObtenerPorPagina(PaginacionInfo pagina, EstatusInfo filtro)
        {
            try
            {
                Logger.Info();
                var result    = new ResultadoInfo <EstatusInfo>();
                var condicion = da.Tabla <EstatusInfo>().Where(e => e.Activo == filtro.Activo);
                if (filtro.EstatusId > 0)
                {
                    condicion = condicion.Where(e => e.EstatusId == filtro.EstatusId);
                }
                if (!string.IsNullOrEmpty(filtro.Descripcion))
                {
                    condicion = condicion.Where(e => e.Descripcion.Contains(filtro.Descripcion));
                }
                result.TotalRegistros = condicion.Count();

                int inicio = pagina.Inicio;
                int limite = pagina.Limite;
                if (inicio > 1)
                {
                    int limiteReal = (limite - inicio) + 1;
                    inicio = (limite / limiteReal);
                    limite = limiteReal;
                }
                var paginado = condicion
                               .OrderBy(e => e.Descripcion)
                               .Skip((inicio - 1) * limite)
                               .Take(limite);

                result.Lista = paginado.ToList();

                return(result);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Ejemplo n.º 9
0
        public object Post(EstatusInfo added)
        {
            object json;
            string messageError = "";

            try
            {
                EstatusInfo posted = repository.Add(added, ref messageError);

                if (posted != null)
                {
                    json = new
                    {
                        total   = 1,
                        data    = posted,
                        success = true
                    };
                }
                else
                {
                    json = new
                    {
                        message = messageError,
                        success = false
                    };
                };
            }
            catch (Exception ex)
            {
                LogManager.Write("ERROR:" + Environment.NewLine + "\tMETHOD = " + this.GetType().FullName + "." + MethodBase.GetCurrentMethod().Name + Environment.NewLine + "\tMESSAGE = " + ex.Message);

                object error = new { message = ex.Message };

                json = new
                {
                    message = ex.Message,
                    success = false
                };
            };

            return(json);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Genera los registro que quedarán pendientes de autorizar
        /// </summary>
        private void ArmarAlmacenMovimientoInventarioFisicoPendiente(List <AlmacenMovimientoInfo> listaMovimientosFinal,
                                                                     CierreDiaInventarioPAInfo cierreDiaInventarioPA,
                                                                     IEnumerable <EstatusInfo> listaEstatusInventario)
        {
            EstatusInfo estatusPendiente =
                listaEstatusInventario.FirstOrDefault(
                    esta => esta.DescripcionCorta.Trim().Equals(ConstantesBL.MovimientoPendiente.Trim()));

            if (estatusPendiente == null)
            {
                return;
            }
            var movimiento = new AlmacenMovimientoInfo
            {
                AlmacenID        = cierreDiaInventarioPA.AlmacenID,
                TipoMovimientoID = TipoMovimiento.InventarioFisico.GetHashCode(),
                FolioMovimiento  = cierreDiaInventarioPA.FolioMovimiento,
                Observaciones    = cierreDiaInventarioPA.Observaciones,
                //FechaMovimiento = DateTime.Now,
                Status            = estatusPendiente.EstatusId,
                UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID
            };

            var movimientoDetalles = (from detalle in cierreDiaInventarioPA.ListaCierreDiaInventarioPADetalle
                                      select new AlmacenMovimientoDetalle
            {
                AlmacenInventarioLoteId = detalle.AlmacenInventarioLoteID,
                ProductoID = detalle.ProductoID,
                Precio = detalle.CostoUnitario,
                Cantidad = detalle.InventarioFisico,
                Piezas = detalle.PiezasFisicas,
                Importe =
                    Math.Round(
                        Convert.ToDecimal(detalle.InventarioFisico) * detalle.CostoUnitario,
                        2),
                UsuarioCreacionID = cierreDiaInventarioPA.UsuarioCreacionID
            }).ToList();

            movimiento.ListaAlmacenMovimientoDetalle = movimientoDetalles;
            listaMovimientosFinal.Add(movimiento);
        }
        /// <summary>
        /// Carga combo estatus
        /// </summary>
        private void CargarComboEstatus()
        {
            try
            {
                var estatusPl            = new EstatusPL();
                var listaEstatus         = estatusPl.ObtenerEstatusTipoEstatus(TipoEstatusEnum.DiferenciaDeInventarios.GetHashCode());
                var listaEstatusFiltrado = listaEstatus.Where(estatusInfo => estatusInfo.EstatusId == Estatus.DifInvAutorizado.GetHashCode() || estatusInfo.EstatusId == Estatus.DifInvRechazado.GetHashCode() || estatusInfo.EstatusId == Estatus.DifInvPendiente.GetHashCode()).ToList();

                CboEstatus.ItemsSource = null;
                var estatusInfoN = new EstatusInfo {
                    Descripcion = Properties.Resources.DiferenciasDeInventario_CboSeleccione, EstatusId = 0
                };
                listaEstatusFiltrado.Insert(0, estatusInfoN);
                CboEstatus.ItemsSource   = listaEstatusFiltrado;
                CboEstatus.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                //Excepcion
            }
        }
Ejemplo n.º 12
0
        public object GetAll()
        {
            var queryValues = Request.RequestUri.ParseQueryString();

            int page  = Convert.ToInt32(queryValues["page"]);
            int start = Convert.ToInt32(queryValues["start"]);
            int limit = Convert.ToInt32(queryValues["limit"]);
            int id    = Convert.ToInt32(queryValues["id"]);
            int orden = Convert.ToInt32(queryValues["orden"]);


            #region Configuramos el orden de la consulta si se obtuvo como parametro
            string strOrder = !string.IsNullOrWhiteSpace(queryValues["sort"]) ? queryValues["sort"] : "";
            strOrder = strOrder.Replace('[', ' ');
            strOrder = strOrder.Replace(']', ' ');

            Sort sort;

            if (!string.IsNullOrWhiteSpace(strOrder))
            {
                sort = JsonConvert.DeserializeObject <Sort>(strOrder);
            }
            else
            {
                sort = new Sort();
            }
            #endregion

            string query = !string.IsNullOrWhiteSpace(queryValues["query"]) ? queryValues["query"] : "";

            int totalRecords = 0;

            try
            {
                if (id == 0)
                {
                    object json;
                    string msgError = "";
                    IList <EstatusInfo> lista;

                    lista = repository.GetList(query, sort, page, start, limit, ref totalRecords, ref msgError);

                    json = new
                    {
                        total   = totalRecords,
                        data    = lista,
                        success = true
                    };

                    return(json);
                }
                else
                {
                    string      msgError = "";
                    EstatusInfo estatus  = repository.Get(id, ref msgError);

                    object json = new
                    {
                        data    = estatus,
                        success = true,
                        message = msgError
                    };

                    return(json);
                }
            }
            catch (Exception ex)
            {
                LogManager.Write("ERROR:" + Environment.NewLine + "\tMETHOD = " + this.GetType().FullName + "." + MethodBase.GetCurrentMethod().Name + Environment.NewLine + "\tMESSAGE = " + ex.Message);

                object error = new { message = ex.Message };

                object json = new
                {
                    message = ex.Message,
                    success = false
                };

                return(json);
            }
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
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();
            }
        }