/// <summary>
        /// Obtiene el almacen en base al id
        /// </summary>
        /// <param name="almacenInventarioLoteId"></param>
        /// <returns></returns>
        internal AlmacenInventarioLoteInfo ObtenerAlmacenInventarioLotePorId(int almacenInventarioLoteId)
        {
            AlmacenInventarioLoteInfo almacenInventarioLote = null;

            try
            {
                var almacenDAL = new AlmacenInventarioLoteDAL();
                almacenInventarioLote = almacenDAL.ObtenerAlmacenInventarioLotePorId(almacenInventarioLoteId);

                if (almacenInventarioLote != null)
                {
                    var almacenInventarioBl = new AlmacenInventarioBL();
                    almacenInventarioLote.AlmacenInventario =
                        almacenInventarioBl.ObtenerAlmacenInventarioPorId(
                            almacenInventarioLote.AlmacenInventario.AlmacenInventarioID);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(almacenInventarioLote);
        }
Esempio n. 2
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);
            }
        }
        /// <summary>
        /// Método que obtiene un traspaso de materia prima por su folio
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static TraspasoMpPaMedInfo ObtenerPorFolio(DataSet ds)
        {
            try
            {
                var contratoDAL = new ContratoDAL();
                var almacenDAL  = new AlmacenDAL();
                var almacenInventarioLoteDAL = new AlmacenInventarioLoteDAL();
                var cuentaSAPDAL             = new CuentaSAPDAL();
                var productoDAL = new ProductoDAL();
                Logger.Info();
                DataTable           dt     = ds.Tables[ConstantesDAL.DtDatos];
                TraspasoMpPaMedInfo result =
                    (from info in dt.AsEnumerable()
                     select
                     new TraspasoMpPaMedInfo
                {
                    TraspasoMateriaPrimaID = info.Field <int>("TraspasoMateriaPrimaID"),
                    ContratoOrigen = info.Field <int?>("ContratoOrigenID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoOrigenID")
                    }) : new ContratoInfo(),
                    ContratoDestino = info.Field <int?>("ContratoDestinoID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoDestinoID")
                    }) : new ContratoInfo(),
                    FolioTraspaso = info.Field <long>("FolioTraspaso"),
                    AlmacenOrigen = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenOrigenID")),
                    AlmacenDestino = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenDestinoID")),
                    LoteMpOrigen = info.Field <int?>("InventarioLoteOrigenID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteOrigenID")) : new AlmacenInventarioLoteInfo(),
                    LoteMpDestino = info.Field <int?>("InventarioLoteDestinoID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteDestinoID")) : new AlmacenInventarioLoteInfo(),
                    CuentaContable = info.Field <int?>("CuentaSAPID") != null ? cuentaSAPDAL.ObtenerPorID(info.Field <int>("CuentaSAPID")) : new CuentaSAPInfo(),
                    JustificacionDestino = info.Field <string>("Justificacion"),
                    CantidadTraspasarOrigen = info.Field <decimal>("CantidadSalida"),
                    CantidadTraspasarDestino = info.Field <decimal>("CantidadEntrada"),
                    ProductoOrigen = productoDAL.ObtenerPorID(new ProductoInfo {
                        ProductoId = info.Field <int>("ProductoID")
                    }),
                    FechaTraspaso = info.Field <DateTime>("FechaMovimiento")
                }).First();

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        /// <summary>
        /// Método que obtiene una lista paginada
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static ResultadoInfo <TraspasoMpPaMedInfo> ObtenerPorPagina(DataSet ds)
        {
            try
            {
                var contratoDAL = new ContratoDAL();
                var almacenDAL  = new AlmacenDAL();
                var almacenInventarioLoteDAL = new AlmacenInventarioLoteDAL();
                var cuentaSAPDAL             = new CuentaSAPDAL();
                var productoDAL = new ProductoDAL();
                Logger.Info();
                DataTable dt = ds.Tables[ConstantesDAL.DtDatos];
                List <TraspasoMpPaMedInfo> lista =
                    (from info in dt.AsEnumerable()
                     select
                     new TraspasoMpPaMedInfo
                {
                    TraspasoMateriaPrimaID = info.Field <int>("TraspasoMateriaPrimaID"),
                    ContratoOrigen = info.Field <int?>("ContratoOrigenID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoOrigenID")
                    }) : new ContratoInfo(),
                    ContratoDestino = info.Field <int?>("ContratoDestinoID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoDestinoID")
                    }) : new ContratoInfo(),
                    FolioTraspaso = info.Field <long>("FolioTraspaso"),
                    AlmacenOrigen = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenOrigenID")),
                    AlmacenDestino = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenDestinoID")),
                    LoteMpOrigen = info.Field <int?>("InventarioLoteOrigenID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteOrigenID")) : new AlmacenInventarioLoteInfo(),
                    LoteMpDestino = info.Field <int?>("InventarioLoteDestinoID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteDestinoID")) : new AlmacenInventarioLoteInfo(),
                    CuentaContable = info.Field <int?>("CuentaSAPID") != null ? cuentaSAPDAL.ObtenerPorID(info.Field <int>("CuentaSAPID")) : new CuentaSAPInfo(),
                    JustificacionDestino = info.Field <string>("Justificacion"),
                    CantidadTraspasarOrigen = info.Field <decimal>("CantidadSalida"),
                    CantidadTraspasarDestino = info.Field <decimal>("CantidadEntrada"),
                    ProductoOrigen = productoDAL.ObtenerPorID(new ProductoInfo {
                        ProductoId = info.Field <int>("ProductoID")
                    }),
                    FechaTraspaso = info.Field <DateTime>("FechaMovimiento")
                                    //AlmacenMovimientoOrigen = new AlmacenMovimientoInfo { AlmacenMovimientoID = info.Field<long>("AlmacenMovimientoID")},
                                    //AlmacenMovimientoDestino = new AlmacenMovimientoInfo { AlmacenMovimientoID = info.Field<long>("AlmacenMovimientoID")},
                                    //Activo = info.Field<bool>("Activo").BoolAEnum(),
                }).ToList();

                int totalRegistros = Convert.ToInt32(ds.Tables[ConstantesDAL.DtContador].Rows[0]["TotalReg"]);
                var resultado      =
                    new ResultadoInfo <TraspasoMpPaMedInfo>
                {
                    Lista          = lista,
                    TotalRegistros = totalRegistros
                };
                return(resultado);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }