示例#1
0
        public KardexArticulos saldoInicial(KardexArticulos articulo, DateTime FechaInicio, List <InventariosSaldos> InventariosSaldosCompletoServer, MovimientosES mov, Detalles_ES detalle, int dia, int mes, int ano, EmpresaContext db)
        {
            try
            {
                //Se declaro asi por un conflico de nombre
                Servicios.Inventarios.Inventarios inventario = new Servicios.Inventarios.Inventarios();

                articulo.Almacen  = mov.Almacen;
                articulo.Folio    = "";
                articulo.Concepto = new Concepto
                {
                    Nombre = "SI - SALDO INICIAL"
                };

                //Caracteristicas del articulo
                articulo.Articulo           = detalle.Articulo;
                articulo.SubgrupoComponente = detalle.Articulo.SubGrupoComponente;
                articulo.GrupoComponente    = detalle.Articulo.SubGrupoComponente.GrupoComponente;

                ExistenciaValorInventario existencia = inventario.ExistenciaArticulo(detalle.Articulo._id, articulo.Almacen.id, FechaInicio, InventariosSaldosCompletoServer, detalle.Articulo, dia, mes, ano, db);

                articulo.EntradaUnidad        = existencia.Existencia;
                articulo.EntradaCostoUnitario = 0.0;
                articulo.EntradaCostoTotal    = existencia.CostoUnitario * existencia.Existencia;

                articulo.ExistenciaUnidades   = existencia.Existencia;
                articulo.ExistenciaCostoTotal = articulo.EntradaCostoTotal;

                return(articulo);
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#2
0
        public string aplicarInventario(string id)
        {
            try
            {
                EmpresaContext db = new EmpresaContext();

                using (var session = db.client.StartSession())
                {
                    session.StartTransaction();

                    InventarioFisico DocumentoInventario = db.InventarioFisico.get(id, db);

                    if (DocumentoInventario.Estado == "APLICADO")
                    {
                        throw new Exception("Esta toma de inventario ya se encuentra aplicada,no es posible continuar");
                    }


                    MovimientosES documentoentrada = new MovimientosES();
                    documentoentrada.Concepto       = db.Concepto.get("5d19676ba9c67230a05ebe7b", db); ////Concepto de entrada por toma de inventatario fisico
                    documentoentrada.Almacen        = DocumentoInventario.Almacen;
                    documentoentrada.Fecha          = DocumentoInventario.Fecha;
                    documentoentrada.Descripcion    = "Toma de inventario con el Folio" + DocumentoInventario.Folio;
                    documentoentrada.Sistema_Origen = "IF";
                    documentoentrada.Cancelado      = "NO";

                    MovimientosES documentosalida = new MovimientosES();
                    documentosalida.Concepto       = db.Concepto.get("5d196788a9c67230a05ebe7c", db); ////Concepto de entrada por toma de inventatario fisico
                    documentosalida.Almacen        = DocumentoInventario.Almacen;
                    documentosalida.Fecha          = DocumentoInventario.Fecha;
                    documentosalida.Descripcion    = "Toma de inventario con el Folio " + DocumentoInventario.Folio;
                    documentosalida.Sistema_Origen = "IF";
                    documentosalida.Cancelado      = "NO";

                    Inventarios inv = new Inventarios();

                    //Separo la fecha del doumento en dia mes y año
                    int dia = DocumentoInventario.Fecha.Day;
                    int mes = DocumentoInventario.Fecha.Month;
                    int ano = DocumentoInventario.Fecha.Year;

                    //Recolectamos en una lista los ids que nos manda el cliente
                    var Ids = (from an in DocumentoInventario.InventarioFisicoDetalle select an.Articulo._id).ToList();

                    //Selecciono los articulos que no estan incluido en el invetario fisico
                    //var filtroArticulos = Builders<Articulo>.Filter.Nin("_id", Ids);
                    //List<Articulo> LstArticulosNoIncluidos = db.Articulo.find(filtroArticulos, "_id,Nombre,Clave,UnidadInventario", db);

                    //Genero el detalle para los articulso que no se encuntran

                    /*foreach(Articulo art in LstArticulosNoIncluidos)
                     * {
                     *  DocumentoInventario.InventarioFisicoDetalle.Add(new InventarioFisicoDetalle
                     *  {
                     *      ExistenciaFisica = 0,
                     *      Articulo = art
                     *  });
                     * }*/

                    //var builderSaldos = Builders<InventariosSaldos>.Filter.In("ArticuloId", Ids) & Builders<InventariosSaldos>.Filter.Eq("AlmacenId", DocumentoInventario.Almacen._id);
                    var builderSaldos = Builders <InventariosSaldos> .Filter.Eq("AlmacenId", DocumentoInventario.Almacen._id);

                    List <InventariosSaldos> InventariosSaldosCompletoServer = db.InventariosSaldos.find(builderSaldos, db);

                    //var List = InventariosSaldosCompletoServer.GroupBy(a => a.ArticuloId).Select(a => a.ToList().First()).ToList();

                    foreach (InventariosSaldos saldo in InventariosSaldosCompletoServer.GroupBy(a => a.ArticuloId).Select(a => a.ToList().First()).ToList())
                    {
                        bool ArticuloIncluido           = true; //Controla si articulo venia capturado por el usuario
                        InventarioFisicoDetalle detalle = DocumentoInventario.InventarioFisicoDetalle.Where(a => a.Articulo._id == saldo.ArticuloId).SingleOrDefault();

                        if (detalle == null)
                        {
                            ArticuloIncluido     = false;
                            detalle              = new InventarioFisicoDetalle();
                            detalle.Articulo     = new Articulo();
                            detalle.Articulo._id = saldo.ArticuloId;
                        }

                        ExistenciaValorInventario exitencia = inv.ExistenciaArticulo(detalle.Articulo._id, DocumentoInventario.Almacen.id, DocumentoInventario.Fecha, InventariosSaldosCompletoServer, detalle.Articulo, dia, mes, ano, db);
                        detalle.ExistenciaTeorica = exitencia.Existencia;

                        if (detalle.ExistenciaTeorica != 0.0 && detalle.ExistenciaFisica != 0)
                        {
                            if (ArticuloIncluido == false)
                            {
                                DocumentoInventario.InventarioFisicoDetalle.Add(new InventarioFisicoDetalle
                                {
                                    ExistenciaFisica = 0,
                                    Articulo         = db.Articulo.get(detalle.Articulo._id, "_id,Clave,Nombre,UnidadInventario", db)
                                });
                            }

                            detalle.Diferencia = detalle.ExistenciaTeorica - detalle.ExistenciaFisica;

                            //Falta agregar el tipo de seguimiento al articulo
                            InventarioNormal(detalle, documentoentrada, documentosalida, db);
                        }
                    }

                    /*foreach (InventarioFisicoDetalle detalle in DocumentoInventario.InventarioFisicoDetalle)
                     * {
                     *  ExistenciaValorInventario exitencia = inv.ExistenciaArticulo(detalle.Articulo._id, DocumentoInventario.Almacen.id, DocumentoInventario.Fecha, InventariosSaldosCompletoServer, detalle.Articulo, dia, mes, ano, db);
                     *  detalle.ExistenciaTeorica = exitencia.Existencia;
                     *
                     *  if(detalle.ExistenciaTeorica != 0.0)
                     *  {
                     *      detalle.Diferencia = detalle.ExistenciaTeorica - detalle.ExistenciaFisica;
                     *      DocumentoInventario.InventarioFisicoDetalle.Add(new InventarioFisicoDetalle
                     *      {
                     *          ExistenciaFisica = 0,
                     *          Articulo = exitencia.Articulo
                     *      });
                     *  }
                     *
                     *  //Falta agregar el tipo de seguimiento al articulo
                     *  InventarioNormal(detalle, documentoentrada, documentosalida, db);
                     * }*/

                    if (documentoentrada.Detalles_ES.Count > 0)
                    {
                        inv.add(documentoentrada, db, session);
                    }
                    if (documentosalida.Detalles_ES.Count > 0)
                    {
                        inv.add(documentosalida, db, session);
                    }

                    DocumentoInventario.Estado = "APLICADO";
                    DocumentoInventario.FechaHoraAplicacion = DateTime.Now;

                    db.InventarioFisico.update(DocumentoInventario, DocumentoInventario._id, db, session);

                    session.CommitTransaction();
                }

                return("");
            }
            catch (Exception ex)
            {
                Error(ex, "");
                return(null);
            }
        }
示例#3
0
        //Obtiene la existencia de un articulo en una fecha especificia
        public ExistenciaValorInventario ExistenciaArticulo(string articuloId, string almacenId, DateTime date, List <InventariosSaldos> Inv, Articulo Art, int dia, int mes, int ano, EmpresaContext db)
        {
            try
            {
                DateTime             ultimodiamesanterior = new DateTime();
                double               Entradas             = 0;
                double               Salidas                     = 0;
                double               EntradasCostos              = 0;
                double               SalidasCostos               = 0;
                double               SaldoMesesAnteriores        = 0;
                double               ValorTotalMesesAnteriores   = 0;
                List <MovimientosES> MovimientosEsCompletoServer = new List <MovimientosES>();


                //revisamos el ultimo dia del mes dado en el reporte
                var ultimodia = Inv.Find(b => b.ArticuloId == Art._id && b.AlmacenId == almacenId && b.Ano <= date.Year && b.Mes == date.Month);
                // si la fecha del reporte es igual o mayor que el ultimo dia procedemos a sacar la existencia de la tabla inventarios saldos
                if ((ultimodia != null) && date.Day >= ultimodia.UltimoDia)
                {
                    var saldomesesanteriores = Inv.FindAll(b => b.ArticuloId == articuloId && b.AlmacenId == almacenId && (b.Ano == date.Year && b.Mes <= date.Month || b.Ano < date.Year)).ToList();
                    SaldoMesesAnteriores      = saldomesesanteriores.Sum(a => a.EntradaUnidades - a.SalidasUnidades);
                    ValorTotalMesesAnteriores = saldomesesanteriores.Sum(a => a.EntradasCosto - a.SalidasCosto);
                }
                else // de lo contrario barremos los moviemiento de los detalles de las entradas y salidas
                {
                    //ahora revisamos el ultimo dia del mes anterior
                    ultimodia = Inv.Find(b => b.ArticuloId == Art._id && b.AlmacenId == almacenId && b.Ano <= date.Year && b.Mes < date.Month || b.Ano < date.Year);
                    // date = new DateTime(date.Year, date.Month, date.Day, 11, 59, 59);

                    if (ultimodia == null) // si no hay ningun movimiento en los meses anteriores
                    {
                        //builderMovimientos.Eq("Almacen._id", almacenId) & builderMovimientos.Where(a => a.Ano <= ano && a.Mes <= mes && a.Dia <= dia)
                        var builderMovimientos = Builders <MovimientosES> .Filter.Eq("Almacen._id", almacenId) & Builders <MovimientosES> .Filter.Where(a => a.Ano <= ano && a.Mes <= mes && a.Dia <= dia);

                        //MovimientosEsCompletoServer = CollectionMovimientosEs.Find(builderMovimientos).ToList();
                        MovimientosEsCompletoServer = db.MovimientosES.find(builderMovimientos, db);
                    }
                    else //si, si hay movimiento en meses anteriores
                    {
                        //(builderMovimientos & builderMovimientos.Where(a => a.Fecha > ultimodiamesanterior && (a.Ano <= ano && a.Mes <= mes && a.Dia <= dia))
                        var builderMovimientos = Builders <MovimientosES> .Filter.Eq("Almacen._id", almacenId) & Builders <MovimientosES> .Filter.Where(a => a.Fecha > ultimodiamesanterior && (a.Ano <= ano && a.Mes <= mes && a.Dia <= dia));

                        ultimodiamesanterior = new DateTime(ultimodia.Ano, ultimodia.Mes, ultimodia.UltimoDia, 23, 59, 59);
                        //MovimientosEsCompletoServer = CollectionMovimientosEs.Find(builderMovimientos).ToList();
                        MovimientosEsCompletoServer = db.MovimientosES.find(builderMovimientos, db);
                    }

                    var me = MovimientosEsCompletoServer.Where(i => i.Concepto.Naturaleza == "ENTRADA").SelectMany(l => l.Detalles_ES).Where(p => p.Articulo._id == Art._id);
                    var ms = MovimientosEsCompletoServer.Where(i => i.Concepto.Naturaleza == "SALIDA").SelectMany(l => l.Detalles_ES).Where(p => p.Articulo._id == Art._id);
                    Entradas       = me.Sum(o => o.Cantidad);
                    EntradasCostos = me.Sum(o => o.CostoTotal);
                    Salidas        = ms.Sum(o => o.Cantidad);
                    SalidasCostos  = ms.Sum(o => o.CostoTotal);


                    var saldomesesanteriores = Inv.FindAll(b => b.ArticuloId == articuloId && b.AlmacenId == almacenId && (b.Ano == date.Year && b.Mes < date.Month || b.Ano < date.Year)).ToList();
                    SaldoMesesAnteriores      = saldomesesanteriores.Sum(a => a.EntradaUnidades - a.SalidasUnidades);
                    ValorTotalMesesAnteriores = saldomesesanteriores.Sum(a => a.EntradasCosto - a.SalidasCosto);
                }

                var existencia = SaldoMesesAnteriores + Entradas - Salidas;
                var ValorTotal = ValorTotalMesesAnteriores + EntradasCostos - SalidasCostos;

                ExistenciaValorInventario existenciaInventario = new ExistenciaValorInventario();
                existenciaInventario.Fecha              = date.ToString();
                existenciaInventario.Existencia         = existencia;
                existenciaInventario.ValorTotal         = ValorTotal;
                existenciaInventario.CostoUnitario      = ValorTotal > 0 ? ValorTotal / existencia : 0.00;
                existenciaInventario.Articulo           = Art;
                existenciaInventario.SubgrupoComponente = Art.SubGrupoComponente == null ? null : Art.SubGrupoComponente;
                existenciaInventario.GrupoComponente    = Art.GrupoComponente == null ? null : Art.GrupoComponente;
                //existenciaInventario.UnidadInventario = Art.UnidadInventario.Abreviatura;
                existenciaInventario.UnidadInventario = Art.UnidadInventario == null ? null : Art.UnidadInventario.Abreviatura;
                existenciaInventario.TotalEntradas    = SaldoMesesAnteriores + Entradas;
                existenciaInventario.TotalSalidas     = Salidas;
                existenciaInventario.movimientos      = MovimientosEsCompletoServer;

                return(existenciaInventario);
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#4
0
        public List <ExistenciaValorInventario> Existencia(string Fecha, string AlmacenId, string ArticuloId, string GrupoId, string SubGrupoId, string Valoracion)
        {
            /*if (AlmacenId == "" && GrupoId == "")
             *  return null;*/
            try
            {
                //client = new MongoClient("mongodb://*****:*****@18.191.252.222:27017/PAMC861025DB7");
                client = new MongoClient(ConfigurationManager.AppSettings["pathMongo"]);
                //db = client.GetDatabase("PAMC861025DB7");
                db               = client.GetDatabase(getKeyToken("empresa", "token"));
                Almacenes        = db.GetCollection <Almacen>("Almacen");
                Articulos        = db.GetCollection <Articulo>("Articulo");
                CollectionSaldos = db.GetCollection <InventariosSaldos>("InventariosSaldos");

                CollectionMovimientosEs = db.GetCollection <MovimientosES>("MovimientosES");
                ExistenciaValorInventario Existencia = new ExistenciaValorInventario();

                Almacen almacen = new Almacen();                        // EN ALMACEN PODRA MANDAR (1 ALMACEN O TODOS LOS ALMACENES (CONSOLIDADO))
                almacen._id = AlmacenId;
                Articulo articulo = new Articulo();                     //DATOS QUE OCUPO QUE ME MANDE EL CLIENTE. EN ARTICULOS PODRA MANDAR (1 ARTICULO O 1 SUBGRUPO O 1 GRUPO)
                articulo._id = ArticuloId;
                SubgrupoComponente subgrupo = new SubgrupoComponente();
                subgrupo._id = SubGrupoId;
                GrupoComponente grupo = new GrupoComponente();;
                grupo._id = GrupoId;
                //DateTime date = new DateTime(2019,3,26,23,59,59);
                DateTime        date = DateTime.Parse(Fecha);
                int             ano  = date.Year;
                int             mes  = date.Month;
                int             dia  = date.Day;
                List <Articulo> ArticulosCompletoServer = new List <Articulo>();

                //Ningun filtro seleccionado
                if ((subgrupo._id == null || subgrupo._id == "") && (grupo._id == null || grupo._id == "") && (articulo._id == null || articulo._id == ""))
                {
                    ArticulosCompletoServer = Articulos.Find <Articulo>(_ => true).Project <Articulo>(Builders <Articulo> .Projection.Include(p => p._id).Include(o => o.Nombre).Include(i => i.SubGrupoComponente).Include(y => y.GrupoComponente).Include(l => l.UnidadInventario)).ToList();
                }
                //Selecciono el filtro subgrupo
                else if (subgrupo._id != null && subgrupo._id != "")
                {
                    ArticulosCompletoServer = Articulos.Find <Articulo>(d => d.SubGrupoComponente._id == subgrupo._id).Project <Articulo>(Builders <Articulo> .Projection.Include(p => p._id).Include(o => o.Nombre).Include(i => i.SubGrupoComponente).Include(l => l.UnidadInventario)).ToList();
                }
                //Selecciono el filtro grupo
                else if (grupo._id != null && grupo._id != "")
                {
                    ArticulosCompletoServer = Articulos.Find <Articulo>(d => d.GrupoComponente._id == grupo._id).Project <Articulo>(Builders <Articulo> .Projection.Include(p => p._id).Include(o => o.Nombre).Include(i => i.SubGrupoComponente).Include(l => l.UnidadInventario)).ToList();
                }
                //Selecciono el filtro articulo
                else if (articulo._id != null && articulo._id != "")
                {
                    ArticulosCompletoServer = Articulos.Find <Articulo>(d => d._id == articulo._id).Project <Articulo>(Builders <Articulo> .Projection.Include(p => p._id).Include(o => o.Nombre).Include(i => i.SubGrupoComponente).Include(l => l.UnidadInventario)).ToList();
                }

                var Ids = (from an in ArticulosCompletoServer select an._id).ToList(); //recolectamos en una lista los ids que nos manda el cliente

                var builderSaldos = Builders <InventariosSaldos> .Filter;
                List <InventariosSaldos>         InventariosSaldosCompletoServer = CollectionSaldos.Find(builderSaldos.In("ArticuloId", Ids) & builderSaldos.Eq("AlmacenId", almacen._id)).ToList();
                List <ExistenciaValorInventario> existenciaInventario            = new List <ExistenciaValorInventario>();

                foreach (Articulo art in ArticulosCompletoServer)
                {
                    Existencia = ExistenciaArticulo(art._id, almacen._id, date, InventariosSaldosCompletoServer, art, dia, mes, ano);
                    existenciaInventario.Add(Existencia);
                }

                return(existenciaInventario);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }