コード例 #1
0
        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();
        }
コード例 #2
0
        //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 ---
        }
コード例 #3
0
        private void LoanAmortizationScheduleButtonClick(object sender, RoutedEventArgs e)
        {
            //GenerateStraightLineAmortization();
            //SetLoanProduct();
            //ShowReport();
            LoanAmortizationHeader schedule = GenerateLoanAmortizationHeader();

            ShowReport(schedule);
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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);
        }