From b635e0b338341c908aff02107d4266a356c2f3e3 Mon Sep 17 00:00:00 2001 From: Philipp Metzner Date: Mon, 30 Sep 2024 17:27:54 +0200 Subject: [PATCH] In statistics queries, group by absolute measure value without using display unit --- .../business_logic/statistics/crud.py | 5 ++-- .../business_logic/statistics/sql.py | 24 ++++++++++++++----- back/test/endpoint_tests/test_statistics.py | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/back/boxtribute_server/business_logic/statistics/crud.py b/back/boxtribute_server/business_logic/statistics/crud.py index 6ed8401c5..1ab7db86f 100644 --- a/back/boxtribute_server/business_logic/statistics/crud.py +++ b/back/boxtribute_server/business_logic/statistics/crud.py @@ -1,6 +1,6 @@ from functools import wraps -from peewee import JOIN, SQL, fn +from peewee import JOIN, SQL, Case, fn from ...db import db from ...enums import BoxState, HumanGender, TaggableObjectType, TargetType @@ -433,7 +433,8 @@ def compute_stock_overview(base_id): Product.category.alias("category_id"), fn.TRIM(fn.LOWER(Product.name)).alias("product_name"), fn.CONCAT( - fn.ROUND(boxes.c.measure_value * Unit.conversion_factor, 2), Unit.symbol + fn.ROUND(boxes.c.measure_value, 3), + Case(Unit.dimension_id, ((28, "kg"), (29, "l")), ""), ).alias("measure_name"), Product.gender.alias("gender"), boxes.c.tag_ids, diff --git a/back/boxtribute_server/business_logic/statistics/sql.py b/back/boxtribute_server/business_logic/statistics/sql.py index 5a244ed3e..67e0ce891 100644 --- a/back/boxtribute_server/business_logic/statistics/sql.py +++ b/back/boxtribute_server/business_logic/statistics/sql.py @@ -222,7 +222,9 @@ TRIM(LOWER(p.name)) AS product_name, p.gender_id AS gender, t.size_id, - CONCAT(ROUND(t.stock_measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(t.stock_measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, "Deleted" AS target_id, NULL AS organisation_name, @@ -244,7 +246,9 @@ TRIM(LOWER(p.name)) AS product_name, p.gender_id AS gender, t.size_id, - CONCAT(ROUND(t.stock_measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(t.stock_measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, "Deleted" AS target_id, NULL AS organisation_name, @@ -267,7 +271,9 @@ TRIM(LOWER(p.name)) AS product_name, p.gender_id AS gender, t.size_id, - CONCAT(ROUND(t.stock_measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(t.stock_measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, loc.label AS target_id, NULL AS organisation_name, @@ -290,7 +296,9 @@ TRIM(LOWER(p.name)) AS product_name, p.gender_id AS gender, t.size_id, - CONCAT(ROUND(t.stock_measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(t.stock_measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, loc.label AS target_id, NULL AS organisation_name, @@ -329,7 +337,9 @@ p.gender_id AS gender, d.source_size_id AS size_id, -- neglect possible history of box's measure_value - CONCAT(ROUND(b.measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(b.measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, c.name AS target_id, o.label AS organisation_name, @@ -364,7 +374,9 @@ TRIM(LOWER(p.name)) AS product_name, p.gender_id AS gender, b.size_id, - CONCAT(ROUND(b.measure_value * u.conversion_factor, 2), u.symbol) AS measure_name, + CONCAT(ROUND(b.measure_value, 3), + CASE u.dimension_id WHEN 28 THEN 'kg' WHEN 29 THEN 'l' ELSE '' END + ) AS measure_name, GROUP_CONCAT(DISTINCT tr.tag_id) AS tag_ids, bs.label AS target_id, NULL AS organisation_name, diff --git a/back/test/endpoint_tests/test_statistics.py b/back/test/endpoint_tests/test_statistics.py index a9aeb1366..235fc9e8c 100644 --- a/back/test/endpoint_tests/test_statistics.py +++ b/back/test/endpoint_tests/test_statistics.py @@ -434,7 +434,7 @@ def test_query_stock_overview( "locationId": 1, "productName": "rice", "sizeId": None, - "measureName": "500.00g", + "measureName": "0.500kg", "tagIds": [], }, ]