예제 #1
0
        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);
        }