private RepaymentEvent CreateRepaymentEvent(int installmentNumber, DateTime pDate, OCurrency penaltiesEvent, OCurrency commissionsEvent, OCurrency interestEvent, OCurrency interestPrepayment, OCurrency pincipalEvent, int overDueDays, bool isGroup, OPaymentType repaymentType, bool pending) { //We need to generate specific RepaymentEvent in case of bad loan or rescheduled loan RepaymentEvent rPe = !_badLoan && Rescheduled && !_writtenOff ? new RescheduledLoanRepaymentEvent() : (_badLoan && !_writtenOff ? new BadLoanRepaymentEvent() : (_writtenOff ? new RepaymentOverWriteOffEvent() : new RepaymentEvent())); if ((overDueDays > 0 || penaltiesEvent > 0) && !_writtenOff) rPe = new BadLoanRepaymentEvent(); penaltiesEvent = penaltiesEvent > 0 ? penaltiesEvent : (-1.0)*penaltiesEvent; //identification of pending event must be the last action if (pending) rPe = new PendingRepaymentEvent(rPe); rPe.PastDueDays = overDueDays; rPe.InstallmentNumber = installmentNumber; rPe.Date = pDate; rPe.Penalties = penaltiesEvent; rPe.Commissions = commissionsEvent; rPe.Interests = interestEvent; if (_product.LoanType == OLoanTypes.DecliningFixedPrincipalWithRealInterest && repaymentType == OPaymentType.TotalPayment) { repaymentType = OPaymentType.TotalPayment; } else { if (InstallmentList[installmentNumber - 1].ExpectedDate <= pDate) { repaymentType = OPaymentType.StandardPayment; } } rPe.RepaymentType = repaymentType; if(EscapedMember != null) { rPe.RepaymentType = OPaymentType.PersonTotalPayment; } rPe.InterestPrepayment = interestPrepayment; rPe.Principal = pincipalEvent; rPe.Cancelable = true; rPe.ClientType = isGroup ? OClientTypes.Group : OClientTypes.Person; // Test if the client has repaid the total principal, interests and penalties owed at date D // In this case, the loan will be regraded to good loan and provision will be cancelled. if (_badLoan && !pending) _badLoan = _IsBadLoan(rPe, pDate); return rPe; }
private RepaymentEvent GetRepaymentEvent(OpenCbsReader r) { RepaymentEvent e = new RepaymentEvent {Id = r.GetInt("rpe_id")}; switch (r.GetString("event_type")) { case "RBLE": { e = new BadLoanRepaymentEvent {Id = r.GetInt("rpe_id")}; break; } case "RRLE": { e = new RescheduledLoanRepaymentEvent {Id = r.GetInt("rpe_id")}; break; } case "ROWO": { e = new RepaymentOverWriteOffEvent { Id = r.GetInt("rpe_id") }; break; } case "PRLR": { e = new PendingRepaymentEvent(r.GetString("event_type")) {Id = r.GetInt("rpe_id")}; break; } case "PBLR": { e = new PendingRepaymentEvent(r.GetString("event_type")) {Id = r.GetInt("rpe_id")}; break; } case "PRWO": { e = new PendingRepaymentEvent(r.GetString("event_type")) {Id = r.GetInt("rpe_id")}; break; } case "PERE": { e = new PendingRepaymentEvent(r.GetString("event_type")) {Id = r.GetInt("rpe_id")}; break; } } e.Principal = r.GetMoney("rpe_principal"); e.Interests = r.GetMoney("rpe_interests"); e.Penalties = r.GetMoney("rpe_penalties"); e.Commissions = r.GetMoney("rpe_commissions"); e.PastDueDays = r.GetInt("rpe_past_due_days"); e.InstallmentNumber = r.GetInt("rpe_installment_number"); e.PaymentMethodId = r.GetNullInt("rpe_pm"); e.PaymentMethod = e.PaymentMethodId == null ? null : _paymentMethodManager.SelectPaymentMethodById(e.PaymentMethodId.Value); e.CalculatedPenalties = r.GetMoney("rpe_calculated_penalties"); e.WrittenOffPenalties = r.GetMoney("rpe_written_off_penalties"); e.UnpaidPenalties = r.GetMoney("rpe_unpaid_penalties"); e.Code = r.GetString("event_type"); if (e.Code != "RBLE") e.RepaymentType = OPaymentType.StandardPayment; // set type of payment switch (r.GetString("event_type").Trim()) { case "ATR": { e.RepaymentType = OPaymentType.TotalPayment; break; } case "APR": { e.RepaymentType = OPaymentType.PartialPayment; break; } case "APTR": { e.RepaymentType = OPaymentType.PersonTotalPayment; break; } } return e; }