/// <summary> /// Metodo para distribuir equitativamente los gastos indirectos de fabricacion de una orden de produccion /// </summary> /// <param name="dtFechaProduccion">Representa la fecha para calcular los gastos de una produccion</param> /// <param name="idProduccionProd">Identificador único para orden de produccion</param> public void mProrrateo(DateTime dtFechaProduccion, int idProduccionProd) { decimal dCantidadTotal = 0; bool bIndirectCost = true; prorrateoClass cProrrateo = new prorrateoClass(); IQueryable iqIndirectCosts = cProrrateo.GetIndirectCosts(dtFechaProduccion.AddMonths(-1)); IQueryable iqLaborCost = cProrrateo.GetLaborCost(2); IQueryable iqProductionItems = cProrrateo.GetProductionItems(idProduccionProd); foreach (dynamic result in iqProductionItems) { dCantidadTotal += result.cantidad; } if (dCantidadTotal == 0) throw new Exception("No hay items a producir en esta produccion."); foreach (dynamic result in iqProductionItems) { int iCodProducto = result.cod_producto; decimal dQuantity = result.cantidad; foreach (dynamic resultIC in iqIndirectCosts) { int idGasto = resultIC.id_gasto; decimal dTotal = resultIC.Total; decimal dTasaCambio = resultIC.tasa_cambio; int iIdMoneda = resultIC.id_moneda; decimal dNoFactura = resultIC.no_factura; string sSerie = resultIC.Serie; cProrrateo.SaveIndirectCostDetails(idProduccionProd, iCodProducto, iIdMoneda, decimal.Round((dQuantity*(dTotal/dCantidadTotal)),6,MidpointRounding.AwayFromZero), dTasaCambio, idGasto, dNoFactura, sSerie); bIndirectCost = false; } if (bIndirectCost) throw new Exception("No hay items a producir en esta produccion."); } foreach (dynamic result in iqProductionItems) { int iCodProducto = result.cod_producto; decimal dQuantity = result.cantidad; foreach (dynamic resultIC in iqLaborCost) { string sCodPuesto = resultIC.codPuesto; decimal dTotal = resultIC.Total; cProrrateo.SaveIndirectLaborCostDetails(idProduccionProd, iCodProducto,sCodPuesto, decimal.Round((dQuantity * (dTotal / dCantidadTotal)), 6, MidpointRounding.AwayFromZero)); bIndirectCost = false; } if (bIndirectCost) throw new Exception("No hay items a producir en esta produccion."); } }
public void SavePrecio(int idProduccion) { prorrateoClass pcClass = new prorrateoClass(); IQueryable iqProductionItems = pcClass.GetProductionItems(idProduccion); foreach (dynamic result in iqProductionItems) { int iCodProducto = result.cod_producto; decimal dQuantity = result.cantidad; decimal dTotalGi = 0; decimal dTotalMp = 0; decimal dTotalHh = 0; decimal dTotalLc = 0; IQueryable Gi = giClass.GetGi(idProduccion, iCodProducto); IQueryable Mp = giClass.GetMp(idProduccion, iCodProducto); IQueryable Hh = giClass.GetHh(idProduccion, iCodProducto); IQueryable Lc = giClass.GetIl(idProduccion, iCodProducto); foreach (dynamic resultDetail in Gi) { dTotalGi += resultDetail.Total; } foreach (dynamic resultDetail in Mp) { dTotalMp += resultDetail.Total; } foreach (dynamic resultDetail in Hh) { dTotalHh += resultDetail.Total; } foreach (dynamic resultDetail in Lc) { dTotalLc += resultDetail.Total; } decimal precioUnitario = (dTotalGi + dTotalMp + dTotalHh + dTotalLc) / dQuantity; giClass.SavePrecio(idProduccion,iCodProducto,precioUnitario); } }