private void btnAddExtraPayment_Click(object sender, EventArgs e) { //clear all extra payments lblExtraPaymentAmountValidation.Text = "ValidationText"; lblExtraPaymentAmountValidation.Visible = false; lblExtraPaymentsStartDateValidation.Text = "ValidationText"; lblExtraPaymentsStartDateValidation.Visible = false; lblNumberofPaymentsValidation.Text = "ValidationText"; lblNumberofPaymentsValidation.Visible = false; lblPaymentIntervalValidation.Text = "ValidationText"; lblPaymentIntervalValidation.Visible = false; //Fire Event OnClickbtnAddExtraPaymentTest(EventArgs.Empty); //Add value to extra payment extraPayment.ExtraPaymentAmount = decimal.Parse(txtExtraPaymentAmount.Text); extraPayment.NumberofPayments = Int32.Parse(txtNumberofExtraPayments.Text); extraPayment.PaymentInterval = Int32.Parse(txtPaymentInterval.Text); extraPayment.StartDate = dtFirstExtraPayment.Value; //Validate the extra payment var extraPaymentValidator = new ExtraPaymentsValidator(); var result = extraPaymentValidator.Validate(extraPayment); if (result.IsValid) { //Add extra payment to list extraPaymentsList.Add(extraPayment); } else { //throw an error foreach (var failure in result.Errors) { switch (failure.PropertyName) { case "ExtraPaymentAmount": lblExtraPaymentAmountValidation.Text = failure.ErrorMessage; lblExtraPaymentAmountValidation.Visible = true; break; case "StartDate": lblExtraPaymentsStartDateValidation.Text = failure.ErrorMessage; lblExtraPaymentsStartDateValidation.Visible = true; break; case "NumberofPayments": lblNumberofPaymentsValidation.Text = failure.ErrorMessage; lblNumberofPaymentsValidation.Visible = true; break; case "PaymentInterval": lblPaymentIntervalValidation.Text = failure.ErrorMessage; lblPaymentIntervalValidation.Visible = true; break; } } } //Extra Payments dgvExtraPaymentsTable.AutoGenerateColumns = false; //dgvExtraPaymentsTable.AutoSizeColumnsMode = true; var source2 = new BindingSource(extraPaymentsList, null); dgvExtraPaymentsTable.DataSource = source2; // Initialize and add column Extra Payment Amt DataGridViewColumn column1A = new DataGridViewTextBoxColumn(); column1A.DataPropertyName = "ExtraPaymentAmount"; column1A.Frozen = false; column1A.Name = "Extra Payment Amt"; dgvExtraPaymentsTable.Columns.Add(column1A); // Initialize and add column Date DataGridViewColumn column2A = new DataGridViewTextBoxColumn(); column2A.DataPropertyName = "StartDate"; column2A.Frozen = false; column2A.Name = "Date"; dgvExtraPaymentsTable.Columns.Add(column2A); // Initialize and add column No of Payments DataGridViewColumn column3A = new DataGridViewTextBoxColumn(); column3A.DataPropertyName = "NumberofPayments"; column3A.Frozen = false; column3A.Name = "No of Payments"; dgvExtraPaymentsTable.Columns.Add(column3A); // Initialize and add column Payment Interval DataGridViewColumn column4A = new DataGridViewTextBoxColumn(); column4A.DataPropertyName = "PaymentInterval"; column4A.Frozen = false; column4A.Name = "Payment Interval"; dgvExtraPaymentsTable.Columns.Add(column4A); //Column formatting dgvExtraPaymentsTable.Columns["Extra Payment Amt"].DefaultCellStyle.Format = "c"; dgvExtraPaymentsTable.ScrollBars = ScrollBars.Vertical; }
static void Main(string[] args) { Console.WriteLine("Mortgage Application"); Console.ForegroundColor = ConsoleColor.Green; var mortgageValues = new MortgageInput() { LoanDescription = "This is a test loan", LoanTerm = 30, InterestRate = 0.03875M, DownPayment = 11960M, TotalLoanAmount = 119600M, StartDate = new DateTime(2021, 5, 1) }; var validateMortgageInput = new MortgageInputValidator(); var resultTraditionalMortgageInput = validateMortgageInput.Validate(mortgageValues); var amortizationSchedule = mortgageValues.CalculatedPeriodMortgageData(); //-------------------------------------------------------------------------------------------------------- List <ExtraPayments> testExtraPayments = new List <ExtraPayments>(); var extraPayment1 = new ExtraPayments() { ExtraPaymentAmount = 1000M, NumberofPayments = 150, PaymentInterval = 1, StartDate = new DateTime(2021, 6, 1) }; var validateExtraPayment1 = new ExtraPaymentsValidator(); var result1 = validateExtraPayment1.Validate(extraPayment1); if (result1.IsValid) { testExtraPayments.Add(extraPayment1); } var extraPayment2 = new ExtraPayments() { ExtraPaymentAmount = 500M, NumberofPayments = 20, PaymentInterval = 3, StartDate = new DateTime(2021, 6, 1) }; var validateExtraPayment2 = new ExtraPaymentsValidator(); var result2 = validateExtraPayment2.Validate(extraPayment2); if (result2.IsValid) { testExtraPayments.Add(extraPayment2); } var extraPayment3 = new ExtraPayments() { ExtraPaymentAmount = 10M, NumberofPayments = 10, PaymentInterval = 1, StartDate = new DateTime(2021, 6, 1) }; var validateExtraPayment3 = new ExtraPaymentsValidator(); var result3 = validateExtraPayment3.Validate(extraPayment3); if (result3.IsValid) { testExtraPayments.Add(extraPayment3); } var testMortgageValuesExtraPayments = new MortgageInputExtraPayments() { LoanDescription = "This is a test loan", LoanTerm = 30, InterestRate = 0.03875M, DownPayment = 11960M, TotalLoanAmount = 119600M, StartDate = new DateTime(2021, 5, 1), ExtraPayments = testExtraPayments }; var validateMortgageValues = new MortgageInputExtraPaymentsValidator(); var mortgageResult = validateMortgageValues.Validate(testMortgageValuesExtraPayments); //Create Amortization Schedule var testAmortizationSchedule = testMortgageValuesExtraPayments.CalculatedPeriodMortgageData(); //Calculate Summary Values var summaryMortgageInfo = new MortgageExecutiveSummary(); summaryMortgageInfo.CalculateMortgageExecutiveSummary(testAmortizationSchedule, testMortgageValuesExtraPayments); //Print out results foreach (var period in testAmortizationSchedule) { Console.WriteLine($"Period No:{period.IDNumber}"); Console.WriteLine($"Date:{period.DateColumn}"); Console.WriteLine($"Remaining Balance:{String.Format("{0:C2}", period.RemainingBalance)}"); Console.WriteLine($"Principal Paid:{String.Format("{0:C2}", period.PrincipalPaid)}"); Console.WriteLine($"Interest Paid:{String.Format("{0:C2}", period.InterestPaid)}"); Console.WriteLine($"Fixed Payment:{String.Format("{0:C2}", period.fixedPayment)}"); Console.WriteLine($"Total Interest Paid:{String.Format("{0:C2}", period.TotalInterestPaid)}"); Console.WriteLine($"Extra Payment:{String.Format("{0:C2}", period.ExtraPayment)}"); Console.WriteLine($"Extra Payment Cumulative:{String.Format("{0:C2}", period.CumulativeExtraPayment)}"); Console.WriteLine($"------------------------------------------------"); } //Final Results Console.WriteLine(""); Console.WriteLine($"------------------------------------------------"); Console.WriteLine("FINAL RESULTS"); Console.WriteLine($"------------------------------------------------"); //-------------------------------------------------------------------------------- //Excel Print var excelApp = new ExcelMortgageOutput(); var excelbyteArray = excelApp.CreateExcelTestFile(amortizationSchedule, testAmortizationSchedule, summaryMortgageInfo); //Text File Print var textPrint = new TextMortgageOutput(); var textByteArray = textPrint.CreateTextFile(testAmortizationSchedule); }