Example #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));
        }
Example #2
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);
        }
        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);
        }
Example #4
0
 private static void CheckValueForPackageExoticProduct(ExoticInstallmentsTable exoticProduct)
 {
     if(exoticProduct == null)
         throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductIsNull);
     if(exoticProduct.Id == 0)
         throw new OpenCbsPackageSaveException(OpenCbsPackageSaveExceptionEnum.ExoticProductIsBad);
 }
Example #5
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));
 }
        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);
        }
Example #8
0
        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;
 }
Example #11
0
        /// <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());
            }
        }
Example #12
0
        /// <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();
            }
        }
Example #13
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));
 }
Example #14
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);
        }
Example #15
0
 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);
 }
Example #16
0
 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;
 }
Example #17
0
        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));
        }
Example #18
0
        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();
        }
Example #19
0
        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);
        }
Example #20
0
        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);
        }
Example #22
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);
        }
Example #24
0
 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;
 }
Example #25
0
        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;
        }
Example #26
0
        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;
        }
Example #27
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;
        }
Example #28
0
 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);
 }
Example #29
0
        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);
        }
Example #30
0
 public void TestGetSumOfPrincipalCoeffWhenNoInstallment()
 {
     ExoticInstallmentsTable product = new ExoticInstallmentsTable();
     Assert.AreEqual(0,product.SumOfPrincipalCoeff);
 }