コード例 #1
0
ファイル: prorrateoController.cs プロジェクト: daguilae/MRP
        /// <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.");
            }
        }
コード例 #2
0
        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);
            }
        }