예제 #1
0
        /// <summary>
        /// Calculate amoritized capital service costs
        /// </summary>
        /// <param name="calculatorType"></param>
        /// <param name="i"></param>
        /// <param name="timePeriods"></param>
        /// <param name="plannedUsePeriods"></param>
        /// <param name="usefulLifePeriods"></param>
        /// <param name="realRate"></param>
        /// <param name="timeType"></param>
        /// <param name="sumCosts"></param>
        /// <param name="sumOutputs"></param>
        /// <param name="amortizedAvgCostperPeriod"></param>
        public static void CalcAmortizdServiceCosts(AgBudgetingHelpers.CALCULATOR_TYPES calculatorType,
                                                    int i, int timePeriods, int plannedUsePeriods, int usefulLifePeriods,
                                                    double realRate, GeneralRules.TIME_TYPES timeType, double sumCosts, double sumOutputs,
                                                    out double amortizedAvgCostperPeriod)
        {
            amortizedAvgCostperPeriod = 0;
            double dbAnnuityFactor = 0;

            //new machinery
            if (timePeriods > 1)
            {
                //convert to annuity
                dbAnnuityFactor = GeneralRules.CapRecovFactor(timePeriods, realRate, 0);
                sumCosts        = sumCosts * dbAnnuityFactor;
                if (timeType == GeneralRules.TIME_TYPES.costsvary)
                {
                    amortizedAvgCostperPeriod = sumCosts / plannedUsePeriods;
                }
                else if (timeType == GeneralRules.TIME_TYPES.costsandoutputsvary)
                {
                    if (sumOutputs == 0)
                    {
                        //shouldn't be using outputs
                        amortizedAvgCostperPeriod = sumCosts / plannedUsePeriods;
                    }
                    else
                    {
                        amortizedAvgCostperPeriod = sumCosts / (sumOutputs / timePeriods);
                    }
                }
            }
            else
            {
                if ((i == 3) && (calculatorType == AgBudgetingHelpers.CALCULATOR_TYPES.agmachinery))
                {
                    amortizedAvgCostperPeriod = sumCosts / usefulLifePeriods;
                }
                else
                {
                    amortizedAvgCostperPeriod = sumCosts / plannedUsePeriods;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Calculate used machinery repair costs
        /// </summary>
        /// <param name="calculatorType"></param>
        /// <param name="timeUsed"></param>
        /// <param name="timePeriods"></param>
        /// <param name="plannedUsePeriods"></param>
        /// <param name="startingPeriods"></param>
        /// <param name="remainingPeriods"></param>
        /// <param name="realRate"></param>
        /// <param name="inflationRate"></param>
        /// <param name="timeType"></param>
        /// <param name="RF1"></param>
        /// <param name="RF2"></param>
        /// <param name="OC3Amount"></param>
        /// <param name="sumCosts"></param>
        /// <param name="sumOutputs"></param>
        /// <param name="sumUsedCost"></param>
        /// <param name="amortizedAvgCostperPeriod"></param>
        public static void CalcUsedMachineryRepairCosts(AgBudgetingHelpers.CALCULATOR_TYPES calculatorType, int timeUsed, int timePeriods, int plannedUsePeriods,
                                                        int startingPeriods, int remainingPeriods, double realRate, double inflationRate, GeneralRules.TIME_TYPES timeType,
                                                        double RF1, double RF2, double OC3Amount, double sumCosts, double sumOutputs, double sumUsedCost,
                                                        out double amortizedAvgCostperPeriod)
        {
            amortizedAvgCostperPeriod = 0;
            double dbAnnuityFactor = 0;

            //repair costs for used machinery
            if (timePeriods > 1)
            {
                //only difference is the period over which the amortization takes place -note: this is ad hoc
                //sumCosts = sumCosts;
                //amortize this remainder over the remaining service life of the equipment
                dbAnnuityFactor = GeneralRules.CapRecovFactor((timePeriods - timeUsed), realRate, 0);
                sumCosts        = sumCosts * dbAnnuityFactor;
                if (timeType == GeneralRules.TIME_TYPES.costsvary)
                {
                    amortizedAvgCostperPeriod = sumCosts / plannedUsePeriods;
                }
                else if (timeType == GeneralRules.TIME_TYPES.costsandoutputsvary)
                {
                    if (sumOutputs == 0)
                    {
                        //shouldn't be using outputs
                        amortizedAvgCostperPeriod = sumCosts / plannedUsePeriods;
                    }
                    else
                    {
                        //simple avg unit cost - or use a particular year in ui
                        amortizedAvgCostperPeriod = sumCosts / (sumOutputs / timePeriods);
                    }
                }
                else
                {
                    //the used costs will not have been set in for...next loop, set it here
                    if (calculatorType == AgBudgetingHelpers.CALCULATOR_TYPES.agmachinery)
                    {
                        sumUsedCost = (((RF1 * OC3Amount) * System.Math.Pow((startingPeriods / 1000.00), RF2))) * (1 + inflationRate);
                        amortizedAvgCostperPeriod = (sumCosts - sumUsedCost) / remainingPeriods;
                    }
                    else
                    {
                        amortizedAvgCostperPeriod = (sumCosts) / plannedUsePeriods;
                    }
                }
            }
            else
            {
                //12/9 : the costsdonotvary sets timeperiod to 1
                //the used costs will not have been set in for...next loop, set it here
                if (calculatorType == AgBudgetingHelpers.CALCULATOR_TYPES.agmachinery)
                {
                    sumUsedCost = (((RF1 * OC3Amount) * System.Math.Pow((startingPeriods / 1000.00), RF2))) * (1 + inflationRate);
                    amortizedAvgCostperPeriod = (sumCosts - sumUsedCost) / remainingPeriods;
                }
                else
                {
                    amortizedAvgCostperPeriod = (sumCosts) / plannedUsePeriods;
                }
            }
        }