示例#1
0
        public RescheduleLoanEvent Reschedule(ReschedulingOptions ro, Loan contract, NonWorkingDateSingleton nwdS, ApplicationSettings applicationSettings)
        {
            _contract = contract;
            _nwdS = nwdS;
            _generalSettings = applicationSettings;

            switch (contract.Product.LoanType)
            {
                case OLoanTypes.Flat:
                    _Reschedule_Flat(ro);
                    break;

                case OLoanTypes.DecliningFixedPrincipal:
                    _Reschedule_FixedPrincipal(ro);
                    break;

                case OLoanTypes.DecliningFixedInstallments:
                    _Reschedule_DecliningFixedInstallments(ro);
                    break;
            }

            _Reschedule_AdjustOverpaid();

            RescheduleLoanEvent rSe = new RescheduleLoanEvent
            {
                Date = ro.ReschedulingDate,
                Amount = contract.CalculateActualOlb(),
                Interest = contract.GetTotalInterestDue(),
                ClientType = contract.ClientType,
                BadLoan = contract.BadLoan,
                NbOfMaturity = ro.NewInstallments,
                DateOffset = ro.RepaymentDateOffset,
                GracePeriod = ro.GracePeriod,
                ChargeInterestDuringShift = ro.ChargeInterestDuringShift,
                ChargeInterestDuringGracePeriod = ro.ChargeInterestDuringGracePeriod
            };

            return rSe;
        }