private void GenerateStraightLineAmortization() { Result result = ValidateEntries(); if (!result.Success) { MessageWindow.ShowAlertMessage(result.Message); return; } //_loanAmortization.NumberOfPayments = LoanTermsCombo.SelectedIndex + 1; //var selectedTerm = (string) LoanTermsCombo.SelectedItem; //if (selectedTerm == null) //{ // _loanAmortization.NumberOfPayments = _loanProduct.MinimumTerm; //}else{ // var jea = selectedTerm.Split(); // var numberOfPayments = Convert.ToInt16(jea[0]); // _loanAmortization.NumberOfPayments = numberOfPayments; //} //_loanAmortization.LoanAmount = _loanDetails.LoanAmount; //_loanAmortization.NumberOfPayments = _loanDetails.LoanTerms; //_loanAmortization.AnnualInterestRate = _loanDetails.InterestRate; //_loanAmortization.CreateStraightLineAmortizationSchedule(); _loanAmortizationHeader = GenerateLoanAmortizationHeader(); }
//private void ShowReport() //{ // if (_loanAmortization.AmortizationSchedule == null) // return; // var dtLoanAmortizationDetails = new DataTable(); // dtLoanAmortizationDetails.TableName = "loan_amortization_details"; // dtLoanAmortizationDetails.Columns.Add("PaymentDate", typeof(DateTime)); // dtLoanAmortizationDetails.Columns.Add("PaymentNumber", typeof(int)); // dtLoanAmortizationDetails.Columns.Add("BeginningBalance", typeof(decimal)); // dtLoanAmortizationDetails.Columns.Add("ScheduledPayment", typeof(decimal)); // dtLoanAmortizationDetails.Columns.Add("Interest", typeof(decimal)); // dtLoanAmortizationDetails.Columns.Add("CapitalBuildUp", typeof(decimal)); // dtLoanAmortizationDetails.Columns.Add("MonthlyAmortization", typeof(decimal)); // dtLoanAmortizationDetails.Columns.Add("EndingBalance", typeof(decimal)); // var beginningBalance = _loanAmortization.LoanAmount; // foreach (var schedule in _loanAmortization.AmortizationSchedule) // { // DataRow dtRowDetails = dtLoanAmortizationDetails.NewRow(); // dtRowDetails["PaymentDate"] = schedule.Date; // dtRowDetails["PaymentNumber"] = schedule.PaymentNo; // dtRowDetails["BeginningBalance"] = beginningBalance; // dtRowDetails["ScheduledPayment"] = schedule.Amount; // dtRowDetails["Interest"] = schedule.Interest; // dtRowDetails["CapitalBuildUp"] = schedule.CapitalBuildUp; // dtRowDetails["MonthlyAmortization"] = schedule.Principal; // dtRowDetails["EndingBalance"] = schedule.Balance; // dtLoanAmortizationDetails.Rows.Add(dtRowDetails); // beginningBalance = schedule.Balance; // } // var dtLoanAmortizationHeader = new DataTable(); // dtLoanAmortizationDetails.TableName = "loan_amortization_header"; // dtLoanAmortizationHeader.Columns.Add("MemberCode", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("MemberName", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("MemberAddress", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("AccountCode", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("Title", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("Term", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("Principal", typeof(decimal)); // dtLoanAmortizationHeader.Columns.Add("LoanAmount", typeof(decimal)); // dtLoanAmortizationHeader.Columns.Add("DateGranted", typeof(DateTime)); // dtLoanAmortizationHeader.Columns.Add("InterestRate", typeof(decimal)); // dtLoanAmortizationHeader.Columns.Add("Terms", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("ModeOfPayment", typeof(string)); // dtLoanAmortizationHeader.Columns.Add("MaturityDate", typeof(DateTime)); // dtLoanAmortizationHeader.Columns.Add("Payment", typeof(decimal)); // dtLoanAmortizationHeader.Columns.Add("NumberOfPayment", typeof(decimal)); // dtLoanAmortizationHeader.Columns.Add("MonthlySD", typeof(decimal)); // DataRow dtRowHeader = dtLoanAmortizationHeader.NewRow(); // dtRowHeader["MemberCode"] = _loanDetails.MemberCode; // dtRowHeader["MemberName"] = _loanDetails.MemberName; // dtRowHeader["MemberAddress"] = AddressBox.Text; // dtRowHeader["AccountCode"] = _loanDetails.AccountCode; // dtRowHeader["Title"] = _loanDetails.AccountTitle; // dtRowHeader["Term"] = LoanTermsCombo.SelectedItem; // dtRowHeader["Principal"] = _loanDetails.LoanAmount; // dtRowHeader["LoanAmount"] = _loanDetails.LoanAmount; // dtRowHeader["DateGranted"] = _loanDetails.GrantedDate; // dtRowHeader["InterestRate"] = _loanDetails.InterestRate * 100; // dtRowHeader["Terms"] = LoanTermsCombo.SelectedItem; // dtRowHeader["ModeOfPayment"] = _loanDetails.ModeOfPayment; // dtRowHeader["MaturityDate"] = _loanDetails.MaturityDate; // dtRowHeader["Payment"] = _loanDetails.Payment; // dtRowHeader["NumberOfPayment"] = _loanAmortization.NumberOfPayments; // dtRowHeader["MonthlySD"] = _loanAmortization.MonthlyPayment; // dtLoanAmortizationHeader.Rows.Add(dtRowHeader); // //ReportController.GenerateLoanAmortizationReport(dtLoanAmortizationHeader, dtLoanAmortizationDetails); // try // { // var dataTables = new DataTable[2]; // dataTables[0] = dtLoanAmortizationHeader; // dataTables[1] = dtLoanAmortizationDetails; // var reportItem = new ReportItem(); // reportItem.Title = "Loan Amortization Schedule"; // dataTables[0].TableName = "loan_amortization_header"; // dataTables[1].TableName = "loan_amortization_details"; // var result = reportItem.LoadReport(dataTables, "loan_amortization_schedule.rpt"); // if(!result.Success) // { // MessageWindow.ShowAlertMessage(result.Message); // } // } // catch (Exception e) // { // MessageWindow.ShowAlertMessage(e.Message); // } // dtLoanAmortizationHeader.Dispose(); // dtLoanAmortizationDetails.Dispose(); //} private void UpdateSummaryFields() { #region --- REFRESH DATE FIELDS & LOAN TERM --- //_loanAmortization.StartDate = _loanDetails.GrantedDate; //_loanAmortization.PayOffDate = _loanDetails.GrantedDate.AddMonths(_loanDetails.LoanTerms); _loanAmortizationHeader = GenerateLoanAmortizationHeader(); #endregion --- DATE FIELDS --- #region --- CHECK IF WE CAN PERFORM CALCULATION --- Result result = ValidateEntries(); if (result.Success) { //GenerateStraightLineAmortization(); _loanDetails.Payment = _loanAmortizationHeader.MonthlyAmortization; _loanDetails.InterestAmount = _loanAmortizationHeader.PaymentSchedules.Sum(sched => sched.Interest); _loanDetails.InterestAmortization = _loanAmortizationHeader.PaymentSchedules.First().Interest; _loanDetails.CutOffDate = _loanAmortizationHeader.FirstPaymentDate; _loanDetails.MaturityDate = _loanAmortizationHeader.DateMaturity; } else { MessageWindow.ShowAlertMessage(result.Message); } #endregion --- CHECK IF WE CAN PERFORM CALCULATION --- }
private void LoanAmortizationScheduleButtonClick(object sender, RoutedEventArgs e) { //GenerateStraightLineAmortization(); //SetLoanProduct(); //ShowReport(); LoanAmortizationHeader schedule = GenerateLoanAmortizationHeader(); ShowReport(schedule); }
internal LoanComputationWindow(LoanDetails loanDetail, LoanProduct loanProduct, LoanAmortizationHeader loanAmortizationHeader) : this() { _loanDetails = loanDetail; _loanComputation = new LoanComputation(_loanDetails.LoanAmount, loanProduct.ID) { LoanDetails = _loanDetails }; _loanAmortizationHeader = loanAmortizationHeader; InitializeControls(); DataContext = _loanComputation; }
private LoanAmortizationHeader GenerateLoanAmortizationHeader() { string codeMember = _borrower.MemberCode; string codeAccount = _loanProduct.ProductCode; decimal amountLoan = _loanDetails.LoanAmount; int termLoan = _loanDetails.LoanTerms; decimal rateAnnualInterest = _loanProduct.AnnualInterestRate; DateTime grantedDate = _loanDetails.GrantedDate; decimal monthlyCapitalBuildUp = _loanProduct.MonthlyCapitalBuildUp; LoanAmortizationHeader schedule = LoanAmortizationController.GenerateLoanAmortization( codeMember, codeAccount, amountLoan, termLoan, rateAnnualInterest, grantedDate, monthlyCapitalBuildUp); return(schedule); }
private void ShowReport(LoanAmortizationHeader scheduleLoanAmortization) { if (scheduleLoanAmortization == null) { return; } var dtLoanAmortizationDetails = new DataTable(); dtLoanAmortizationDetails.TableName = "loan_amortization_details"; dtLoanAmortizationDetails.Columns.Add("payment_date", typeof(DateTime)); dtLoanAmortizationDetails.Columns.Add("payment_no", typeof(int)); dtLoanAmortizationDetails.Columns.Add("beginning_balance", typeof(decimal)); dtLoanAmortizationDetails.Columns.Add("payment", typeof(decimal)); dtLoanAmortizationDetails.Columns.Add("interest", typeof(decimal)); dtLoanAmortizationDetails.Columns.Add("capital_build_up", typeof(decimal)); dtLoanAmortizationDetails.Columns.Add("amortization", typeof(decimal)); dtLoanAmortizationDetails.Columns.Add("ending_balance", typeof(decimal)); foreach (LoanAmortizationDetail schedule in scheduleLoanAmortization.PaymentSchedules) { DataRow dtRowDetails = dtLoanAmortizationDetails.NewRow(); dtRowDetails["payment_date"] = schedule.PaymentDate; dtRowDetails["payment_no"] = schedule.PaymentNo; dtRowDetails["beginning_balance"] = schedule.BeginningBalance; dtRowDetails["payment"] = schedule.Payment; dtRowDetails["interest"] = schedule.Interest; dtRowDetails["capital_build_up"] = schedule.CapitalBuildUp; dtRowDetails["amortization"] = schedule.Amortization; dtRowDetails["ending_balance"] = schedule.EndingBalance; dtLoanAmortizationDetails.Rows.Add(dtRowDetails); } var dtLoanAmortizationHeader = new DataTable(); dtLoanAmortizationDetails.TableName = "loan_amortization_header"; dtLoanAmortizationHeader.Columns.Add("member_code", typeof(string)); dtLoanAmortizationHeader.Columns.Add("member_name", typeof(string)); dtLoanAmortizationHeader.Columns.Add("member_address", typeof(string)); dtLoanAmortizationHeader.Columns.Add("account_code", typeof(string)); dtLoanAmortizationHeader.Columns.Add("account_title", typeof(string)); dtLoanAmortizationHeader.Columns.Add("loan_amount", typeof(decimal)); dtLoanAmortizationHeader.Columns.Add("monthly_amortization", typeof(decimal)); dtLoanAmortizationHeader.Columns.Add("monthly_capital_build_up", typeof(decimal)); dtLoanAmortizationHeader.Columns.Add("annual_interest_rate", typeof(decimal)); dtLoanAmortizationHeader.Columns.Add("loan_term", typeof(int)); dtLoanAmortizationHeader.Columns.Add("mode_of_payment", typeof(string)); dtLoanAmortizationHeader.Columns.Add("date_granted", typeof(DateTime)); dtLoanAmortizationHeader.Columns.Add("date_maturity", typeof(DateTime)); dtLoanAmortizationHeader.Columns.Add("first_payment_date", typeof(DateTime)); DataRow dtRowHeader = dtLoanAmortizationHeader.NewRow(); dtRowHeader["member_code"] = scheduleLoanAmortization.MemberCode; dtRowHeader["member_name"] = scheduleLoanAmortization.MemberName; dtRowHeader["member_address"] = scheduleLoanAmortization.MemberAddress; dtRowHeader["account_code"] = scheduleLoanAmortization.AccountCode; dtRowHeader["account_title"] = scheduleLoanAmortization.AccountTitle; dtRowHeader["loan_amount"] = scheduleLoanAmortization.LoanAmount; dtRowHeader["monthly_amortization"] = scheduleLoanAmortization.MonthlyAmortization; dtRowHeader["monthly_capital_build_up"] = scheduleLoanAmortization.MonthlyCapitalBuildUp; dtRowHeader["annual_interest_rate"] = scheduleLoanAmortization.AnnualInterestRate; dtRowHeader["loan_term"] = scheduleLoanAmortization.LoanTerm; dtRowHeader["mode_of_payment"] = scheduleLoanAmortization.ModeOfPayment; dtRowHeader["date_granted"] = scheduleLoanAmortization.DateGranted; dtRowHeader["date_maturity"] = scheduleLoanAmortization.DateMaturity; dtRowHeader["first_payment_date"] = scheduleLoanAmortization.FirstPaymentDate; dtLoanAmortizationHeader.Rows.Add(dtRowHeader); //ReportController.GenerateLoanAmortizationReport(dtLoanAmortizationHeader, dtLoanAmortizationDetails); try { var dataTables = new DataTable[2]; dataTables[0] = dtLoanAmortizationHeader; dataTables[1] = dtLoanAmortizationDetails; var reportItem = new ReportItem(); reportItem.Title = "Loan Amortization Schedule"; dataTables[0].TableName = "loan_amortization_header"; dataTables[1].TableName = "loan_amortization_details"; Result result = reportItem.LoadReport(dataTables, "loan_amortization_schedule.rpt"); if (!result.Success) { MessageWindow.ShowAlertMessage(result.Message); } } catch (Exception e) { MessageWindow.ShowAlertMessage(e.Message); } dtLoanAmortizationHeader.Dispose(); dtLoanAmortizationDetails.Dispose(); }
public static LoanAmortizationHeader GenerateLoanAmortization( string codeMember, string codeAccount, decimal amountLoan, int termLoan, decimal rateAnnualInterest, System.DateTime grantedDate, decimal monthlyCapitalBuildUp) { var schedule = new LoanAmortizationHeader(); // Member Information var member = Nfmb.FindByCode(codeMember); schedule.MemberCode = member.MemberCode; schedule.MemberName = member.MemberName; schedule.MemberAddress = member.CompleteAddress(); // Account Information var account = Account.FindByCode(codeAccount); schedule.AccountCode = account.AccountCode; schedule.AccountTitle = account.AccountTitle; schedule.LoanAmount = amountLoan; schedule.MonthlyCapitalBuildUp = monthlyCapitalBuildUp; schedule.AnnualInterestRate = rateAnnualInterest; schedule.LoanTerm = termLoan; schedule.ModeOfPayment = "Monthly"; schedule.DateGranted = grantedDate; schedule.DateMaturity = grantedDate.AddMonths(termLoan); schedule.FirstPaymentDate = grantedDate.AddMonths(1); var monthlyInterest = System.Math.Round((amountLoan * (schedule.AnnualInterestRate / 12)), 2); var monthlyPayment = System.Math.Round((amountLoan / termLoan), 2); schedule.MonthlyAmortization = monthlyPayment + monthlyInterest + monthlyCapitalBuildUp; var runningBalance = amountLoan; for (int i = 1; i < termLoan; i++) { var item = new LoanAmortizationDetail(); item.PaymentDate = grantedDate.AddMonths(i); item.PaymentNo = i; item.BeginningBalance = runningBalance; item.Payment = monthlyPayment; item.Interest = monthlyInterest; item.CapitalBuildUp = schedule.MonthlyCapitalBuildUp; item.Amortization = item.Payment + monthlyInterest + item.CapitalBuildUp; item.EndingBalance = item.BeginningBalance - item.Payment; schedule.PaymentSchedules.Add(item); runningBalance = item.EndingBalance; } // Add final payment that, balancing discrepancies in monthly payment and amortization var lastpayment = new LoanAmortizationDetail(); lastpayment.PaymentDate = grantedDate.AddMonths(termLoan); lastpayment.PaymentNo = termLoan; lastpayment.BeginningBalance = runningBalance; lastpayment.Payment = amountLoan - schedule.PaymentSchedules.Sum(payment => payment.Payment); lastpayment.Interest = monthlyInterest; lastpayment.CapitalBuildUp = monthlyCapitalBuildUp; lastpayment.Amortization = lastpayment.Payment + monthlyInterest + lastpayment.CapitalBuildUp; lastpayment.EndingBalance = lastpayment.BeginningBalance - lastpayment.Payment; schedule.PaymentSchedules.Add(lastpayment); return(schedule); }