public CreditContractRepayment(Loan contract, CreditContractOptions creditOptions, DateTime pDate, int pInstallmentNumber, User user, ApplicationSettings pGeneralSettings, NonWorkingDateSingleton pNonWorkingDate) { _generalSettings = pGeneralSettings; _nWds = pNonWorkingDate; _date = pDate.Date; _installmentNumber = pInstallmentNumber; PaidIstallments = new List <Installment>(); _amountToRepayTotalyLoan = new CalculateMaximumAmountToRepayStrategy(creditOptions, contract.Copy(), user, _generalSettings, _nWds); _amountToRegradingLoan = new CalculateMaximumAmountToRegradingLoanStrategy(creditOptions, contract.Copy(), user, _generalSettings, _nWds); _amountToRepayInstallment = new CalculateAmountToRepaySpecifiedInstallmentStrategy(creditOptions, contract.Copy(), user, _generalSettings, _nWds); _calculateInstallments = new Repayment.RepayLateInstallments.CalculateInstallments(creditOptions, contract, user, _generalSettings, _nWds); _calculateRealInterestInstallments = new CalculateRealInterestInstallments(creditOptions, _amountToRepayTotalyLoan, contract, _generalSettings, _nWds); _feesForAnticipatedRepayment = new CalculateAnticipatedFeesStrategy(creditOptions, contract, _generalSettings); _repayNextInstallments = new RepayNextInstallmentsStrategy(contract, creditOptions, user, _generalSettings); _repaymentMethod = new RepaymentMethod(contract, creditOptions); _loan = contract; CalculateMaximumAmountAuthorizedToRepay(); CalculateAmountToRegradingLoan(); CalculateMaximumAmountForEscapedMember(); LoanOptions = creditOptions; }
public void CalculateAnticipatedFees_DontCancelFees_RemainingInterest_KeepExpectedInstallment_OverPaid() { Loan myContract = _SetContract(OAnticipatedRepaymentPenaltiesBases.RemainingInterest, 0.01, true); CalculateAnticipatedFeesStrategy _feesStrategy = _SetFeesCalculationOptions(myContract, false); OCurrency amountPaid = 300, feesEvent = 0; _feesStrategy.calculateFees(new DateTime(2006, 2, 1), ref amountPaid, ref feesEvent); AssertFeesAmount(feesEvent, 0, amountPaid, 300); }
public void CalculateAnticipatedFees_CancelFees_RemainingOLB() { Loan myContract = _SetContract(OAnticipatedRepaymentPenaltiesBases.RemainingOLB, 0.01, true); CalculateAnticipatedFeesStrategy _feesStrategy = _SetFeesCalculationOptions(myContract, true); OCurrency pAmountPaid = 100, pFeesEvent = 0; _feesStrategy.calculateFees(new DateTime(2006, 2, 1), ref pAmountPaid, ref pFeesEvent); AssertFeesAmount(pFeesEvent, 0, pAmountPaid, 100); }
public void CalculateAnticipatedFees_DontCancelFees_KeepNotExpectedInstallment_OverPaid() { Loan myContract = _SetContract(OAnticipatedRepaymentPenaltiesBases.RemainingOLB, 0.01, false, false); CalculateAnticipatedFeesStrategy _feesStrategy = _SetFeesCalculationOptions(myContract, false); OCurrency pAmountPaid = 300, pFeesEvent = 0; _feesStrategy.calculateFees(new DateTime(2006, 2, 1), ref pAmountPaid, ref pFeesEvent); AssertFeesAmount(pFeesEvent, 10, pAmountPaid, 290); }
public void CalculateAnticipatedFees_DontCancelFees_RemainingInterest_OverPaid2() { Loan myContract = _SetContract(OAnticipatedRepaymentPenaltiesBases.RemainingInterest, 0.01, false); CalculateAnticipatedFeesStrategy feesStrategy = _SetFeesCalculationOptions(myContract, false); OCurrency amountPaid = 292, feesEvent = 0; feesStrategy.calculateFees(new DateTime(2006, 2, 1), ref amountPaid, ref feesEvent); //180 * 0.01 = 1.8 => 2 AssertFeesAmount(feesEvent, 2, amountPaid, 290); }
public void CalculateAnticipatedFees_DontCancelFees_RemainingOLB_OverPaid2() { Loan myContract = _SetContract(OAnticipatedRepaymentPenaltiesBases.RemainingOLB, 0.0126, false); CalculateAnticipatedFeesStrategy _feesStrategy = _SetFeesCalculationOptions(myContract, false); OCurrency amountPaid = 300, feesEvent = 0; _feesStrategy.calculateFees(new DateTime(2006, 2, 1), ref amountPaid, ref feesEvent); //1000 * 0.0126 = 12.6 => 13; AssertFeesAmount(feesEvent, 13, amountPaid, 287); }