Пример #1
0
        public void CalculatePastDueSinceLastRepayment()
        {
            _myContract.Disburse(new DateTime(2006, 1, 1), true, false);

            Assert.AreEqual(0, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 2, 1)));
            Assert.AreEqual(3, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 2, 4)));
            Assert.AreEqual(28, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 1)));

            _myContract.Repay(1, new DateTime(2006, 2, 3), 30, true, false); //repay tottaly the first installment

            Assert.AreEqual(0, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 2, 4)));
            Assert.AreEqual(3, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 4)));

            _myContract.Repay(2, new DateTime(2006, 3, 1), 200, true, false); //repay partially the second installment (200 instead of 230)

            Assert.AreEqual(0, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 1)));
            Assert.AreEqual(3, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 4)));

            _myContract.Repay(2, new DateTime(2006, 3, 1), 30, true, false); //repay tottaly the second installment

            Assert.AreEqual(0, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 1)));
            Assert.AreEqual(0, _myContract.CalculatePastDueSinceLastRepayment(new DateTime(2006, 3, 4)));
        }
Пример #2
0
        public static OCurrency FeesBasedOnInitialAmount(Loan pContract, DateTime pDate, int pInstallmentNumber, bool pForClosure,
            ApplicationSettings pGeneralSettings, NonWorkingDateSingleton pNonWorkingDate)
        {
            if (pContract.NonRepaymentPenalties.InitialAmount != 0)
            {
                int pastDueDays = pForClosure ? pContract.CalculatePastDueForClosure(pDate) : pContract.CalculatePastDueSinceLastRepayment(pDate);
                pastDueDays = _CalculatePastDueWithGeneralParameterForRepayment(pastDueDays, pGeneralSettings);
                if (pContract.GracePeriodOfLateFees >= pastDueDays)
                {
                    pastDueDays = 0;
                }
                OCurrency fees = pContract.Amount * Convert.ToDecimal(pContract.NonRepaymentPenalties.InitialAmount) * (double)pastDueDays;

                OCurrency amount = pContract.UseCents ? Math.Round(fees.Value, 2, MidpointRounding.AwayFromZero) : Math.Round(fees.Value, 0, MidpointRounding.AwayFromZero);

                if (pContract.WrittenOff && pGeneralSettings.IsStopWriteOffPenalty)
                    amount = 0;
                return amount;
            }
            return 0;
        }
        public static OCurrency FeesBasedOnInitialAmount(Loan pContract, DateTime pDate, int pInstallmentNumber, bool pForClosure,
                                                         ApplicationSettings pGeneralSettings, NonWorkingDateSingleton pNonWorkingDate)
        {
            if (pContract.NonRepaymentPenalties.InitialAmount != 0)
            {
                int pastDueDays = pForClosure ? pContract.CalculatePastDueForClosure(pDate) : pContract.CalculatePastDueSinceLastRepayment(pDate);
                pastDueDays = _CalculatePastDueWithGeneralParameterForRepayment(pastDueDays, pGeneralSettings);
                if (pContract.GracePeriodOfLateFees >= pastDueDays)
                {
                    pastDueDays = 0;
                }
                OCurrency fees = pContract.Amount * Convert.ToDecimal(pContract.NonRepaymentPenalties.InitialAmount) * (double)pastDueDays;

                OCurrency amount = pContract.UseCents ? Math.Round(fees.Value, 2, MidpointRounding.AwayFromZero) : Math.Round(fees.Value, 0, MidpointRounding.AwayFromZero);

                if (pContract.WrittenOff && pGeneralSettings.IsStopWriteOffPenalty)
                {
                    amount = 0;
                }
                return(amount);
            }
            return(0);
        }