From 31ae25116441549596b3d3f840c7e8a3a4864749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20M=C3=BCller=20=28ChaoticByte=29?= Date: Tue, 31 Oct 2023 18:00:20 +0100 Subject: [PATCH] Fixed orders/weekday statistic, improved statistics page layout --- app/db_queries.py | 44 +++++++++++++++------------ app/locales/de/LC_MESSAGES/django.mo | Bin 3672 -> 3624 bytes app/locales/de/LC_MESSAGES/django.po | 12 ++++---- app/static/css/main.css | 17 +++++++++++ app/templates/statistics.html | 28 ++++++++--------- 5 files changed, 62 insertions(+), 39 deletions(-) diff --git a/app/db_queries.py b/app/db_queries.py index 656bbda..0363896 100644 --- a/app/db_queries.py +++ b/app/db_queries.py @@ -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]) diff --git a/app/locales/de/LC_MESSAGES/django.mo b/app/locales/de/LC_MESSAGES/django.mo index d7435cb07bae255287ca6bfa885580bd2e060d15..73d1c7135393360c788e1d6c270bab1427e0c8a3 100644 GIT binary patch delta 1133 zcmZ9~Pe@cz6vy#1IyPF9Nq?-yDaS@F`=e>4maRgtqQ4Xf?WX3XqP~%FhW;&{E2&m7 zwsBLCE}~it4MY$W6hy1m1FecS(W181rtfdO7I^W@=br0*_uYH$E5{$li}6qpHM7Bp zSq+}YdK|_&yo#%F3ajxJuEGH0IE%HofO_s3w&N@8z%QuhqD<0y4H(84YMtg<3ye9| z&VVL%qBhcl>#*PD$DL=K7f~;~geM^$bCHLr*p@jdb``{c&I;s)~HsCDbtm^ETE>bc&) zbxz@C1}-~qIt!=@J;647j(R~E594Q-H?f=DfqNN$>+&DYKX`!g$Xc_5IDop-Db#{_)P`qJmAZ{uzks@u2dD!)LMjv3 zQ#bGiwZjjn2S1`JQbv{bC+cK1T)eJgJ62&Ea>bRh?n5;_r`ANYR(eZ6U7*b#B~(qb zxyEq)i5->h(vLn5HJ!bO=pb4MeU81vEF;`uy2t6&RiMw{9J0pE_i<0^KCG1e*yT(b=&{| delta 1180 zcmZY8OGs2v9LMo9K5{ZsD^t^nu9>E04=o>Mv?!woSWsB2qQN<7INs5jD`rr4or@q0 zf*@!il+?l)Xwgn0B8XZAZQ2IbB5)x=5q*E-5hM@(=X3w(-gC}9|8sp7`x2XrMZ$7p zOmC4fb=Z%aaRN(l3JdWemf~Yvk1wzoUtvDZ<2rncG5mm0TtJOm#72zJ*^Eu7aTlT{ z%uRTSjsiNap(e7(7?X4l2B;UgiDh`l<@cNqoR3iBpP&|aiuDm=p1b>>c>5#te@1Pf zyf`#wD;Kq7TA&S8kuFsKX*`QpQ4`OiDlmtt&}-Cl@2~>DB5RpN*Z&*0kZ;=ij)OIIIW2KJ(k;vD8-KXSymvK~M+RZ^{%*iG~(p|ulw zsiQ;_Va#-8LFpM4_W!n@jt)Y5-9_lLQ^ECrqA#SA*h^3@!&Y)dZJQn`=nCt}x(GFW zY}z&NXgp#Mp|*XQ+^;sLifPk3h<$`A)=jK59ifhIr8T;X7SwU8@@hMc$<`Ov<()jA zPS|wD8?|XKk-p&%n^henDL)wUnv(HM;I*}Txir(f`iTi^hZFJ1?1`ePNcL{@d;XQ< zHWS!na@-%ZzBigqd8cfUelx?wYwq-={CL3hHn div { + height: 100%; + width: 16rem; +} + /* Responsive */ @media only screen and (max-width: 1200px) { diff --git a/app/templates/statistics.html b/app/templates/statistics.html index 4f938b9..0c1e6e7 100644 --- a/app/templates/statistics.html +++ b/app/templates/statistics.html @@ -8,14 +8,14 @@ {% block content %}

{% translate "Statistics" %}

-
-
-

{% translate "Orders per drink" %}

+
+
+

{% translate "orders / drink" %}

- + {% for key, values in orders_per_drink.items %} @@ -26,13 +26,13 @@ {% endfor %}
{% translate "drink" %}{% translate "you" %} {% translate "all" %}{% translate "you" %}
-
-

{% translate "Orders per month (last 12 months)" %}

+
+

{% translate "orders / month" %}

- + {% for key, values in orders_per_month.items %} @@ -43,19 +43,19 @@ {% endfor %}
{% translate "month" %}{% translate "you" %} {% translate "all" %}{% translate "you" %}
-
-

{% translate "Orders per weekday" %}

+
+

{% translate "orders / weekday" %}

- + - {% for key, values in orders_per_weekday.items %} + {% for values in orders_per_weekday %} - - - + + + {% endfor %}
{% translate "day" %}{% translate "you" %} {% translate "all" %}{% translate "you" %}
{{ key }}{{ values.a|default:"0" }}{{ values.b|default:"0" }}{{ values.0 }}{{ values.1|default:"0" }}{{ values.2|default:"0" }}