* Copyright (C) 2014 Alexandre Spangaro * Copyright (C) 2015 Frederic France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ require '../main.inc.php'; $langs->load("loan"); /* --------------------------------------------------- * * Set Form DEFAULT values * --------------------------------------------------- */ $default_sale_price = "150000"; $default_annual_interest_percent = 7.0; $default_year_term = 30; $default_down_percent = 10; $default_show_progress = TRUE; /* --------------------------------------------------- * * Initialize Variables * --------------------------------------------------- */ $sale_price = 0; $annual_interest_percent = 0; $year_term = 0; $down_percent = 0; $this_year_interest_paid = 0; $this_year_principal_paid = 0; $form_complete = false; $show_progress = false; $monthly_payment = false; $show_progress = false; $error = false; /* --------------------------------------------------- * * Set the USER INPUT values * --------------------------------------------------- */ if (isset($_REQUEST['form_complete'])) { $sale_price = $_REQUEST['sale_price']; $annual_interest_percent = $_REQUEST['annual_interest_percent']; $year_term = $_REQUEST['year_term']; $down_percent = $_REQUEST['down_percent']; $show_progress = (isset($_REQUEST['show_progress'])) ? $_REQUEST['show_progress'] : false; $form_complete = $_REQUEST['form_complete']; } // This function does the actual mortgage calculations // by plotting a PVIFA (Present Value Interest Factor of Annuity) // table... function get_interest_factor($year_term, $monthly_interest_rate) { global $base_rate; $factor = 0; $base_rate = 1 + $monthly_interest_rate; $denominator = $base_rate; for ($i=0; $i < ($year_term * 12); $i++) { $factor += (1 / $denominator); $denominator *= $base_rate; } return $factor; } // If the form is complete, we'll start the math if ($form_complete) { // We'll set all the numeric values to JUST // numbers - this will delete any dollars signs, // commas, spaces, and letters, without invalidating // the value of the number $sale_price = preg_replace( "[^0-9.]", "", $sale_price); $annual_interest_percent = preg_replace( "[^0-9.]", "", $annual_interest_percent); $year_term = preg_replace( "[^0-9.]", "", $year_term); $down_percent = preg_replace( "[^0-9.]", "", $down_percent); if ((float) $year_term <= 0) { $errors[] = "You must enter a Sale Price of Home"; } if ((float) $sale_price <= 0) { $errors[] = "You must enter a Length of Mortgage"; } if ((float) $annual_interest_percent <= 0) { $errors[] = "You must enter an Annual Interest Rate"; } if (!$errors) { $month_term = $year_term * 12; $down_payment = $sale_price * ($down_percent / 100); $annual_interest_rate = $annual_interest_percent / 100; $monthly_interest_rate = $annual_interest_rate / 12; $financing_price = $sale_price - $down_payment; $monthly_factor = get_interest_factor($year_term, $monthly_interest_rate); $monthly_payment = $financing_price / $monthly_factor; } } else { if (!$sale_price) { $sale_price = $default_sale_price; } if (!$annual_interest_percent) { $annual_interest_percent = $default_annual_interest_percent; } if (!$year_term) { $year_term = $default_year_term; } if (!$down_percent) { $down_percent = $default_down_percent; } if (!$show_progress) { $show_progress = $default_show_progress; } } if (! empty($errors)) { setEventMessages('', $errors, 'errors'); $form_complete = false; } /* * View */ llxHeader(); print_fiche_titre($langs->trans("LoanCalc")); print $langs->trans('LoanCalcDesc'); print '
'; print ''; print ''; //print ''; //print ''; //print ''; //print ''; print ''; print ''; print ''; print ''; print ''; print '';print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; if (! empty($show_progress)) { print ''; } else { print ''; } print ''; print '
'.$langs->trans('PurchaseFinanceInfo').'
'.$langs->trans('SalePriceOfAsset').': '.$langs->trans("Currency".$conf->currency).'
'.$langs->trans('PercentageDown').':%
'.$langs->trans('LengthOfMortgage').':years
'.$langs->trans('AnnualInterestRate').':%
'.$langs->trans('ExplainCalculations').':'.$langs->trans('ShowMeCalculationsAndAmortization').''.$langs->trans('ShowMeCalculationsAndAmortization').'
'; print '
    '; print '
'; // If the form has already been calculated, the $down_payment // and $monthly_payment variables will be figured out, so we can show them in this table if ($form_complete && $monthly_payment) { print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; if ($down_percent < 20) { $pmi_per_month = 55 * ($financing_price / 100000); print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; } print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; } print '
'.$langs->trans('MortgagePaymentInformation').'
'.$langs->trans('DownPayment').':' . number_format($down_payment, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '
'.$langs->trans('AmountFinanced').':' . number_format($financing_price, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '
'.$langs->trans('MonthlyPayment').':' . number_format($monthly_payment, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '
(Principal & Interest ONLY)
 '; print '
'; echo 'Since you are putting LESS than 20% down, you will need to pay PMI (Private Mortgage Insurance), which tends to be about $55 per month for every $100,000 financed (until you have paid off 20% of your loan). This could add '."\$" . number_format($pmi_per_month, "2", ".", ",").' to your monthly payment.'; print '
'.$langs->trans('MonthlyPayment').':' . number_format(($monthly_payment + $pmi_per_month), "2", ".", ",") . $langs->trans("Currency".$conf->currency) . '
'; print '(Principal & Interest, and PMI)
 '; print '
'; $assessed_price = ($sale_price * .85); $residential_yearly_tax = ($assessed_price / 1000) * 14; $residential_monthly_tax = $residential_yearly_tax / 12; if ($pmi_per_month) { $pmi_text = "PMI and "; } echo "Residential (or Property) Taxes are a little harder to figure out... In Massachusetts, the average resedential tax rate seems to be around $14 per year for every $1,000 of your property's assessed value."; print '

'; print "Let's say that your property's assessed value is 85% of what you actually paid for it - "; print number_format($assessed_price, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . 'This would mean that your yearly residential taxes will be around'; print number_format($residential_yearly_tax, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency); print 'This could add ' . number_format($residential_monthly_tax, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . 'to your monthly payment'; print '
TOTAL Monthly Payment:' . number_format(($monthly_payment + $pmi_per_month + $residential_monthly_tax), "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '
'; print '(including '.$pmi_text.' residential tax)
'; print '
'; // This prints the calculation progress and // the instructions of HOW everything is figured // out if ($form_complete && $show_progress) { $step = 1; print '

'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '
'. $step++ .''; print $langs->trans('DownPaymentDesc').'

'; print number_format($down_payment,"2",".",",") . ' ' . $langs->trans("Currency".$conf->currency) . ' = '; print number_format($sale_price,"2",".",",") . ' ' . $langs->trans("Currency".$conf->currency) . ' X (' . $down_percent . ' / 100)'; print '
' . $step++ . ''; print $langs->trans('InterestRateDesc') . '

'; print $annual_interest_rate . ' = ' . $annual_interest_percent . '% / 100'; print '
'; print $langs->trans('MonthlyFactorDesc') . ':'; print '
' . $step++ . ''; print $langs->trans('MonthlyInterestRateDesc') . '

'; print $monthly_interest_rate . ' = ' . $annual_interest_rate . ' / 12'; print '
' . $step++ . ''; print $langs->trans('MonthTermDesc') . '

'; print $month_term . ' '. $langs->trans('Months') . ' = ' . $year_term . ' '. $langs->trans('Years') . ' X 12'; print '
' . $step++ . ''; print $langs->trans('MonthlyPaymentDesc') . ':
'; print $langs->trans('MonthlyPayment').' = ' . number_format($financing_price, "2", "", "") . ' * '; print '(1 - ((1 + ' . number_format($monthly_interest_rate, "4", "", "") . ')'; print '-(' . $month_term . '))))'; print '

'; print $langs->trans('AmortizationPaymentDesc'); print '
'; print '
'; // Set some base variables $principal = $financing_price; $current_month = 1; $current_year = 1; // This basically, re-figures out the monthly payment, again. $power = -($month_term); $denom = pow((1 + $monthly_interest_rate), $power); $monthly_payment = $principal * ($monthly_interest_rate / (1 - $denom)); print '

'.$langs->trans('AmortizationMonthlyPaymentOverYears', number_format($monthly_payment, "2", ".", ","), $year_term)."
\n"; print ''; // This LEGEND will get reprinted every 12 months $legend = ''; $legend.= ''; $legend.= ''; $legend.= ''; $legend.= ''; $legend.= ''; print $legend; // Loop through and get the current month's payments for // the length of the loan while ($current_month <= $month_term) { $interest_paid = $principal * $monthly_interest_rate; $principal_paid = $monthly_payment - $interest_paid; $remaining_balance = $principal - $principal_paid; $this_year_interest_paid = $this_year_interest_paid + $interest_paid; $this_year_principal_paid = $this_year_principal_paid + $principal_paid; $var = !$var; print ""; print ''; print ''; print ''; print ''; print ''; ($current_month % 12) ? $show_legend = FALSE : $show_legend = TRUE; if ($show_legend) { print ''; print ''; print ''; $total_spent_this_year = $this_year_interest_paid + $this_year_principal_paid; print ''; print ''; print ''; print ''; print ''; print ''; print ''; $current_year++; $this_year_interest_paid = 0; $this_year_principal_paid = 0; if (($current_month + 6) < $month_term) { echo $legend; } } $principal = $remaining_balance; $current_month++; } print "
' . $langs->trans("Month") . '' . $langs->trans("Interest") . '' . $langs->trans("Capital") . '' . $langs->trans("Position") . '
' . $current_month . '' . number_format($interest_paid, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '' . number_format($principal_paid, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '' . number_format($remaining_balance, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency) . '
' . $langs->trans("Totalsforyear") . ' ' . $current_year . '
 '; print $langs->trans('YouWillSpend', number_format($total_spent_this_year, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency), $current_year) . '
'; print $langs->trans('GoToInterest', number_format($this_year_interest_paid, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency)) . '
'; print $langs->trans('GoToPrincipal', number_format($this_year_principal_paid, "2", ".", ",") . ' ' . $langs->trans("Currency".$conf->currency)) . '
'; print '
 
\n"; } llxFooter(); $db->close();