Fixed orders/weekday statistic, improved statistics page layout

This commit is contained in:
Julian Müller (ChaoticByte) 2023-10-31 18:00:20 +01:00
parent 60d2df9fb9
commit 31ae251164
5 changed files with 62 additions and 39 deletions

View file

@ -3,6 +3,7 @@
from django.conf import settings
from django.db import connection
from django.utils.translation import gettext
from calendar import day_name
COMBINE_ALPHABET = "abcdefghijklmnopqrstuvwxyz"
@ -102,29 +103,34 @@ def orders_per_month(user) -> list:
group by "month"
order by "month" desc;
""")
return _combine_results([result_user, result_all])
return _combine_results([result_all, result_user])
def orders_per_weekday(user) -> list:
# number of orders per weekday (all time)
result_user = _db_select(f"""
select
to_char(datetime, 'Day') as "day",
sum(amount) as "count"
from app_order
where user_id = {user.pk}
group by "day"
order by "count" desc;
result = _db_select(f"""
with q_all as (
select
extract(isodow from datetime) as "d",
sum(amount) as "c"
from app_order
group by d
), q_user as (
select
extract(isodow from datetime) as "d",
sum(amount) as "c"
from app_order
where user_id = {user.pk}
group by d
)
select q_all.d as "day", q_all.c, q_user.c from q_all full join q_user on q_all.d = q_user.d
group by day, q_all.c, q_user.c
order by day asc;
""")
result_all = _db_select(f"""
select
to_char(datetime, 'Day') as "day",
sum(amount) as "count"
from app_order
group by "day"
order by "count" desc;
""")
return _combine_results([result_user, result_all])
for i in range(len(result)):
day_, all_, user_ = result[i]
result[i] = (day_name[int(day_)-1], all_, user_)
return result
def orders_per_drink(user) -> list:
@ -148,4 +154,4 @@ def orders_per_drink(user) -> list:
group by d.product_name
order by "data" desc;
""")
return _combine_results([result_user, result_all])
return _combine_results([result_all, result_user])