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); }
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); }