diff --git a/financeplanner/admin.py b/financeplanner/admin.py
index af343f8..fa5972a 100644
--- a/financeplanner/admin.py
+++ b/financeplanner/admin.py
@@ -1,9 +1,8 @@
from django.contrib import admin
from django.urls import reverse_lazy
-from django.utils.safestring import mark_safe
from financeplanner.models import Transaction, Balance
-from financeplanner.utils import format_price, get_transaction_progress
+from financeplanner.utils import format_price
class AdminSite(admin.AdminSite):
@@ -23,35 +22,9 @@ def amount(obj):
amount.short_description = "amount"
-def progress(transaction):
- total, paid = get_transaction_progress(transaction)
- if total:
- percentage = int((paid / total) * 100)
- else:
- percentage = 0
- outer_style = (
- "width: 90%;",
- "height: 10px;",
- "background-color: #dd4646;",
- )
- inner_style = (
- f"width: {percentage}%;",
- "height: 100%;",
- "background-color: #70bf2b;",
- )
- return mark_safe(
- f'
'
- )
-
-
-progress.short_description = "progress"
-
-
@admin.register(Transaction, site=admin_site)
class TransactionAdmin(admin.ModelAdmin):
- list_display = ("subject", amount, "booking_date", "recurring_months", "not_recurring_after", progress)
+ list_display = ("subject", amount, "booking_date", "recurring_months", "not_recurring_after")
@admin.register(Balance, site=admin_site)
diff --git a/financeplanner/management/commands/filldummydata.py b/financeplanner/management/commands/filldummydata.py
index 6e7b113..cddd167 100644
--- a/financeplanner/management/commands/filldummydata.py
+++ b/financeplanner/management/commands/filldummydata.py
@@ -1,11 +1,12 @@
-from datetime import datetime, timedelta
from decimal import Decimal
+from dateutil.relativedelta import relativedelta
from django.contrib.auth import get_user_model
from django.core.management import BaseCommand
from financeplanner.management.commands.createadmin import USERNAME
from financeplanner.models import Transaction, Balance
+from financeplanner.utils import current_date
User = get_user_model()
@@ -15,29 +16,29 @@ class Command(BaseCommand):
def handle(self, *args, **options):
user = User.objects.get(**{User.USERNAME_FIELD: USERNAME})
- today = datetime.now().date()
+ today = current_date()
Transaction.objects.create(
user=user,
subject="simple transaction some days ago",
amount=Decimal("34.95"),
- booking_date=today - timedelta(days=5),
+ booking_date=today - relativedelta(days=5),
)
Transaction.objects.create(
user=user,
subject="simple transaction a week ahead",
amount=Decimal("66.66"),
- booking_date=today + timedelta(weeks=1),
+ booking_date=today + relativedelta(weeks=1),
)
Transaction.objects.create(
user=user,
subject="recurring stuff ending soon",
amount=Decimal("49"),
- booking_date=today - timedelta(days=180),
+ booking_date=today - relativedelta(days=180),
recurring_months=1,
- not_recurring_after=today + timedelta(weeks=6)
+ not_recurring_after=today + relativedelta(weeks=6)
)
Transaction.objects.create(
@@ -45,23 +46,23 @@ class Command(BaseCommand):
subject="recurring stuff beginning soon",
amount=Decimal("30"),
recurring_months=2,
- booking_date=today + timedelta(weeks=2),
+ booking_date=today + relativedelta(weeks=2),
)
Balance.objects.create(
user=user,
- date=today - timedelta(weeks=7),
+ date=today - relativedelta(weeks=7),
amount=Decimal("600"),
)
Balance.objects.create(
user=user,
- date=today - timedelta(weeks=3),
+ date=today - relativedelta(weeks=3),
amount=Decimal("380"),
)
Balance.objects.create(
user=user,
- date=today - timedelta(days=2),
+ date=today - relativedelta(days=2),
amount=Decimal("450"),
)
diff --git a/financeplanner/utils.py b/financeplanner/utils.py
index 7404a6a..599a1d2 100644
--- a/financeplanner/utils.py
+++ b/financeplanner/utils.py
@@ -1,11 +1,10 @@
-from datetime import datetime
from decimal import Decimal
-from dateutil.relativedelta import relativedelta
+from django.utils import timezone
def current_date():
- return datetime.now().date()
+ return timezone.now().date()
def round_with_dec_places(number, places):
@@ -19,35 +18,3 @@ 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
diff --git a/financeplanner/views.py b/financeplanner/views.py
index 5d53edd..0899190 100644
--- a/financeplanner/views.py
+++ b/financeplanner/views.py
@@ -1,4 +1,3 @@
-from datetime import datetime
from decimal import Decimal
from math import floor
@@ -7,6 +6,8 @@ from django.contrib.auth.decorators import login_required
from django.db.models import Q
from django.shortcuts import render
+from financeplanner.utils import current_date
+
def _get_relevant_balances(user, range_start, range_end):
balance_list = []
@@ -144,7 +145,7 @@ def _build_graph_data(range_start, range_end, calculation_start, balance_list, a
...
}
"""
- today = datetime.now().date()
+ today = current_date()
stats = _calculate_daily_stats(calculation_start, range_end, balance_list, actual_transactions)
stats = _trim_stats(stats, range_start)
amount_limit = _calculate_scale(stats)
@@ -179,7 +180,7 @@ def _build_graph_data(range_start, range_end, calculation_start, balance_list, a
def _calculate_analysis(user):
result = {}
- today = datetime.now().date()
+ today = current_date()
booked = Q(booking_date__lte=today)
outgoing = Q(amount__gt=0)
incoming = Q(amount__lt=0)
@@ -200,9 +201,9 @@ def _calculate_analysis(user):
@login_required
def index(request):
user = request.user
- today = datetime.now().date()
- range_start = today - relativedelta(days=30)
- range_end = today + relativedelta(days=50)
+ today = current_date()
+ range_start = today - relativedelta(months=6)
+ range_end = today + relativedelta(months=6)
balance_list = _get_relevant_balances(user, range_start, range_end)
calculation_start = balance_list[0].date if balance_list else range_start
transaction_list = _get_relevant_transactions(user, calculation_start, range_end)
@@ -213,9 +214,9 @@ def index(request):
graph_data = None
analysis = _calculate_analysis(user)
context = {
+ "today": today,
"range_start": range_start,
"range_end": range_end,
- "today": today,
"balance_list": balance_list,
"transaction_list": transaction_list,
"actual_transactions": sorted(actual_transactions, key=lambda t: t[0]),