Added two new statistics about all users: 'order sum' visible for users having the 'view_order' permission and 'deposit sum' visible for users having the 'view_registertransaction' permission, improved the layout of the statistics page, updated translations

This commit is contained in:
Julian Müller (ChaoticByte) 2023-11-01 19:07:07 +01:00
parent 4eb2911150
commit e4acc5c101
5 changed files with 109 additions and 34 deletions

View file

@ -16,7 +16,6 @@ def _db_select(sql_select:str):
result = cursor.fetchall()
return result
def _combine_results(results:list) -> dict:
'''
e.g.
@ -81,8 +80,7 @@ def select_history(user, language_code="en") -> list:
result = [list(row) for row in result]
return result
def orders_per_month(user) -> list:
def select_orders_per_month(user) -> dict:
# number of orders per month (last 12 months)
result_user = _db_select(f"""
select
@ -105,8 +103,7 @@ def orders_per_month(user) -> list:
""")
return _combine_results([result_all, result_user])
def orders_per_weekday(user) -> list:
def select_orders_per_weekday(user) -> list:
# number of orders per weekday (all time)
result = _db_select(f"""
with q_all as (
@ -132,8 +129,7 @@ def orders_per_weekday(user) -> list:
result[i] = (day_name[int(day_)-1], all_, user_)
return result
def orders_per_drink(user) -> list:
def select_orders_per_drink(user) -> dict:
# number of orders per drink (all time)
result_user = _db_select(f"""
select
@ -155,3 +151,30 @@ def orders_per_drink(user) -> list:
order by "data" desc;
""")
return _combine_results([result_all, result_user])
def select_order_sum_per_user_all_users() -> list:
# sum of all orders per user, for all users
result = _db_select(f"""
select
app_user.username as user,
sum(app_order.price_sum) as sum
from app_user
left outer join app_order on (app_user.id = app_order.user_id)
group by app_user.id
order by app_user asc;
""")
return result
def select_deposit_sum_per_user_all_users() -> list:
# sum of all orders per user, for all users
result = _db_select(f"""
select
app_user.username as user,
sum(rt.transaction_sum) as sum
from app_user
left outer join app_registertransaction rt on (app_user.id = rt.user_id)
where rt.is_user_deposit is true or rt.is_user_deposit is null
group by app_user.id
order by app_user asc;
""")
return result