diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..1545b02 --- /dev/null +++ b/.hgignore @@ -0,0 +1,3 @@ +./venv/ +.hgignore +.Python diff --git a/mortgage/templates/main.html b/mortgage/templates/main.html index 9edc972..1b0c7db 100644 --- a/mortgage/templates/main.html +++ b/mortgage/templates/main.html @@ -74,17 +74,18 @@ - + - - - - + + + + + @@ -97,13 +98,14 @@ + {% if item.month == 12 or loop.last %} - + {% endif %} {% endfor %} - +
Loan HistoryLoan History
# Due Date Date Paid Days InterestPayment AmtPrincipal PmtInterest PmtNew BalancePayment AmtPrincipal PmtInterest PmtLate FeeNew Balance
{{ "$%.2f"|format(item.payment_amount) }} {{ "$%.2f"|format(item.principal_payment) }} {{ "$%.2f"|format(item.interest_payment) }} {{ "$%.2f"|format(item.late_fee) }} {{ "$%.2f"|format(item.new_balance) }}
Total interest paid in {{item.year}} is {{ "$%.2f"|format(item.annual_interest_to_date) }}.
Total interest paid in {{item.year}} is {{ "$%.2f"|format(item.annual_interest_to_date) }}.
Total interest paid to date is {{ "$%.2f"|format(model.total_interest_paid_to_date) }}.
Total interest paid to date is {{ "$%.2f"|format(model.total_interest_paid_to_date) }}.
@@ -172,6 +174,8 @@ Payment Amount: + Late Fee Amount: + diff --git a/mortgage/templates/statement.html.jinja b/mortgage/templates/statement.html.jinja index 48e124c..72db61f 100644 --- a/mortgage/templates/statement.html.jinja +++ b/mortgage/templates/statement.html.jinja @@ -27,10 +27,11 @@ Due Date Date Paid Days Interest - Payment Amt - Principal Pmt - Interest Pmt - New Balance + Payment Amt + Principal Pmt + Interest Pmt + Late Fee + New Balance {% for item in model.past_payments %} @@ -41,6 +42,7 @@ {{ "$%.2f"|format(item.payment_amount) }} {{ "$%.2f"|format(item.principal_payment) }} {{ "$%.2f"|format(item.interest_payment) }} + {{ "$%.2f"|format(item.late_fee) }} {{ "$%.2f"|format(item.new_balance) }} {% if item.month == 12 or loop.last %} diff --git a/mortgage/templates/statement.pdf.jinja b/mortgage/templates/statement.pdf.jinja index 48e124c..944d6f3 100644 --- a/mortgage/templates/statement.pdf.jinja +++ b/mortgage/templates/statement.pdf.jinja @@ -27,10 +27,11 @@ Due Date Date Paid Days Interest - Payment Amt - Principal Pmt - Interest Pmt - New Balance + Payment Amt + Principal Pmt + Interest Pmt + Late Fee + New Balance {% for item in model.past_payments %} @@ -41,6 +42,7 @@ {{ "$%.2f"|format(item.payment_amount) }} {{ "$%.2f"|format(item.principal_payment) }} {{ "$%.2f"|format(item.interest_payment) }} + {{ "$%.2f"|format(item.late_fee) }} {{ "$%.2f"|format(item.new_balance) }} {% if item.month == 12 or loop.last %} @@ -56,9 +58,9 @@ - + - + diff --git a/mortgage/templates/statement.text.jinja b/mortgage/templates/statement.text.jinja index d7fbef2..e205e2b 100644 --- a/mortgage/templates/statement.text.jinja +++ b/mortgage/templates/statement.text.jinja @@ -7,6 +7,7 @@ Payment History Payment Amount Principal Payment Interest Payment + Late Fee New Balance {% for item in past_payments %} @@ -17,6 +18,7 @@ Payment History {{ item.payment_amount }} {{ item.principal_payment }} {{ item.interest_payment }} +{{ item.late_fee }} {{ item.new_balance }} {% if item.print_interest_total %} diff --git a/mortgage/web.py b/mortgage/web.py index 90da3df..7413512 100644 --- a/mortgage/web.py +++ b/mortgage/web.py @@ -74,9 +74,9 @@ def update_file(): if proceed_flag is True: try: - backup_filename = loanFile + ".backup-" + datetime.now().strftime("%Y-%m-%d %H-%M-%S") + backup_filename = loanFile + ".backup-" + datetime.now().strftime("%Y-%m-%d %H-%M-%S") + ".json" backup_file = open(getFullPathofLoanFile(backup_filename), 'w+') - json.dump(data, backup_file) + json.dump(data, backup_file, indent=2) backup_file.close() except: messages.append("A backup file could not be created. Your payment was not recorded.") @@ -88,7 +88,7 @@ def update_file(): try: payment_history.append( [payment_date, str(payment_amount)]) file = open(getFullPathofLoanFile(loanFile), 'w+') - json.dump(data, file) + json.dump(data, file, indent=2) file.close() except: messages.append("An error occurred writing to the file. Your payment file may be corrupt, " + \ @@ -252,6 +252,10 @@ def amortizeLoan(loan): payment_date = datetime.strptime((payment[0]), '%Y-%m-%d').date() payment_amount = Decimal(payment[1]).quantize(Decimal("1.00")) days_since_last_payment = (payment_date - interest_paid_through_date).days + if len(payment)>2: + late_fee = Decimal(payment[2]).quantize(Decimal("1.00")) + else: + late_fee = Decimal("0.00") #check for out of order payments, generally a sign of a data entry problem, especially years if days_since_last_payment < 0: @@ -260,7 +264,7 @@ def amortizeLoan(loan): quit() new_interest = (days_since_last_payment * remaining_principal * daily_interest_rate).quantize(Decimal("0.00")) - new_principal = payment_amount - new_interest + new_principal = payment_amount - new_interest - late_fee interest_paid_through_date = payment_date total_interest = total_interest + new_interest annual_interest = annual_interest + new_interest @@ -276,11 +280,12 @@ def amortizeLoan(loan): payment_record['payment_date'] = payment_date payment_record['days_of_interest'] = days_since_last_payment payment_record['payment_amount'] = payment_amount - payment_record['principal_payment'] = payment_amount - new_interest + payment_record['principal_payment'] = payment_amount - new_interest - late_fee payment_record['interest_payment'] = new_interest payment_record['new_balance'] = remaining_principal payment_record['interest_to_date'] = total_interest payment_record['annual_interest_to_date'] = annual_interest + payment_record['late_fee'] = late_fee past_payments.append(payment_record) payment_number = payment_number + 1
## Due DateDays InterestDays Interest Payment Amt Principal Pmt Interest Pmt