Displays total of extra payments made.
Changed 'paid'column, which represented the due for the term, to 'due'.
This commit is contained in:
42
src/amort.py
42
src/amort.py
@@ -16,7 +16,8 @@ def generate_amortization_schedule(principal, interest_rate, loan_term, events=[
|
||||
|
||||
one_time_payment = None
|
||||
if events != []:
|
||||
one_time_payment = events.pop(0)
|
||||
one_time_payment = events["extra-payments"].pop(0)
|
||||
|
||||
for payment_number in range(1, num_payments + 1):
|
||||
# Calculate interest for the current period
|
||||
if remaining_balance == 0:
|
||||
@@ -29,8 +30,8 @@ def generate_amortization_schedule(principal, interest_rate, loan_term, events=[
|
||||
# Apply one-time payment if provided
|
||||
if one_time_payment and payment_number == one_time_payment['payment-number']:
|
||||
principal_payment += one_time_payment['amount']
|
||||
if events != []:
|
||||
one_time_payment = events.pop(0)
|
||||
if events["extra-payments"] != []:
|
||||
one_time_payment = events["extra-payments"].pop(0)
|
||||
# Update remaining balance
|
||||
remaining_balance -= principal_payment
|
||||
|
||||
@@ -57,8 +58,7 @@ def get_totals(amortization_schedule, func=None):
|
||||
# Display the amortization schedule
|
||||
messages = []
|
||||
for payment in amortization_schedule:
|
||||
# print(payment)
|
||||
total_paid += payment["Payment Amount"]
|
||||
# total_paid += payment["Payment Amount"]
|
||||
total_interest_paid += payment["Interest Payment"]
|
||||
total_principal_paid += payment["Principal Payment"]
|
||||
if payment["Remaining Balance"] < 0:
|
||||
@@ -68,7 +68,9 @@ def get_totals(amortization_schedule, func=None):
|
||||
messages.append("%s" % ", ".join([str(attr) for attr in attrs]))
|
||||
if func is not None:
|
||||
func(messages)
|
||||
return total_paid, total_interest_paid, total_principal_paid
|
||||
return ((total_interest_paid + total_principal_paid),
|
||||
total_interest_paid,
|
||||
total_principal_paid)
|
||||
|
||||
def compare(with_extra_payments, without):
|
||||
x,y,z = get_totals(with_extra_payments)
|
||||
@@ -80,13 +82,13 @@ def compare(with_extra_payments, without):
|
||||
print(chr(916), "term (months): ", term_length)
|
||||
|
||||
def display(table):
|
||||
print("id, paid, interest payment, principal payment, remaining")
|
||||
print("id, due, interest payment, principal payment, remaining")
|
||||
for row in table:
|
||||
print(row)
|
||||
|
||||
def export(table, filename="schedule.csv"):
|
||||
with open(filename, 'w') as f:
|
||||
print("id, paid, interest payment, principal payment, remaining", file=f)
|
||||
print("id, due, interest payment, principal payment, remaining", file=f)
|
||||
for row in table:
|
||||
print(row, file=f)
|
||||
print("wrote to file", filename)
|
||||
@@ -111,17 +113,24 @@ if __name__ == "__main__":
|
||||
if args.events is not None:
|
||||
with open(args.events) as f:
|
||||
l = json.loads(f.read())
|
||||
extra = []
|
||||
if "extra-payments" in l:
|
||||
extra = l["extra-payments"]
|
||||
extra.sort(key=lambda k: k["payment-number"])
|
||||
if args.one_time is not None:
|
||||
extra.append(json.loads(args.one_time))
|
||||
return args.principal, args.interest_rate, args.term, extra
|
||||
l["extra-payments"].append(json.loads(args.one_time))
|
||||
return args.principal, args.interest_rate, args.term, l
|
||||
|
||||
principal, interest_rate, loan_term, extra_payments = get_arguments()
|
||||
|
||||
schedule = generate_amortization_schedule(principal, interest_rate, loan_term, extra_payments)
|
||||
principal, interest_rate, loan_term, events = get_arguments()
|
||||
|
||||
if events != []:
|
||||
ahead_paid = float()
|
||||
for extra_payment in events["extra-payments"]:
|
||||
ahead_paid += extra_payment["amount"]
|
||||
print("~~~~~~~~~~~~~~~~~~~~~")
|
||||
print("total ahead payments:", ahead_paid)
|
||||
print("~~~~~~~~~~~~~~~~~~~~~")
|
||||
|
||||
schedule = generate_amortization_schedule(
|
||||
principal, interest_rate, loan_term, events
|
||||
)
|
||||
paid, interest_paid, principal_paid = get_totals(schedule,export)
|
||||
|
||||
print("total paid: ", round(paid,2))
|
||||
@@ -132,4 +141,5 @@ if __name__ == "__main__":
|
||||
compare(schedule, generate_amortization_schedule(
|
||||
principal, interest_rate, loan_term)
|
||||
)
|
||||
print()
|
||||
|
||||
|
Reference in New Issue
Block a user