public RepaymentEvent CopyAsRepaymentEvent()
        {
            RepaymentEvent rPe;

            if (Code == "PBLR")
            {
                rPe = new BadLoanRepaymentEvent();
            }
            else if (Code == "PRWO")
            {
                rPe = new RepaymentOverWriteOffEvent();
            }
            else
            {
                rPe = new RepaymentEvent();
            }

            rPe.AccruedInterest    = this.AccruedInterest;
            rPe.Cancelable         = this.Cancelable;
            rPe.ClientType         = this.ClientType;
            rPe.Commissions        = this.Commissions;
            rPe.Date               = this.Date;
            rPe.InstallmentNumber  = this.InstallmentNumber;
            rPe.InterestPrepayment = this.InterestPrepayment;
            rPe.Interests          = this.Interests;
            rPe.PastDueDays        = this.PastDueDays;
            rPe.Penalties          = this.Penalties;
            rPe.Principal          = this.Principal;
            rPe.RepaymentType      = this.RepaymentType;

            return(rPe);
        }
Esempio n. 2
0
        public RepaymentEvent CopyAsRepaymentEvent()
        {
            RepaymentEvent rPe;

            if (Code == "PRLR")
                rPe = new RescheduledLoanRepaymentEvent();
            else if (Code == "PBLR")
                rPe = new BadLoanRepaymentEvent();
            else if (Code == "PRWO")
                rPe = new RepaymentOverWriteOffEvent();
            else
                rPe = new RepaymentEvent();

            rPe.AccruedInterest = this.AccruedInterest;
            rPe.Cancelable = this.Cancelable;
            rPe.ClientType = this.ClientType;
            rPe.Commissions = this.Commissions;
            rPe.Date = this.Date;
            rPe.InstallmentNumber = this.InstallmentNumber;
            rPe.InterestPrepayment = this.InterestPrepayment;
            rPe.Interests = this.Interests;
            rPe.PastDueDays = this.PastDueDays;
            rPe.Penalties = this.Penalties;
            rPe.Principal = this.Principal;
            rPe.RepaymentType = this.RepaymentType;

            return rPe;
        }
Esempio n. 3
0
 public PendingRepaymentEvent(RepaymentEvent pEvent)
 {
     if (pEvent is BadLoanRepaymentEvent)
         Code = "PBLR";
     else if (pEvent is RepaymentOverWriteOffEvent)
         Code = "PRWO";
     else
         Code = "PERE";
 }
Esempio n. 4
0
 public void TestEventCopy()
 {
     RepaymentEvent rE = new RepaymentEvent{InstallmentNumber = 1,Principal = 100,Interests = 230,Commissions = 4,Penalties = 0,ClientType = OClientTypes.Group};
     RepaymentEvent rEFakeCopy = rE;
     RepaymentEvent rECopy = rE.Copy() as RepaymentEvent;
     rE.Principal = 3456;
     Assert.AreEqual(3456m,rEFakeCopy.Principal.Value);
     Assert.AreEqual(100m,rECopy.Principal.Value);
 }
 public PendingRepaymentEvent(RepaymentEvent pEvent)
 {
     if (pEvent is BadLoanRepaymentEvent)
     {
         Code = "PBLR";
     }
     else if (pEvent is RepaymentOverWriteOffEvent)
     {
         Code = "PRWO";
     }
     else
     {
         Code = "PERE";
     }
 }
Esempio n. 6
0
        public void Add_RepaymentEvent()
        {
            EventManager eventManager = (EventManager)container["EventManager"];

            RepaymentEvent repaymentEvent = new RepaymentEvent
            {
                Id = 13,
                User = new User { Id = 1 },
                Date = new DateTime(2006, 7, 21),
                PastDueDays = 3,
                Principal = 1999,
                Interests = 2333,
                Commissions = 23,
                InstallmentNumber = 3,
                PaymentMethod = new PaymentMethod(1, "Cash", "", false)
            };
            using(SqlTransaction tran = eventManager.GetConnection().BeginTransaction())
                eventManager.AddLoanEvent(repaymentEvent, 1, tran);

            Assert.AreNotEqual(0, repaymentEvent.Id);
        }
Esempio n. 7
0
        public List<SavingEvent> RepayLoanFromSaving(Loan loan,
                                                     RepaymentEvent repaymentEvent, 
                                                     ISavingsContract savingsContract, 
                                                     DateTime date, 
                                                     OCurrency amount, 
                                                     string description, 
                                                     SqlTransaction sqlTransaction)
        {
            if (savingsContract.GetBalance() - amount < 0)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.WithdrawAmountIsInvalid);

            User user = User.CurrentUser;
            Teller teller = Teller.CurrentTeller;

            if (date.Hour == 0
                && date.Minute == 0
                && date.Second == 0)
            {
                date = new DateTime(date.Year, date.Month, date.Day, TimeProvider.Now.Hour, TimeProvider.Now.Minute,
                                    TimeProvider.Now.Second);
            }

            ISavingsContract savingSimulation = (ISavingsContract) savingsContract.Clone();
            savingSimulation.RepayLoanFromSaving(loan, repaymentEvent.Id, date, amount, description, user, teller);

            List<SavingEvent> events = savingsContract.RepayLoanFromSaving(loan, repaymentEvent.Id, date, amount,
                                                                           description, user, teller);
            foreach (SavingEvent savingEvent in events)
            {
                _ePS.FireEvent(savingEvent, savingsContract, sqlTransaction);
            }

            return events;
        }
Esempio n. 8
0
        private EventStock GenerateRepaymentEvents(CreditContractRepayment cCr, 
                                                   DateTime payDate, 
                                                   OCurrency penaltiesEvent,
                                                   OCurrency commissionsEvent, 
                                                   OCurrency interestEvent, 
                                                   OCurrency interestPrepayment, 
                                                   OCurrency principalEvent,
                                                   int pastDueDays, 
                                                   OPaymentType paymentType, 
                                                   bool isPending, 
                                                   int instNumber,
                                                   PaymentMethod paymentMethod,
                                                   bool overridePenalty,
                                                   OCurrency manualPenalty,
                                                   OCurrency manualInterestEvent,
                                                   ref RepaymentEvent totalEvent)
        {
            RepaymentEvent rpEvent;
            totalEvent.Penalties = 0;
            totalEvent.Commissions = 0;
            EventStock listOfLoanEvents = new EventStock();

            #region Event identification
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (cCr.PaidIstallments.Count > 0)
            {
                List<Installment> lateInstallments = cCr.PaidIstallments.FindAll(i => i.CalculatedPenalty > 0);
                Installment lastLate = 0 == lateInstallments.Count ? null : lateInstallments.OrderBy(i => i.Number).Last();

                foreach (Installment paidInstallment in cCr.PaidIstallments)
                {
                    int number = paidInstallment.Number;
                    OCurrency rpeCapital = 0;
                    OCurrency rpeInterests = 0;
                    OCurrency rpeCommission = 0;
                    OCurrency rpePenalty = 0;
                    int overdueDays = (payDate.Date - paidInstallment.ExpectedDate).Days > 0
                                          ? (payDate.Date - paidInstallment.ExpectedDate).Days
                                          : 0;

                    foreach (RepaymentEvent rpe in Events.GetLoanRepaymentEvents())
                    {
                        if (rpe.InstallmentNumber == paidInstallment.Number && !rpe.Deleted)
                        {
                            if (rpe.RepaymentType != OPaymentType.PersonTotalPayment)
                            {
                                if ((rpe.RepaymentType != OPaymentType.PartialPayment)
                                    && (rpe.RepaymentType != OPaymentType.ProportionalPayment))
                                {
                                    rpeCapital += rpe.Principal;
                                    rpeInterests += rpe.Interests;
                                }

                                if (rpe.RepaymentType == OPaymentType.PartialPayment && paymentType == OPaymentType.TotalPayment)
                                {
                                    rpeCapital += rpe.Principal;
                                    rpeInterests += rpe.Interests;
                                }

                                rpePenalty += rpe.Penalties;
                            }

                            rpeCommission += rpe.Commissions;
                            if (rpe.RepaymentType == OPaymentType.PersonTotalPayment && cCr.LoanOptions.ManualCommissionAmount != 0)
                                rpeCommission -= rpe.Commissions;
                        }
                    }

                    if (rpeCapital > paidInstallment.PaidCapital)
                        rpeCapital = 0;

                    if (rpeInterests < 0)
                        rpeInterests = 0;

                    if (rpeInterests > paidInstallment.InterestsRepayment)
                    {
                        rpeInterests = 0;
                    }

                    OCurrency principalAmount = paidInstallment.CapitalRepayment -
                                                (paidInstallment.CapitalRepayment - (paidInstallment.PaidCapital - rpeCapital));

                    OCurrency interestAmount = paidInstallment.InterestsRepayment -
                                               (paidInstallment.InterestsRepayment - (paidInstallment.PaidInterests - rpeInterests));

                    if (interestAmount < 0)
                        interestAmount = 0;

                    principalEvent -= principalAmount;
                    interestEvent -= interestAmount;

                    if (principalAmount == 0
                        && interestAmount == 0
                        && paidInstallment.PaidCapital == 0 && manualInterestEvent == 0)
                    {
                        principalAmount = principalEvent;
                        interestAmount = interestEvent;
                    }

                    if (interestAmount < 0)
                        interestAmount = 0;

                    OCurrency commissionAmount = paidInstallment.CommissionsUnpaid -
                                               (paidInstallment.CommissionsUnpaid - (paidInstallment.PaidCommissions - rpeCommission));

                    OCurrency penaltyAmount;
                    if (overridePenalty)
                    {
                        if (lastLate != null && paidInstallment.CalculatedPenalty <= manualPenalty && paidInstallment.Number < lastLate.Number)
                        {
                            penaltyAmount = paidInstallment.CalculatedPenalty;
                            manualPenalty -= penaltyAmount;
                        }
                        else
                        {
                            penaltyAmount = manualPenalty;
                            manualPenalty = 0m;
                        }
                    }
                    else
                    {
                        penaltyAmount = paidInstallment.FeesUnpaid -
                                                  (paidInstallment.FeesUnpaid - (paidInstallment.PaidFees - rpePenalty));
                    }

                    //just to be sure that we do not have negative in the base
                    penaltyAmount = penaltyAmount < 0 ? 0 : penaltyAmount;
                    commissionAmount = commissionAmount < 0 ? 0 : commissionAmount;

                    if (overridePenalty && penaltyAmount > 0)
                    {
                        penaltyAmount = (-1.0) * penaltyAmount;
                    }

                    rpEvent = CreateRepaymentEvent(number,
                                                       payDate,
                                                       penaltyAmount,
                                                       commissionAmount,
                                                       interestAmount,
                                                       interestAmount,
                                                       principalAmount,
                                                       overdueDays,
                                                       _clientType == OClientTypes.Group,
                                                       paymentType,
                                                       isPending);

                    if (overridePenalty && penaltyAmount < 0)
                        penaltyAmount = (-1.0)*penaltyAmount;
                    rpEvent.PaymentMethod = paymentMethod;
                    rpEvent.CalculatedPenalties = paidInstallment.CalculatedPenalty;
                    if (rpEvent.CalculatedPenalties > penaltyAmount)
                    {
                        if (overridePenalty)
                        {
                            rpEvent.WrittenOffPenalties = rpEvent.CalculatedPenalties - penaltyAmount;
                        }
                        else
                        {
                            rpEvent.UnpaidPenalties = rpEvent.CalculatedPenalties - penaltyAmount;
                        }
                    }
                    totalEvent.Penalties += rpEvent.Penalties;
                    totalEvent.Commissions += rpEvent.Commissions;

                    if (rpEvent.InterestPrepayment != 0
                        || rpEvent.Principal != 0
                        || rpEvent.Penalties != 0
                        || rpEvent.Commissions != 0)
                        listOfLoanEvents.Add(rpEvent);
                }
            }
            else
            {
                rpEvent = CreateRepaymentEvent(instNumber,
                                               payDate,
                                               penaltiesEvent,
                                               commissionsEvent,
                                               interestEvent,
                                               interestPrepayment,
                                               principalEvent,
                                               pastDueDays,
                                               _clientType == OClientTypes.Group,
                                               paymentType,
                                               isPending);
                rpEvent.PaymentMethod = paymentMethod;
                // Calculate penalties
                Installment installment = GetInstallment(instNumber - 1);
                rpEvent.CalculatedPenalties = installment.CalculatedPenalty;
                if (rpEvent.CalculatedPenalties > penaltiesEvent)
                {
                    if (overridePenalty)
                    {
                        rpEvent.WrittenOffPenalties = rpEvent.CalculatedPenalties - penaltiesEvent;
                    }
                    else
                    {
                        rpEvent.UnpaidPenalties = rpEvent.CalculatedPenalties - penaltiesEvent;
                    }
                }
                totalEvent.Penalties += rpEvent.Penalties;
                totalEvent.Commissions += rpEvent.Commissions;
                listOfLoanEvents.Add(rpEvent);
            }
            #endregion

            return listOfLoanEvents;
        }
Esempio n. 9
0
 public void TestRepaymentEventCodeCorrectlyGeneratedWhenGoodLoan()
 {
     RepaymentEvent rPE = new RepaymentEvent();
     Assert.AreEqual("RGLE",rPE.Code);
 }
Esempio n. 10
0
 private static void _AssertSpecifiedEvent(RepaymentEvent pEvent, OCurrency pFees, OCurrency pInterest, OCurrency pCapital)
 {
     Assert.AreEqual(pFees, pEvent.Fees.Value);
     Assert.AreEqual(pInterest, pEvent.Interests.Value);
     Assert.AreEqual(pCapital, pEvent.Principal.Value);
 }
Esempio n. 11
0
        private void DoRepaymentFromSavings(Loan savedContract, RepaymentEvent repayEvent, OCurrency amount,
                                            SqlTransaction sqlTransaction)
        {
            if (savedContract.CompulsorySavings == null)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.NoCompulsorySavings);

            string description = string.Format("Repayment for loan {0}", savedContract.Code);

            _savingServices.RepayLoanFromSaving(savedContract, repayEvent, savedContract.CompulsorySavings,
                                                repayEvent.Date, amount, description, sqlTransaction);
        }
Esempio n. 12
0
        private void SetEvent(RepaymentEvent pEvent)
        {
            _repaymentEvent = pEvent;
            _lbICPrincipal.Text = string.Format("{0} {1}", pEvent.Principal.GetFormatedValue(_loan.UseCents), _loan.Product.Currency.Code);
            lbInterest.Text = string.Format("{0} {1}", pEvent.Interests.GetFormatedValue(_loan.UseCents), _loan.Product.Currency.Code);
            _lbICFees.Text = string.Format("{0} {1}", pEvent.Penalties.GetFormatedValue(_loan.UseCents), _loan.Product.Currency.Code);
            _lbICCommisions.Text = string.Format("{0} {1}", pEvent.Commissions.GetFormatedValue(_loan.UseCents), _loan.Product.Currency.Code);

             if (_client is Group)
            {
                buttonSelectAGroupPerson.Visible = _client is Group;
                bool activeButton = false;

                foreach (Installment installment in _loan.InstallmentList)
                {
                    if (!installment.IsRepaid && installment.ExpectedDate >= pEvent.Date)
                        activeButton = true;
                }

                buttonSelectAGroupPerson.Visible = pEvent.Penalties > 0 || !activeButton ? false : true;
            }

            bool visible = ServicesProvider.GetInstance().GetCurrencyServices().FindAllCurrencies().Count > 1 &&
                           !_loan.Product.Currency.IsPivot && _exchangeRate != null;
            _lbECPrincipal.Text = visible
                                             ? string.Format("{0} {1}",(pEvent.Principal/ _exchangeRate.Rate).GetFormatedValue(_loan.UseCents),
                                                             ServicesProvider.GetInstance().GetCurrencyServices().GetPivot().Code)
                                             : string.Empty;

            lbCInterest.Text = visible
                                           ? string.Format("{0} {1}", (pEvent.Interests / _exchangeRate.Rate).GetFormatedValue(_loan.UseCents),
                                                            ServicesProvider.GetInstance().GetCurrencyServices().GetPivot().Code)
                                           : string.Empty;

            _lbECFees.Text = visible
                                        ? string.Format("{0} {1}", (pEvent.Penalties / _exchangeRate.Rate).GetFormatedValue(_loan.UseCents),
                                                            ServicesProvider.GetInstance().GetCurrencyServices().GetPivot().Code)
                                        : string.Empty;

            _lbECCommissions.Text = visible
                                        ? string.Format("{0} {1}", (pEvent.Commissions / _exchangeRate.Rate).GetFormatedValue(_loan.UseCents),
                                                            ServicesProvider.GetInstance().GetCurrencyServices().GetPivot().Code)
                                        : string.Empty;
        }
Esempio n. 13
0
        public void AddLoanEvent(RepaymentEvent evnt, int contractId, SqlTransaction sqlTransac)
        {
            const string q = @"INSERT INTO [RepaymentEvents]
                                       ([id],
                                        [past_due_days],
                                        [principal],
                                        [interests],
                                        [installment_number],
                                        [commissions],
                                        [penalties],
                                        [payment_method_id],
                                        [calculated_penalties],
                                        [written_off_penalties],
                                        [unpaid_penalties])
                                     VALUES
                                       (@id,
                                        @pastDueDays,
                                        @principal,
                                        @interests,
                                        @installmentNumber,
                                        @commissions,
                                        @penalties,
                                        @payment_method_id,
                                        @calculated_penalties,
                                        @written_off_penalties,
                                        @unpaid_penalties)
                                     ";

            using (OpenCbsCommand c = new OpenCbsCommand(q, sqlTransac.Connection, sqlTransac))
            {
                SetLoanRepaymentEvent(evnt, c);
                c.ExecuteNonQuery();
            }
        }
Esempio n. 14
0
 private static void SetLoanRepaymentEvent(RepaymentEvent evnt, OpenCbsCommand c)
 {
     c.AddParam("@id", evnt.Id);
     c.AddParam("@pastDueDays", evnt.PastDueDays);
     c.AddParam("@principal", evnt.Principal);
     c.AddParam("@interests", evnt.Interests);
     c.AddParam("@commissions", evnt.Commissions);
     c.AddParam("@penalties", evnt.Penalties);
     c.AddParam("@installmentNumber", evnt.InstallmentNumber);
     c.AddParam("@payment_method_id", evnt.PaymentMethod.Id);
     c.AddParam("@calculated_penalties", evnt.CalculatedPenalties);
     c.AddParam("@written_off_penalties", evnt.WrittenOffPenalties);
     c.AddParam("@unpaid_penalties", evnt.UnpaidPenalties);
 }
Esempio n. 15
0
 public void TestRepaymentEventPrincipal()
 {
     RepaymentEvent rPE = new RepaymentEvent();
     rPE.Principal = 100.43m;
     Assert.AreEqual(100.43m,rPE.Principal.Value);
 }
Esempio n. 16
0
 public void TestRepaymentEventInterests()
 {
     RepaymentEvent rPE = new RepaymentEvent();
     rPE.Interests = 50.32m;
     Assert.AreEqual(50.32m,rPE.Interests.Value);
 }
Esempio n. 17
0
 public void TestRepaymentEventInstallmentNumber()
 {
     RepaymentEvent rPE = new RepaymentEvent();
     rPE.InstallmentNumber = 3;
     Assert.AreEqual(3,rPE.InstallmentNumber);
 }
Esempio n. 18
0
 public void TestRepaymentEventFees()
 {
     RepaymentEvent rPE = new RepaymentEvent();
     rPE.Commissions = 20.53m;
     Assert.AreEqual(20.53m,rPE.Fees.Value);
 }
Esempio n. 19
0
        public void Select_Added_RepaymentEvent()
        {
            EventManager eventManager = (EventManager)container["EventManager"];

            RepaymentEvent repaymentEvent = new RepaymentEvent
                                     {
                                         Id = 130,
                                         Code = "RGLE",
                                         User = new User {Id = 1},
                                         Date = new DateTime(2006, 7, 21),
                                         PastDueDays =  3,
                                         Principal = 1999,
                                         Interests = 2333,
                                         Commissions = 23,
                                         InstallmentNumber = 3,
                                         PaymentMethod = new PaymentMethod(1, "Cash", "", false)
                                     };
            using (SqlTransaction tran = eventManager.GetConnection().BeginTransaction())
            eventManager.AddLoanEvent(repaymentEvent, 1, tran);

            EventStock eventStock = eventManager.SelectEvents(2);
            foreach (Event e in eventStock.GetEvents())
            {
                if (e is RepaymentEvent)
                    _AssertRepaymentEvent(e as RepaymentEvent, "RGLE", new DateTime(2006, 7, 21), 3, 1999, 2333, 23, 3);
            }
        }
Esempio n. 20
0
 private static void _AssertRepaymentEvent(RepaymentEvent pEvent, string pCode, DateTime pDate, int pPastDueDays, OCurrency pPrincipal,
                                                  OCurrency pInterest, OCurrency pFees, int pInstallmentNumber)
 {
     Assert.AreEqual(pCode, pEvent.Code);
     Assert.AreEqual(pDate, pEvent.Date);
     Assert.AreEqual(pPastDueDays, pEvent.PastDueDays);
     Assert.AreEqual(pPrincipal.Value, pEvent.Principal.Value);
     Assert.AreEqual(pInterest.Value, pEvent.Interests.Value);
     Assert.AreEqual(pFees.Value, pEvent.Fees.Value);
     Assert.AreEqual(pInstallmentNumber, pEvent.InstallmentNumber);
 }
Esempio n. 21
0
        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;
        }
Esempio n. 22
0
        private void SetRepaymentExplanation(RepaymentEvent pEvent)
        {
            _penaltiesExplanation = string.Empty;
            if (pEvent.PastDueDays != 0)
            {
                var strPenaltiesCalculation = new StringBuilder();
                var strPenalties = new StringBuilder();
                string pastDueDays = pEvent.PastDueDays.ToString();

                if (ServicesProvider.GetInstance().GetGeneralSettings().LateDaysAfterAccrualCeases < pEvent.PastDueDays)
                {
                    pastDueDays = ServicesProvider.GetInstance().GetGeneralSettings().LateDaysAfterAccrualCeases.ToString();
                }

                if (_loan.NonRepaymentPenalties.OverDuePrincipal != 0)
                {
                    strPenalties.AppendFormat("{0} = ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "Penalty.Text"));
                    strPenalties.AppendFormat("{0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "amount.Text"));
                    strPenalties.AppendFormat(" % {0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,
                                                                                    "OverDuePrincipall.Text"));
                    strPenalties.AppendFormat("{0}\n", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "Latedays.Text"));

                    strPenaltiesCalculation.AppendFormat("{0} = {1} * {2} * {3}", pEvent.Penalties.GetFormatedValue(_loan.UseCents),
                                pEvent.Principal.GetFormatedValue(_loan.UseCents), _loan.NonRepaymentPenalties.OverDuePrincipal, pastDueDays);
                }

                if (_loan.NonRepaymentPenalties.OverDueInterest != 0)
                {
                    if (strPenalties.Length == 0)
                    {
                        strPenalties.AppendFormat("{0} = ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,"Penalty.Text"));
                        strPenaltiesCalculation.Append(pEvent.Penalties.GetFormatedValue(_loan.UseCents) + " = ");
                    }
                    else
                        strPenaltiesCalculation.Append(" + ");

                    strPenalties.Append(" + ");
                    strPenalties.AppendFormat("{0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "amount.Text"));
                    strPenalties.AppendFormat(" % {0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,
                                                                                    "OverDueInterest.Text"));
                    strPenalties.AppendFormat("{0}\n", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "Latedays.Text"));
                    strPenaltiesCalculation.AppendFormat("{0} * {1} * {2}", pEvent.Principal.GetFormatedValue(_loan.UseCents),
                                        _loan.NonRepaymentPenalties.OverDueInterest, pastDueDays);
                }

                if (_loan.NonRepaymentPenalties.OLB != 0)
                {
                    if (strPenalties.Length == 0)
                    {
                        strPenalties.AppendFormat("{0} = ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,"Penalty.Text"));
                        strPenaltiesCalculation.AppendFormat("{0} = ", pEvent.Penalties.GetFormatedValue(_loan.UseCents));
                    }
                    else
                        strPenaltiesCalculation.Append(" + ");

                    strPenalties.Append(" + ");
                    strPenalties.AppendFormat("{0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "amount.Text"));
                    strPenalties.Append(" % OLB * ");
                    strPenalties.AppendFormat("{0}\n", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "Latedays.Text"));
                    strPenaltiesCalculation.AppendFormat("{0} * {1} * {2}", pEvent.Principal.GetFormatedValue(_loan.UseCents),
                                            _loan.NonRepaymentPenalties.OLB, pastDueDays);
                }

                if (_loan.NonRepaymentPenalties.InitialAmount != 0)
                {
                    if (strPenalties.Length == 0)
                    {
                        strPenalties.AppendFormat("{0} = ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,"Penalty.Text"));
                        strPenaltiesCalculation.AppendFormat("{0} = ", pEvent.Penalties.GetFormatedValue(_loan.UseCents));
                    }
                    else
                        strPenaltiesCalculation.Append(" + ");

                    strPenalties.Append(" + ");
                    strPenalties.AppendFormat("{0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "amount.Text"));
                    strPenalties.AppendFormat(" % {0} * ", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm,
                                                                                    "InitialAmount.Text"));
                    strPenalties.AppendFormat("{0}\n", MultiLanguageStrings.GetString(Ressource.CreditContractRepayForm, "Latedays.Text"));
                    strPenaltiesCalculation.AppendFormat("{0} * {1} * {2}", pEvent.Principal.GetFormatedValue(_loan.UseCents),
                                            _loan.NonRepaymentPenalties.InitialAmount, pastDueDays);
                }

                strPenalties.AppendLine("\n");
                strPenalties.AppendLine(strPenaltiesCalculation.ToString());
                _penaltiesExplanation = strPenalties.ToString();
            }
        }
Esempio n. 23
0
 public RepaymentEvent GetNotDeletedRepaymentEvent()
 {
     RepaymentEvent repaymentEvent = new RepaymentEvent();
     List<RepaymentEvent> evnts = Events.GetRepaymentEvents();
     foreach (RepaymentEvent evnt in evnts)
     {
         if (evnt.Deleted) continue;
         if (evnt.Date.Date > repaymentEvent.Date)
             repaymentEvent = evnt;
     }
     return repaymentEvent;
 }
Esempio n. 24
0
        public void TestMethodeCopyCredit()
        {
            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.DecliningFixedInstallments,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };
            package.KeepExpectedInstallment = false;
            Loan contractSource = new Loan(package,1500,0.03m,9,1,new DateTime(2006,1,2),
                new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""),
                ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));
            RepaymentEvent rE1 = new RepaymentEvent
                                     {
                                         Id = 1,
                                         InstallmentNumber = 1,
                                         Principal = 200,
                                         Interests = 100,
                                         Commissions = 0,
                                         Penalties = 0,
                                         ClientType = OClientTypes.Group
                                     };
            LoanDisbursmentEvent lDE = new LoanDisbursmentEvent{Id = 2,Date = DateTime.Today,Amount = 100, ClientType = OClientTypes.Group};

            contractSource.Code = "HHHHJKLLJJBNBJJ";
            contractSource.AnticipatedTotalRepaymentPenalties = 0.02;
            contractSource.Events.Add(rE1);
            contractSource.Events.Add(lDE);

            Loan contractDestination = contractSource.Copy();

            Assert.AreEqual(contractSource.Amount.Value, contractDestination.Amount.Value);
            Assert.AreEqual(contractSource.AnticipatedTotalRepaymentPenalties,contractDestination.AnticipatedTotalRepaymentPenalties);
            Assert.AreEqual(contractSource.Code,contractDestination.Code);
            Assert.AreEqual(contractSource.ClientType,contractDestination.ClientType);
            Assert.AreEqual(contractSource.InstallmentList.Count,contractDestination.InstallmentList.Count);
            Assert.AreEqual(contractSource.InstallmentList[0].Number,contractDestination.InstallmentList[0].Number);
            Assert.AreEqual(contractSource.InstallmentList[1].Number,contractDestination.InstallmentList[1].Number);

            //            ((LoanDisbursmentEvent)contractSource.Events.GetEvent(1)).Commission = 22;
            //            Assert.IsTrue(((LoanDisbursmentEvent)contractDestination.Events.GetEvent(1)).Commission == 0);
            //            Assert.IsFalse(((LoanDisbursmentEvent)contractDestination.Events.GetEvent(1)).Commission == 22);

            contractSource.InstallmentList[0].Number = 4;
            Assert.IsFalse(contractDestination.InstallmentList[0].Number == 4);
            Assert.IsTrue(contractDestination.InstallmentList[0].Number == 1);
        }
Esempio n. 25
0
        /// <summary>
        /// Test if the client has repaid the total principal, interests and penalties owed at date D
        /// </summary>
        /// <param name="rPe"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        public bool _IsBadLoan(RepaymentEvent rPe, DateTime date)
        {
            if (rPe is BadLoanRepaymentEvent)
            {
                ((BadLoanRepaymentEvent) rPe).OLB = CalculateActualOlb();

                if (AmountComparer.Equals(0, CalculateRemainingInterests(date)) &&
                    AmountComparer.Equals(0, CalculateActualOlb(date)))
                {
                    ((BadLoanRepaymentEvent) rPe).AccruedProvision += 0;
                    return false;
                }
                return true;
            }
            return false;
        }
Esempio n. 26
0
        private void LoanRepaymentOrigination(RepaymentEvent repaymentEvent, Loan loanContract, SqlTransaction sqlTransac)
        {
            int parentId = -1;
            foreach (RepaymentEvent loanEvent in loanContract.Events.GetLoanRepaymentEvents())
            {
                if (loanEvent.IsFired) continue;

                loanEvent.User = repaymentEvent.User;
                loanEvent.TellerId = repaymentEvent.TellerId;
                loanEvent.IsFired = true;

                if (parentId > 0)
                    loanEvent.ParentId = parentId;

                loanEvent.Id = _eventManagement.AddLoanEventHead(loanEvent, loanContract.Id, sqlTransac);

                if (parentId < 0)
                {
                    parentId = loanEvent.Id;
                    repaymentEvent.Id = parentId;
                }

                _eventManagement.AddLoanEvent(loanEvent, loanContract.Id, sqlTransac);
            }
        }
Esempio n. 27
0
        private static OCurrency GetValue(RepaymentEvent eventItem, ContractAccountingRule rule)
        {
            OCurrency amount = 0;

            if (rule.EventAttribute.Name.ToLower() == "principal")
            {
                amount = eventItem.Principal;
            }

            if (rule.EventAttribute.Name.ToLower() == "interests")
            {
                amount = eventItem.Interests;
            }

            if (rule.EventAttribute.Name.ToLower() == "penalties")
            {
                amount = eventItem.Penalties;
            }

            if (rule.EventAttribute.Name.ToLower() == "commissions")
            {
                amount = eventItem.Commissions;
            }
            return amount;
        }