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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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; }
//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); }