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 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 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); }
private static void CheckValueForPackageExoticProduct(ExoticInstallmentsTable exoticProduct) { if(exoticProduct == null) throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductIsNull); if(exoticProduct.Id == 0) throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductIsBad); }
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)); }
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 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); }
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; }
private static Loan _SetContract(OLoanTypes pLoansType, bool pKeepExpectedInstallment, int pGracePeriod, int pMaturity, ExoticInstallmentsTable pExoticProduct) { LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = pLoansType, ChargeInterestWithinGracePeriod = true, KeepExpectedInstallment = pKeepExpectedInstallment, ExoticProduct = pExoticProduct, AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB, Currency = new Currency { Id = 1 } }; Loan myContract = new Loan(package, 1000, 0.03m, pMaturity, pGracePeriod, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.01; myContract.NonRepaymentPenalties.InitialAmount = 0.003; return myContract; }
/// <summary> /// Add an exotic product in databse /// </summary> /// <param name="pExoticInstallmentsTable"></param> /// <returns>database id</returns> public int AddExoticInstallmentsTable(ExoticInstallmentsTable pExoticInstallmentsTable) { const string q = @"INSERT INTO Exotics (name) VALUES (@name) SELECT SCOPE_IDENTITY()"; using (SqlConnection conn = GetConnection()) using (OpenCbsCommand c = new OpenCbsCommand(q, conn)) { c.AddParam("@name", pExoticInstallmentsTable.Name); return Convert.ToInt32(c.ExecuteScalar()); } }
/// <summary> /// Add an exotic installment in database /// </summary> /// <param name="exoticInstallment"></param> /// <param name="product"></param> public void AddExoticInstallment(ExoticInstallment exoticInstallment, ExoticInstallmentsTable product) { const string q = @"INSERT INTO ExoticInstallments (number,principal_coeff,interest_coeff,exotic_id) VALUES (@number,@principalCoeff,@interestCoeff,@exoticId)"; using (SqlConnection conn = GetConnection()) using (OpenCbsCommand c = new OpenCbsCommand(q, conn)) { c.AddParam("@number", exoticInstallment.Number); c.AddParam("@principalCoeff", exoticInstallment.PrincipalCoeff); c.AddParam("@interestCoeff", exoticInstallment.InterestCoeff); c.AddParam("@exoticId", product.Id); c.ExecuteNonQuery(); } }
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 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 TestAddExoticInstallmentInExoticProductWhenInstallmentIsNull() { ExoticInstallmentsTable product = new ExoticInstallmentsTable(); ExoticInstallment exoticInstallment = new ExoticInstallment(); exoticInstallment.InterestCoeff = null; exoticInstallment.PrincipalCoeff = 0; LoanProductManager productManager = new LoanProductManager(DataUtil.TESTDB); ProductServices productServices = new ProductServices(productManager); productServices.AddExoticInstallmentInExoticProduct(product, exoticInstallment, 1, false); }
private void _CancelExoticProduct() { panelExoticInstallment.Enabled = false; listViewExoticInstallments.Items.Clear(); panelExoticInstallment.Visible = false; panelExoticProduct.Visible = false; _exoticProduct = null; _product.ExoticProduct = null; comboBoxExoticProduct.Text = MultiLanguageStrings.GetString(Ressource.FrmAddLoanProduct, "messageSelectExotic.Text"); groupBoxExoticProducts.Size = new Size(754, 298); buttonSave.Enabled = true; }
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)); }
private void _CheckExoticProduct() { if (checkBoxUseExceptionalInstallmen.Checked) { groupBoxExoticProducts.Enabled = true; groupBoxExoticProducts.Visible = true; groupBoxExoticProducts.Size = new Size(754, 298); groupBoxNumberOfInstallments.Enabled = false; _useExoticProduct = true; } else { _useExoticProduct = false; groupBoxExoticProducts.Enabled = false; groupBoxExoticProducts.Visible = false; listViewExoticInstallments.Items.Clear(); panelExoticInstallment.Visible = false; groupBoxNumberOfInstallments.Enabled = true; _exoticProduct = null; _product.ExoticProduct = null; comboBoxLoanCyclesName.Text = MultiLanguageStrings.GetString(Ressource.FrmAddLoanProduct, "messageSelectExotic.Text"); } textBoxNbOfInstallment.Clear(); textBoxNbOfInstallmentMax.Clear(); textBoxNbOfInstallmentMin.Clear(); }
public void FindAllInstallmentExoticProducts() { ExoticInstallmentsTable agro = new ExoticInstallmentsTable(); agro.Name = "agro"; ExoticInstallmentsTable services = new ExoticInstallmentsTable(); services.Name = "services"; List<ExoticInstallmentsTable> list = new List<ExoticInstallmentsTable>(); list.Add(agro); list.Add(services); mockPackageManagement.SetReturnValue("SelectAllInstallmentsTables", list); ProductServices productServices = SetMockManager(mockPackageManagement); Assert.AreEqual(2,productServices.FindAllExoticProducts().Count); }
private void _InitializeListViewExoticInstallments(ExoticInstallmentsTable pExoticProduct) { listViewExoticInstallments.Items.Clear(); for (int i = 0; i < pExoticProduct.GetNumberOfInstallments; i++) { ExoticInstallment exoInstallment = pExoticProduct.GetExoticInstallment(i); ListViewItem listViewItem = new ListViewItem(exoInstallment.Number.ToString()); listViewItem.SubItems.Add((exoInstallment.PrincipalCoeff * 100).ToString()); listViewItem.SubItems.Add(_product.IsDeclining ? "-" : (exoInstallment.InterestCoeff.Value * 100).ToString()); listViewItem.Tag = exoInstallment; listViewItem.BackColor = Color.White; listViewExoticInstallments.Items.Add(listViewItem); } labelTotalPrincipal.Text = string.Format("{0} %", (pExoticProduct.SumOfPrincipalCoeff * 100)); labelTotalInterest.Text = _product.IsDeclining ? " - " : string.Format("{0} %", pExoticProduct.SumOfInterestCoeff * 100); textBoxNbOfInstallment.Text = _exoticProduct.GetNumberOfInstallments.ToString(); }
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); }
private void buttonNewExoticProduct_Click(object sender, EventArgs e) { listViewExoticInstallments.Items.Clear(); panelExoticInstallment.Visible = false; panelExoticInstallment.Enabled = true; buttonRemoveExoticInstallment.Enabled = false; buttonSaveExoticProduct.Enabled = false; listViewExoticInstallments.Enabled = true; buttonAddExoticInstallment.Enabled = true; panelExoticProductNavigationButtons.Enabled = false; panelExoticProduct.Enabled = true; panelExoticProduct.Visible = true; _product.ExoticProduct = null; _useExistingExoticProduct = false; _exoticProduct = new ExoticInstallmentsTable(); comboBoxExoticProduct.Text = MultiLanguageStrings.GetString(Ressource.FrmAddLoanProduct, "messageSelectExotic.Text"); groupBoxExoticInstallmentProperties.Text = MultiLanguageStrings.GetString(Ressource.FrmAddLoanProduct, "messageExoticInstallment.Text"); groupBoxExoticProducts.Size = new Size(754, 298); }
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); }
private void comboBoxExoticProduct_SelectedIndexChanged(object sender, EventArgs e) { _exoticProduct = (ExoticInstallmentsTable)comboBoxExoticProduct.SelectedItem; _product.ExoticProduct = _exoticProduct; _InitializeListViewExoticInstallments(_exoticProduct); groupBoxExoticProducts.Size = new Size(754, 298); panelExoticProduct.Enabled = true; panelExoticProduct.Visible = true; panelExoticInstallment.Visible = true; panelExoticInstallment.Enabled = false; buttonAddExoticInstallment.Enabled = false; buttonRemoveExoticInstallment.Enabled = false; buttonSaveExoticProduct.Enabled = false; panelExoticProductNavigationButtons.Enabled = false; _useExistingExoticProduct = true; panelExoticInstallment.Visible = false; groupBoxExoticInstallmentProperties.Text = MultiLanguageStrings.GetString(Ressource.FrmAddLoanProduct, "messageExoticInstallment.Text"); buttonSave.Enabled = true; }
public int AddExoticProduct(ExoticInstallmentsTable pExoticProduct, OLoanTypes loanType) { if (_productManager.IsThisExoticProductNameAlreadyExist(pExoticProduct.Name)) throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductNameAlreadyExist); if(!pExoticProduct.CheckIfSumIsOk(loanType)) throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductSumInIncorrect); pExoticProduct.Id = _productManager.AddExoticInstallmentsTable(pExoticProduct); foreach (ExoticInstallment installment in pExoticProduct) { _productManager.AddExoticInstallment(installment, pExoticProduct); } return pExoticProduct.Id; }
private static LoanProduct CreatePackage(string name, double? anticipatedTotalRepaymentPenalties, double? anticipatedTotalRepaymentPenaltiesMin, double? anticipatedTotalRepaymentPenaltiesMax, int? gracePeriod,int? gracePeriodMin,int? gracePeriodMax, decimal? interestRate,decimal? interestRateMin,decimal? interestRateMax, int? nbOfinstallments,int? nbOfinstallmentsMin,int? nbOfinstallmentsMax, List<EntryFee> entryFees, NonRepaymentPenaltiesNullableValues nonRepaymentPenalties, NonRepaymentPenaltiesNullableValues nonRepaymentPenaltiesMin, NonRepaymentPenaltiesNullableValues nonRepaymentPenaltiesMax, InstallmentType type, OCurrency amount, OCurrency amountMin, OCurrency amountMax, ExoticInstallmentsTable product, int? cycleId, List<LoanAmountCycle> amountCycles, List<RateCycle> rateCycles, List<MaturityCycle> maturityCycles, string productCode, List<ProductClientType> productClientTypes, OCurrency amountUnderLoc, OCurrency amountUnderLocMin, OCurrency amountUnderLocMax, double? anticipatedPartialRepaymentPenalties, double? anticipatedPartialRepaymentPenaltiesMin, double? anticipatedPartialRepaymentPenaltiesMax, int? compulsoryAmount, int? compulsoryAmountMin, int? compulsoryAmountMax, Currency currency ) { var package = new LoanProduct(); package.Name = name; package.Amount = amount; package.AmountMin = amountMin; package.AmountMax = amountMax; if (nonRepaymentPenalties!=null) package.NonRepaymentPenalties = new NonRepaymentPenaltiesNullableValues { InitialAmount = nonRepaymentPenalties.InitialAmount, OLB = nonRepaymentPenalties.OLB, OverDueInterest = nonRepaymentPenalties.OverDueInterest, OverDuePrincipal = nonRepaymentPenalties.OverDuePrincipal }; else if (nonRepaymentPenaltiesMin!=null && nonRepaymentPenaltiesMax!=null) { package.NonRepaymentPenaltiesMin = new NonRepaymentPenaltiesNullableValues { InitialAmount = nonRepaymentPenaltiesMin.InitialAmount, OLB = nonRepaymentPenaltiesMin.OLB, OverDueInterest = nonRepaymentPenaltiesMin.OverDueInterest, OverDuePrincipal = nonRepaymentPenaltiesMin.OverDuePrincipal }; package.NonRepaymentPenaltiesMax = new NonRepaymentPenaltiesNullableValues { InitialAmount = nonRepaymentPenaltiesMax.InitialAmount, OLB = nonRepaymentPenaltiesMax.OLB, OverDueInterest = nonRepaymentPenaltiesMax.OverDueInterest, OverDuePrincipal = nonRepaymentPenaltiesMax.OverDuePrincipal }; } package.AnticipatedTotalRepaymentPenalties = anticipatedTotalRepaymentPenalties; package.AnticipatedTotalRepaymentPenaltiesMin = anticipatedTotalRepaymentPenaltiesMin; package.AnticipatedTotalRepaymentPenaltiesMax = anticipatedTotalRepaymentPenaltiesMax; package.AnticipatedPartialRepaymentPenalties = anticipatedPartialRepaymentPenalties; package.AnticipatedPartialRepaymentPenaltiesMin = anticipatedPartialRepaymentPenaltiesMax; package.AnticipatedPartialRepaymentPenaltiesMax = anticipatedPartialRepaymentPenaltiesMin; package.GracePeriod = gracePeriod; package.GracePeriodMin = gracePeriodMin; package.GracePeriodMax = gracePeriodMax; package.InterestRate = interestRate; package.InterestRateMin = interestRateMin; package.InterestRateMax = interestRateMax; package.InstallmentType = type; package.ExoticProduct = product; package.CycleId = cycleId; package.LoanAmountCycleParams = amountCycles; package.MaturityCycleParams = maturityCycles; package.RateCycleParams = rateCycles; package.Code = productCode; package.AmountUnderLoc = amountUnderLoc; package.AmountUnderLocMin = amountUnderLocMin; package.AmountUnderLocMax = amountUnderLocMax; package.Currency = currency; package.CompulsoryAmount = compulsoryAmount; package.CompulsoryAmountMin = compulsoryAmountMin; package.CompulsoryAmountMax = compulsoryAmountMax; package.FundingLine = null; package.NbOfInstallments = nbOfinstallments; package.NbOfInstallmentsMin = nbOfinstallmentsMin; package.NbOfInstallmentsMax = nbOfinstallmentsMax; package.ProductClientTypes = productClientTypes; package.EntryFees = entryFees; return package; }
//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 TestAddExoticInstallmentInExoticProductWhenInstallmentIsNotNull() { ExoticInstallmentsTable product = new ExoticInstallmentsTable(); ExoticInstallment exoticInstallment = new ExoticInstallment(); exoticInstallment.InterestCoeff = 0; exoticInstallment.PrincipalCoeff = 0; int number = product.GetNumberOfInstallments; ProductServices productServices = new ProductServices(new User {Id = 1}); Assert.AreEqual(number + 1, productServices.AddExoticInstallmentInExoticProduct(product, exoticInstallment, 1, false).GetNumberOfInstallments); }
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); }
public void TestGetSumOfPrincipalCoeffWhenNoInstallment() { ExoticInstallmentsTable product = new ExoticInstallmentsTable(); Assert.AreEqual(0,product.SumOfPrincipalCoeff); }