form-fuel.sql 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. --TODO: show barcode at top
  2. --SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/QR.sql') AS properties;
  3. SET filter_options = (
  4. SELECT json_agg(json_build_object('name', k, 'options', o))
  5. FROM (
  6. SELECT o.k, json_agg(
  7. json_build_object('label', v, 'value', v, 'selected', c == 1)
  8. ORDER BY v)
  9. FROM (
  10. SELECT 'store' AS k, DISTINCT store AS v, count(DISTINCT store) AS c FROM code_detail
  11. UNION
  12. SELECT 'value' AS k, DISTINCT value AS v, count(DISTINCT value) AS c FROM code_detail
  13. ) AS o
  14. WHERE v IS NOT NULL
  15. GROUP BY o.k
  16. ) q(k, o)
  17. );
  18. SET :expiry = (SELECT expiry FROM code_detail WHERE hash = $hash);
  19. SET :value = (SELECT value FROM code_detail WHERE hash = $hash);
  20. SET :store = (SELECT store FROM code_detail WHERE hash = $hash);
  21. SET :used = (SELECT used FROM code_detail WHERE hash = $hash);
  22. SELECT 'form' AS component
  23. , '/code.sql' AS action
  24. , 'Update' AS validate
  25. , $tabler_color AS validate_color
  26. , 'post' AS method
  27. ;
  28. SELECT j.name
  29. --, fo.j#>>'{options}' AS label
  30. , j.label
  31. , COALESCE(c.type, j.type) AS type
  32. , j.dropdown AS dropdown
  33. , j.multiple
  34. , COALESCE(c.width, j.width) AS width
  35. , o.j#>'{options}' AS options
  36. , COALESCE(j.value, v.value) AS value
  37. , CASE j.type
  38. WHEN 'checkbox' THEN v.value::bool
  39. ELSE NULL
  40. END AS checked
  41. , j.formaction
  42. FROM json_populate_recordset(null::sqlpage_filter_type, sqlpage.read_file_as_text('code/json/filters.json')::json) j
  43. LEFT JOIN json_populate_recordset(null::sqlpage_filter_type, $filter_config::json) c
  44. USING (name)
  45. LEFT JOIN json_array_elements($filter_options::json) o(j)
  46. ON (o.j#>>'{name}') = j.name
  47. LEFT JOIN json_each_text(sqlpage.variables()::json) v(key, value)
  48. ON v.key = j.name
  49. ;
  50. INSERT INTO code_detal(hash, type, value, expiry, used)
  51. VALUES ($hash, $type, $value, $expiry, $used)
  52. ON CONFLICT DO
  53. UPDATE SET
  54. type = excluded.type,
  55. value = excluded.value,
  56. expiry = excluded.expiry,
  57. used = excluded.used
  58. ;