public InventariosSaldos LlenarObjetoInventartiosSaldos(MovimientosES item, Detalles_ES mov, List <Articulo> ArticuloCompletoServer, List <InventariosSaldos> InventariosSaldosCompletoServer) { ////////////////////////////////////PARA LA TABLA SALDOS////////////////////////////////////////////////////// try { InventariosSaldos Saldo = new InventariosSaldos(); InventariosSaldos SaldoActual = new InventariosSaldos(); mov.Articulo = ArticuloCompletoServer.Find(b => b._id == mov.Articulo._id); SaldoActual = InventariosSaldosCompletoServer.Find(b => b.ArticuloId == mov.Articulo._id && b.AlmacenId == item.Almacen._id && b.Ano == item.Fecha.Year && b.Mes == item.Fecha.Month); if (SaldoActual == null) {//SI ES UN NUEVO REGITRO EN LA TABLA INVENTARIOS SALDOS, ES UNO POR CADA MES DEL AÑO EN LA COMBINACION ARTICULO ALMACEN Saldo.ArticuloId = mov.Articulo._id; Saldo.AlmacenId = item.Almacen._id; Saldo.Ano = item.Fecha.Year; Saldo.Mes = item.Fecha.Month; Saldo.UltimoDia = item.Fecha.Day; if (item.Concepto.Naturaleza == "ENTRADA") { Saldo.EntradaUnidades = mov.Cantidad; Saldo.EntradasCosto = mov.Costo * mov.Cantidad; } else if (item.Concepto.Naturaleza == "SALIDA") { Saldo.SalidasUnidades = mov.Cantidad; Saldo.SalidasCosto = mov.Costo * mov.Cantidad; } return(Saldo); } else { if (item.Fecha.Day > SaldoActual.UltimoDia) { SaldoActual.UltimoDia = item.Fecha.Day; } if (item.Concepto.Naturaleza == "ENTRADA") { SaldoActual.EntradaUnidades += mov.Cantidad; SaldoActual.EntradasCosto += mov.Costo * mov.Cantidad; } else if (item.Concepto.Naturaleza == "SALIDA") { SaldoActual.SalidasUnidades += mov.Cantidad; SaldoActual.SalidasCosto += mov.Costo * mov.Cantidad; } return(SaldoActual); } } catch (Exception ex) { throw; } }
public MovimientosES EntradaInventario(string desc, string concepto, PuntoVenta_Documento item, EmpresaContext db) { try { MovimientosES documentoentrada = new MovimientosES(); documentoentrada.Concepto = db.Concepto.get(concepto, db); ////Concepto de entrada por devolución documentoentrada.Almacen = item.Almacen; documentoentrada.Fecha = DateTime.Now; documentoentrada.Descripcion = desc + item.Folio; documentoentrada.Sistema_Origen = "DEV"; documentoentrada.Cancelado = "NO"; //Separo la fecha del doumento en dia mes y año documentoentrada.Dia = documentoentrada.Fecha.Day; documentoentrada.Mes = documentoentrada.Fecha.Month; documentoentrada.Ano = documentoentrada.Fecha.Year; foreach (PuntoVtaDet detalle in item.PuntoVtaDet) { //Se crea el articulo dentro del documento de salida documentoentrada.Detalles_ES.Add(new Detalles_ES { Articulo = detalle.Articulo, Cantidad = Math.Abs((double)detalle.Cantidad), Clave = detalle.Articulo.Clave, }); } return(documentoentrada); } catch (Exception) { throw; } }
public MovimientosES SalidaInventario(MovimientosES documentosalida, PuntoVenta_Documento item, EmpresaContext db) { try { documentosalida.Cancelado = "NO"; //Separo la fecha del doumento en dia mes y año documentosalida.Dia = item.Fecha.Day; documentosalida.Mes = item.Fecha.Month; documentosalida.Ano = item.Fecha.Year; foreach (PuntoVtaDet detalle in item.PuntoVtaDet) { //Se crea el articulo dentro del documento de salida documentosalida.Detalles_ES.Add(new Detalles_ES { Articulo = detalle.Articulo, Cantidad = Math.Abs((double)detalle.Cantidad), Clave = detalle.Articulo.Clave, }); } return(documentosalida); } catch (Exception) { throw; } }
//Funciones de ayuda public PuntoVenta_Documento CrearInventarioEntrada(string desc, string concepto, string estado, PuntoVenta_Documento item, EmpresaContext db, IClientSessionHandle session = null) { try { PuntoVenta_Documento venta = db.PuntoVenta_Documento.get(item._id, db); if (venta.Estatus == "CANCELADOE" || venta.Estatus == "CANCELADO" || venta.Estatus == "DEVOLUCION") { return(null); } /*Entrada de inventario*/ MovimientosES documentoentrada = EntradaInventario(desc, concepto, venta, db); WcfErp.Servicios.Inventarios.Inventarios inv = new WcfErp.Servicios.Inventarios.Inventarios(); venta.Estatus = estado; inv.add(documentoentrada, db, session); db.PuntoVenta_Documento.update(venta, venta._id, db, session); return(venta); } catch (Exception ex) { Error(ex, ""); return(null); } }
public void InventarioNormal(InventarioFisicoDetalle detalle, MovimientosES documentoEntrada, MovimientosES documentoSalida, EmpresaContext db) { try { if (detalle.Diferencia < 0.0) //Entrada { documentoEntrada.Detalles_ES.Add(new Detalles_ES { Articulo = detalle.Articulo, Cantidad = Math.Abs((double)detalle.Diferencia), Clave = detalle.Articulo.Clave, }); } else if (detalle.Diferencia > 0.0) //Salida { documentoSalida.Detalles_ES.Add(new Detalles_ES { Articulo = detalle.Articulo, Cantidad = Math.Abs((double)detalle.Diferencia), Clave = detalle.Articulo.Clave, }); } } catch (Exception) { throw; } }
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 InventariosCostos LlenarObjetoInventartiosCostos(MovimientosES item, Detalles_ES mov, List <Articulo> ArticuloCompletoServer, List <InventariosCostos> InventariosCostosCompletoServer) { ////////////////////////////////////PARA LA TABLA INVENTARIOSCOSTOS///////////////////////////////////////////// /*------------------- PROMEDIO PONDERADO------------------------*/ InventariosCostos Costo = new InventariosCostos(); InventariosCostos CostoActual = new InventariosCostos(); mov.Articulo = ArticuloCompletoServer.Find(b => b._id == mov.Articulo._id); CostoActual = InventariosCostosCompletoServer.Find(b => b.ArticuloId == mov.Articulo._id && b.AlmacenId == item.Almacen._id); Costo.ArticuloId = mov.Articulo._id; Costo.AlmacenId = item.Almacen._id; Costo.Fecha = item.Fecha; if (CostoActual == null) // SI ES LA PRIMERA ENTRADA X ARTICULO Y ALMACEN,SI ES UN NUEVO REGITRO EN LA TABLA INVENTARIOS COSTOS, { if (item.Concepto.Naturaleza == "ENTRADA") //Revisar si es un documento de entrada o de salida { if (item.Concepto.CostoAutomatico == "NO") // SI NO ES COSTO AUTOMATICO: ya que es la primera entrada de costo se multiplica la cantidad de entrada del articulo * el costo que viene desde el cliente { mov.CostoTotal = mov.Cantidad * mov.Costo; Costo.ValorTotal = mov.CostoTotal; } else if (item.Concepto.CostoAutomatico == "SI") // SI ES COSTO AUTOMATICO: YA QUE ES LA PRIMERA ENTRADA SE LE ASIGNA 0.00 YA QUE NO HAY REGISTRO DE COSTOS { mov.CostoTotal = 0.00; Costo.ValorTotal = mov.CostoTotal; } Costo.Existencia = mov.Cantidad; } else if (item.Concepto.Naturaleza == "SALIDA") { if (item.Concepto.CostoAutomatico == "NO") // SI NO ES COSTO AUTOMATICO: ya que es la primera entrada de costo se multiplica la cantidad de entrada del articulo * el costo que viene desde el cliente { mov.CostoTotal = mov.Cantidad * mov.Costo; Costo.ValorTotal -= mov.CostoTotal; } else if (item.Concepto.CostoAutomatico == "SI") // SI ES COSTO AUTOMATICO: YA QUE ES LA PRIMERA ENTRADA SE LE ASIGNA 0.00 YA QUE NO HAY REGISTRO DE COSTOS { mov.CostoTotal = 0.00; Costo.ValorTotal -= mov.CostoTotal; } Costo.Existencia -= mov.Cantidad; } Costo.CapaAgotada = Costo.Existencia <= 0 ? "SI" : "NO"; return(Costo); } else // EN CASO DE QUE NO SEA EL PRIMER MOVIMIENTO EN LA TABLA INVENTARIOSCOSTOS { if (item.Concepto.Naturaleza == "ENTRADA") { if (item.Concepto.CostoAutomatico == "SI")// SI ES COSTO AUTOMATICO { mov.CostoTotal = CostoActual.ValorTotal > 0 ? (CostoActual.ValorTotal / CostoActual.Existencia) * mov.Cantidad : 0.00; mov.Costo = CostoActual.ValorTotal > 0 ? (CostoActual.ValorTotal / CostoActual.Existencia) : 0.00; CostoActual.Existencia = CostoActual.Existencia + mov.Cantidad; CostoActual.ValorTotal = CostoActual.ValorTotal + mov.CostoTotal; } else if (item.Concepto.CostoAutomatico == "NO") { mov.CostoTotal = mov.Cantidad * mov.Costo; CostoActual.Existencia = CostoActual.Existencia + mov.Cantidad; CostoActual.ValorTotal = CostoActual.ValorTotal + mov.CostoTotal; } CostoActual.CapaAgotada = CostoActual.Existencia <= 0 ? "SI" : "NO"; } else if (item.Concepto.Naturaleza == "SALIDA") { if (item.Concepto.CostoAutomatico == "SI") // SI ES COSTO AUTOMATICO { mov.CostoTotal = CostoActual.Existencia > 0 ? (CostoActual.ValorTotal / CostoActual.Existencia) * mov.Cantidad : 0.00; //SI EL VALOR TOTAL DE LA CAPA mov.Costo = CostoActual.Existencia > 0 ? (CostoActual.ValorTotal / CostoActual.Existencia) : 0.00; CostoActual.Existencia = CostoActual.Existencia > 0 ? CostoActual.Existencia - mov.Cantidad : 0.00; CostoActual.ValorTotal = CostoActual.Existencia > 0 ? CostoActual.ValorTotal - mov.CostoTotal : 0.00; } else if (item.Concepto.CostoAutomatico == "NO") { mov.CostoTotal = mov.Cantidad * mov.Costo; CostoActual.Existencia = CostoActual.Existencia - mov.Cantidad; CostoActual.ValorTotal = CostoActual.ValorTotal - mov.CostoTotal; } CostoActual.CapaAgotada = CostoActual.Existencia <= 0 ? "SI" : "NO"; } return(CostoActual); } }
public MovimientosES add(MovimientosES item, EmpresaContext db, IClientSessionHandle session = null) { try { item.Concepto = db.Concepto.getbyFields(item.Concepto.id, "_id,Clave,Nombre,Naturaleza,CostoAutomatico,FolioAutomatico", db); item.Almacen = db.Almacen.getbyFields(item.Almacen.id, "_id,Nombre", db); if (item.Concepto.FolioAutomatico == "SI") { if (item.Concepto.Clave == null) { throw new Exception("El concepto seleccionado no tiene una clave asignada"); } item.Folio = AutoIncrement(item.Concepto.Clave, db.db, session).ToString(); } //Genera filtros para busqueda var builderSaldos = Builders <InventariosSaldos> .Filter; var builderCostos = Builders <InventariosCostos> .Filter; var Ids = (from an in item.Detalles_ES select an.Articulo).ToList().Select(ab => ab._id); //recolectamos en una lista los ids que nos manda el cliente var filter = Builders <Articulo> .Filter.In(myClass => myClass._id, Ids); //creamos un filtro con la clapsula In //Realizamos una sola query a la bd obteniendo solo datos necesarios (en este caso solo el nombre,id y unidad de inventario) para hacerla lo mas liviana List <Articulo> ArticuloCompletoServer = db.Articulo.Filters(filter, "Nombre,Clave,UnidadInventario.Abreviatura,SubGrupoComponente"); List <InventariosSaldos> InventariosSaldosCompletoServer = db.InventariosSaldos.Filters(builderSaldos.In("ArticuloId", Ids) & builderSaldos.Eq("AlmacenId", item.Almacen._id)); List <InventariosCostos> InventariosCostosCompletoServer = db.InventariosCostos.Filters(builderCostos.In("ArticuloId", Ids) & builderCostos.Eq("AlmacenId", item.Almacen._id)); item.Sistema_Origen = "IN"; item.Cancelado = "NO"; item.Fecha = item.Fecha.Date < DateTime.Now.Date ? item.Fecha.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute).AddSeconds(DateTime.Now.Second) : item.Fecha; item.Ano = item.Fecha.Year; item.Mes = item.Fecha.Month; item.Dia = item.Fecha.Day; var updatesSaldos = new List <WriteModel <InventariosSaldos> >(); var updatesCostos = new List <WriteModel <InventariosCostos> >(); item.ValidarModel(item); //Revisar reglas de validacion para el documento foreach (Detalles_ES mov in item.Detalles_ES) { mov.Articulo = ArticuloCompletoServer.Find(b => b._id == mov.Articulo._id); //PRIMERO SE SE LLENA LA COLECCION INVENTARIOS COSTOS ANTES QUE INVENTARIOS SALDOS. InventariosCostos invcosto = LlenarObjetoInventartiosCostos(item, mov, ArticuloCompletoServer, InventariosCostosCompletoServer); InventariosSaldos invsaldo = LlenarObjetoInventartiosSaldos(item, mov, ArticuloCompletoServer, InventariosSaldosCompletoServer); var filtercostos = Builders <InventariosCostos> .Filter.Eq(s => s._id, invcosto._id); var filtersaldos = Builders <InventariosSaldos> .Filter.Eq(s => s._id, invsaldo._id); if (!(invcosto._id == null || invcosto._id == "")) { updatesCostos.Add(new ReplaceOneModel <InventariosCostos>(filtercostos, invcosto) { IsUpsert = true }); } else { updatesCostos.Add(new InsertOneModel <InventariosCostos>(invcosto)); } //si no existe un registro en la coleccion inventarios saldos de la combinacion articulo almacen crea uno nuevo de lo contrario hace un update al existente if (!(invsaldo._id == null || invsaldo._id == "")) { updatesSaldos.Add(new ReplaceOneModel <InventariosSaldos>(filtersaldos, invsaldo) { IsUpsert = true }); } else { updatesSaldos.Add(new InsertOneModel <InventariosSaldos>(invsaldo)); } } db.InventariosCostos.updateMany(updatesCostos, db, session); db.InventariosSaldos.updateMany(updatesSaldos, db, session); db.MovimientosES.add(item, db, session); // SI ES UN TRASPASO DE SALIDA VOLVEMOS A LLAMAR EL METODO ADD PARA DAR ENTRADA AL ALMACEN DE DESTINO if (item.Concepto._id == "5c59c84f6886742388d9bbcc") { item.Almacen_Destino = db.Almacen.getbyFields(item.Almacen_Destino._id, "_id,Nombre", db); item._id = null; item.Concepto._id = "5c59d6c16886742450e4527f"; item.Almacen._id = item.Almacen_Destino._id; item.Almacen_Destino = item.Almacen; add(item, db, session); } return(item); } catch (Exception) { throw; } }
//creación de la cancelación public List <PuntoVenta_Documento> CrearCancelacionMerma(ListaPuntoVenta_Documento lista) { try { List <PuntoVenta_Documento> items = lista.PuntoVenta_Documentos; if (items.Count == 0) { throw new Exception("Se debe de seleccionar al menos una venta."); } string vtaCan = ""; EmpresaContext db = new EmpresaContext(); using (var session = db.client.StartSession()) { session.StartTransaction(); //CREACIÓN DEL DOCUMENTO DE SALIDA //crear inventario de salida MovimientosES documentosalida = new MovimientosES(); documentosalida.Concepto = db.Concepto.get(ConceptoRandom(), db); ////Concepto de salida por venta de mostrador documentosalida.Descripcion = "Salida de inventario por " + documentosalida.Concepto.Nombre; documentosalida.Sistema_Origen = "CAN"; documentosalida.Cancelado = "NO"; documentosalida.Almacen = db.Almacen.get("5c93c7917d7b3011b8ea951e", db); //PREGUNTAR POR ALMACEN documentosalida.Fecha = DateTime.Now; foreach (PuntoVenta_Documento item in items) { //ENTRADA DE LOS ARTICULOS DE LOS TICKETS CANCELADOS PuntoVenta_Documento venta = db.PuntoVenta_Documento.get(item._id, db); venta = CrearInventarioEntrada("Entrada de inventario por cancelación de venta de mostrador con el Folio ", "5dfd238d2938b553f0198f2d", "CANCELADOE", venta, db, session); if (venta == null) { vtaCan = item.Folio + ","; } else { //documentosalida = SalidaInventario(documentosalida, venta, db); foreach (PuntoVtaDet detalle in venta.PuntoVtaDet) { //Se crea el articulo dentro del documento de salida documentosalida.Detalles_ES.Add(new Detalles_ES { Articulo = detalle.Articulo, Cantidad = Math.Abs((double)detalle.Cantidad), Clave = detalle.Articulo.Clave, }); } } } documentosalida.Cancelado = "NO"; //Separo la fecha del doumento en dia mes y año DateTime fecha = DateTime.Now; documentosalida.Dia = documentosalida.Fecha.Day; documentosalida.Mes = documentosalida.Fecha.Month; documentosalida.Ano = documentosalida.Fecha.Year; //documentos de salida e inventario de salida - guardado WcfErp.Servicios.Inventarios.Inventarios inv = new WcfErp.Servicios.Inventarios.Inventarios(); inv.add(documentosalida, db, session); session.CommitTransaction(); } if (vtaCan != "") { throw new Exception("Las ventas con los siguientes folios no se pudieron cancelar ya que ya se encuntran canceladas: " + vtaCan.Remove(vtaCan.Length - 1)); } return(items); } catch (Exception ex) { Error(ex, ""); return(null); } }
//agrega una compra public override PuntoVenta_Documento add(PuntoVenta_Documento item) { try { EmpresaContext db = new EmpresaContext(); using (var session = db.client.StartSession()) { session.StartTransaction(); item.Folio = AutoIncrement("Ticket", db.db, session).ToString(); /*Colocar el tipo de cambio dependiendo de la moneda*/ var builder = Builders <TipodeCambio> .Sort; var filter = builder.Descending("Fecha"); List <TipodeCambio> Lst_Tipos = db.TipodeCambio.Filters(filter); String monedaAnterior = ""; foreach (PuntoVtaCobros cobro in item.PuntoVtaCobros) { Boolean entro = false; String moneda = "MXN"; if (cobro.Tipo.Contains("DLS")) { moneda = "DLS"; } foreach (TipodeCambio cambio in Lst_Tipos) { if (monedaAnterior != moneda) { entro = false; } if (cambio.Moneda.Simbolo == moneda && entro == false) { cobro.TipodeCambio = cambio; entro = true; monedaAnterior = moneda; } } } /*Salida de inventario*/ MovimientosES documentosalida = new MovimientosES(); documentosalida.Concepto = db.Concepto.get("5d4cbb5d92a3d9c568660d2a", db); ////Concepto de salida por venta de mostrador documentosalida.Descripcion = "Salida de inventario de venta de mostrador con el Folio " + item.Folio; documentosalida.Sistema_Origen = "PV"; documentosalida.Cancelado = "NO"; documentosalida.Almacen = item.Almacen; documentosalida.Fecha = item.Fecha; documentosalida = SalidaInventario(documentosalida, item, db); WcfErp.Servicios.Inventarios.Inventarios inv = new WcfErp.Servicios.Inventarios.Inventarios(); inv.add(documentosalida, db, session); db.PuntoVenta_Documento.add(item, db, session); session.CommitTransaction(); } return(item); } catch (Exception ex) { Error(ex, ""); return(null); } }
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); } }