1
1
Files
financeplanner/financeplanner/utils.py

58 lines
1.4 KiB
Python

from datetime import datetime
from decimal import Decimal
from dateutil.relativedelta import relativedelta
def current_date():
return datetime.now().date()
def format_date(d):
return d.strftime("%d.%m.%Y")
def round_with_dec_places(number, places):
if number is None:
return None
dec_num = number if isinstance(number, Decimal) else Decimal(number)
return dec_num.quantize(Decimal(10) ** -places)
def format_price(number):
if number is None:
return None
return f"{round_with_dec_places(number, 2)}"
def _count_rates(start, end, months_delta):
delta = relativedelta(months=months_delta)
count = 0
current = start
while current <= end:
count += 1
current += delta
return count
def get_transaction_progress(transaction):
if rec_months := transaction.recurring_months:
start = transaction.booking_date
current = current_date()
if end := transaction.not_recurring_after:
total = _count_rates(start, end, rec_months)
if current >= end:
paid = total
else:
paid = _count_rates(start, current, rec_months)
else:
total = None
paid = _count_rates(start, current, rec_months)
else:
total = 1
if transaction.booking_date < current_date():
paid = 1
else:
paid = 0
return total, paid