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 @@
- | Loan History |
+ Loan History |
| #
| Due Date |
Date Paid |
Days Interest |
- Payment Amt |
- Principal Pmt |
- Interest Pmt |
- New Balance |
+ Payment Amt |
+ Principal Pmt |
+ Interest Pmt |
+ Late Fee |
+ New Balance |
@@ -97,13 +98,14 @@
{{ "$%.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 %}
- | 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) }}. |
{% endif %}
{% endfor %}
- | 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 @@
- | # |
+ # |
Due Date |
- Days Interest |
+ Days Interest |
Payment Amt |
Principal Pmt |
Interest Pmt |
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