/// <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 mProrrateo() { prorrateoClass cProrrateo = new prorrateoClass(); dtFecha = DateTime.Now; foreach (dynamic result in cProrrateo.GetIndirectCosts(dtFecha.AddMonths(-1))) { int idGasto = result.id_gasto; decimal dTotal = result.Total; decimal dTasaCambio = result.tasa_cambio; int iIdMoneda = result.id_moneda; } foreach (dynamic result in cProrrateo.GetLaborCost(2)) { decimal? dSalary = result.SALARIO; string sCodEmployee = result.PK_COD_EMPLEADO; } }