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 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); } }