Quellcode durchsuchen

support unit conversion for Count type units

Pi vor 3 Monaten
Ursprung
Commit
f3d43c61c6
1 geänderte Dateien mit 12 neuen und 9 gelöschten Zeilen
  1. 12 9
      sqlpage/sqlpage/data/transactions.sql

+ 12 - 9
sqlpage/sqlpage/data/transactions.sql

@@ -1,3 +1,7 @@
+SET ":unit_count_one" = (CASE (SELECT count(v#>>'{}') FROM json_array_elements(COALESCE($unit_count::json, '[]')) j(v))
+  WHEN 1 THEN (SELECT v#>>'{}' FROM json_array_elements(COALESCE($unit_count::json, '[]')) j(v) LIMIT 1)
+  ELSE NULL
+END);
 DROP TABLE IF EXISTS sqlpage_txn;
 CREATE TABLE IF NOT EXISTS sqlpage_txn AS (
 SELECT
@@ -9,17 +13,17 @@ SELECT
   g.name AS "group",
   t.organic,
   t.price,
-  CASE
-    WHEN ut.name = 'Count' THEN t.quantity
+  CASE ut.name
+    WHEN 'Count' THEN COALESCE(t.quantity * convert_unit(u.name, :unit_count_one, p.name), t.quantity)
     ELSE t.quantity * convert_unit(u.name, CASE
       WHEN ut.name = 'Volume' THEN $unit_volume
       WHEN ut.name = 'Mass' THEN $unit_mass
     END, p.name)
   END AS quantity,
-  CASE
-    WHEN ut.name = 'Count' THEN u.name
-    WHEN ut.name = 'Volume' THEN $unit_volume
-    WHEN ut.name = 'Mass' THEN $unit_mass
+  CASE ut.name
+    WHEN 'Count' THEN COALESCE(:unit_count_one, u.name)
+    WHEN 'Volume' THEN $unit_volume
+    WHEN 'Mass' THEN $unit_mass
   END AS unit
 FROM transactions t
 JOIN products p ON (product_id = p.id)
@@ -35,9 +39,8 @@ AND
 AND
   (g.name IN (SELECT v#>>'{}' FROM json_array_elements($groups::json) j(v)) OR $groups IS NULL)
 AND
-  CASE
-    WHEN ut.name = 'Count'
-    THEN (u.name IN (SELECT v#>>'{}' FROM json_array_elements($unit_count::json) j(v)) OR $unit_count IS NULL)
+  CASE ut.name
+    WHEN 'Count' THEN convert_unit(u.name, :unit_count_one, p.name) IS NOT NULL OR u.name IN (SELECT v#>>'{}' FROM json_array_elements($unit_count::json) j(v)) OR $unit_count IS NULL
     ELSE TRUE
   END
 AND