1
1

narrow displayed time range

This commit is contained in:
2020-02-27 11:41:38 +01:00
parent 1722ef79a2
commit 4de9609f51
2 changed files with 23 additions and 19 deletions

View File

@@ -68,9 +68,11 @@ class Statistics:
def __init__(self, user):
self.user = user
self.today = current_date()
self.start = self.today - relativedelta(months=6)
self.end = self.today + relativedelta(months=6)
self.calc_start = self.start
self.calc_start = self.today - relativedelta(months=6)
self.calc_end = self.today + relativedelta(months=6)
self.real_calc_start = self.calc_start
self.display_start = self.today - relativedelta(months=1)
self.display_end = self.today + relativedelta(months=2)
self.balances = []
self.transactions = []
self.actual_transactions = []
@@ -93,29 +95,29 @@ class Statistics:
def _fetch_relevant_balances(self):
self.balances = []
balances_until_start = self.user.balances.filter(date__lte=self.start)
balances_until_start = self.user.balances.filter(date__lte=self.calc_start)
if balances_until_start.exists():
self.balances.append(balances_until_start.latest("date"))
other_balances = self.user.balances.filter(date__gt=self.start, date__lte=self.end).order_by("date")
other_balances = self.user.balances.filter(date__gt=self.calc_start, date__lte=self.calc_end).order_by("date")
self.balances += list(other_balances)
if self.balances:
self.calc_start = self.balances[0].date
self.real_calc_start = self.balances[0].date
def _fetch_relevant_transactions(self):
one_time_in_range = Q(
booking_date__gte=self.calc_start,
booking_date__lte=self.end,
booking_date__gte=self.real_calc_start,
booking_date__lte=self.calc_end,
recurring_months__isnull=True,
)
endlessly_recurring = Q(
booking_date__lte=self.end,
booking_date__lte=self.calc_end,
recurring_months__isnull=False,
not_recurring_after__isnull=True,
)
recurring_and_ending_in_range = Q(
booking_date__lte=self.end,
booking_date__lte=self.calc_end,
recurring_months__isnull=False,
not_recurring_after__gte=self.calc_start,
not_recurring_after__gte=self.real_calc_start,
)
transactions = self.user.transactions.filter(
one_time_in_range | endlessly_recurring | recurring_and_ending_in_range
@@ -128,9 +130,9 @@ class Statistics:
if trans.recurring_months:
iter_date = trans.booking_date
iter_step = 1
limit = min(trans.not_recurring_after, self.end) if trans.not_recurring_after else self.end
limit = min(trans.not_recurring_after, self.calc_end) if trans.not_recurring_after else self.calc_end
while iter_date < limit:
if iter_date >= self.calc_start:
if iter_date >= self.real_calc_start:
actual_transactions.append(ActualTransaction(
date=iter_date,
subject=f"{trans.subject} #{iter_step}",
@@ -148,9 +150,9 @@ class Statistics:
def _calculate_daily_stats(self):
self.daily_stats = []
iter_date = self.calc_start
iter_date = self.real_calc_start
iter_amount = None
while iter_date < self.end:
while iter_date < self.calc_end:
balance_amount, actual_transactions = None, []
relevant_balances = [bal for bal in self.balances if bal.date == iter_date]
@@ -176,7 +178,9 @@ class Statistics:
iter_date += relativedelta(days=1)
def _calculate_daily_amount_scale(self):
amounts = [s.resulting_amount for s in self.daily_stats if s.resulting_amount is not None]
amounts = [s.resulting_amount for s in self.daily_stats
if s.resulting_amount is not None
and self.display_start <= s.date <= self.display_end]
if amounts:
max_amount = max(amounts)
scale = _floor_to_first_two_places(max_amount * Decimal("1.25"))
@@ -222,4 +226,4 @@ class Statistics:
self.avg_monthly_irregular_expenses = self.avg_daily_irregular_expenses * days_per_month
def get_daily_stats_in_range(self):
return [s for s in self.daily_stats if self.start <= s.date <= self.end]
return [s for s in self.daily_stats if self.display_start <= s.date <= self.display_end]

View File

@@ -9,8 +9,8 @@ def index(request):
user = request.user
statistics = Statistics(user)
context = {
"start": statistics.start,
"end": statistics.end,
"start": statistics.display_start,
"end": statistics.display_end,
"balances": statistics.balances,
"transactions": statistics.transactions,
"actual_transactions": statistics.actual_transactions,