Exemple #1
0
        public void CheckSumOfInterestAndPrincipal_InterestCoefEgal100_PrincipalCoeffEgal10()
        {
            ExoticInstallment exoticInstallment1 = new ExoticInstallment();
            exoticInstallment1.InterestCoeff = 70;
            exoticInstallment1.PrincipalCoeff = 0;
            ExoticInstallment exoticInstallment2 = new ExoticInstallment();
            exoticInstallment2.InterestCoeff = 30;
            exoticInstallment2.PrincipalCoeff = 10;

            ExoticInstallmentsTable product = new ExoticInstallmentsTable();
            product.Add(exoticInstallment1);
            product.Add(exoticInstallment2);

            Assert.IsFalse(product.CheckIfSumIsOk(OLoanTypes.Flat));
        }
        public void TestRepayFlatExoticWhenKeepNotExpectedInstallmentAndTwoGracePeriod()
        {
            Assert.Ignore();
            ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true);
            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(2, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(3, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(4, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(5, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(6, 0.5, 0.5));

            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.Flat,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1, UseCents = true}
                                      };
            package.KeepExpectedInstallment = false;
            package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB;
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 900, 0.026m, 9, 3, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));

            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash","",false );
            myContract.Repay(1, new DateTime(2006, 2, 1), 900, true, 0, 0, false, 0, false, false, false, paymentMethod);
            myContract.Repay(4, new DateTime(2006, 5, 2), 50, true, 0, 0, false, 0, false, false, false, paymentMethod);

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(23.40m, myContract.GetInstallment(0).InterestsRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(0).CapitalRepayment.Value);
            Assert.AreEqual(900m, myContract.GetInstallment(0).OLB.Value);
            Assert.AreEqual(23.40m, myContract.GetInstallment(0).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(0).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate); //1
            Assert.AreEqual(0m, myContract.GetInstallment(1).InterestsRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(1).CapitalRepayment.Value);
            Assert.AreEqual(210.60m, myContract.GetInstallment(1).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(1).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(1).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 4, 3), myContract.GetInstallment(2).ExpectedDate); //2
            Assert.AreEqual(0m, myContract.GetInstallment(2).InterestsRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(2).CapitalRepayment.Value);
            Assert.AreEqual(210.60m, myContract.GetInstallment(2).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(2).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(2).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 5, 2), myContract.GetInstallment(3).ExpectedDate);//1
            Assert.AreEqual(0m, myContract.GetInstallment(3).InterestsRepayment.Value);
            Assert.AreEqual(21.06m, myContract.GetInstallment(3).CapitalRepayment.Value);
            Assert.AreEqual(210.60m, myContract.GetInstallment(3).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(3).PaidInterests.Value);
            Assert.AreEqual(21.06m, myContract.GetInstallment(3).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 6, 1), myContract.GetInstallment(4).ExpectedDate);//0
            Assert.AreEqual(0m, myContract.GetInstallment(4).InterestsRepayment.Value);
            Assert.AreEqual(17.844m, myContract.GetInstallment(4).CapitalRepayment.Value);
            Assert.AreEqual(160.6m, myContract.GetInstallment(4).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(4).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(4).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 7, 3), myContract.GetInstallment(5).ExpectedDate);//4
            Assert.AreEqual(0m, myContract.GetInstallment(5).InterestsRepayment.Value);
            Assert.AreEqual(17.844m, myContract.GetInstallment(5).CapitalRepayment.Value);
            Assert.AreEqual(142.76m, myContract.GetInstallment(5).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(5).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(5).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 8, 1), myContract.GetInstallment(6).ExpectedDate);//2
            Assert.AreEqual(0m, myContract.GetInstallment(6).InterestsRepayment.Value);
            Assert.AreEqual(17.844m, myContract.GetInstallment(6).CapitalRepayment.Value);
            Assert.AreEqual(124.91m, myContract.GetInstallment(6).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(6).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(6).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 9, 1), myContract.GetInstallment(7).ExpectedDate);//2
            Assert.AreEqual(0m, myContract.GetInstallment(7).InterestsRepayment.Value);
            Assert.AreEqual(17.844m, myContract.GetInstallment(7).CapitalRepayment.Value);
            Assert.AreEqual(107.07m, myContract.GetInstallment(7).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(7).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(7).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 10, 2), myContract.GetInstallment(8).ExpectedDate);//2
            Assert.AreEqual(0m, myContract.GetInstallment(8).InterestsRepayment.Value);
            Assert.AreEqual(89.222m, myContract.GetInstallment(8).CapitalRepayment.Value);
            Assert.AreEqual(89.22m, myContract.GetInstallment(8).OLB.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(8).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(8).PaidCapital.Value);
        }
        public void TestRepayFlatExoticWhenKeepNotExpectedInstallmentAndOneGracePeriod()
        {
            Assert.Ignore();
            ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true);
            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1, 0.1, 0.1));
            exoticProduct.Add(new ExoticInstallment(2, 0.2, 0));
            exoticProduct.Add(new ExoticInstallment(3, 0.1, 0.2));
            exoticProduct.Add(new ExoticInstallment(4, 0, 0));
            exoticProduct.Add(new ExoticInstallment(5, 0.4, 0.5));
            exoticProduct.Add(new ExoticInstallment(6, 0.2, 0.2));

            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.Flat,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };
            package.KeepExpectedInstallment = false;
            package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB;
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 1000, 0.03m, 7, 1, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));
            myContract.NonRepaymentPenalties.InitialAmount = 0.003;
            myContract.AnticipatedTotalRepaymentPenalties = 0.01;

            myContract.Repay(1, new DateTime(2006, 2, 1), 30, false, false);
            myContract.Repay(2, new DateTime(2006, 3, 1), 318, true, false); //200 overPaid

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(30m, myContract.GetInstallment(0).InterestsRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(0).CapitalRepayment.Value);
            Assert.AreEqual(1000m, myContract.GetInstallment(0).OLB.Value);
            Assert.AreEqual(30m, myContract.GetInstallment(0).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(0).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate); //1
            Assert.AreEqual(18m, myContract.GetInstallment(1).InterestsRepayment.Value);
            Assert.AreEqual(100m, myContract.GetInstallment(1).CapitalRepayment.Value);
            Assert.AreEqual(1000m, myContract.GetInstallment(1).OLB.Value);
            Assert.AreEqual(18m, myContract.GetInstallment(1).PaidInterests.Value);
            Assert.AreEqual(100m, myContract.GetInstallment(1).PaidCapital.Value);

            //OVERPAID 200 -> 862
            Assert.AreEqual(new DateTime(2006, 4, 3), myContract.GetInstallment(2).ExpectedDate); //2
            Assert.AreEqual(0m, myContract.GetInstallment(2).InterestsRepayment.Value);
            Assert.AreEqual(191.556m, myContract.GetInstallment(2).CapitalRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(2).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(2).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 5, 2), myContract.GetInstallment(3).ExpectedDate);//1
            Assert.AreEqual(0m, myContract.GetInstallment(3).InterestsRepayment.Value);
            Assert.AreEqual(95.778m, myContract.GetInstallment(3).CapitalRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(3).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(3).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 6, 1), myContract.GetInstallment(4).ExpectedDate);//0
            Assert.AreEqual(0m, myContract.GetInstallment(4).InterestsRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(4).CapitalRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(4).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(4).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 7, 3), myContract.GetInstallment(5).ExpectedDate);//4
            Assert.AreEqual(0m, myContract.GetInstallment(5).InterestsRepayment.Value);
            Assert.AreEqual(383.111m, myContract.GetInstallment(5).CapitalRepayment.Value);
            Assert.AreEqual(0, myContract.GetInstallment(5).PaidInterests.Value);
            Assert.AreEqual(0, myContract.GetInstallment(5).PaidCapital.Value);

            Assert.AreEqual(new DateTime(2006, 8, 1), myContract.GetInstallment(6).ExpectedDate);//2
            Assert.AreEqual(0, myContract.GetInstallment(6).InterestsRepayment.Value);
            Assert.AreEqual(191.556m, myContract.GetInstallment(6).CapitalRepayment.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(6).PaidInterests.Value);
            Assert.AreEqual(0m, myContract.GetInstallment(6).PaidCapital.Value);
        }
        public void TestRepayDecliningExoticLoanWithOverPaidOnTheThirdInstallment()
        {
            Assert.Ignore();
            ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true);

            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.DecliningFixedInstallments,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };

            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(2, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(3, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(4, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(5, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(6, 0.5, null));
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 1000, 0.03m, 6, 0, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));

            //RepayFirstInstallmentPartially
            myContract.Repay(1, new DateTime(2006, 2, 1), 100, true, false);
            _AssertSpecifiedInstallment(myContract.GetInstallment(0), 1, new DateTime(2006, 2, 1), 30, 100, 1000, 70, 30);

            myContract.Repay(1, new DateTime(2006, 2, 1), 30, true, false);
            _AssertSpecifiedInstallment(myContract.GetInstallment(0), 1, new DateTime(2006, 2, 1), 30, 100, 1000, 100, 30);

            myContract.Repay(2, new DateTime(2006, 3, 1), 127, true, false);
            _AssertSpecifiedInstallment(myContract.GetInstallment(1), 2, new DateTime(2006, 3, 1), 27, 100, 900, 100, 27);

            myContract.Repay(3, new DateTime(2006, 4, 3), 174, true, false);
            _AssertSpecifiedInstallment(myContract.GetInstallment(2), 3, new DateTime(2006, 4, 3), 24, 100, 800, 100, 24);
            _AssertSpecifiedInstallment(myContract.GetInstallment(3), 4, new DateTime(2006, 5, 2), 19.5m, 92.86m, 650, 0, 0);
            _AssertSpecifiedInstallment(myContract.GetInstallment(4), 5, new DateTime(2006, 6, 1), 16.71m, 92.86m, 557.14m, 0, 0);
            _AssertSpecifiedInstallment(myContract.GetInstallment(5), 6, new DateTime(2006, 7, 3), 13.93m, 464.29m, 464.28m, 0, 0);
        }
        public void TestCalculateOLBWith2MonthOfGracePeriodWhenDecliningExotic()
        {
            Assert.Ignore();
            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.DecliningFixedInstallments,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };

            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(2, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(3, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(4, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(5, 0.1, null));
            exoticProduct.Add(new ExoticInstallment(6, 0.5, null));
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 1000, 0.03m, 8, 2, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));
            myContract.Repay(1, new DateTime(2006, 2, 1), 100, true, false);

            Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(1, false).Value);
            Assert.AreEqual(930m, myContract.CalculateExpectedOlb(2, false).Value);
            Assert.AreEqual(930m, myContract.CalculateExpectedOlb(3, false).Value);
            Assert.AreEqual(837m, myContract.CalculateExpectedOlb(4, false).Value);
            Assert.AreEqual(744m, myContract.CalculateExpectedOlb(5, false).Value);
            Assert.AreEqual(651m, myContract.CalculateExpectedOlb(6, false).Value);
            Assert.AreEqual(558m, myContract.CalculateExpectedOlb(7, false).Value);
            Assert.AreEqual(465m, myContract.CalculateExpectedOlb(8, false).Value);
        }
        public void TestFindAllExoticProducts()
        {
            ExoticInstallment exo1 = new ExoticInstallment();
            ExoticInstallment exo2 = new ExoticInstallment();

            ExoticInstallmentsTable services = new ExoticInstallmentsTable();
            services.Add(exo1);
            services.Add(exo2);

            ExoticInstallmentsTable trade = new ExoticInstallmentsTable();
            trade.Add(exo1);
            trade.Add(exo2);

            List<ExoticInstallmentsTable> list = new List<ExoticInstallmentsTable>();
            list.Add(services);
            list.Add(trade);

            mockPackageManagement.SetReturnValue("SelectAllInstallmentsTables", list);
            ProductServices productServices = SetMockManager(mockPackageManagement);
            Assert.AreEqual(2,productServices.FindAllExoticProducts().Count);
        }
Exemple #7
0
 public void GetNumberOfInstallments()
 {
     ExoticInstallmentsTable product = new ExoticInstallmentsTable();
     product.Add(e1);
     product.Add(e2);
     Assert.AreEqual(2, product.GetNumberOfInstallments);
 }
        public void TestRepayWhenOverPaidGreaterThanMaximumAmountAuthorized()
        {
            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.Flat,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };

            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1,0,1));
            exoticProduct.Add(new ExoticInstallment(2,0,1));
            exoticProduct.Add(new ExoticInstallment(3,0.5,1));
            exoticProduct.Add(new ExoticInstallment(4,0,1));
            exoticProduct.Add(new ExoticInstallment(5,0,1));
            exoticProduct.Add(new ExoticInstallment(6,0.5,1));
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 1000, 0.02m, 7, 1, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));
            myContract.AnticipatedTotalRepaymentPenalties = 0.01;
            myContract.Repay(1,new DateTime(2006,2,1),20,false,false);
            myContract.Repay(2,new DateTime(2006,3,1),20,false,false);
            myContract.Repay(3,new DateTime(2006,4,1),20,false,false);
            RepaymentEvent rPE = myContract.Repay(4,new DateTime(2006,1,1),2000,false,false);

            Assert.IsNull(rPE);
        }
Exemple #9
0
        public void TestIsExoticProductForFlatRatePackageWhenItIsNot()
        {
            exoticProduct = new ExoticInstallmentsTable();

            e1 = new ExoticInstallment();
            e1.Number = 1;
            e1.PrincipalCoeff = 0.4;
            e1.InterestCoeff = null;

            e2 = new ExoticInstallment();
            e2.Number = 2;
            e2.PrincipalCoeff = 0.3;
            e2.InterestCoeff = null;
            exoticProduct.Add(e1);
            exoticProduct.Add(e2);

            Assert.IsFalse(exoticProduct.IsExoticProductForFlatRatePackage);
        }
Exemple #10
0
 public void TestSumForDecliningInterestRateType()
 {
     var i1 = new ExoticInstallment() {PrincipalCoeff = 0.7, InterestCoeff = 0};
     var i2 = new ExoticInstallment() {PrincipalCoeff = 0.3, InterestCoeff = 0};
     var exotic = new ExoticInstallmentsTable();
     exotic.Add(i1);
     exotic.Add(i2);
     Assert.IsTrue(exotic.CheckIfSumIsOk(OLoanTypes.DecliningFixedPrincipal));
 }
Exemple #11
0
        public void TestGetSumOfPrincipalCoeffWhenSumIsNull()
        {
            ExoticInstallment exoticInstallment1 = new ExoticInstallment();
            ExoticInstallment exoticInstallment2 = new ExoticInstallment();

            ExoticInstallmentsTable product = new ExoticInstallmentsTable();
            product.Add(exoticInstallment1);
            product.Add(exoticInstallment2);

            Assert.AreEqual(0,product.SumOfPrincipalCoeff);
        }
Exemple #12
0
        public void TestGetSumOfPrincipalCoeff()
        {
            ExoticInstallment exoticInstallment1 = new ExoticInstallment();
            exoticInstallment1.PrincipalCoeff = 123;
            ExoticInstallment exoticInstallment2 = new ExoticInstallment();
            exoticInstallment2.PrincipalCoeff = 100;

            ExoticInstallmentsTable product = new ExoticInstallmentsTable();
            product.Add(exoticInstallment1);
            product.Add(exoticInstallment2);

            Assert.AreEqual(223,product.SumOfPrincipalCoeff);
        }
Exemple #13
0
        public void SetUp()
        {
            exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Id = 1;
            exoticProduct.Name = "proportional interest rate with 6 installments";

            e1 = new ExoticInstallment();
            e1.Number = 1;
            e1.PrincipalCoeff = 0.4;
            e1.InterestCoeff = 0.2;

            e2 = new ExoticInstallment();
            e2.Number = 2;
            e2.PrincipalCoeff = 0.3;
            e2.InterestCoeff = 0.15;
            exoticProduct.Add(e1);
            exoticProduct.Add(e2);
        }
Exemple #14
0
 public void PackageExoticProductCorrectlySetAndRetrieved()
 {
     ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
     ExoticInstallment e1 = new ExoticInstallment();
     e1.Number = 1;
     e1.PrincipalCoeff = 0.23;
     e1.InterestCoeff = 0.15;
     exoticProduct.Add(e1);
     package.ExoticProduct = exoticProduct;
     Assert.IsTrue(package.ExoticProduct.Equals(exoticProduct));
 }
 private static ExoticInstallmentsTable _SetExotic(bool pForDecliningLoan)
 {
     ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
     if (!pForDecliningLoan)
     {
         exoticProduct.Add(new ExoticInstallment(1, 0.1, 0.1));
         exoticProduct.Add(new ExoticInstallment(2, 0.2, 0));
         exoticProduct.Add(new ExoticInstallment(3, 0.1, 0.2));
         exoticProduct.Add(new ExoticInstallment(4, 0, 0));
         exoticProduct.Add(new ExoticInstallment(5, 0.4, 0.5));
         exoticProduct.Add(new ExoticInstallment(6, 0.2, 0.2));
     }
     else
     {
         exoticProduct.Add(new ExoticInstallment(1, 0.1, null));
         exoticProduct.Add(new ExoticInstallment(2, 0.2, null));
         exoticProduct.Add(new ExoticInstallment(3, 0.4, null));
         exoticProduct.Add(new ExoticInstallment(4, 0, null));
         exoticProduct.Add(new ExoticInstallment(5, 0.2, null));
         exoticProduct.Add(new ExoticInstallment(6, 0.1, null));
     }
     return exoticProduct;
 }
Exemple #16
0
        //fait
        public ExoticInstallmentsTable AddExoticInstallmentInExoticProduct(ExoticInstallmentsTable product,ExoticInstallment exoticInstallment, int installmentCount, bool declining)
        {
            if (!declining)
            {
                if(exoticInstallment.PrincipalCoeff == 0 && !exoticInstallment.InterestCoeff.HasValue)
                    throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticInstallmentIsNull);
            }

            exoticInstallment.Number = installmentCount;
            product.Add(exoticInstallment);
            return product;
        }
        public void TestAddExoticProductWhenExoticProductCorrectlySet()
        {
            ExoticInstallment exo = new ExoticInstallment();
            exo.InterestCoeff = 1;
            exo.PrincipalCoeff = 1;
            ExoticInstallmentsTable services = new ExoticInstallmentsTable();
            services.Add(exo);
            services.Name = "services";

            mockPackageManagement.ExpectAndReturn("AddExoticInstallmentsTable", 1, services);
            ProductServices productServices = SetMockManager(mockPackageManagement);
            Assert.AreEqual(1,productServices.AddExoticProduct(services, OLoanTypes.Flat));
        }
        public void TestRepayWhenOverPaidGreaterThanMaximumAmountAuthorizedWhenBadLoan()
        {
            ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true);
            ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.STOP_WRITEOFF_PENALTY, true);

            LoanProduct package = new LoanProduct
                                      {
                                          InstallmentType = new InstallmentType(1, "Monthly", 0, 1),
                                          LoanType = OLoanTypes.Flat,
                                          ChargeInterestWithinGracePeriod = true,
                                          Currency = new Currency { Id = 1 }
                                      };

            ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable();
            exoticProduct.Add(new ExoticInstallment(1,0,0.1));
            exoticProduct.Add(new ExoticInstallment(2,0,0.1));
            exoticProduct.Add(new ExoticInstallment(3,0.5,0.1));
            exoticProduct.Add(new ExoticInstallment(4,0,0.1));
            exoticProduct.Add(new ExoticInstallment(5,0,0.1));
            exoticProduct.Add(new ExoticInstallment(6,0.5,0.1));
            exoticProduct.Add(new ExoticInstallment(7,0,0));
            package.ExoticProduct = exoticProduct;

            Loan myContract = new Loan(package, 1000, 0.02m, 7, 1, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User()));
            myContract.AnticipatedTotalRepaymentPenalties = 0.01;
            myContract.NonRepaymentPenalties.OLB = 0.02;
            myContract.Repay(1,new DateTime(2006,2,1),20,false,false);
            myContract.Repay(2,new DateTime(2006,3,1),20,false,false);
            myContract.Repay(3,new DateTime(2006,4,1),20,false,false);
            RepaymentEvent rPE = myContract.Repay(4,new DateTime(2006,1,1),2000,false,false);

            Assert.IsNull(rPE);
        }
        private void _SetUp()
        {
            _exoticInstallmentsTable = new ExoticInstallmentsTable
            {
                Id = 1,
                Name = "Exotic"
            };
            _exoticInstallmentsTable.Add(new ExoticInstallment(1, 1, 1));

            _productWithValues = new LoanProduct
                                     {
                                         Id = 1,
                                         Name = "Product1",
                                         Code = "Code",
                Delete = false,
                ClientType = 'I',
                Amount = 1000,
                InterestRate = 1,
                InstallmentType = new InstallmentType { Id = 1 },
                GracePeriod = 1,
                NbOfInstallments = 6,
                AnticipatedTotalRepaymentPenalties = 10,
                KeepExpectedInstallment = true,
                ChargeInterestWithinGracePeriod = true,
                AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingInterest,
                NonRepaymentPenalties = new NonRepaymentPenaltiesNullableValues
                {
                    OverDueInterest = 2,
                    InitialAmount = 3,
                    OLB = 4,
                    OverDuePrincipal = 5
                },
            };
            EntryFee fee = new EntryFee();
            fee.Value = 3;
            _productWithValues.EntryFees = new List<EntryFee>();
            _productWithValues.EntryFees.Add(fee);

            _productWithRangeValues = new LoanProduct
            {
                Id = 2,
                Name = "Product2",
                Code = "Code2",
                Delete = false,
                ClientType = 'C',
                FundingLine = new FundingLine { Id = 1 },
                AmountMin = 1000,
                AmountMax = 10111,
                InterestRateMin = 1,
                InterestRateMax = 3,
                InstallmentType = new InstallmentType { Id = 1 },
                GracePeriodMin = 1,
                GracePeriodMax = 5,
                NbOfInstallmentsMin = 3,
                NbOfInstallmentsMax = 10,
                AnticipatedTotalRepaymentPenaltiesMin = 1,
                AnticipatedTotalRepaymentPenaltiesMax = 4,
                KeepExpectedInstallment = true,
                ChargeInterestWithinGracePeriod = true,
                AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingInterest,
                NonRepaymentPenaltiesMin = new NonRepaymentPenaltiesNullableValues
                {
                    OverDueInterest = 1,
                    InitialAmount = 2,
                    OLB = 3,
                    OverDuePrincipal = 4
                },
                NonRepaymentPenaltiesMax = new NonRepaymentPenaltiesNullableValues
                {
                    OverDueInterest = 11,
                    InitialAmount = 12,
                    OLB = 13,
                    OverDuePrincipal = 14
                },
            };
            _productWithRangeValues.EntryFees=new List<EntryFee>();
            EntryFee entryFee2 = new EntryFee();
            entryFee2.Min = 0;
            entryFee2.Max = 10;
            _productWithRangeValues.EntryFees.Add(entryFee2);
        }