Example #1
0
        private CalculateInstallmentPlanRequestCS AppendFees(CalculateInstallmentPlanRequestCS request, ArrangementRequest arrangementRequest)
        {
            // TODO Trigger price presentation before appending fees
            var fees = arrangementRequest?.Conditions.Fees;

            var originationFee = fees.FirstOrDefault(f => f.Kind == FeeConditionKind.OriginationFee);

            if (originationFee != null)
            {
                request.OriginationFeeFixedAmount = (double)originationFee.CalculatedFixedAmount;
                // request.OriginationFeeFixedAmountLcl ???
                request.OriginationFeeLowerLimit = (double)originationFee.CalculatedLowerLimit;
                //request.OriginationFeeLowerLimitLclValAmount
                request.OriginationFeeUpperLimit = (double)originationFee.CalculatedUpperLimit;
                //request.OriginationFeeUpperLimitLclValAmount
                request.OriginationFeePercentage = (double)originationFee.CalculatedPercentage;
                //request.OriginationFeeCapitalization
            }

            var managementFee = fees.FirstOrDefault(f => f.Kind == FeeConditionKind.ManagementFee);

            if (managementFee != null)
            {
                // TODO resolve this fields
                //request.ExcludeManagementFeeFromEAPR
                //request.FirstManagementFeeDate
                //request.IncludeManagementFeeInAnnuity
                switch (managementFee.Frequency)
                {
                case FeeConditionFrequency.Monthly:
                    request.ManagementFeeCalculationFrequencyPeriod = 1;
                    break;

                case FeeConditionFrequency.Quarterly:
                    request.ManagementFeeCalculationFrequencyPeriod = 3;
                    break;

                case FeeConditionFrequency.Semiyearly:
                    request.ManagementFeeCalculationFrequencyPeriod = 6;
                    break;

                case FeeConditionFrequency.Yearly:
                    request.ManagementFeeCalculationFrequencyPeriod = 12;
                    break;

                default:
                    // TODO What to do if it is event trigered or something similar? (invalid data so maybe throw an error?s)
                    request.ManagementFeeCalculationFrequencyPeriod = 12;
                    break;
                }
                request.ManagementFeeCalculationFrequencyUnitOfTime = CalculationService.Services.SimpleUnitOfTime.M;
                request.ManagementFeeLowerLimit = (double)managementFee.CalculatedLowerLimit;
                request.ManagementFeePercentage = (double)managementFee.CalculatedPercentage;
            }
            return(request);
        }
Example #2
0
 private CalculateInstallmentPlanRequestCS AppendPredefinedPeriods(
     CalculateInstallmentPlanRequestCS request, ArrangementRequest arrangementRequest)
 {
     // TODO Chech this hardcoded cast
     if (arrangementRequest is TermLoanRequest termLoanRequest)
     {
         if (termLoanRequest.GracePeriod != null && termLoanRequest.GracePeriodStartDate != null)
         {
             request.GracePeriodEnd = Utility.GetEndDateFromPeriod(termLoanRequest.GracePeriod, termLoanRequest.GracePeriodStartDate);
         }
         if (termLoanRequest.DrawdownPeriod != null && termLoanRequest.DrawdownPeriodStartDate != null)
         {
             request.DrawdownPeriodEnd = Utility.GetEndDateFromPeriod(termLoanRequest.DrawdownPeriod, termLoanRequest.DrawdownPeriodStartDate);
         }
     }
     return(request);
 }