4 Achegas f187dac589 ... 2c08f68c5c

Autor SHA1 Mensaxe Data
  Pi 2c08f68c5c add trending price by store hai 5 días
  Pi 1cd23ddfe2 fix chart ymax on trending prices hai 5 días
  Pi 88c0704e79 publish port for transaction editor to access over LAN hai 5 días
  Pi 61d323500f switch to US/Eastern timezone hai 1 semana

+ 5 - 3
docker-compose.yml

@@ -19,10 +19,12 @@ services:
     restart: unless-stopped
     environment:
       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
-      TZ: Pacific/Auckland
-      PGTZ: Pacific/Auckland
+      TZ: US/Eastern
+      PGTZ: US/Eastern
+        #TZ: Pacific/Auckland
+        #PGTZ: Pacific/Auckland
     ports:
-      - "127.0.0.1:5432:5432"
+      - "192.168.0.20:5432:5432"
     expose:
       - 5432
     shm_size: 128mb

+ 2 - 1
sqlpage/sqlpage/data/tags.sql

@@ -16,7 +16,8 @@ AND
 AND
   (tg.name IN (SELECT v#>>'{}' FROM json_array_elements($tags::json) j(v)) OR $tags IS NULL)
 AND
-  ((ts AT TIME ZONE 'UTC') AT TIME ZONE 'Pacific/Auckland')::date
+  --((ts AT TIME ZONE 'UTC') AT TIME ZONE 'Pacific/Auckland')::date
+  ((ts AT TIME ZONE 'UTC') AT TIME ZONE 'US/Eastern')::date
   BETWEEN $start::date AND $end::date
 GROUP BY tg.name
 ORDER BY 1 DESC, 2

+ 2 - 1
sqlpage/sqlpage/data/transactions.sql

@@ -44,7 +44,8 @@ AND
     ELSE TRUE
   END
 AND
-  ((ts AT TIME ZONE 'UTC') AT TIME ZONE 'Pacific/Auckland')::date
+  --((ts AT TIME ZONE 'UTC') AT TIME ZONE 'Pacific/Auckland')::date
+  ((ts AT TIME ZONE 'UTC') AT TIME ZONE 'US/Eastern')::date
   BETWEEN $start::date AND $end::date
 AND
   (t.id IN (

+ 22 - 1
sqlpage/sqlpage/pages/Trend.sql

@@ -1,5 +1,5 @@
 SELECT 'card' AS component
-, 'Cost by Quantity' AS title
+, 'Trending Price over Time' AS title
 , 2 AS columns
 ;
 
@@ -19,3 +19,24 @@ SELECT 'trend/Quantity.sql?unit='||$unit_count_chart||'&log_scale='||$log_scale|
 WHERE EXISTS (SELECT 1 FROM sqlpage_txn WHERE unit = $unit_count_chart LIMIT 1)
 AND (SELECT count(DISTINCT v#>>'{}') FROM json_array_elements($unit_count::json) j(v)) == 1
 ;
+
+SELECT 'card' AS component
+, 'Trending Price by Store' AS title
+, 2 AS columns
+;
+
+SELECT 'trend/Store.sql?unit='||$unit_mass||'&log_scale='||$log_scale||'&_sqlpage_embed' AS embed
+, '' AS footer
+WHERE EXISTS (SELECT 1 FROM sqlpage_txn WHERE unit = $unit_mass LIMIT 1)
+;
+
+SELECT 'trend/Store.sql?unit='||$unit_volume||'&log_scale='||$log_scale||'&_sqlpage_embed' AS embed
+, '' AS footer
+WHERE EXISTS (SELECT 1 FROM sqlpage_txn WHERE unit = $unit_volume LIMIT 1)
+;
+
+SET unit_count_chart = (SELECT v#>>'{}' FROM json_array_elements($unit_count::json) j(v) LIMIT 1);
+SELECT 'trend/Store.sql?unit='||$unit_count_chart||'&log_scale='||$log_scale||'&_sqlpage_embed' AS embed
+, '' AS footer
+WHERE EXISTS (SELECT 1 FROM sqlpage_txn WHERE unit = $unit_count_chart LIMIT 1)
+AND (SELECT count(DISTINCT v#>>'{}') FROM json_array_elements($unit_count::json) j(v)) == 1

+ 11 - 10
sqlpage/trend/Quantity.sql

@@ -1,7 +1,7 @@
-SET height = '500';
-SET type = 'line';
-SET marker = 4;
-SET max_line_series = 50;
+SET ":height" = '500';
+SET ":type" = 'line';
+SET ":marker" = 4;
+SET ":max_line_series" = 50;
 SET ":unit" = $unit;
 SET ":log_scale" = $log_scale;
 SET ":ymin" = (SELECT
@@ -18,16 +18,16 @@ SET ":ymax" = (SELECT
 --SELECT :ymin AS ymin, :ymax AS ymax, :ystep AS ystep;
 
 SELECT 'chart' AS component
-, 'Cost per '||$unit AS title
-, $height AS height
-, '$/'||$unit AS ytitle
+, 'Cost per '||:unit AS title
+, :height AS height
+, '$/'||:unit AS ytitle
 , CASE
     WHEN (
       SELECT count(DISTINCT product)
       FROM sqlpage_txn
       WHERE unit = :unit
-    ) > $max_line_series::numeric
-    THEN 'scatter' ELSE $type
+    ) > :max_line_series::numeric
+    THEN 'scatter' ELSE :type
   END AS type
 , :log_scale = 'true' AS logarithmic
 , TRUE AS time
@@ -36,7 +36,8 @@ SELECT 'chart' AS component
     WHEN 'true' THEN CAST(:ymin AS NUMERIC)/CAST(:ymax AS NUMERIC)
     ELSE 0
   END AS ymin
-, $marker AS marker
+, CEIL(CAST(:ymax AS NUMERIC)/ power(10, floor(log(CAST(:ymax AS NUMERIC)))-1)) * power(10, floor(log(CAST(:ymax AS NUMERIC)))-1) AS ymax
+, :marker AS marker
 ;
 SELECT product AS series
 , ts AS x

+ 54 - 0
sqlpage/trend/Store.sql

@@ -0,0 +1,54 @@
+SET ":height" = '500';
+SET ":type" = 'line';
+SET ":marker" = 4;
+SET ":max_line_series" = 50;
+SET ":unit" = $unit;
+SET ":log_scale" = $log_scale;
+SET ":ymin" = SELECT min(v) FROM (
+  SELECT
+      sum(price)/sum(quantity) v
+    FROM sqlpage_txn
+    WHERE unit = :unit
+    GROUP BY code, ts
+) q;
+SET ":ymax" = SELECT max(v) FROM (
+  SELECT
+      sum(price)/sum(quantity) v
+    FROM sqlpage_txn
+    WHERE unit = :unit
+    GROUP BY code, ts
+) q;
+
+--SELECT 'debug' AS component;
+--SELECT :ymin AS ymin, :ymax AS ymax, :ystep AS ystep;
+
+SELECT 'chart' AS component
+, 'Cost per '||:unit AS title
+, :height AS height
+, '$/'||:unit AS ytitle
+, CASE
+    WHEN (
+      SELECT count(DISTINCT code)
+      FROM sqlpage_txn
+      WHERE unit = :unit
+    ) > :max_line_series::numeric
+    THEN 'scatter' ELSE :type
+  END AS type
+, :log_scale = 'true' AS logarithmic
+, TRUE AS time
+, 5 AS yticks
+, CASE :log_scale
+    WHEN 'true' THEN CAST(:ymin AS NUMERIC)/CAST(:ymax AS NUMERIC)
+    ELSE 0
+  END AS ymin
+, CEIL(CAST(:ymax AS NUMERIC)/ power(10, floor(log(CAST(:ymax AS NUMERIC)))-1)) * power(10, floor(log(CAST(:ymax AS NUMERIC)))-1) AS ymax
+, :marker AS marker
+;
+SELECT code AS series
+, ts AS x
+, to_char(sum(price)/sum(quantity), 'FM999999999.000') AS y
+FROM sqlpage_txn
+WHERE unit = :unit
+GROUP BY code, ts
+ORDER BY ts
+;