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; } }
public List <KardexArticulos> KardexArticulo(string FechaInicio, string FechaFin, string AlmacenId, string ArticuloId, string GrupoId, string SubGrupoId, string Valoracion) { try { /*string FechaInicio="01/11/2018"; * string FechaFin = "03/04/2019"; * string AlmacenId= "5c9676d418cb1b38c0005846"; * string ArticuloId= "5bda1dff68867432000f8e3b"; * string GrupoId=null; * string SubGrupoId = null; * string Valoracion = null;*/ string dateinicio = DateTime.Parse(FechaInicio).Subtract(TimeSpan.FromDays(1)).ToShortDateString(); string datefin = DateTime.Parse(FechaFin).ToShortDateString(); DateTime DateInicio = DateTime.Parse(FechaInicio); int anoInicio = DateInicio.Year; int mesInicio = DateInicio.Month; int diaInicio = DateInicio.Day; DateTime DateFin = DateTime.Parse(FechaFin); int anoFin = DateFin.Year; int mesFin = DateFin.Month; int diaFin = DateFin.Day; EmpresaContext db = new EmpresaContext(); var min = new DateTime(anoInicio, mesInicio, diaInicio); var max = new DateTime(anoFin, mesFin, diaFin, 23, 59, 59); //var builderSaldos = Builders<MovimientosES>.Filter.Eq(x => x.Fecha >= min & x.Fecha <= max & x.Almacen.id == AlmacenId); //MovimientosEsCompletoServer = CollectionMovimientosEs.Find(x => x.Fecha >= min & x.Fecha <= max & x.Almacen.id == AlmacenId).ToList(); FilterDefinition <MovimientosES> builderMovs; FilterDefinition <InventariosSaldos> builderSaldos; List <MovimientosES> MovimientosEsCompletoServer; //Selecciono el filtro articulo if (ArticuloId != null && ArticuloId != "") { //Filtramos todos los documentos donde se encuntra ese articulo builderMovs = Builders <MovimientosES> .Filter.Gte(x => x.Fecha, min) & Builders <MovimientosES> .Filter.Lt(x => x.Fecha, max) & Builders <MovimientosES> .Filter.Eq(x => x.Almacen._id, AlmacenId) & Builders <MovimientosES> .Filter.ElemMatch(l => l.Detalles_ES, l2 => l2.Articulo._id == ArticuloId); //Filtros para seleccioanr solo los movimientos del articulo seleccionado en invetariosaldos builderSaldos = Builders <InventariosSaldos> .Filter.Eq("AlmacenId", AlmacenId) & Builders <InventariosSaldos> .Filter.Eq("ArticuloId", ArticuloId); MovimientosEsCompletoServer = db.MovimientosES.find(builderMovs, db); //Elimina los articulos que no estan includios en el filtros MovimientosEsCompletoServer.ForEach(a => { a.Detalles_ES.RemoveAll(d => d.Articulo._id != ArticuloId); }); } //Selecciono el filtro Sugrupo else if (SubGrupoId != null && SubGrupoId != "") { //Filtramos todos los documentos donde se encuentran articulos que pertenecen al subgrupo seleccionado builderMovs = Builders <MovimientosES> .Filter.Gte(x => x.Fecha, min) & Builders <MovimientosES> .Filter.Lt(x => x.Fecha, max) & Builders <MovimientosES> .Filter.Eq(x => x.Almacen._id, AlmacenId) & Builders <MovimientosES> .Filter.ElemMatch(l => l.Detalles_ES, l2 => l2.Articulo.SubGrupoComponente._id == SubGrupoId); //Filtro todo los movimientos por alamcen builderSaldos = Builders <InventariosSaldos> .Filter.Eq("AlmacenId", AlmacenId); MovimientosEsCompletoServer = db.MovimientosES.find(builderMovs, db); //Elimina los articulos que no pertenecen al subgrupo seleccionado MovimientosEsCompletoServer.ForEach(a => { a.Detalles_ES.RemoveAll(d => d.Articulo.SubGrupoComponente._id != SubGrupoId); }); } //Selecciono el filtro Grupo else if (GrupoId != null && GrupoId != "") { //Filtramos todos los documentos donde se encuentran articulos que pertenecen al subgrupo seleccionado builderMovs = Builders <MovimientosES> .Filter.Gte(x => x.Fecha, min) & Builders <MovimientosES> .Filter.Lt(x => x.Fecha, max) & Builders <MovimientosES> .Filter.Eq(x => x.Almacen._id, AlmacenId) & Builders <MovimientosES> .Filter.ElemMatch(l => l.Detalles_ES, l2 => l2.Articulo.SubGrupoComponente.GrupoComponente._id == GrupoId); //Filtro todo los movimientos por alamcen builderSaldos = Builders <InventariosSaldos> .Filter.Eq("AlmacenId", AlmacenId); MovimientosEsCompletoServer = db.MovimientosES.find(builderMovs, db); //Elimina los articulos que no pertenecen al grupo seleccionado MovimientosEsCompletoServer.ForEach(a => { a.Detalles_ES.RemoveAll(d => d.Articulo.SubGrupoComponente.GrupoComponente._id != GrupoId); }); } else { builderMovs = Builders <MovimientosES> .Filter.Gte(x => x.Fecha, min) & Builders <MovimientosES> .Filter.Lt(x => x.Fecha, max) & Builders <MovimientosES> .Filter.Eq(x => x.Almacen._id, AlmacenId); //Filtro todo los movimientos por alamcen builderSaldos = Builders <InventariosSaldos> .Filter.Eq("AlmacenId", AlmacenId); MovimientosEsCompletoServer = db.MovimientosES.find(builderMovs, db); } //Consultamos la coleccion de invetariosaldos para saber el saldo inicial en una fecha especifica de cada articulo List <InventariosSaldos> InventariosSaldosCompletoServer = db.InventariosSaldos.find(builderSaldos, db); List <KardexArticulos> KardexInventario = new List <KardexArticulos>(); foreach (MovimientosES mov in MovimientosEsCompletoServer.OrderBy(a => a.Fecha).ToList()) { foreach (Detalles_ES detalle in mov.Detalles_ES) { KardexArticulos articulo = new KardexArticulos(); /*Verifica si dentro del kardex ya existen al menos uno movimiento del articulo, si no * es asi agrega el saldo inicial el cual se basa de la existencia. */ if (KardexInventario.Where(a => a.Articulo._id == detalle.Articulo._id).Count() == 0) { KardexArticulos articuloSaldoInicial = new KardexArticulos(); articuloSaldoInicial = saldoInicial(articuloSaldoInicial, DateInicio, InventariosSaldosCompletoServer, mov, detalle, diaInicio, mesInicio, anoInicio, db); KardexInventario.Add(articuloSaldoInicial); } articulo.Almacen = mov.Almacen; articulo.Folio = mov.Folio; articulo.Fecha = mov.Fecha.ToShortDateString().ToString(); articulo.Concepto = mov.Concepto; //Caracteristicas del articulo articulo.Articulo = detalle.Articulo; articulo.SubgrupoComponente = detalle.Articulo.SubGrupoComponente; articulo.GrupoComponente = detalle.Articulo.SubGrupoComponente.GrupoComponente; KardexArticulos articuloAnterior = new KardexArticulos(); articuloAnterior = KardexInventario.Where(x => x.Articulo._id == detalle.Articulo._id).Last(); if (articulo.Concepto.Naturaleza == "ENTRADA") { articulo.EntradaUnidad = detalle.Cantidad; articulo.EntradaCostoUnitario = detalle.Costo; articulo.EntradaCostoTotal = detalle.CostoTotal; articulo.ExistenciaUnidades = articuloAnterior.ExistenciaUnidades + detalle.Cantidad; articulo.ExistenciaCostoTotal = articuloAnterior.ExistenciaCostoTotal + detalle.CostoTotal; } else if (articulo.Concepto.Naturaleza == "SALIDA") { articulo.SalidaUnidad = detalle.Cantidad; articulo.SalidaCostoUnitario = detalle.Costo; articulo.SalidaCostoTotal = detalle.CostoTotal; articulo.ExistenciaUnidades = articuloAnterior.ExistenciaUnidades - detalle.Cantidad; articulo.ExistenciaCostoTotal = articuloAnterior.ExistenciaCostoTotal - detalle.CostoTotal; } KardexInventario.Add(articulo); } } return(KardexInventario.OrderBy(a => a.Almacen.Nombre).OrderBy(a => a.SubgrupoComponente.Nombre).OrderBy(a => a.Articulo.Nombre).ToList()); } catch (Exception ex) { return(null); } }