@flowselections/floriday-voorraad 1.0.97 → 1.0.101

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- -- @flowselections/floriday-voorraad 1.0.95 – volledig schema (idempotent, geen gegevens).
1
+ -- @flowselections/floriday-voorraad 1.0.100 – volledig schema (idempotent, geen gegevens).
2
2
  -- Gegenereerd uit de database met scripts/generate-voorraad-schema.py. Niet met de hand wijzigen.
3
3
  -- Volgorde 20. Ontbrekende tabellen van andere modules worden overgeslagen met een NOTICE; draai opnieuw na die module.
4
4
  -- De statuscontrole van floriday_continuous_stock_queue is van Voorraad en wordt hier opnieuw gemaakt.
@@ -502,6 +502,16 @@ ALTER TABLE public.voorraad_buffer_state ADD COLUMN IF NOT EXISTS detached_order
502
502
  ALTER TABLE public.voorraad_buffer_state ADD COLUMN IF NOT EXISTS created_at timestamp with time zone DEFAULT now() NOT NULL;
503
503
  ALTER TABLE public.voorraad_buffer_state ADD COLUMN IF NOT EXISTS updated_at timestamp with time zone DEFAULT now() NOT NULL;
504
504
 
505
+ -- voorraad_correcties
506
+ CREATE TABLE IF NOT EXISTS public.voorraad_correcties ();
507
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS id uuid DEFAULT gen_random_uuid() NOT NULL;
508
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS correctie text NOT NULL;
509
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS uitgevoerd_op timestamp with time zone DEFAULT now() NOT NULL;
510
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS uitgevoerd_door text NOT NULL;
511
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS proef boolean NOT NULL;
512
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS aantallen jsonb DEFAULT '{}'::jsonb NOT NULL;
513
+ ALTER TABLE public.voorraad_correcties ADD COLUMN IF NOT EXISTS hash_ok boolean;
514
+
505
515
  -- voorraad_custom_fields
506
516
  CREATE TABLE IF NOT EXISTS public.voorraad_custom_fields ();
507
517
  ALTER TABLE public.voorraad_custom_fields ADD COLUMN IF NOT EXISTS id uuid DEFAULT gen_random_uuid() NOT NULL;
@@ -622,6 +632,7 @@ CREATE OR REPLACE FUNCTION public._floriday_queue_cleanup_batch(p_statuses text[
622
632
  AS $function$
623
633
  DECLARE v_n integer;
624
634
  BEGIN
635
+ PERFORM public.voorraad_vereis('server', '_floriday_queue_cleanup_batch');
625
636
  WITH victims AS (
626
637
  SELECT q.id FROM public.floriday_continuous_stock_queue q
627
638
  WHERE q.status = ANY(p_statuses)
@@ -641,12 +652,15 @@ BEGIN
641
652
  END $function$
642
653
  ;
643
654
  REVOKE ALL ON FUNCTION _floriday_queue_cleanup_batch(text[],integer,boolean,integer) FROM PUBLIC;
655
+ REVOKE ALL ON FUNCTION _floriday_queue_cleanup_batch(text[],integer,boolean,integer) FROM anon;
644
656
  GRANT EXECUTE ON FUNCTION _floriday_queue_cleanup_batch(text[],integer,boolean,integer) TO service_role;
645
657
  CREATE OR REPLACE FUNCTION public._migrate_rewrite_stock_key(_from_key text, _to_key text)
646
658
  RETURNS void
647
659
  LANGUAGE plpgsql
660
+ SET search_path TO 'public'
648
661
  AS $function$
649
- BEGIN
662
+ BEGIN
663
+ PERFORM public.voorraad_vereis('server', '_migrate_rewrite_stock_key');
650
664
  IF _from_key = _to_key THEN RETURN; END IF;
651
665
 
652
666
  -- Voor rijen die botsen: som fysiek/reserved/incoming in de target, kies max voor minimum
@@ -682,8 +696,11 @@ END;
682
696
  $function$
683
697
  ;
684
698
  REVOKE ALL ON FUNCTION _migrate_rewrite_stock_key(text,text) FROM PUBLIC;
685
- GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO PUBLIC;
686
- GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO anon;
699
+ REVOKE ALL ON FUNCTION _migrate_rewrite_stock_key(text,text) FROM anon;
700
+ REVOKE EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) FROM PUBLIC;
701
+ GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO authenticated;
702
+ GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO service_role;
703
+ REVOKE EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) FROM anon;
687
704
  GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO authenticated;
688
705
  GRANT EXECUTE ON FUNCTION _migrate_rewrite_stock_key(text,text) TO service_role;
689
706
  CREATE OR REPLACE FUNCTION public._stock_import_caller(p_owner uuid)
@@ -696,6 +713,7 @@ AS $function$
696
713
  $function$
697
714
  ;
698
715
  REVOKE ALL ON FUNCTION _stock_import_caller(uuid) FROM PUBLIC;
716
+ REVOKE ALL ON FUNCTION _stock_import_caller(uuid) FROM anon;
699
717
  GRANT EXECUTE ON FUNCTION _stock_import_caller(uuid) TO service_role;
700
718
  CREATE OR REPLACE FUNCTION public.apply_fust_stock_mutation()
701
719
  RETURNS trigger
@@ -713,8 +731,11 @@ END;
713
731
  $function$
714
732
  ;
715
733
  REVOKE ALL ON FUNCTION apply_fust_stock_mutation() FROM PUBLIC;
716
- GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO PUBLIC;
717
- GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO anon;
734
+ REVOKE ALL ON FUNCTION apply_fust_stock_mutation() FROM anon;
735
+ REVOKE EXECUTE ON FUNCTION apply_fust_stock_mutation() FROM PUBLIC;
736
+ GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO authenticated;
737
+ GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO service_role;
738
+ REVOKE EXECUTE ON FUNCTION apply_fust_stock_mutation() FROM anon;
718
739
  GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO authenticated;
719
740
  GRANT EXECUTE ON FUNCTION apply_fust_stock_mutation() TO service_role;
720
741
  CREATE OR REPLACE FUNCTION public.apply_stock_consumption(p_trade_item_key text, p_qty numeric, p_order_id uuid, p_order_item_id uuid, p_source text, p_reason text)
@@ -728,6 +749,7 @@ DECLARE
728
749
  v_src text := CASE WHEN v_norm = 'FO' THEN 'FLORIDAY_ORDER' ELSE 'ORDER_DELIVERY' END;
729
750
  v_ctx record; v_key text; r public.trade_item_stock%ROWTYPE; v_after numeric; v_res_after numeric;
730
751
  BEGIN
752
+ PERFORM public.voorraad_vereis('ingelogd', 'apply_stock_consumption');
731
753
  IF p_trade_item_key IS NULL OR COALESCE(p_qty,0) <= 0 THEN RETURN; END IF;
732
754
  SELECT * INTO v_ctx FROM public.get_active_floriday_context();
733
755
  v_key := public.ensure_trade_item_stock_row_key(p_trade_item_key);
@@ -774,8 +796,11 @@ BEGIN
774
796
  END $function$
775
797
  ;
776
798
  REVOKE ALL ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) FROM PUBLIC;
777
- GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO PUBLIC;
778
- GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO anon;
799
+ REVOKE ALL ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) FROM anon;
800
+ REVOKE EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) FROM PUBLIC;
801
+ GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO authenticated;
802
+ GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO service_role;
803
+ REVOKE EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) FROM anon;
779
804
  GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO authenticated;
780
805
  GRANT EXECUTE ON FUNCTION apply_stock_consumption(text,numeric,uuid,uuid,text,text) TO service_role;
781
806
  CREATE OR REPLACE FUNCTION public.apply_stock_reservation(p_trade_item_key text, p_qty numeric, p_order_id uuid, p_order_item_id uuid, p_source text, p_reason text)
@@ -789,6 +814,7 @@ DECLARE
789
814
  v_src text := public.normalize_order_source(p_source);
790
815
  v_found boolean := false;
791
816
  BEGIN
817
+ PERFORM public.voorraad_vereis('ingelogd', 'apply_stock_reservation');
792
818
  IF p_qty = 0 THEN RETURN; END IF;
793
819
  IF p_trade_item_key IS NULL THEN
794
820
  INSERT INTO public.stock_mutation_log(trade_item_key, order_id, order_item_id, order_source, mutation_type, qty_delta, reason, created_by)
@@ -814,8 +840,11 @@ BEGIN
814
840
  END $function$
815
841
  ;
816
842
  REVOKE ALL ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) FROM PUBLIC;
817
- GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO PUBLIC;
818
- GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO anon;
843
+ REVOKE ALL ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) FROM anon;
844
+ REVOKE EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) FROM PUBLIC;
845
+ GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO authenticated;
846
+ GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO service_role;
847
+ REVOKE EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) FROM anon;
819
848
  GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO authenticated;
820
849
  GRANT EXECUTE ON FUNCTION apply_stock_reservation(text,numeric,uuid,uuid,text,text) TO service_role;
821
850
  CREATE OR REPLACE FUNCTION public.autolink_product_to_floriday(p_product_id uuid)
@@ -826,6 +855,7 @@ CREATE OR REPLACE FUNCTION public.autolink_product_to_floriday(p_product_id uuid
826
855
  AS $function$
827
856
  DECLARE v_row RECORD; v_new_key text; v_old_key text; v_floriday_id text;
828
857
  BEGIN
858
+ PERFORM public.voorraad_vereis('ingelogd', 'autolink_product_to_floriday');
829
859
  SELECT id, product, barcode, trade_item_key, floriday_trade_item_id INTO v_row
830
860
  FROM public.products WHERE id = p_product_id;
831
861
  IF NOT FOUND THEN RETURN NULL; END IF;
@@ -870,8 +900,11 @@ END;
870
900
  $function$
871
901
  ;
872
902
  REVOKE ALL ON FUNCTION autolink_product_to_floriday(uuid) FROM PUBLIC;
873
- GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO PUBLIC;
874
- GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO anon;
903
+ REVOKE ALL ON FUNCTION autolink_product_to_floriday(uuid) FROM anon;
904
+ REVOKE EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) FROM PUBLIC;
905
+ GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO authenticated;
906
+ GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO service_role;
907
+ REVOKE EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) FROM anon;
875
908
  GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO authenticated;
876
909
  GRANT EXECUTE ON FUNCTION autolink_product_to_floriday(uuid) TO service_role;
877
910
  CREATE OR REPLACE FUNCTION public.backfill_open_order_reservations()
@@ -885,6 +918,7 @@ DECLARE
885
918
  v_key text;
886
919
  n int := 0;
887
920
  BEGIN
921
+ PERFORM public.voorraad_vereis('server', 'backfill_open_order_reservations');
888
922
  FOR r IN
889
923
  SELECT oi.id AS oi_id, oi.order_id, oi.product_id, oi.quantity,
890
924
  COALESCE(o.order_source,'manual') AS src
@@ -903,8 +937,11 @@ BEGIN
903
937
  END $function$
904
938
  ;
905
939
  REVOKE ALL ON FUNCTION backfill_open_order_reservations() FROM PUBLIC;
906
- GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO PUBLIC;
907
- GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO anon;
940
+ REVOKE ALL ON FUNCTION backfill_open_order_reservations() FROM anon;
941
+ REVOKE EXECUTE ON FUNCTION backfill_open_order_reservations() FROM PUBLIC;
942
+ GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO authenticated;
943
+ GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO service_role;
944
+ REVOKE EXECUTE ON FUNCTION backfill_open_order_reservations() FROM anon;
908
945
  GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO authenticated;
909
946
  GRANT EXECUTE ON FUNCTION backfill_open_order_reservations() TO service_role;
910
947
  CREATE OR REPLACE FUNCTION public.calculate_floriday_desired_stock(p_connection_id uuid, p_product_id uuid)
@@ -917,6 +954,7 @@ DECLARE
917
954
  s public.floriday_inventory_settings%ROWTYPE;
918
955
  v_pack integer; v_calc jsonb; v_type text; v_avail integer := 0; v_raw integer; v_reason text;
919
956
  BEGIN
957
+ PERFORM public.voorraad_vereis('ingelogd', 'calculate_floriday_desired_stock');
920
958
  SELECT * INTO s FROM public.floriday_inventory_settings
921
959
  WHERE connection_id = p_connection_id AND product_id = p_product_id;
922
960
  stock_mode := COALESCE(s.stock_mode, 'FOLLOW_ERP');
@@ -960,6 +998,7 @@ END;
960
998
  $function$
961
999
  ;
962
1000
  REVOKE ALL ON FUNCTION calculate_floriday_desired_stock(uuid,uuid) FROM PUBLIC;
1001
+ REVOKE ALL ON FUNCTION calculate_floriday_desired_stock(uuid,uuid) FROM anon;
963
1002
  GRANT EXECUTE ON FUNCTION calculate_floriday_desired_stock(uuid,uuid) TO service_role;
964
1003
  CREATE OR REPLACE FUNCTION public.calculate_structure_available(p_connection_id uuid, p_product_id uuid, p_level integer DEFAULT 0, p_path uuid[] DEFAULT '{}'::uuid[])
965
1004
  RETURNS jsonb
@@ -972,6 +1011,7 @@ DECLARE
972
1011
  v_sum integer := 0; v_min integer; v_limit uuid; v_reason text; v_info text;
973
1012
  v_parts jsonb := '[]'; v_member uuid; v_qty numeric; v_possible integer; v_path uuid[];
974
1013
  BEGIN
1014
+ PERFORM public.voorraad_vereis('ingelogd', 'calculate_structure_available');
975
1015
  IF p_product_id = ANY(p_path) THEN
976
1016
  RETURN jsonb_build_object('type','UNKNOWN','available',0,'reason','CYCLE',
977
1017
  'path', to_jsonb(p_path || p_product_id));
@@ -1066,6 +1106,7 @@ EXCEPTION WHEN others THEN
1066
1106
  END $function$
1067
1107
  ;
1068
1108
  REVOKE ALL ON FUNCTION calculate_structure_available(uuid,uuid,integer,uuid[]) FROM PUBLIC;
1109
+ REVOKE ALL ON FUNCTION calculate_structure_available(uuid,uuid,integer,uuid[]) FROM anon;
1069
1110
  GRANT EXECUTE ON FUNCTION calculate_structure_available(uuid,uuid,integer,uuid[]) TO service_role;
1070
1111
  CREATE OR REPLACE FUNCTION public.canonicalize_trade_item_stock_key()
1071
1112
  RETURNS trigger
@@ -1137,8 +1178,11 @@ END;
1137
1178
  $function$
1138
1179
  ;
1139
1180
  REVOKE ALL ON FUNCTION canonicalize_trade_item_stock_key() FROM PUBLIC;
1140
- GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO PUBLIC;
1141
- GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO anon;
1181
+ REVOKE ALL ON FUNCTION canonicalize_trade_item_stock_key() FROM anon;
1182
+ REVOKE EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() FROM PUBLIC;
1183
+ GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO authenticated;
1184
+ GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO service_role;
1185
+ REVOKE EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() FROM anon;
1142
1186
  GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO authenticated;
1143
1187
  GRANT EXECUTE ON FUNCTION canonicalize_trade_item_stock_key() TO service_role;
1144
1188
  CREATE OR REPLACE FUNCTION public.check_product_structure(p_kind text, p_parent uuid, p_child uuid, p_name text DEFAULT NULL::text)
@@ -1149,6 +1193,7 @@ CREATE OR REPLACE FUNCTION public.check_product_structure(p_kind text, p_parent
1149
1193
  AS $function$
1150
1194
  DECLARE v_head uuid; v_other uuid; v_path uuid[]; v_depth integer; v_max integer := public.product_structure_max_depth();
1151
1195
  BEGIN
1196
+ PERFORM public.voorraad_vereis('ingelogd', 'check_product_structure');
1152
1197
  ok := true; code := NULL; message := NULL;
1153
1198
  IF p_kind = 'group_member' THEN
1154
1199
  SELECT COALESCE(g.head_product_id, public.product_id_from_ref(g.head_trade_item_floriday_id)) INTO v_head
@@ -1231,6 +1276,7 @@ EXCEPTION WHEN others THEN
1231
1276
  END $function$
1232
1277
  ;
1233
1278
  REVOKE ALL ON FUNCTION check_product_structure(text,uuid,uuid,text) FROM PUBLIC;
1279
+ REVOKE ALL ON FUNCTION check_product_structure(text,uuid,uuid,text) FROM anon;
1234
1280
  GRANT EXECUTE ON FUNCTION check_product_structure(text,uuid,uuid,text) TO authenticated;
1235
1281
  GRANT EXECUTE ON FUNCTION check_product_structure(text,uuid,uuid,text) TO service_role;
1236
1282
  CREATE OR REPLACE FUNCTION public.claim_floriday_base_supply(p_worker text DEFAULT 'voorraad-base-supply'::text)
@@ -1241,6 +1287,7 @@ CREATE OR REPLACE FUNCTION public.claim_floriday_base_supply(p_worker text DEFAU
1241
1287
  AS $function$
1242
1288
  DECLARE l record;
1243
1289
  BEGIN
1290
+ PERFORM public.voorraad_vereis('ingelogd', 'claim_floriday_base_supply');
1244
1291
  SELECT * INTO l FROM public.inventory_recompute_limits WHERE inventory_recompute_limits.id;
1245
1292
  -- Time-out: blijven hangen aanmaken gaat terug naar wachtend
1246
1293
  UPDATE public.floriday_continuous_stock_queue q
@@ -1273,6 +1320,7 @@ BEGIN
1273
1320
  END $function$
1274
1321
  ;
1275
1322
  REVOKE ALL ON FUNCTION claim_floriday_base_supply(text) FROM PUBLIC;
1323
+ REVOKE ALL ON FUNCTION claim_floriday_base_supply(text) FROM anon;
1276
1324
  GRANT EXECUTE ON FUNCTION claim_floriday_base_supply(text) TO service_role;
1277
1325
  CREATE OR REPLACE FUNCTION public.claim_floriday_stock_queue(p_limit integer DEFAULT 25, p_worker text DEFAULT 'auth-module'::text)
1278
1326
  RETURNS SETOF floriday_continuous_stock_queue
@@ -1281,6 +1329,7 @@ CREATE OR REPLACE FUNCTION public.claim_floriday_stock_queue(p_limit integer DEF
1281
1329
  SET search_path TO 'public'
1282
1330
  AS $function$
1283
1331
  BEGIN
1332
+ PERFORM public.voorraad_vereis('ingelogd', 'claim_floriday_stock_queue');
1284
1333
  RETURN QUERY
1285
1334
  WITH candidates AS (
1286
1335
  SELECT q.id
@@ -1306,50 +1355,13 @@ END;
1306
1355
  $function$
1307
1356
  ;
1308
1357
  REVOKE ALL ON FUNCTION claim_floriday_stock_queue(integer,text) FROM PUBLIC;
1309
- GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO PUBLIC;
1310
- GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO anon;
1358
+ REVOKE ALL ON FUNCTION claim_floriday_stock_queue(integer,text) FROM anon;
1359
+ REVOKE EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) FROM PUBLIC;
1360
+ GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO authenticated;
1361
+ GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO service_role;
1362
+ REVOKE EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) FROM anon;
1311
1363
  GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO authenticated;
1312
1364
  GRANT EXECUTE ON FUNCTION claim_floriday_stock_queue(integer,text) TO service_role;
1313
- CREATE OR REPLACE FUNCTION public.claim_logistics_tasks(_owner_module text, _task_type text, _worker text, _limit integer DEFAULT 25, _stale_minutes integer DEFAULT 5)
1314
- RETURNS SETOF logistics_tasks
1315
- LANGUAGE plpgsql
1316
- SECURITY DEFINER
1317
- SET search_path TO 'public'
1318
- AS $function$
1319
- BEGIN
1320
- RETURN QUERY
1321
- WITH candidates AS (
1322
- SELECT t.id
1323
- FROM public.logistics_tasks t
1324
- WHERE t.owner_module = _owner_module
1325
- AND t.task_type = _task_type
1326
- AND (
1327
- (t.status IN ('planned', 'claimed')
1328
- AND (t.next_attempt_at IS NULL OR t.next_attempt_at <= now()))
1329
- OR (t.status = 'in_progress'
1330
- AND t.claimed_at IS NOT NULL
1331
- AND t.claimed_at < now() - make_interval(mins => _stale_minutes))
1332
- )
1333
- ORDER BY t.priority DESC, t.planned_start NULLS FIRST, t.created_at
1334
- LIMIT GREATEST(_limit, 0)
1335
- FOR UPDATE SKIP LOCKED
1336
- )
1337
- UPDATE public.logistics_tasks t
1338
- SET status = 'in_progress',
1339
- claimed_by = _worker,
1340
- claimed_at = now(),
1341
- started_at = COALESCE(t.started_at, now()),
1342
- updated_at = now()
1343
- FROM candidates c
1344
- WHERE t.id = c.id
1345
- RETURNING t.*;
1346
- END;
1347
- $function$
1348
- ;
1349
- REVOKE ALL ON FUNCTION claim_logistics_tasks(text,text,text,integer,integer) FROM PUBLIC;
1350
- GRANT EXECUTE ON FUNCTION claim_logistics_tasks(text,text,text,integer,integer) TO anon;
1351
- GRANT EXECUTE ON FUNCTION claim_logistics_tasks(text,text,text,integer,integer) TO authenticated;
1352
- GRANT EXECUTE ON FUNCTION claim_logistics_tasks(text,text,text,integer,integer) TO service_role;
1353
1365
  CREATE OR REPLACE FUNCTION public.cleanup_floriday_stock_queue()
1354
1366
  RETURNS void
1355
1367
  LANGUAGE sql
@@ -1362,8 +1374,11 @@ AS $function$
1362
1374
  $function$
1363
1375
  ;
1364
1376
  REVOKE ALL ON FUNCTION cleanup_floriday_stock_queue() FROM PUBLIC;
1365
- GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO PUBLIC;
1366
- GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO anon;
1377
+ REVOKE ALL ON FUNCTION cleanup_floriday_stock_queue() FROM anon;
1378
+ REVOKE EXECUTE ON FUNCTION cleanup_floriday_stock_queue() FROM PUBLIC;
1379
+ GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO authenticated;
1380
+ GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO service_role;
1381
+ REVOKE EXECUTE ON FUNCTION cleanup_floriday_stock_queue() FROM anon;
1367
1382
  GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO authenticated;
1368
1383
  GRANT EXECUTE ON FUNCTION cleanup_floriday_stock_queue() TO service_role;
1369
1384
  CREATE OR REPLACE FUNCTION public.cleanup_voorraad_module_history()
@@ -1373,6 +1388,7 @@ CREATE OR REPLACE FUNCTION public.cleanup_voorraad_module_history()
1373
1388
  SET search_path TO 'public'
1374
1389
  AS $function$
1375
1390
  BEGIN
1391
+ PERFORM public.voorraad_vereis('server', 'cleanup_voorraad_module_history');
1376
1392
  DELETE FROM public.logistics_tasks
1377
1393
  WHERE status IN ('done', 'skipped', 'cancelled', 'failed')
1378
1394
  AND COALESCE(completed_at, updated_at) < now() - interval '90 days';
@@ -1384,6 +1400,7 @@ END;
1384
1400
  $function$
1385
1401
  ;
1386
1402
  REVOKE ALL ON FUNCTION cleanup_voorraad_module_history() FROM PUBLIC;
1403
+ REVOKE ALL ON FUNCTION cleanup_voorraad_module_history() FROM anon;
1387
1404
  GRANT EXECUTE ON FUNCTION cleanup_voorraad_module_history() TO service_role;
1388
1405
  CREATE OR REPLACE FUNCTION public.complete_floriday_base_supply(p_id uuid, p_kind text, p_label text DEFAULT NULL::text, p_error text DEFAULT NULL::text, p_attempt_id text DEFAULT NULL::text, p_outcome text DEFAULT NULL::text, p_price_status text DEFAULT NULL::text, p_price numeric DEFAULT NULL::numeric)
1389
1406
  RETURNS text
@@ -1393,6 +1410,7 @@ CREATE OR REPLACE FUNCTION public.complete_floriday_base_supply(p_id uuid, p_kin
1393
1410
  AS $function$
1394
1411
  DECLARE l record; v_row public.floriday_continuous_stock_queue%ROWTYPE; v_steps int[]; v_wait int; v_since timestamptz;
1395
1412
  BEGIN
1413
+ PERFORM public.voorraad_vereis('ingelogd', 'complete_floriday_base_supply');
1396
1414
  SELECT * INTO v_row FROM public.floriday_continuous_stock_queue WHERE id = p_id;
1397
1415
  IF v_row.id IS NULL THEN RETURN 'missing'; END IF;
1398
1416
  SELECT * INTO l FROM public.inventory_recompute_limits WHERE inventory_recompute_limits.id;
@@ -1455,6 +1473,7 @@ BEGIN
1455
1473
  END $function$
1456
1474
  ;
1457
1475
  REVOKE ALL ON FUNCTION complete_floriday_base_supply(uuid,text,text,text,text,text,text,numeric) FROM PUBLIC;
1476
+ REVOKE ALL ON FUNCTION complete_floriday_base_supply(uuid,text,text,text,text,text,text,numeric) FROM anon;
1458
1477
  GRANT EXECUTE ON FUNCTION complete_floriday_base_supply(uuid,text,text,text,text,text,text,numeric) TO service_role;
1459
1478
  CREATE OR REPLACE FUNCTION public.complete_floriday_stock_queue(p_id uuid, p_ok boolean, p_error text DEFAULT NULL::text, p_permanent boolean DEFAULT false, p_attempt_id text DEFAULT NULL::text)
1460
1479
  RETURNS void
@@ -1473,6 +1492,7 @@ DECLARE
1473
1492
  v_since timestamptz;
1474
1493
  v_min integer;
1475
1494
  BEGIN
1495
+ PERFORM public.voorraad_vereis('ingelogd', 'complete_floriday_stock_queue');
1476
1496
  SELECT * INTO v_row FROM public.floriday_continuous_stock_queue WHERE id = p_id;
1477
1497
  IF v_row.id IS NULL THEN RETURN; END IF;
1478
1498
  v_attempts := COALESCE(v_row.attempts, 0) + 1;
@@ -1560,8 +1580,11 @@ END;
1560
1580
  $function$
1561
1581
  ;
1562
1582
  REVOKE ALL ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) FROM PUBLIC;
1563
- GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO PUBLIC;
1564
- GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO anon;
1583
+ REVOKE ALL ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) FROM anon;
1584
+ REVOKE EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) FROM PUBLIC;
1585
+ GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO authenticated;
1586
+ GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO service_role;
1587
+ REVOKE EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) FROM anon;
1565
1588
  GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO authenticated;
1566
1589
  GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue(uuid,boolean,text,boolean,text) TO service_role;
1567
1590
  CREATE OR REPLACE FUNCTION public.complete_floriday_stock_queue_outcome(p_id uuid, p_outcome text, p_availability_sent boolean DEFAULT false, p_quantity_sent boolean DEFAULT false, p_error text DEFAULT NULL::text, p_attempt_id text DEFAULT NULL::text, p_permanent boolean DEFAULT false)
@@ -1572,6 +1595,7 @@ CREATE OR REPLACE FUNCTION public.complete_floriday_stock_queue_outcome(p_id uui
1572
1595
  AS $function$
1573
1596
  DECLARE v_row public.floriday_continuous_stock_queue%ROWTYPE; v_reason text; v_outcome text := p_outcome; v_err text := p_error;
1574
1597
  BEGIN
1598
+ PERFORM public.voorraad_vereis('ingelogd', 'complete_floriday_stock_queue_outcome');
1575
1599
  SELECT * INTO v_row FROM public.floriday_continuous_stock_queue WHERE id = p_id;
1576
1600
  IF v_row.id IS NULL THEN RETURN; END IF;
1577
1601
 
@@ -1688,6 +1712,7 @@ BEGIN
1688
1712
  END $function$
1689
1713
  ;
1690
1714
  REVOKE ALL ON FUNCTION complete_floriday_stock_queue_outcome(uuid,text,boolean,boolean,text,text,boolean) FROM PUBLIC;
1715
+ REVOKE ALL ON FUNCTION complete_floriday_stock_queue_outcome(uuid,text,boolean,boolean,text,text,boolean) FROM anon;
1691
1716
  GRANT EXECUTE ON FUNCTION complete_floriday_stock_queue_outcome(uuid,text,boolean,boolean,text,text,boolean) TO service_role;
1692
1717
  CREATE OR REPLACE FUNCTION public.consume_bom_for_production(p_parent_kind text, p_parent_id text, p_parent_key text, p_quantity numeric, p_connection_id uuid, p_user_id uuid)
1693
1718
  RETURNS jsonb
@@ -1716,7 +1741,8 @@ DECLARE
1716
1741
  v_component_product_id uuid;
1717
1742
  v_stock_row record;
1718
1743
  v_connection_id uuid := p_connection_id;
1719
- BEGIN
1744
+ BEGIN
1745
+ PERFORM public.voorraad_vereis('ingelogd', 'consume_bom_for_production');
1720
1746
  IF p_quantity IS NULL OR p_quantity <= 0 THEN
1721
1747
  RETURN jsonb_build_object('ok', true, 'consumed', '[]'::jsonb);
1722
1748
  END IF;
@@ -1941,6 +1967,7 @@ END;
1941
1967
  $function$
1942
1968
  ;
1943
1969
  REVOKE ALL ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid) FROM PUBLIC;
1970
+ REVOKE ALL ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid) FROM anon;
1944
1971
  GRANT EXECUTE ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid) TO service_role;
1945
1972
  CREATE OR REPLACE FUNCTION public.consume_bom_for_production(p_parent_kind text, p_parent_id text, p_parent_key text, p_quantity numeric, p_connection_id uuid, p_user_id uuid, p_batch_id uuid DEFAULT NULL::uuid)
1946
1973
  RETURNS jsonb
@@ -1970,7 +1997,8 @@ DECLARE
1970
1997
  v_stock_row record;
1971
1998
  v_connection_id uuid := p_connection_id;
1972
1999
  v_batch_id uuid := COALESCE(p_batch_id, gen_random_uuid());
1973
- BEGIN
2000
+ BEGIN
2001
+ PERFORM public.voorraad_vereis('ingelogd', 'consume_bom_for_production');
1974
2002
  IF p_quantity IS NULL OR p_quantity <= 0 THEN
1975
2003
  RETURN jsonb_build_object('ok', true, 'consumed', '[]'::jsonb, 'batch_id', v_batch_id);
1976
2004
  END IF;
@@ -2150,6 +2178,7 @@ END;
2150
2178
  $function$
2151
2179
  ;
2152
2180
  REVOKE ALL ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid,uuid) FROM PUBLIC;
2181
+ REVOKE ALL ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid,uuid) FROM anon;
2153
2182
  GRANT EXECUTE ON FUNCTION consume_bom_for_production(text,text,text,numeric,uuid,uuid,uuid) TO service_role;
2154
2183
  CREATE OR REPLACE FUNCTION public.consume_order_item(p_order_id uuid, p_order_item_id uuid, p_source text, p_reason text)
2155
2184
  RETURNS integer
@@ -2159,6 +2188,7 @@ CREATE OR REPLACE FUNCTION public.consume_order_item(p_order_id uuid, p_order_it
2159
2188
  AS $function$
2160
2189
  DECLARE a record; n integer := 0; v_ins integer; v_norm text := public.normalize_order_source(p_source);
2161
2190
  BEGIN
2191
+ PERFORM public.voorraad_vereis('ingelogd', 'consume_order_item');
2162
2192
  IF p_order_item_id IS NULL THEN RETURN 0; END IF;
2163
2193
  IF EXISTS (SELECT 1 FROM public.stock_mutation_log WHERE order_item_id = p_order_item_id AND mutation_type = 'consumption')
2164
2194
  AND NOT EXISTS (SELECT 1 FROM public.stock_mutation_log WHERE order_item_id = p_order_item_id AND mutation_type = 'consumption_done') THEN
@@ -2193,6 +2223,7 @@ BEGIN
2193
2223
  END $function$
2194
2224
  ;
2195
2225
  REVOKE ALL ON FUNCTION consume_order_item(uuid,uuid,text,text) FROM PUBLIC;
2226
+ REVOKE ALL ON FUNCTION consume_order_item(uuid,uuid,text,text) FROM anon;
2196
2227
  GRANT EXECUTE ON FUNCTION consume_order_item(uuid,uuid,text,text) TO service_role;
2197
2228
  CREATE OR REPLACE FUNCTION public.drain_inventory_recompute_queue()
2198
2229
  RETURNS integer
@@ -2202,6 +2233,7 @@ CREATE OR REPLACE FUNCTION public.drain_inventory_recompute_queue()
2202
2233
  AS $function$
2203
2234
  DECLARE n integer := 0; v_batch int;
2204
2235
  BEGIN
2236
+ PERFORM public.voorraad_vereis('server', 'drain_inventory_recompute_queue');
2205
2237
  SELECT drain_batch INTO v_batch FROM public.inventory_recompute_limits WHERE id;
2206
2238
  PERFORM set_config('inventory.inline_overflow', '0', true);
2207
2239
  n := public.process_inventory_recompute_queue(COALESCE(v_batch, 500));
@@ -2213,6 +2245,7 @@ BEGIN
2213
2245
  END $function$
2214
2246
  ;
2215
2247
  REVOKE ALL ON FUNCTION drain_inventory_recompute_queue() FROM PUBLIC;
2248
+ REVOKE ALL ON FUNCTION drain_inventory_recompute_queue() FROM anon;
2216
2249
  GRANT EXECUTE ON FUNCTION drain_inventory_recompute_queue() TO service_role;
2217
2250
  CREATE OR REPLACE FUNCTION public.enqueue_floriday_continuous_stock()
2218
2251
  RETURNS trigger
@@ -2264,8 +2297,11 @@ END;
2264
2297
  $function$
2265
2298
  ;
2266
2299
  REVOKE ALL ON FUNCTION enqueue_floriday_continuous_stock() FROM PUBLIC;
2267
- GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO PUBLIC;
2268
- GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO anon;
2300
+ REVOKE ALL ON FUNCTION enqueue_floriday_continuous_stock() FROM anon;
2301
+ REVOKE EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() FROM PUBLIC;
2302
+ GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO authenticated;
2303
+ GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO service_role;
2304
+ REVOKE EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() FROM anon;
2269
2305
  GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO authenticated;
2270
2306
  GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock() TO service_role;
2271
2307
  CREATE OR REPLACE FUNCTION public.enqueue_floriday_continuous_stock_after_warehouse_preference()
@@ -2310,8 +2346,11 @@ END;
2310
2346
  $function$
2311
2347
  ;
2312
2348
  REVOKE ALL ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() FROM PUBLIC;
2313
- GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO PUBLIC;
2314
- GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO anon;
2349
+ REVOKE ALL ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() FROM anon;
2350
+ REVOKE EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() FROM PUBLIC;
2351
+ GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO authenticated;
2352
+ GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO service_role;
2353
+ REVOKE EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() FROM anon;
2315
2354
  GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO authenticated;
2316
2355
  GRANT EXECUTE ON FUNCTION enqueue_floriday_continuous_stock_after_warehouse_preference() TO service_role;
2317
2356
  CREATE OR REPLACE FUNCTION public.enqueue_structure_recompute(p_product_ids uuid[], p_reason text, p_include_self boolean DEFAULT false)
@@ -2322,6 +2361,7 @@ CREATE OR REPLACE FUNCTION public.enqueue_structure_recompute(p_product_ids uuid
2322
2361
  AS $function$
2323
2362
  DECLARE n integer := 0;
2324
2363
  BEGIN
2364
+ PERFORM public.voorraad_vereis('ingelogd', 'enqueue_structure_recompute');
2325
2365
  IF p_product_ids IS NULL OR cardinality(p_product_ids) = 0 THEN RETURN 0; END IF;
2326
2366
  INSERT INTO public.inventory_recompute_queue(product_id, reason)
2327
2367
  SELECT DISTINCT id, p_reason FROM (
@@ -2334,6 +2374,7 @@ BEGIN
2334
2374
  END $function$
2335
2375
  ;
2336
2376
  REVOKE ALL ON FUNCTION enqueue_structure_recompute(uuid[],text,boolean) FROM PUBLIC;
2377
+ REVOKE ALL ON FUNCTION enqueue_structure_recompute(uuid[],text,boolean) FROM anon;
2337
2378
  GRANT EXECUTE ON FUNCTION enqueue_structure_recompute(uuid[],text,boolean) TO service_role;
2338
2379
  CREATE OR REPLACE FUNCTION public.ensure_inventory_recompute_drain()
2339
2380
  RETURNS void
@@ -2342,6 +2383,7 @@ CREATE OR REPLACE FUNCTION public.ensure_inventory_recompute_drain()
2342
2383
  SET search_path TO 'public'
2343
2384
  AS $function$
2344
2385
  BEGIN
2386
+ PERFORM public.voorraad_vereis('server', 'ensure_inventory_recompute_drain');
2345
2387
  IF NOT EXISTS (SELECT 1 FROM cron.job WHERE jobname = 'inventory-recompute-drain') THEN
2346
2388
  PERFORM cron.schedule('inventory-recompute-drain', '* * * * *', 'select public.drain_inventory_recompute_queue()');
2347
2389
  END IF;
@@ -2350,6 +2392,7 @@ EXCEPTION WHEN others THEN
2350
2392
  END $function$
2351
2393
  ;
2352
2394
  REVOKE ALL ON FUNCTION ensure_inventory_recompute_drain() FROM PUBLIC;
2395
+ REVOKE ALL ON FUNCTION ensure_inventory_recompute_drain() FROM anon;
2353
2396
  GRANT EXECUTE ON FUNCTION ensure_inventory_recompute_drain() TO service_role;
2354
2397
  CREATE OR REPLACE FUNCTION public.ensure_trade_item_stock_row(p_key text)
2355
2398
  RETURNS void
@@ -2358,12 +2401,14 @@ CREATE OR REPLACE FUNCTION public.ensure_trade_item_stock_row(p_key text)
2358
2401
  SET search_path TO 'public'
2359
2402
  AS $function$
2360
2403
  BEGIN
2404
+ PERFORM public.voorraad_vereis('ingelogd', 'ensure_trade_item_stock_row');
2361
2405
  PERFORM public.ensure_trade_item_stock_row_key(p_key);
2362
2406
  END
2363
2407
  $function$
2364
2408
  ;
2365
2409
  REVOKE ALL ON FUNCTION ensure_trade_item_stock_row(text) FROM PUBLIC;
2366
- GRANT EXECUTE ON FUNCTION ensure_trade_item_stock_row(text) TO anon;
2410
+ REVOKE ALL ON FUNCTION ensure_trade_item_stock_row(text) FROM anon;
2411
+ REVOKE EXECUTE ON FUNCTION ensure_trade_item_stock_row(text) FROM anon;
2367
2412
  GRANT EXECUTE ON FUNCTION ensure_trade_item_stock_row(text) TO authenticated;
2368
2413
  GRANT EXECUTE ON FUNCTION ensure_trade_item_stock_row(text) TO service_role;
2369
2414
  CREATE OR REPLACE FUNCTION public.ensure_trade_item_stock_row_key(p_key text)
@@ -2377,6 +2422,7 @@ DECLARE
2377
2422
  v_product_id uuid;
2378
2423
  v_canonical_key text;
2379
2424
  BEGIN
2425
+ PERFORM public.voorraad_vereis('ingelogd', 'ensure_trade_item_stock_row_key');
2380
2426
  IF p_key IS NULL OR btrim(p_key) = '' THEN
2381
2427
  RETURN NULL;
2382
2428
  END IF;
@@ -2450,6 +2496,7 @@ END
2450
2496
  $function$
2451
2497
  ;
2452
2498
  REVOKE ALL ON FUNCTION ensure_trade_item_stock_row_key(text) FROM PUBLIC;
2499
+ REVOKE ALL ON FUNCTION ensure_trade_item_stock_row_key(text) FROM anon;
2453
2500
  GRANT EXECUTE ON FUNCTION ensure_trade_item_stock_row_key(text) TO service_role;
2454
2501
  CREATE OR REPLACE FUNCTION public.fcsq_block_disabled()
2455
2502
  RETURNS trigger
@@ -2469,6 +2516,7 @@ BEGIN
2469
2516
  END $function$
2470
2517
  ;
2471
2518
  REVOKE ALL ON FUNCTION fcsq_block_disabled() FROM PUBLIC;
2519
+ REVOKE ALL ON FUNCTION fcsq_block_disabled() FROM anon;
2472
2520
  GRANT EXECUTE ON FUNCTION fcsq_block_disabled() TO service_role;
2473
2521
  CREATE OR REPLACE FUNCTION public.fcsq_fallback_supersede()
2474
2522
  RETURNS trigger
@@ -2498,6 +2546,7 @@ BEGIN
2498
2546
  END $function$
2499
2547
  ;
2500
2548
  REVOKE ALL ON FUNCTION fcsq_fallback_supersede() FROM PUBLIC;
2549
+ REVOKE ALL ON FUNCTION fcsq_fallback_supersede() FROM anon;
2501
2550
  GRANT EXECUTE ON FUNCTION fcsq_fallback_supersede() TO service_role;
2502
2551
  CREATE OR REPLACE FUNCTION public.fcsq_wake_base_supply()
2503
2552
  RETURNS trigger
@@ -2522,6 +2571,7 @@ BEGIN
2522
2571
  END $function$
2523
2572
  ;
2524
2573
  REVOKE ALL ON FUNCTION fcsq_wake_base_supply() FROM PUBLIC;
2574
+ REVOKE ALL ON FUNCTION fcsq_wake_base_supply() FROM anon;
2525
2575
  GRANT EXECUTE ON FUNCTION fcsq_wake_base_supply() TO service_role;
2526
2576
  CREATE OR REPLACE FUNCTION public.find_trade_item_key(p_name text, p_barcode text, p_product_id uuid)
2527
2577
  RETURNS text
@@ -2531,6 +2581,7 @@ CREATE OR REPLACE FUNCTION public.find_trade_item_key(p_name text, p_barcode tex
2531
2581
  AS $function$
2532
2582
  DECLARE v_key text; v_bar text; v_name text;
2533
2583
  BEGIN
2584
+ PERFORM public.voorraad_vereis('ingelogd', 'find_trade_item_key');
2534
2585
  v_bar := NULLIF(btrim(p_barcode), '');
2535
2586
  v_name := NULLIF(lower(btrim(p_name)), '');
2536
2587
 
@@ -2577,8 +2628,11 @@ BEGIN
2577
2628
  END $function$
2578
2629
  ;
2579
2630
  REVOKE ALL ON FUNCTION find_trade_item_key(text,text,uuid) FROM PUBLIC;
2580
- GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO PUBLIC;
2581
- GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO anon;
2631
+ REVOKE ALL ON FUNCTION find_trade_item_key(text,text,uuid) FROM anon;
2632
+ REVOKE EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) FROM PUBLIC;
2633
+ GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO authenticated;
2634
+ GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO service_role;
2635
+ REVOKE EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) FROM anon;
2582
2636
  GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO authenticated;
2583
2637
  GRANT EXECUTE ON FUNCTION find_trade_item_key(text,text,uuid) TO service_role;
2584
2638
  CREATE OR REPLACE FUNCTION public.floriday_adopt_connection(p_old uuid, p_new uuid)
@@ -2592,6 +2646,7 @@ DECLARE
2592
2646
  v_moved jsonb := '{}'::jsonb;
2593
2647
  v_count bigint;
2594
2648
  BEGIN
2649
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_adopt_connection');
2595
2650
  IF p_old IS NULL OR p_new IS NULL OR p_old = p_new THEN
2596
2651
  RETURN jsonb_build_object('ok', false, 'reason', 'ongeldige connecties');
2597
2652
  END IF;
@@ -2630,7 +2685,8 @@ END;
2630
2685
  $function$
2631
2686
  ;
2632
2687
  REVOKE ALL ON FUNCTION floriday_adopt_connection(uuid,uuid) FROM PUBLIC;
2633
- GRANT EXECUTE ON FUNCTION floriday_adopt_connection(uuid,uuid) TO anon;
2688
+ REVOKE ALL ON FUNCTION floriday_adopt_connection(uuid,uuid) FROM anon;
2689
+ REVOKE EXECUTE ON FUNCTION floriday_adopt_connection(uuid,uuid) FROM anon;
2634
2690
  GRANT EXECUTE ON FUNCTION floriday_adopt_connection(uuid,uuid) TO authenticated;
2635
2691
  GRANT EXECUTE ON FUNCTION floriday_adopt_connection(uuid,uuid) TO service_role;
2636
2692
  CREATE OR REPLACE FUNCTION public.floriday_autoheal_connections()
@@ -2646,6 +2702,7 @@ DECLARE
2646
2702
  v_adopted jsonb := '[]'::jsonb;
2647
2703
  v_relink jsonb;
2648
2704
  BEGIN
2705
+ PERFORM public.voorraad_vereis('server', 'floriday_autoheal_connections');
2649
2706
  FOR env IN
2650
2707
  SELECT environment
2651
2708
  FROM public.floriday_connections
@@ -2675,7 +2732,8 @@ END;
2675
2732
  $function$
2676
2733
  ;
2677
2734
  REVOKE ALL ON FUNCTION floriday_autoheal_connections() FROM PUBLIC;
2678
- GRANT EXECUTE ON FUNCTION floriday_autoheal_connections() TO anon;
2735
+ REVOKE ALL ON FUNCTION floriday_autoheal_connections() FROM anon;
2736
+ REVOKE EXECUTE ON FUNCTION floriday_autoheal_connections() FROM anon;
2679
2737
  GRANT EXECUTE ON FUNCTION floriday_autoheal_connections() TO authenticated;
2680
2738
  GRANT EXECUTE ON FUNCTION floriday_autoheal_connections() TO service_role;
2681
2739
  CREATE OR REPLACE FUNCTION public.floriday_capture_stock_snapshot()
@@ -2687,6 +2745,7 @@ AS $function$
2687
2745
  DECLARE
2688
2746
  v_rows integer;
2689
2747
  BEGIN
2748
+ PERFORM public.voorraad_vereis('server', 'floriday_capture_stock_snapshot');
2690
2749
  INSERT INTO public.inventory_stock_snapshots (
2691
2750
  user_id, connection_id, snapshot_at, granularity,
2692
2751
  erp_available_quantity, floriday_desired_quantity, floriday_remote_quantity
@@ -2718,6 +2777,7 @@ END;
2718
2777
  $function$
2719
2778
  ;
2720
2779
  REVOKE ALL ON FUNCTION floriday_capture_stock_snapshot() FROM PUBLIC;
2780
+ REVOKE ALL ON FUNCTION floriday_capture_stock_snapshot() FROM anon;
2721
2781
  GRANT EXECUTE ON FUNCTION floriday_capture_stock_snapshot() TO service_role;
2722
2782
  CREATE OR REPLACE FUNCTION public.floriday_cleanup_stock_queue_v2()
2723
2783
  RETURNS jsonb
@@ -2736,6 +2796,7 @@ DECLARE
2736
2796
  g jsonb; v_days int; v_total int; v_n int; v_batches int := 0;
2737
2797
  v_deleted jsonb := '{}'::jsonb; v_more boolean := false; v_statuses text[];
2738
2798
  BEGIN
2799
+ PERFORM public.voorraad_vereis('server', 'floriday_cleanup_stock_queue_v2');
2739
2800
  SELECT * INTO l FROM public.inventory_recompute_limits LIMIT 1;
2740
2801
  INSERT INTO public.floriday_queue_cleanup_runs DEFAULT VALUES RETURNING id INTO v_run;
2741
2802
  BEGIN
@@ -2767,6 +2828,7 @@ BEGIN
2767
2828
  END $function$
2768
2829
  ;
2769
2830
  REVOKE ALL ON FUNCTION floriday_cleanup_stock_queue_v2() FROM PUBLIC;
2831
+ REVOKE ALL ON FUNCTION floriday_cleanup_stock_queue_v2() FROM anon;
2770
2832
  GRANT EXECUTE ON FUNCTION floriday_cleanup_stock_queue_v2() TO service_role;
2771
2833
  CREATE OR REPLACE FUNCTION public.floriday_compact_stock_snapshots()
2772
2834
  RETURNS void
@@ -2775,6 +2837,7 @@ CREATE OR REPLACE FUNCTION public.floriday_compact_stock_snapshots()
2775
2837
  SET search_path TO 'public'
2776
2838
  AS $function$
2777
2839
  BEGIN
2840
+ PERFORM public.voorraad_vereis('server', 'floriday_compact_stock_snapshots');
2778
2841
  INSERT INTO public.inventory_stock_snapshots (
2779
2842
  user_id, connection_id, snapshot_at, granularity,
2780
2843
  erp_available_quantity, floriday_desired_quantity, floriday_remote_quantity
@@ -2797,6 +2860,7 @@ END;
2797
2860
  $function$
2798
2861
  ;
2799
2862
  REVOKE ALL ON FUNCTION floriday_compact_stock_snapshots() FROM PUBLIC;
2863
+ REVOKE ALL ON FUNCTION floriday_compact_stock_snapshots() FROM anon;
2800
2864
  GRANT EXECUTE ON FUNCTION floriday_compact_stock_snapshots() TO service_role;
2801
2865
  CREATE OR REPLACE FUNCTION public.floriday_default_owner(p_connection_id uuid)
2802
2866
  RETURNS uuid
@@ -2815,6 +2879,7 @@ AS $function$
2815
2879
  $function$
2816
2880
  ;
2817
2881
  REVOKE ALL ON FUNCTION floriday_default_owner(uuid) FROM PUBLIC;
2882
+ REVOKE ALL ON FUNCTION floriday_default_owner(uuid) FROM anon;
2818
2883
  GRANT EXECUTE ON FUNCTION floriday_default_owner(uuid) TO service_role;
2819
2884
  CREATE OR REPLACE FUNCTION public.floriday_desired_stock_regression_check()
2820
2885
  RETURNS TABLE(product_id uuid, product_name text, stock_mode text, packing integer, available integer, expected integer, actual integer, equal boolean)
@@ -2847,6 +2912,7 @@ AS $function$
2847
2912
  $function$
2848
2913
  ;
2849
2914
  REVOKE ALL ON FUNCTION floriday_desired_stock_regression_check() FROM PUBLIC;
2915
+ REVOKE ALL ON FUNCTION floriday_desired_stock_regression_check() FROM anon;
2850
2916
  GRANT EXECUTE ON FUNCTION floriday_desired_stock_regression_check() TO service_role;
2851
2917
  CREATE OR REPLACE FUNCTION public.floriday_ensure_inventory_settings()
2852
2918
  RETURNS trigger
@@ -2877,6 +2943,7 @@ END;
2877
2943
  $function$
2878
2944
  ;
2879
2945
  REVOKE ALL ON FUNCTION floriday_ensure_inventory_settings() FROM PUBLIC;
2946
+ REVOKE ALL ON FUNCTION floriday_ensure_inventory_settings() FROM anon;
2880
2947
  GRANT EXECUTE ON FUNCTION floriday_ensure_inventory_settings() TO service_role;
2881
2948
  CREATE OR REPLACE FUNCTION public.floriday_erp_leading_preview(p_connection_id uuid, p_product_ids uuid[], p_stock_mode text DEFAULT 'FOLLOW_ERP'::text)
2882
2949
  RETURNS TABLE(product_id uuid, product_name text, trade_item_id text, stock_mode text, desired_quantity integer, desired_available boolean, sale_price numeric, offer_forms jsonb, weeks jsonb, blocker text, horizon_weeks integer)
@@ -2887,7 +2954,8 @@ AS $function$
2887
2954
  DECLARE v_pid uuid; v_q int; v_av boolean; v_reason text; v_mode text; v_h int := public.floriday_publish_horizon_weeks(); v_w jsonb; v_d date; i int;
2888
2955
  v_tid text; v_price numeric; v_forms jsonb; v_y int; v_wk int; v_fl int;
2889
2956
  BEGIN
2890
- IF auth.uid() IS NULL OR NOT public.voorraad_can_write() THEN
2957
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_erp_leading_preview');
2958
+ IF NOT public.voorraad_is_server() AND (auth.uid() IS NULL OR NOT public.voorraad_can_write()) THEN
2891
2959
  RAISE EXCEPTION 'Je hebt geen rechten' USING ERRCODE = '42501'; END IF;
2892
2960
  IF p_stock_mode NOT IN ('FOLLOW_ERP','MAXIMUM','FIXED_REFILL','MANUAL') THEN RAISE EXCEPTION 'Kies een voorraadmodus'; END IF;
2893
2961
  FOREACH v_pid IN ARRAY p_product_ids LOOP
@@ -2943,6 +3011,7 @@ BEGIN
2943
3011
  END $function$
2944
3012
  ;
2945
3013
  REVOKE ALL ON FUNCTION floriday_erp_leading_preview(uuid,uuid[],text) FROM PUBLIC;
3014
+ REVOKE ALL ON FUNCTION floriday_erp_leading_preview(uuid,uuid[],text) FROM anon;
2946
3015
  GRANT EXECUTE ON FUNCTION floriday_erp_leading_preview(uuid,uuid[],text) TO authenticated;
2947
3016
  GRANT EXECUTE ON FUNCTION floriday_erp_leading_preview(uuid,uuid[],text) TO service_role;
2948
3017
  CREATE OR REPLACE FUNCTION public.floriday_fill_publish_horizon()
@@ -2955,6 +3024,7 @@ DECLARE
2955
3024
  r record;
2956
3025
  v_count integer := 0;
2957
3026
  BEGIN
3027
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_fill_publish_horizon');
2958
3028
  -- verlopen weken afsluiten
2959
3029
  UPDATE public.floriday_continuous_stock_queue
2960
3030
  SET status = 'superseded', updated_at = now()
@@ -2977,6 +3047,7 @@ END;
2977
3047
  $function$
2978
3048
  ;
2979
3049
  REVOKE ALL ON FUNCTION floriday_fill_publish_horizon() FROM PUBLIC;
3050
+ REVOKE ALL ON FUNCTION floriday_fill_publish_horizon() FROM anon;
2980
3051
  GRANT EXECUTE ON FUNCTION floriday_fill_publish_horizon() TO service_role;
2981
3052
  CREATE OR REPLACE FUNCTION public.floriday_follow_apply(p_connection_id uuid, p_items jsonb)
2982
3053
  RETURNS jsonb
@@ -2989,6 +3060,7 @@ DECLARE
2989
3060
  v_stock numeric; v_price numeric; v_res text; v_fs text; v_old_claims text;
2990
3061
  v_upd int := 0; v_same int := 0; v_skip int := 0; v_err int := 0;
2991
3062
  BEGIN
3063
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_follow_apply');
2992
3064
  IF NOT public.voorraad_hook_on('follow_floriday') THEN
2993
3065
  RETURN jsonb_build_object('waiting', true, 'reason', 'Volgt Floriday staat uit');
2994
3066
  END IF;
@@ -3042,6 +3114,7 @@ BEGIN
3042
3114
  END $function$
3043
3115
  ;
3044
3116
  REVOKE ALL ON FUNCTION floriday_follow_apply(uuid,jsonb) FROM PUBLIC;
3117
+ REVOKE ALL ON FUNCTION floriday_follow_apply(uuid,jsonb) FROM anon;
3045
3118
  GRANT EXECUTE ON FUNCTION floriday_follow_apply(uuid,jsonb) TO service_role;
3046
3119
  CREATE OR REPLACE FUNCTION public.floriday_ingest_sales_orders(p_limit integer DEFAULT 200)
3047
3120
  RETURNS integer
@@ -3067,6 +3140,7 @@ DECLARE
3067
3140
  v_fust_delta integer;
3068
3141
  v_owner uuid;
3069
3142
  BEGIN
3143
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_ingest_sales_orders');
3070
3144
  FOR r IN
3071
3145
  SELECT c.connection_id,
3072
3146
  c.floriday_id,
@@ -3242,6 +3316,7 @@ END;
3242
3316
  $function$
3243
3317
  ;
3244
3318
  REVOKE ALL ON FUNCTION floriday_ingest_sales_orders(integer) FROM PUBLIC;
3319
+ REVOKE ALL ON FUNCTION floriday_ingest_sales_orders(integer) FROM anon;
3245
3320
  GRANT EXECUTE ON FUNCTION floriday_ingest_sales_orders(integer) TO service_role;
3246
3321
  CREATE OR REPLACE FUNCTION public.floriday_leading_summary(p_connection_id uuid)
3247
3322
  RETURNS jsonb
@@ -3259,6 +3334,7 @@ AS $function$
3259
3334
  $function$
3260
3335
  ;
3261
3336
  REVOKE ALL ON FUNCTION floriday_leading_summary(uuid) FROM PUBLIC;
3337
+ REVOKE ALL ON FUNCTION floriday_leading_summary(uuid) FROM anon;
3262
3338
  GRANT EXECUTE ON FUNCTION floriday_leading_summary(uuid) TO authenticated;
3263
3339
  GRANT EXECUTE ON FUNCTION floriday_leading_summary(uuid) TO service_role;
3264
3340
  CREATE OR REPLACE FUNCTION public.floriday_make_erp_leading(p_connection_id uuid, p_product_ids uuid[], p_stock_mode text DEFAULT 'FOLLOW_ERP'::text)
@@ -3269,7 +3345,8 @@ CREATE OR REPLACE FUNCTION public.floriday_make_erp_leading(p_connection_id uuid
3269
3345
  AS $function$
3270
3346
  DECLARE v_pid uuid; v_n int := 0; v_skipped jsonb := '[]'::jsonb; v_old text; v_block text; r record;
3271
3347
  BEGIN
3272
- IF auth.uid() IS NULL OR NOT public.voorraad_can_write() THEN
3348
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_make_erp_leading');
3349
+ IF NOT public.voorraad_is_server() AND (auth.uid() IS NULL OR NOT public.voorraad_can_write()) THEN
3273
3350
  RAISE EXCEPTION 'Je hebt geen rechten' USING ERRCODE = '42501'; END IF;
3274
3351
  IF p_stock_mode NOT IN ('FOLLOW_ERP','MAXIMUM','FIXED_REFILL','MANUAL') THEN
3275
3352
  RAISE EXCEPTION 'Kies een voorraadmodus'; END IF;
@@ -3302,6 +3379,7 @@ BEGIN
3302
3379
  END $function$
3303
3380
  ;
3304
3381
  REVOKE ALL ON FUNCTION floriday_make_erp_leading(uuid,uuid[],text) FROM PUBLIC;
3382
+ REVOKE ALL ON FUNCTION floriday_make_erp_leading(uuid,uuid[],text) FROM anon;
3305
3383
  GRANT EXECUTE ON FUNCTION floriday_make_erp_leading(uuid,uuid[],text) TO authenticated;
3306
3384
  GRANT EXECUTE ON FUNCTION floriday_make_erp_leading(uuid,uuid[],text) TO service_role;
3307
3385
  CREATE OR REPLACE FUNCTION public.floriday_norm_offer_forms(p jsonb)
@@ -3321,8 +3399,11 @@ BEGIN
3321
3399
  END $function$
3322
3400
  ;
3323
3401
  REVOKE ALL ON FUNCTION floriday_norm_offer_forms(jsonb) FROM PUBLIC;
3324
- GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO PUBLIC;
3325
- GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO anon;
3402
+ REVOKE ALL ON FUNCTION floriday_norm_offer_forms(jsonb) FROM anon;
3403
+ REVOKE EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) FROM PUBLIC;
3404
+ GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO authenticated;
3405
+ GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO service_role;
3406
+ REVOKE EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) FROM anon;
3326
3407
  GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO authenticated;
3327
3408
  GRANT EXECUTE ON FUNCTION floriday_norm_offer_forms(jsonb) TO service_role;
3328
3409
  CREATE OR REPLACE FUNCTION public.floriday_orphan_settings_count()
@@ -3336,6 +3417,7 @@ AS $function$
3336
3417
  $function$
3337
3418
  ;
3338
3419
  REVOKE ALL ON FUNCTION floriday_orphan_settings_count() FROM PUBLIC;
3420
+ REVOKE ALL ON FUNCTION floriday_orphan_settings_count() FROM anon;
3339
3421
  GRANT EXECUTE ON FUNCTION floriday_orphan_settings_count() TO service_role;
3340
3422
  CREATE OR REPLACE FUNCTION public.floriday_publish_horizon_weeks()
3341
3423
  RETURNS integer
@@ -3349,6 +3431,7 @@ AS $function$
3349
3431
  $function$
3350
3432
  ;
3351
3433
  REVOKE ALL ON FUNCTION floriday_publish_horizon_weeks() FROM PUBLIC;
3434
+ REVOKE ALL ON FUNCTION floriday_publish_horizon_weeks() FROM anon;
3352
3435
  GRANT EXECUTE ON FUNCTION floriday_publish_horizon_weeks() TO service_role;
3353
3436
  CREATE OR REPLACE FUNCTION public.floriday_queue_erp_guard()
3354
3437
  RETURNS trigger
@@ -3413,6 +3496,7 @@ BEGIN
3413
3496
  END $function$
3414
3497
  ;
3415
3498
  REVOKE ALL ON FUNCTION floriday_queue_erp_guard() FROM PUBLIC;
3499
+ REVOKE ALL ON FUNCTION floriday_queue_erp_guard() FROM anon;
3416
3500
  GRANT EXECUTE ON FUNCTION floriday_queue_erp_guard() TO service_role;
3417
3501
  CREATE OR REPLACE FUNCTION public.floriday_queue_first_positive()
3418
3502
  RETURNS trigger
@@ -3434,6 +3518,7 @@ EXCEPTION WHEN OTHERS THEN RETURN NULL;
3434
3518
  END $function$
3435
3519
  ;
3436
3520
  REVOKE ALL ON FUNCTION floriday_queue_first_positive() FROM PUBLIC;
3521
+ REVOKE ALL ON FUNCTION floriday_queue_first_positive() FROM anon;
3437
3522
  GRANT EXECUTE ON FUNCTION floriday_queue_first_positive() TO service_role;
3438
3523
  CREATE OR REPLACE FUNCTION public.floriday_recompute_inventory(p_connection_id uuid, p_product_id uuid, p_force boolean DEFAULT false)
3439
3524
  RETURNS void
@@ -3447,6 +3532,7 @@ DECLARE
3447
3532
  v_horizon integer := public.floriday_publish_horizon_weeks();
3448
3533
  v_offset integer; v_date date; v_year integer; v_week integer; v_changed boolean;
3449
3534
  BEGIN
3535
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_recompute_inventory');
3450
3536
  SELECT * INTO s FROM public.floriday_inventory_settings
3451
3537
  WHERE connection_id = p_connection_id AND product_id = p_product_id;
3452
3538
  IF s.id IS NULL THEN RETURN; END IF;
@@ -3508,6 +3594,7 @@ END;
3508
3594
  $function$
3509
3595
  ;
3510
3596
  REVOKE ALL ON FUNCTION floriday_recompute_inventory(uuid,uuid,boolean) FROM PUBLIC;
3597
+ REVOKE ALL ON FUNCTION floriday_recompute_inventory(uuid,uuid,boolean) FROM anon;
3511
3598
  GRANT EXECUTE ON FUNCTION floriday_recompute_inventory(uuid,uuid,boolean) TO service_role;
3512
3599
  CREATE OR REPLACE FUNCTION public.floriday_relink_products(p_connection_id uuid DEFAULT NULL::uuid)
3513
3600
  RETURNS jsonb
@@ -3519,6 +3606,7 @@ DECLARE
3519
3606
  v_conn uuid; v_cache_count int; v_row RECORD; v_cf jsonb; v_cf_id text; v_match text;
3520
3607
  v_linked int := 0; v_repaired int := 0; v_cleared int := 0;
3521
3608
  BEGIN
3609
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_relink_products');
3522
3610
  v_conn := p_connection_id;
3523
3611
  IF v_conn IS NULL THEN
3524
3612
  SELECT c.id INTO v_conn FROM public.floriday_settings s
@@ -3574,7 +3662,8 @@ BEGIN
3574
3662
  END; $function$
3575
3663
  ;
3576
3664
  REVOKE ALL ON FUNCTION floriday_relink_products(uuid) FROM PUBLIC;
3577
- GRANT EXECUTE ON FUNCTION floriday_relink_products(uuid) TO anon;
3665
+ REVOKE ALL ON FUNCTION floriday_relink_products(uuid) FROM anon;
3666
+ REVOKE EXECUTE ON FUNCTION floriday_relink_products(uuid) FROM anon;
3578
3667
  GRANT EXECUTE ON FUNCTION floriday_relink_products(uuid) TO authenticated;
3579
3668
  GRANT EXECUTE ON FUNCTION floriday_relink_products(uuid) TO service_role;
3580
3669
  CREATE OR REPLACE FUNCTION public.floriday_requeue_dead_letters(p_connection_id uuid DEFAULT NULL::uuid)
@@ -3585,6 +3674,7 @@ CREATE OR REPLACE FUNCTION public.floriday_requeue_dead_letters(p_connection_id
3585
3674
  AS $function$
3586
3675
  DECLARE v_count integer;
3587
3676
  BEGIN
3677
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_requeue_dead_letters');
3588
3678
  UPDATE public.floriday_continuous_stock_queue
3589
3679
  SET status = 'pending',
3590
3680
  attempts = 0,
@@ -3602,6 +3692,7 @@ END;
3602
3692
  $function$
3603
3693
  ;
3604
3694
  REVOKE ALL ON FUNCTION floriday_requeue_dead_letters(uuid) FROM PUBLIC;
3695
+ REVOKE ALL ON FUNCTION floriday_requeue_dead_letters(uuid) FROM anon;
3605
3696
  GRANT EXECUTE ON FUNCTION floriday_requeue_dead_letters(uuid) TO service_role;
3606
3697
  CREATE OR REPLACE FUNCTION public.floriday_settings_change_recompute()
3607
3698
  RETURNS trigger
@@ -3625,6 +3716,7 @@ END;
3625
3716
  $function$
3626
3717
  ;
3627
3718
  REVOKE ALL ON FUNCTION floriday_settings_change_recompute() FROM PUBLIC;
3719
+ REVOKE ALL ON FUNCTION floriday_settings_change_recompute() FROM anon;
3628
3720
  GRANT EXECUTE ON FUNCTION floriday_settings_change_recompute() TO service_role;
3629
3721
  CREATE OR REPLACE FUNCTION public.floriday_settings_change_recompute_stmt()
3630
3722
  RETURNS trigger
@@ -3655,6 +3747,7 @@ BEGIN
3655
3747
  END $function$
3656
3748
  ;
3657
3749
  REVOKE ALL ON FUNCTION floriday_settings_change_recompute_stmt() FROM PUBLIC;
3750
+ REVOKE ALL ON FUNCTION floriday_settings_change_recompute_stmt() FROM anon;
3658
3751
  GRANT EXECUTE ON FUNCTION floriday_settings_change_recompute_stmt() TO service_role;
3659
3752
  CREATE OR REPLACE FUNCTION public.floriday_stock_change_recompute()
3660
3753
  RETURNS trigger
@@ -3690,6 +3783,7 @@ BEGIN
3690
3783
  END $function$
3691
3784
  ;
3692
3785
  REVOKE ALL ON FUNCTION floriday_stock_change_recompute() FROM PUBLIC;
3786
+ REVOKE ALL ON FUNCTION floriday_stock_change_recompute() FROM anon;
3693
3787
  GRANT EXECUTE ON FUNCTION floriday_stock_change_recompute() TO service_role;
3694
3788
  CREATE OR REPLACE FUNCTION public.floriday_stock_queue_supersede()
3695
3789
  RETURNS trigger
@@ -3750,6 +3844,7 @@ BEGIN
3750
3844
  END $function$
3751
3845
  ;
3752
3846
  REVOKE ALL ON FUNCTION floriday_stock_queue_supersede() FROM PUBLIC;
3847
+ REVOKE ALL ON FUNCTION floriday_stock_queue_supersede() FROM anon;
3753
3848
  GRANT EXECUTE ON FUNCTION floriday_stock_queue_supersede() TO service_role;
3754
3849
  CREATE OR REPLACE FUNCTION public.floriday_takeover_apply(p_connection_id uuid, p_items jsonb)
3755
3850
  RETURNS jsonb
@@ -3761,7 +3856,8 @@ DECLARE
3761
3856
  v_run uuid; v_it jsonb; v_tid text; v_pid uuid; v_created boolean; v_old_stock numeric; v_old_price numeric;
3762
3857
  v_old_lead boolean; v_old_forms jsonb; v_stock numeric; v_price numeric; v_n int := 0; v_c int := 0; v_name text; v_fs text;
3763
3858
  BEGIN
3764
- IF auth.uid() IS NULL OR NOT public.voorraad_can_write() THEN
3859
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_takeover_apply');
3860
+ IF NOT public.voorraad_is_server() AND (auth.uid() IS NULL OR NOT public.voorraad_can_write()) THEN
3765
3861
  RAISE EXCEPTION 'Je hebt geen rechten om voorraad over te nemen' USING ERRCODE = '42501';
3766
3862
  END IF;
3767
3863
  IF p_connection_id IS NULL OR NOT EXISTS (SELECT 1 FROM public.floriday_connections c WHERE c.id = p_connection_id) THEN
@@ -3828,6 +3924,7 @@ BEGIN
3828
3924
  END $function$
3829
3925
  ;
3830
3926
  REVOKE ALL ON FUNCTION floriday_takeover_apply(uuid,jsonb) FROM PUBLIC;
3927
+ REVOKE ALL ON FUNCTION floriday_takeover_apply(uuid,jsonb) FROM anon;
3831
3928
  GRANT EXECUTE ON FUNCTION floriday_takeover_apply(uuid,jsonb) TO authenticated;
3832
3929
  GRANT EXECUTE ON FUNCTION floriday_takeover_apply(uuid,jsonb) TO service_role;
3833
3930
  CREATE OR REPLACE FUNCTION public.floriday_takeover_fetch_state(p_connection_id uuid, p_entity text DEFAULT 'trade-items'::text)
@@ -3838,6 +3935,7 @@ CREATE OR REPLACE FUNCTION public.floriday_takeover_fetch_state(p_connection_id
3838
3935
  AS $function$
3839
3936
  DECLARE r record; v_found boolean; v_cached boolean := false;
3840
3937
  BEGIN
3938
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_takeover_fetch_state');
3841
3939
  SELECT s.backfill_target_sequence, s.backfill_done_at, s.last_success_at INTO r
3842
3940
  FROM public.floriday_sync_state s WHERE s.connection_id = p_connection_id AND s.entity_type = p_entity LIMIT 1;
3843
3941
  v_found := FOUND;
@@ -3852,6 +3950,7 @@ BEGIN
3852
3950
  END $function$
3853
3951
  ;
3854
3952
  REVOKE ALL ON FUNCTION floriday_takeover_fetch_state(uuid,text) FROM PUBLIC;
3953
+ REVOKE ALL ON FUNCTION floriday_takeover_fetch_state(uuid,text) FROM anon;
3855
3954
  GRANT EXECUTE ON FUNCTION floriday_takeover_fetch_state(uuid,text) TO authenticated;
3856
3955
  GRANT EXECUTE ON FUNCTION floriday_takeover_fetch_state(uuid,text) TO service_role;
3857
3956
  CREATE OR REPLACE FUNCTION public.floriday_takeover_store_forms()
@@ -3861,6 +3960,7 @@ CREATE OR REPLACE FUNCTION public.floriday_takeover_store_forms()
3861
3960
  AS $function$ BEGIN NEW.floriday_offer_forms := public.floriday_norm_offer_forms(NEW.floriday_offer_forms); RETURN NEW; END $function$
3862
3961
  ;
3863
3962
  REVOKE ALL ON FUNCTION floriday_takeover_store_forms() FROM PUBLIC;
3963
+ REVOKE ALL ON FUNCTION floriday_takeover_store_forms() FROM anon;
3864
3964
  GRANT EXECUTE ON FUNCTION floriday_takeover_store_forms() TO service_role;
3865
3965
  CREATE OR REPLACE FUNCTION public.floriday_takeover_undo(p_run_id uuid)
3866
3966
  RETURNS jsonb
@@ -3871,7 +3971,8 @@ AS $function$
3871
3971
  DECLARE v_r public.floriday_takeover_runs%ROWTYPE; v_i public.floriday_takeover_items%ROWTYPE;
3872
3972
  v_cur numeric; v_curp numeric; v_curlead boolean; v_done int := 0; v_skip int := 0; v_reason text;
3873
3973
  BEGIN
3874
- IF auth.uid() IS NULL OR NOT public.voorraad_can_write() THEN
3974
+ PERFORM public.voorraad_vereis('ingelogd', 'floriday_takeover_undo');
3975
+ IF NOT public.voorraad_is_server() AND (auth.uid() IS NULL OR NOT public.voorraad_can_write()) THEN
3875
3976
  RAISE EXCEPTION 'Je hebt geen rechten om een overname terug te draaien' USING ERRCODE = '42501';
3876
3977
  END IF;
3877
3978
  SELECT * INTO v_r FROM public.floriday_takeover_runs WHERE id = p_run_id FOR UPDATE;
@@ -3914,6 +4015,7 @@ BEGIN
3914
4015
  END $function$
3915
4016
  ;
3916
4017
  REVOKE ALL ON FUNCTION floriday_takeover_undo(uuid) FROM PUBLIC;
4018
+ REVOKE ALL ON FUNCTION floriday_takeover_undo(uuid) FROM anon;
3917
4019
  GRANT EXECUTE ON FUNCTION floriday_takeover_undo(uuid) TO authenticated;
3918
4020
  GRANT EXECUTE ON FUNCTION floriday_takeover_undo(uuid) TO service_role;
3919
4021
  CREATE OR REPLACE FUNCTION public.fust_negative_stock_report()
@@ -3930,8 +4032,11 @@ AS $function$
3930
4032
  $function$
3931
4033
  ;
3932
4034
  REVOKE ALL ON FUNCTION fust_negative_stock_report() FROM PUBLIC;
3933
- GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO PUBLIC;
3934
- GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO anon;
4035
+ REVOKE ALL ON FUNCTION fust_negative_stock_report() FROM anon;
4036
+ REVOKE EXECUTE ON FUNCTION fust_negative_stock_report() FROM PUBLIC;
4037
+ GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO authenticated;
4038
+ GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO service_role;
4039
+ REVOKE EXECUTE ON FUNCTION fust_negative_stock_report() FROM anon;
3935
4040
  GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO authenticated;
3936
4041
  GRANT EXECUTE ON FUNCTION fust_negative_stock_report() TO service_role;
3937
4042
  CREATE OR REPLACE FUNCTION public.fust_types_duplicate_guard()
@@ -3951,38 +4056,8 @@ BEGIN
3951
4056
  END $function$
3952
4057
  ;
3953
4058
  REVOKE ALL ON FUNCTION fust_types_duplicate_guard() FROM PUBLIC;
4059
+ REVOKE ALL ON FUNCTION fust_types_duplicate_guard() FROM anon;
3954
4060
  GRANT EXECUTE ON FUNCTION fust_types_duplicate_guard() TO service_role;
3955
- CREATE OR REPLACE FUNCTION public.get_active_floriday_connection_public()
3956
- RETURNS TABLE(id uuid, label text, environment text, organization_name text, gln_code text, preferred_warehouse_id text, preferred_warehouse_name text, active_environment text)
3957
- LANGUAGE sql
3958
- STABLE SECURITY DEFINER
3959
- SET search_path TO 'public'
3960
- AS $function$
3961
- SELECT
3962
- c.id,
3963
- c.label,
3964
- c.environment,
3965
- c.organization_name,
3966
- c.gln_code,
3967
- c.preferred_warehouse_id,
3968
- c.preferred_warehouse_name,
3969
- s.active_environment
3970
- FROM public.floriday_settings s
3971
- LEFT JOIN LATERAL (
3972
- SELECT *
3973
- FROM public.floriday_connections fc
3974
- WHERE fc.is_active = true
3975
- AND fc.environment = s.active_environment
3976
- ORDER BY fc.updated_at DESC NULLS LAST, fc.created_at DESC NULLS LAST
3977
- LIMIT 1
3978
- ) c ON true
3979
- WHERE s.id = 1;
3980
- $function$
3981
- ;
3982
- REVOKE ALL ON FUNCTION get_active_floriday_connection_public() FROM PUBLIC;
3983
- GRANT EXECUTE ON FUNCTION get_active_floriday_connection_public() TO anon;
3984
- GRANT EXECUTE ON FUNCTION get_active_floriday_connection_public() TO authenticated;
3985
- GRANT EXECUTE ON FUNCTION get_active_floriday_connection_public() TO service_role;
3986
4061
  CREATE OR REPLACE FUNCTION public.get_active_floriday_context()
3987
4062
  RETURNS TABLE(connection_id uuid, user_id uuid)
3988
4063
  LANGUAGE sql
@@ -3997,8 +4072,11 @@ AS $function$
3997
4072
  $function$
3998
4073
  ;
3999
4074
  REVOKE ALL ON FUNCTION get_active_floriday_context() FROM PUBLIC;
4000
- GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO PUBLIC;
4001
- GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO anon;
4075
+ REVOKE ALL ON FUNCTION get_active_floriday_context() FROM anon;
4076
+ REVOKE EXECUTE ON FUNCTION get_active_floriday_context() FROM PUBLIC;
4077
+ GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO authenticated;
4078
+ GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO service_role;
4079
+ REVOKE EXECUTE ON FUNCTION get_active_floriday_context() FROM anon;
4002
4080
  GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO authenticated;
4003
4081
  GRANT EXECUTE ON FUNCTION get_active_floriday_context() TO service_role;
4004
4082
  CREATE OR REPLACE FUNCTION public.get_group_allocation_keys(p_product_id uuid)
@@ -4024,8 +4102,11 @@ AS $function$
4024
4102
  $function$
4025
4103
  ;
4026
4104
  REVOKE ALL ON FUNCTION get_group_allocation_keys(uuid) FROM PUBLIC;
4027
- GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO PUBLIC;
4028
- GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO anon;
4105
+ REVOKE ALL ON FUNCTION get_group_allocation_keys(uuid) FROM anon;
4106
+ REVOKE EXECUTE ON FUNCTION get_group_allocation_keys(uuid) FROM PUBLIC;
4107
+ GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO authenticated;
4108
+ GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO service_role;
4109
+ REVOKE EXECUTE ON FUNCTION get_group_allocation_keys(uuid) FROM anon;
4029
4110
  GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO authenticated;
4030
4111
  GRANT EXECUTE ON FUNCTION get_group_allocation_keys(uuid) TO service_role;
4031
4112
  CREATE OR REPLACE FUNCTION public.get_group_head_key(p_group_id uuid)
@@ -4054,8 +4135,11 @@ AS $function$
4054
4135
  $function$
4055
4136
  ;
4056
4137
  REVOKE ALL ON FUNCTION get_group_head_key(uuid) FROM PUBLIC;
4057
- GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO PUBLIC;
4058
- GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO anon;
4138
+ REVOKE ALL ON FUNCTION get_group_head_key(uuid) FROM anon;
4139
+ REVOKE EXECUTE ON FUNCTION get_group_head_key(uuid) FROM PUBLIC;
4140
+ GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO authenticated;
4141
+ GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO service_role;
4142
+ REVOKE EXECUTE ON FUNCTION get_group_head_key(uuid) FROM anon;
4059
4143
  GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO authenticated;
4060
4144
  GRANT EXECUTE ON FUNCTION get_group_head_key(uuid) TO service_role;
4061
4145
  CREATE OR REPLACE FUNCTION public.get_product_stock(p_product_id uuid)
@@ -4068,7 +4152,8 @@ AS $function$
4068
4152
  DECLARE
4069
4153
  v_connection_id uuid; v_key text; v_product_key text; v_floriday_key text;
4070
4154
  BEGIN
4071
- IF auth.uid() IS NULL THEN RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501'; END IF;
4155
+ PERFORM public.voorraad_vereis('ingelogd', 'get_product_stock');
4156
+ IF auth.uid() IS NULL AND NOT public.voorraad_is_server() THEN RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501'; END IF;
4072
4157
  SELECT NULLIF(trim(COALESCE(p.floriday_trade_item_id, '')), ''), NULLIF(trim(COALESCE(p.trade_item_key, '')), '')
4073
4158
  INTO v_floriday_key, v_product_key FROM public.products p WHERE p.id = p_product_id;
4074
4159
  v_key := COALESCE(v_floriday_key, v_product_key, 'product:' || p_product_id::text);
@@ -4093,6 +4178,7 @@ BEGIN
4093
4178
  END; $function$
4094
4179
  ;
4095
4180
  REVOKE ALL ON FUNCTION get_product_stock(uuid) FROM PUBLIC;
4181
+ REVOKE ALL ON FUNCTION get_product_stock(uuid) FROM anon;
4096
4182
  GRANT EXECUTE ON FUNCTION get_product_stock(uuid) TO authenticated;
4097
4183
  GRANT EXECUTE ON FUNCTION get_product_stock(uuid) TO service_role;
4098
4184
  CREATE OR REPLACE FUNCTION public.get_product_structure_totals(p_product_id uuid)
@@ -4103,6 +4189,7 @@ CREATE OR REPLACE FUNCTION public.get_product_structure_totals(p_product_id uuid
4103
4189
  AS $function$
4104
4190
  DECLARE v_ctx record;
4105
4191
  BEGIN
4192
+ PERFORM public.voorraad_vereis('ingelogd', 'get_product_structure_totals');
4106
4193
  SELECT * INTO v_ctx FROM public.get_active_floriday_context();
4107
4194
  IF v_ctx.connection_id IS NULL THEN
4108
4195
  RETURN jsonb_build_object('product_id',p_product_id,'type',public.product_type(p_product_id),'reason','NO_ACTIVE_CONNECTION');
@@ -4116,6 +4203,7 @@ BEGIN
4116
4203
  END $function$
4117
4204
  ;
4118
4205
  REVOKE ALL ON FUNCTION get_product_structure_totals(uuid) FROM PUBLIC;
4206
+ REVOKE ALL ON FUNCTION get_product_structure_totals(uuid) FROM anon;
4119
4207
  GRANT EXECUTE ON FUNCTION get_product_structure_totals(uuid) TO authenticated;
4120
4208
  GRANT EXECUTE ON FUNCTION get_product_structure_totals(uuid) TO service_role;
4121
4209
  CREATE OR REPLACE FUNCTION public.get_product_structure_totals_batch(p_product_ids uuid[])
@@ -4128,6 +4216,7 @@ AS $function$
4128
4216
  $function$
4129
4217
  ;
4130
4218
  REVOKE ALL ON FUNCTION get_product_structure_totals_batch(uuid[]) FROM PUBLIC;
4219
+ REVOKE ALL ON FUNCTION get_product_structure_totals_batch(uuid[]) FROM anon;
4131
4220
  GRANT EXECUTE ON FUNCTION get_product_structure_totals_batch(uuid[]) TO authenticated;
4132
4221
  GRANT EXECUTE ON FUNCTION get_product_structure_totals_batch(uuid[]) TO service_role;
4133
4222
  CREATE OR REPLACE FUNCTION public.inventory_inline_budget_ok()
@@ -4138,6 +4227,7 @@ CREATE OR REPLACE FUNCTION public.inventory_inline_budget_ok()
4138
4227
  AS $function$
4139
4228
  DECLARE v_n int; v_t0 timestamptz; l record;
4140
4229
  BEGIN
4230
+ PERFORM public.voorraad_vereis('ingelogd', 'inventory_inline_budget_ok');
4141
4231
  SELECT max_parents_inline, max_ms_inline INTO l FROM public.inventory_recompute_limits WHERE id;
4142
4232
  v_n := COALESCE(NULLIF(current_setting('inventory.inline_n', true),'')::int, 0) + 1;
4143
4233
  v_t0 := COALESCE(NULLIF(current_setting('inventory.inline_t0', true),'')::timestamptz, clock_timestamp());
@@ -4153,6 +4243,7 @@ EXCEPTION WHEN others THEN RETURN false;
4153
4243
  END $function$
4154
4244
  ;
4155
4245
  REVOKE ALL ON FUNCTION inventory_inline_budget_ok() FROM PUBLIC;
4246
+ REVOKE ALL ON FUNCTION inventory_inline_budget_ok() FROM anon;
4156
4247
  GRANT EXECUTE ON FUNCTION inventory_inline_budget_ok() TO service_role;
4157
4248
  CREATE OR REPLACE FUNCTION public.merge_products(_canonical uuid, _loser uuid)
4158
4249
  RETURNS void
@@ -4161,7 +4252,8 @@ CREATE OR REPLACE FUNCTION public.merge_products(_canonical uuid, _loser uuid)
4161
4252
  SET search_path TO 'public'
4162
4253
  AS $function$
4163
4254
  DECLARE loser_row record;
4164
- BEGIN
4255
+ BEGIN
4256
+ PERFORM public.voorraad_vereis('ingelogd', 'merge_products');
4165
4257
  IF _canonical = _loser THEN RETURN; END IF;
4166
4258
  SELECT * INTO loser_row FROM public.products WHERE id = _loser;
4167
4259
  IF NOT FOUND THEN RETURN; END IF;
@@ -4189,96 +4281,13 @@ END;
4189
4281
  $function$
4190
4282
  ;
4191
4283
  REVOKE ALL ON FUNCTION merge_products(uuid,uuid) FROM PUBLIC;
4192
- GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO PUBLIC;
4193
- GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO anon;
4284
+ REVOKE ALL ON FUNCTION merge_products(uuid,uuid) FROM anon;
4285
+ REVOKE EXECUTE ON FUNCTION merge_products(uuid,uuid) FROM PUBLIC;
4286
+ GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO authenticated;
4287
+ GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO service_role;
4288
+ REVOKE EXECUTE ON FUNCTION merge_products(uuid,uuid) FROM anon;
4194
4289
  GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO authenticated;
4195
4290
  GRANT EXECUTE ON FUNCTION merge_products(uuid,uuid) TO service_role;
4196
- CREATE OR REPLACE FUNCTION public.mirror_offer_order_to_orders()
4197
- RETURNS trigger
4198
- LANGUAGE plpgsql
4199
- SECURITY DEFINER
4200
- SET search_path TO 'public'
4201
- AS $function$
4202
- DECLARE
4203
- v_order_id uuid; v_item jsonb;
4204
- v_total_numeric numeric := COALESCE(NEW.total_amount, 0);
4205
- v_total_text text; v_product_id uuid;
4206
- v_pieces int; v_plants_per_crate int; v_crate_price numeric;
4207
- v_qty int; v_unit text; v_unit_price numeric;
4208
- BEGIN
4209
- IF EXISTS (SELECT 1 FROM public.orders WHERE (custom_fields->>'offer_order_id')::uuid = NEW.id) THEN
4210
- RETURN NEW;
4211
- END IF;
4212
- v_total_text := '€ ' || replace(replace(to_char(v_total_numeric,'FM999G999G990D00'),'.','X'),',','.');
4213
- v_total_text := replace(v_total_text,'X',',');
4214
- v_order_id := gen_random_uuid();
4215
-
4216
- INSERT INTO public.orders (id, order_number, customer_name, customer_id, order_date, delivery_date,
4217
- status, total, notes, custom_fields, order_source, created_at, updated_at)
4218
- VALUES (v_order_id, NEW.order_number, COALESCE(NEW.customer_name,'Onbekende klant'), NEW.customer_id,
4219
- to_char(COALESCE(NEW.created_at,now()),'YYYY-MM-DD'), to_char(COALESCE(NEW.created_at,now()),'YYYY-MM-DD'),
4220
- 'open', v_total_text, NEW.notes,
4221
- jsonb_build_object('source','offer','offer_order_id',NEW.id,'offer_campaign_id',NEW.campaign_id,
4222
- 'offer_recipient_id',NEW.recipient_id,'customer_email',NEW.customer_email,'customer_phone',NEW.customer_phone,
4223
- 'order_type','AO'),
4224
- 'offer', COALESCE(NEW.created_at,now()), now());
4225
-
4226
- IF jsonb_typeof(NEW.items)='array' THEN
4227
- FOR v_item IN SELECT * FROM jsonb_array_elements(NEW.items) LOOP
4228
- v_product_id := NULL;
4229
- BEGIN v_product_id := NULLIF(v_item->>'product_id','')::uuid;
4230
- EXCEPTION WHEN others THEN v_product_id := NULL; END;
4231
-
4232
- v_pieces := COALESCE((v_item->>'quantity')::int,0);
4233
- v_unit_price := COALESCE((v_item->>'unit_price')::numeric,0);
4234
- v_qty := v_pieces;
4235
- v_unit := COALESCE(NULLIF(v_item->>'unit',''),'stuks');
4236
-
4237
- -- Zoek plants_per_crate + tier prijs in offer_campaign_products
4238
- v_plants_per_crate := NULL; v_crate_price := NULL;
4239
- IF v_product_id IS NOT NULL AND NEW.campaign_id IS NOT NULL THEN
4240
- SELECT plants_per_crate INTO v_plants_per_crate
4241
- FROM public.offer_campaign_products
4242
- WHERE id = v_product_id AND campaign_id = NEW.campaign_id;
4243
-
4244
- IF v_plants_per_crate IS NOT NULL AND v_plants_per_crate > 0 THEN
4245
- v_qty := CEIL(v_pieces::numeric / v_plants_per_crate)::int;
4246
- v_unit := 'fust';
4247
- -- Beste tier: hoogste min_crates <= v_qty
4248
- SELECT price_per_crate INTO v_crate_price
4249
- FROM public.offer_campaign_product_tiers
4250
- WHERE campaign_product_id = v_product_id AND min_crates <= v_qty
4251
- ORDER BY min_crates DESC LIMIT 1;
4252
- IF v_crate_price IS NOT NULL THEN
4253
- v_unit_price := v_crate_price;
4254
- ELSE
4255
- v_unit_price := v_unit_price * v_plants_per_crate;
4256
- END IF;
4257
- END IF;
4258
- END IF;
4259
-
4260
- -- v_product_id verwijst naar offer_campaign_products.id, niet products.id
4261
- IF v_product_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM public.products WHERE id = v_product_id) THEN
4262
- v_product_id := NULL;
4263
- END IF;
4264
-
4265
- INSERT INTO public.order_items (order_id, product_id, product_name, quantity, unit, unit_price)
4266
- VALUES (v_order_id, v_product_id, COALESCE(v_item->>'product_name','Artikel'),
4267
- v_qty, v_unit, v_unit_price);
4268
- END LOOP;
4269
- END IF;
4270
- RETURN NEW;
4271
- EXCEPTION WHEN OTHERS THEN
4272
- RAISE WARNING 'mirror_offer_order_to_orders failed for %: %', NEW.id, SQLERRM;
4273
- RETURN NEW;
4274
- END;
4275
- $function$
4276
- ;
4277
- REVOKE ALL ON FUNCTION mirror_offer_order_to_orders() FROM PUBLIC;
4278
- GRANT EXECUTE ON FUNCTION mirror_offer_order_to_orders() TO PUBLIC;
4279
- GRANT EXECUTE ON FUNCTION mirror_offer_order_to_orders() TO anon;
4280
- GRANT EXECUTE ON FUNCTION mirror_offer_order_to_orders() TO authenticated;
4281
- GRANT EXECUTE ON FUNCTION mirror_offer_order_to_orders() TO service_role;
4282
4291
  CREATE OR REPLACE FUNCTION public.normalize_order_source(p_src text)
4283
4292
  RETURNS text
4284
4293
  LANGUAGE sql
@@ -4296,8 +4305,11 @@ AS $function$
4296
4305
  $function$
4297
4306
  ;
4298
4307
  REVOKE ALL ON FUNCTION normalize_order_source(text) FROM PUBLIC;
4299
- GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO PUBLIC;
4300
- GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO anon;
4308
+ REVOKE ALL ON FUNCTION normalize_order_source(text) FROM anon;
4309
+ REVOKE EXECUTE ON FUNCTION normalize_order_source(text) FROM PUBLIC;
4310
+ GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO authenticated;
4311
+ GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO service_role;
4312
+ REVOKE EXECUTE ON FUNCTION normalize_order_source(text) FROM anon;
4301
4313
  GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO authenticated;
4302
4314
  GRANT EXECUTE ON FUNCTION normalize_order_source(text) TO service_role;
4303
4315
  CREATE OR REPLACE FUNCTION public.process_inventory_recompute_queue(p_limit integer DEFAULT 200)
@@ -4308,6 +4320,7 @@ CREATE OR REPLACE FUNCTION public.process_inventory_recompute_queue(p_limit inte
4308
4320
  AS $function$
4309
4321
  DECLARE r record; s record; n integer := 0;
4310
4322
  BEGIN
4323
+ PERFORM public.voorraad_vereis('server', 'process_inventory_recompute_queue');
4311
4324
  FOR r IN SELECT q.product_id FROM public.inventory_recompute_queue q
4312
4325
  ORDER BY q.enqueued_at LIMIT GREATEST(1, LEAST(p_limit, 1000)) FOR UPDATE SKIP LOCKED LOOP
4313
4326
  BEGIN
@@ -4327,6 +4340,7 @@ BEGIN
4327
4340
  END $function$
4328
4341
  ;
4329
4342
  REVOKE ALL ON FUNCTION process_inventory_recompute_queue(integer) FROM PUBLIC;
4343
+ REVOKE ALL ON FUNCTION process_inventory_recompute_queue(integer) FROM anon;
4330
4344
  GRANT EXECUTE ON FUNCTION process_inventory_recompute_queue(integer) TO service_role;
4331
4345
  CREATE OR REPLACE FUNCTION public.produce_designed_product(p_parent_kind text, p_parent_id text, p_quantity numeric)
4332
4346
  RETURNS jsonb
@@ -4343,7 +4357,8 @@ DECLARE
4343
4357
  v_connection_id uuid;
4344
4358
  v_result jsonb;
4345
4359
  v_batch_id uuid := gen_random_uuid();
4346
- BEGIN
4360
+ BEGIN
4361
+ PERFORM public.voorraad_vereis('ingelogd', 'produce_designed_product');
4347
4362
  IF v_uid IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
4348
4363
  IF p_quantity IS NULL OR p_quantity <= 0 THEN RAISE EXCEPTION 'Aantal moet groter dan 0 zijn'; END IF;
4349
4364
 
@@ -4417,6 +4432,7 @@ END;
4417
4432
  $function$
4418
4433
  ;
4419
4434
  REVOKE ALL ON FUNCTION produce_designed_product(text,text,numeric) FROM PUBLIC;
4435
+ REVOKE ALL ON FUNCTION produce_designed_product(text,text,numeric) FROM anon;
4420
4436
  GRANT EXECUTE ON FUNCTION produce_designed_product(text,text,numeric) TO service_role;
4421
4437
  CREATE OR REPLACE FUNCTION public.product_active_group_id(p_product_id uuid)
4422
4438
  RETURNS uuid
@@ -4434,6 +4450,7 @@ AS $function$
4434
4450
  $function$
4435
4451
  ;
4436
4452
  REVOKE ALL ON FUNCTION product_active_group_id(uuid) FROM PUBLIC;
4453
+ REVOKE ALL ON FUNCTION product_active_group_id(uuid) FROM anon;
4437
4454
  GRANT EXECUTE ON FUNCTION product_active_group_id(uuid) TO service_role;
4438
4455
  CREATE OR REPLACE FUNCTION public.product_id_from_ref(p_ref text)
4439
4456
  RETURNS uuid
@@ -4449,6 +4466,7 @@ AS $function$
4449
4466
  $function$
4450
4467
  ;
4451
4468
  REVOKE ALL ON FUNCTION product_id_from_ref(text) FROM PUBLIC;
4469
+ REVOKE ALL ON FUNCTION product_id_from_ref(text) FROM anon;
4452
4470
  GRANT EXECUTE ON FUNCTION product_id_from_ref(text) TO service_role;
4453
4471
  CREATE OR REPLACE FUNCTION public.product_is_set(p_product_id uuid)
4454
4472
  RETURNS boolean
@@ -4461,6 +4479,7 @@ AS $function$
4461
4479
  $function$
4462
4480
  ;
4463
4481
  REVOKE ALL ON FUNCTION product_is_set(uuid) FROM PUBLIC;
4482
+ REVOKE ALL ON FUNCTION product_is_set(uuid) FROM anon;
4464
4483
  GRANT EXECUTE ON FUNCTION product_is_set(uuid) TO service_role;
4465
4484
  CREATE OR REPLACE FUNCTION public.product_label(p_id uuid)
4466
4485
  RETURNS text
@@ -4472,6 +4491,7 @@ AS $function$
4472
4491
  $function$
4473
4492
  ;
4474
4493
  REVOKE ALL ON FUNCTION product_label(uuid) FROM PUBLIC;
4494
+ REVOKE ALL ON FUNCTION product_label(uuid) FROM anon;
4475
4495
  GRANT EXECUTE ON FUNCTION product_label(uuid) TO service_role;
4476
4496
  CREATE OR REPLACE FUNCTION public.product_member_group_ids(p_product_id uuid)
4477
4497
  RETURNS uuid[]
@@ -4485,6 +4505,7 @@ AS $function$
4485
4505
  $function$
4486
4506
  ;
4487
4507
  REVOKE ALL ON FUNCTION product_member_group_ids(uuid) FROM PUBLIC;
4508
+ REVOKE ALL ON FUNCTION product_member_group_ids(uuid) FROM anon;
4488
4509
  GRANT EXECUTE ON FUNCTION product_member_group_ids(uuid) TO service_role;
4489
4510
  CREATE OR REPLACE FUNCTION public.product_own_available(p_connection_id uuid, p_product_id uuid, OUT has_row boolean, OUT physical numeric, OUT reserved numeric, OUT available integer)
4490
4511
  RETURNS record
@@ -4494,6 +4515,7 @@ CREATE OR REPLACE FUNCTION public.product_own_available(p_connection_id uuid, p_
4494
4515
  AS $function$
4495
4516
  DECLARE v_key text; v_p numeric; v_r numeric; v_hit boolean := false;
4496
4517
  BEGIN
4518
+ PERFORM public.voorraad_vereis('ingelogd', 'product_own_available');
4497
4519
  has_row := false; physical := 0; reserved := 0; available := 0;
4498
4520
  SELECT COALESCE(NULLIF(btrim(COALESCE(p.floriday_trade_item_id,'')),''), NULLIF(btrim(COALESCE(p.trade_item_key,'')),''))
4499
4521
  INTO v_key FROM public.products p WHERE p.id = p_product_id;
@@ -4507,6 +4529,7 @@ BEGIN
4507
4529
  END $function$
4508
4530
  ;
4509
4531
  REVOKE ALL ON FUNCTION product_own_available(uuid,uuid) FROM PUBLIC;
4532
+ REVOKE ALL ON FUNCTION product_own_available(uuid,uuid) FROM anon;
4510
4533
  GRANT EXECUTE ON FUNCTION product_own_available(uuid,uuid) TO service_role;
4511
4534
  CREATE OR REPLACE FUNCTION public.product_packings_derive(p_product_id uuid)
4512
4535
  RETURNS void
@@ -4516,6 +4539,7 @@ CREATE OR REPLACE FUNCTION public.product_packings_derive(p_product_id uuid)
4516
4539
  AS $function$
4517
4540
  DECLARE r record; v_nullable boolean;
4518
4541
  BEGIN
4542
+ PERFORM public.voorraad_vereis('ingelogd', 'product_packings_derive');
4519
4543
  SELECT * INTO r FROM public.product_packings WHERE product_id = p_product_id AND is_primary LIMIT 1;
4520
4544
  IF FOUND AND r.pieces_per_package > 0 AND r.packages_per_layer > 0 AND r.layers_per_load_carrier > 0 THEN
4521
4545
  UPDATE public.products SET
@@ -4540,6 +4564,7 @@ BEGIN
4540
4564
  END $function$
4541
4565
  ;
4542
4566
  REVOKE ALL ON FUNCTION product_packings_derive(uuid) FROM PUBLIC;
4567
+ REVOKE ALL ON FUNCTION product_packings_derive(uuid) FROM anon;
4543
4568
  GRANT EXECUTE ON FUNCTION product_packings_derive(uuid) TO service_role;
4544
4569
  CREATE OR REPLACE FUNCTION public.product_packings_replace(p_product_id uuid, p_source text, p_packings jsonb)
4545
4570
  RETURNS integer
@@ -4548,6 +4573,7 @@ CREATE OR REPLACE FUNCTION public.product_packings_replace(p_product_id uuid, p_
4548
4573
  AS $function$
4549
4574
  DECLARE n integer;
4550
4575
  BEGIN
4576
+ PERFORM public.voorraad_vereis('ingelogd', 'product_packings_replace');
4551
4577
  IF p_source NOT IN ('floriday','eigen') THEN RAISE EXCEPTION 'Onbekende verpakkingsbron %', p_source; END IF;
4552
4578
  DELETE FROM public.product_packings WHERE product_id = p_product_id;
4553
4579
  INSERT INTO public.product_packings(product_id, source, floriday_packing_id, vbn_package_code, custom_package_id,
@@ -4564,8 +4590,11 @@ BEGIN
4564
4590
  END $function$
4565
4591
  ;
4566
4592
  REVOKE ALL ON FUNCTION product_packings_replace(uuid,text,jsonb) FROM PUBLIC;
4567
- GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO PUBLIC;
4568
- GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO anon;
4593
+ REVOKE ALL ON FUNCTION product_packings_replace(uuid,text,jsonb) FROM anon;
4594
+ REVOKE EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) FROM PUBLIC;
4595
+ GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO authenticated;
4596
+ GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO service_role;
4597
+ REVOKE EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) FROM anon;
4569
4598
  GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO authenticated;
4570
4599
  GRANT EXECUTE ON FUNCTION product_packings_replace(uuid,text,jsonb) TO service_role;
4571
4600
  CREATE OR REPLACE FUNCTION public.product_packings_sync_from_floriday(p_connection_id uuid, p_product_ids uuid[], p_only_existing boolean DEFAULT false)
@@ -4575,6 +4604,7 @@ CREATE OR REPLACE FUNCTION public.product_packings_sync_from_floriday(p_connecti
4575
4604
  AS $function$
4576
4605
  DECLARE r record; v_list jsonb; n_done int := 0; n_missing int := 0;
4577
4606
  BEGIN
4607
+ PERFORM public.voorraad_vereis('ingelogd', 'product_packings_sync_from_floriday');
4578
4608
  FOR r IN
4579
4609
  SELECT p.id, c.data
4580
4610
  FROM public.products p
@@ -4609,8 +4639,11 @@ BEGIN
4609
4639
  END $function$
4610
4640
  ;
4611
4641
  REVOKE ALL ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) FROM PUBLIC;
4612
- GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO PUBLIC;
4613
- GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO anon;
4642
+ REVOKE ALL ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) FROM anon;
4643
+ REVOKE EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) FROM PUBLIC;
4644
+ GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO authenticated;
4645
+ GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO service_role;
4646
+ REVOKE EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) FROM anon;
4614
4647
  GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO authenticated;
4615
4648
  GRANT EXECUTE ON FUNCTION product_packings_sync_from_floriday(uuid,uuid[],boolean) TO service_role;
4616
4649
  CREATE OR REPLACE FUNCTION public.product_primary_pieces(p_product_id uuid)
@@ -4626,8 +4659,11 @@ AS $function$
4626
4659
  $function$
4627
4660
  ;
4628
4661
  REVOKE ALL ON FUNCTION product_primary_pieces(uuid) FROM PUBLIC;
4629
- GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO PUBLIC;
4630
- GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO anon;
4662
+ REVOKE ALL ON FUNCTION product_primary_pieces(uuid) FROM anon;
4663
+ REVOKE EXECUTE ON FUNCTION product_primary_pieces(uuid) FROM PUBLIC;
4664
+ GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO authenticated;
4665
+ GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO service_role;
4666
+ REVOKE EXECUTE ON FUNCTION product_primary_pieces(uuid) FROM anon;
4631
4667
  GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO authenticated;
4632
4668
  GRANT EXECUTE ON FUNCTION product_primary_pieces(uuid) TO service_role;
4633
4669
  CREATE OR REPLACE FUNCTION public.product_set_depth_above(p_product_id uuid, p_path uuid[] DEFAULT '{}'::uuid[])
@@ -4638,6 +4674,7 @@ CREATE OR REPLACE FUNCTION public.product_set_depth_above(p_product_id uuid, p_p
4638
4674
  AS $function$
4639
4675
  DECLARE r record; d integer := 0; v integer;
4640
4676
  BEGIN
4677
+ PERFORM public.voorraad_vereis('ingelogd', 'product_set_depth_above');
4641
4678
  IF p_product_id = ANY(p_path) OR cardinality(p_path) > 10 THEN RETURN 99; END IF;
4642
4679
  FOR r IN SELECT DISTINCT COALESCE(b.parent_product_id, public.product_id_from_ref(b.parent_trade_item_floriday_id)) AS p
4643
4680
  FROM public.product_bom_items b
@@ -4651,6 +4688,7 @@ BEGIN
4651
4688
  END $function$
4652
4689
  ;
4653
4690
  REVOKE ALL ON FUNCTION product_set_depth_above(uuid,uuid[]) FROM PUBLIC;
4691
+ REVOKE ALL ON FUNCTION product_set_depth_above(uuid,uuid[]) FROM anon;
4654
4692
  GRANT EXECUTE ON FUNCTION product_set_depth_above(uuid,uuid[]) TO service_role;
4655
4693
  CREATE OR REPLACE FUNCTION public.product_set_depth_below(p_product_id uuid, p_path uuid[] DEFAULT '{}'::uuid[])
4656
4694
  RETURNS integer
@@ -4660,6 +4698,7 @@ CREATE OR REPLACE FUNCTION public.product_set_depth_below(p_product_id uuid, p_p
4660
4698
  AS $function$
4661
4699
  DECLARE r record; d integer := 0; v integer;
4662
4700
  BEGIN
4701
+ PERFORM public.voorraad_vereis('ingelogd', 'product_set_depth_below');
4663
4702
  IF p_product_id = ANY(p_path) OR cardinality(p_path) > 10 THEN RETURN 99; END IF;
4664
4703
  IF NOT public.product_is_set(p_product_id) THEN RETURN 0; END IF;
4665
4704
  FOR r IN SELECT COALESCE(b.component_product_id, public.product_id_from_ref(b.component_trade_item_floriday_id)) AS c
@@ -4674,6 +4713,7 @@ BEGIN
4674
4713
  END $function$
4675
4714
  ;
4676
4715
  REVOKE ALL ON FUNCTION product_set_depth_below(uuid,uuid[]) FROM PUBLIC;
4716
+ REVOKE ALL ON FUNCTION product_set_depth_below(uuid,uuid[]) FROM anon;
4677
4717
  GRANT EXECUTE ON FUNCTION product_set_depth_below(uuid,uuid[]) TO service_role;
4678
4718
  CREATE OR REPLACE FUNCTION public.product_structure_ancestors(p_product_ids uuid[])
4679
4719
  RETURNS SETOF uuid
@@ -4701,6 +4741,7 @@ AS $function$
4701
4741
  $function$
4702
4742
  ;
4703
4743
  REVOKE ALL ON FUNCTION product_structure_ancestors(uuid[]) FROM PUBLIC;
4744
+ REVOKE ALL ON FUNCTION product_structure_ancestors(uuid[]) FROM anon;
4704
4745
  GRANT EXECUTE ON FUNCTION product_structure_ancestors(uuid[]) TO service_role;
4705
4746
  CREATE OR REPLACE FUNCTION public.product_structure_max_depth()
4706
4747
  RETURNS integer
@@ -4710,8 +4751,11 @@ CREATE OR REPLACE FUNCTION public.product_structure_max_depth()
4710
4751
  AS $function$ SELECT 3 $function$
4711
4752
  ;
4712
4753
  REVOKE ALL ON FUNCTION product_structure_max_depth() FROM PUBLIC;
4713
- GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO PUBLIC;
4714
- GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO anon;
4754
+ REVOKE ALL ON FUNCTION product_structure_max_depth() FROM anon;
4755
+ REVOKE EXECUTE ON FUNCTION product_structure_max_depth() FROM PUBLIC;
4756
+ GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO authenticated;
4757
+ GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO service_role;
4758
+ REVOKE EXECUTE ON FUNCTION product_structure_max_depth() FROM anon;
4715
4759
  GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO authenticated;
4716
4760
  GRANT EXECUTE ON FUNCTION product_structure_max_depth() TO service_role;
4717
4761
  CREATE OR REPLACE FUNCTION public.product_structure_path(p_from uuid, p_target uuid)
@@ -4739,6 +4783,7 @@ AS $function$
4739
4783
  $function$
4740
4784
  ;
4741
4785
  REVOKE ALL ON FUNCTION product_structure_path(uuid,uuid) FROM PUBLIC;
4786
+ REVOKE ALL ON FUNCTION product_structure_path(uuid,uuid) FROM anon;
4742
4787
  GRANT EXECUTE ON FUNCTION product_structure_path(uuid,uuid) TO service_role;
4743
4788
  CREATE OR REPLACE FUNCTION public.product_tray_stickers_touch()
4744
4789
  RETURNS trigger
@@ -4748,8 +4793,11 @@ AS $function$
4748
4793
  BEGIN NEW.updated_at = now(); RETURN NEW; END; $function$
4749
4794
  ;
4750
4795
  REVOKE ALL ON FUNCTION product_tray_stickers_touch() FROM PUBLIC;
4751
- GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO PUBLIC;
4752
- GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO anon;
4796
+ REVOKE ALL ON FUNCTION product_tray_stickers_touch() FROM anon;
4797
+ REVOKE EXECUTE ON FUNCTION product_tray_stickers_touch() FROM PUBLIC;
4798
+ GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO authenticated;
4799
+ GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO service_role;
4800
+ REVOKE EXECUTE ON FUNCTION product_tray_stickers_touch() FROM anon;
4753
4801
  GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO authenticated;
4754
4802
  GRANT EXECUTE ON FUNCTION product_tray_stickers_touch() TO service_role;
4755
4803
  CREATE OR REPLACE FUNCTION public.product_type(p_product_id uuid)
@@ -4764,6 +4812,7 @@ AS $function$
4764
4812
  $function$
4765
4813
  ;
4766
4814
  REVOKE ALL ON FUNCTION product_type(uuid) FROM PUBLIC;
4815
+ REVOKE ALL ON FUNCTION product_type(uuid) FROM anon;
4767
4816
  GRANT EXECUTE ON FUNCTION product_type(uuid) TO service_role;
4768
4817
  CREATE OR REPLACE FUNCTION public.promote_trade_item_key(p_old text, p_new text)
4769
4818
  RETURNS void
@@ -4773,6 +4822,7 @@ CREATE OR REPLACE FUNCTION public.promote_trade_item_key(p_old text, p_new text)
4773
4822
  AS $function$
4774
4823
  DECLARE r RECORD; v_existing_id uuid;
4775
4824
  BEGIN
4825
+ PERFORM public.voorraad_vereis('ingelogd', 'promote_trade_item_key');
4776
4826
  IF p_old IS NULL OR p_new IS NULL OR p_old = p_new THEN RETURN; END IF;
4777
4827
  FOR r IN SELECT * FROM public.trade_item_stock WHERE trade_item_key = p_old FOR UPDATE LOOP
4778
4828
  SELECT id INTO v_existing_id FROM public.trade_item_stock
@@ -4796,8 +4846,11 @@ BEGIN
4796
4846
  END $function$
4797
4847
  ;
4798
4848
  REVOKE ALL ON FUNCTION promote_trade_item_key(text,text) FROM PUBLIC;
4799
- GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO PUBLIC;
4800
- GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO anon;
4849
+ REVOKE ALL ON FUNCTION promote_trade_item_key(text,text) FROM anon;
4850
+ REVOKE EXECUTE ON FUNCTION promote_trade_item_key(text,text) FROM PUBLIC;
4851
+ GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO authenticated;
4852
+ GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO service_role;
4853
+ REVOKE EXECUTE ON FUNCTION promote_trade_item_key(text,text) FROM anon;
4801
4854
  GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO authenticated;
4802
4855
  GRANT EXECUTE ON FUNCTION promote_trade_item_key(text,text) TO service_role;
4803
4856
  CREATE OR REPLACE FUNCTION public.recompute_all_reserved_stock()
@@ -4813,6 +4866,7 @@ DECLARE
4813
4866
  v_struct jsonb := '[]'::jsonb; v_struct_qty numeric := 0;
4814
4867
  v_frozen_ids uuid[];
4815
4868
  BEGIN
4869
+ PERFORM public.voorraad_vereis('ingelogd', 'recompute_all_reserved_stock');
4816
4870
  IF current_setting('app.recomputing_reserved', true) = 'on' THEN RETURN; END IF;
4817
4871
  PERFORM set_config('app.recomputing_reserved', 'on', true);
4818
4872
 
@@ -5003,8 +5057,11 @@ END;
5003
5057
  $function$
5004
5058
  ;
5005
5059
  REVOKE ALL ON FUNCTION recompute_all_reserved_stock() FROM PUBLIC;
5006
- GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO PUBLIC;
5007
- GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO anon;
5060
+ REVOKE ALL ON FUNCTION recompute_all_reserved_stock() FROM anon;
5061
+ REVOKE EXECUTE ON FUNCTION recompute_all_reserved_stock() FROM PUBLIC;
5062
+ GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO authenticated;
5063
+ GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO service_role;
5064
+ REVOKE EXECUTE ON FUNCTION recompute_all_reserved_stock() FROM anon;
5008
5065
  GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO authenticated;
5009
5066
  GRANT EXECUTE ON FUNCTION recompute_all_reserved_stock() TO service_role;
5010
5067
  CREATE OR REPLACE FUNCTION public.recompute_order_status(p_order_id uuid)
@@ -5020,6 +5077,7 @@ DECLARE
5020
5077
  v_total integer;
5021
5078
  v_delivered integer;
5022
5079
  BEGIN
5080
+ PERFORM public.voorraad_vereis('ingelogd', 'recompute_order_status');
5023
5081
  SELECT o.status, o.order_number
5024
5082
  INTO v_current, v_order_number
5025
5083
  FROM public.orders o
@@ -5058,8 +5116,11 @@ END;
5058
5116
  $function$
5059
5117
  ;
5060
5118
  REVOKE ALL ON FUNCTION recompute_order_status(uuid) FROM PUBLIC;
5061
- GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO PUBLIC;
5062
- GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO anon;
5119
+ REVOKE ALL ON FUNCTION recompute_order_status(uuid) FROM anon;
5120
+ REVOKE EXECUTE ON FUNCTION recompute_order_status(uuid) FROM PUBLIC;
5121
+ GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO authenticated;
5122
+ GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO service_role;
5123
+ REVOKE EXECUTE ON FUNCTION recompute_order_status(uuid) FROM anon;
5063
5124
  GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO authenticated;
5064
5125
  GRANT EXECUTE ON FUNCTION recompute_order_status(uuid) TO service_role;
5065
5126
  CREATE OR REPLACE FUNCTION public.recompute_reserved_for_order(p_order_id uuid)
@@ -5070,6 +5131,7 @@ CREATE OR REPLACE FUNCTION public.recompute_reserved_for_order(p_order_id uuid)
5070
5131
  AS $function$
5071
5132
  DECLARE k text;
5072
5133
  BEGIN
5134
+ PERFORM public.voorraad_vereis('ingelogd', 'recompute_reserved_for_order');
5073
5135
  FOR k IN
5074
5136
  SELECT DISTINCT p.trade_item_key
5075
5137
  FROM logistics_active.order_items oi
@@ -5081,8 +5143,11 @@ BEGIN
5081
5143
  END $function$
5082
5144
  ;
5083
5145
  REVOKE ALL ON FUNCTION recompute_reserved_for_order(uuid) FROM PUBLIC;
5084
- GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO PUBLIC;
5085
- GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO anon;
5146
+ REVOKE ALL ON FUNCTION recompute_reserved_for_order(uuid) FROM anon;
5147
+ REVOKE EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) FROM PUBLIC;
5148
+ GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO authenticated;
5149
+ GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO service_role;
5150
+ REVOKE EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) FROM anon;
5086
5151
  GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO authenticated;
5087
5152
  GRANT EXECUTE ON FUNCTION recompute_reserved_for_order(uuid) TO service_role;
5088
5153
  CREATE OR REPLACE FUNCTION public.recompute_reserved_stock(p_trade_item_key text)
@@ -5098,6 +5163,7 @@ DECLARE
5098
5163
  v_pid uuid;
5099
5164
  v_leads boolean;
5100
5165
  BEGIN
5166
+ PERFORM public.voorraad_vereis('ingelogd', 'recompute_reserved_stock');
5101
5167
  IF p_trade_item_key IS NULL OR btrim(p_trade_item_key) = '' THEN RETURN; END IF;
5102
5168
  IF current_setting('app.recomputing_reserved', true) = 'on' THEN RETURN; END IF;
5103
5169
 
@@ -5179,8 +5245,11 @@ END
5179
5245
  $function$
5180
5246
  ;
5181
5247
  REVOKE ALL ON FUNCTION recompute_reserved_stock(text) FROM PUBLIC;
5182
- GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO PUBLIC;
5183
- GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO anon;
5248
+ REVOKE ALL ON FUNCTION recompute_reserved_stock(text) FROM anon;
5249
+ REVOKE EXECUTE ON FUNCTION recompute_reserved_stock(text) FROM PUBLIC;
5250
+ GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO authenticated;
5251
+ GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO service_role;
5252
+ REVOKE EXECUTE ON FUNCTION recompute_reserved_stock(text) FROM anon;
5184
5253
  GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO authenticated;
5185
5254
  GRANT EXECUTE ON FUNCTION recompute_reserved_stock(text) TO service_role;
5186
5255
  CREATE OR REPLACE FUNCTION public.requeue_skipped_stock_rows(p_status text, p_connection_id uuid, p_trade_item_id text DEFAULT NULL::text)
@@ -5191,6 +5260,7 @@ CREATE OR REPLACE FUNCTION public.requeue_skipped_stock_rows(p_status text, p_co
5191
5260
  AS $function$
5192
5261
  DECLARE r record; n integer := 0;
5193
5262
  BEGIN
5263
+ PERFORM public.voorraad_vereis('ingelogd', 'requeue_skipped_stock_rows');
5194
5264
  FOR r IN
5195
5265
  SELECT DISTINCT ON (trade_item_id) id, trade_item_id
5196
5266
  FROM public.floriday_continuous_stock_queue
@@ -5210,6 +5280,7 @@ BEGIN
5210
5280
  END $function$
5211
5281
  ;
5212
5282
  REVOKE ALL ON FUNCTION requeue_skipped_stock_rows(text,uuid,text) FROM PUBLIC;
5283
+ REVOKE ALL ON FUNCTION requeue_skipped_stock_rows(text,uuid,text) FROM anon;
5213
5284
  GRANT EXECUTE ON FUNCTION requeue_skipped_stock_rows(text,uuid,text) TO service_role;
5214
5285
  CREATE OR REPLACE FUNCTION public.reset_stalled_floriday_stock_queue(p_include_failed boolean DEFAULT true)
5215
5286
  RETURNS integer
@@ -5221,6 +5292,7 @@ DECLARE
5221
5292
  v_count integer := 0;
5222
5293
  v_n integer;
5223
5294
  BEGIN
5295
+ PERFORM public.voorraad_vereis('ingelogd', 'reset_stalled_floriday_stock_queue');
5224
5296
  -- Geclaimd maar nooit afgerond (worker gecrasht): terug in de wachtrij.
5225
5297
  UPDATE public.floriday_continuous_stock_queue
5226
5298
  SET status = 'pending',
@@ -5261,6 +5333,7 @@ END;
5261
5333
  $function$
5262
5334
  ;
5263
5335
  REVOKE ALL ON FUNCTION reset_stalled_floriday_stock_queue(boolean) FROM PUBLIC;
5336
+ REVOKE ALL ON FUNCTION reset_stalled_floriday_stock_queue(boolean) FROM anon;
5264
5337
  GRANT EXECUTE ON FUNCTION reset_stalled_floriday_stock_queue(boolean) TO authenticated;
5265
5338
  GRANT EXECUTE ON FUNCTION reset_stalled_floriday_stock_queue(boolean) TO service_role;
5266
5339
  CREATE OR REPLACE FUNCTION public.resolve_group_allocation(_product_group_id uuid, _needed integer)
@@ -5275,7 +5348,8 @@ DECLARE
5275
5348
  take integer;
5276
5349
  avail integer;
5277
5350
  fallback_key text := NULL;
5278
- BEGIN
5351
+ BEGIN
5352
+ PERFORM public.voorraad_vereis('ingelogd', 'resolve_group_allocation');
5279
5353
  FOR r IN
5280
5354
  SELECT public.resolve_group_member_stock_key(pgi.trade_item_id) AS stock_key,
5281
5355
  COALESCE(ts.physical_stock, 0)::integer AS physical_stock,
@@ -5311,8 +5385,11 @@ END;
5311
5385
  $function$
5312
5386
  ;
5313
5387
  REVOKE ALL ON FUNCTION resolve_group_allocation(uuid,integer) FROM PUBLIC;
5314
- GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO PUBLIC;
5315
- GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO anon;
5388
+ REVOKE ALL ON FUNCTION resolve_group_allocation(uuid,integer) FROM anon;
5389
+ REVOKE EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) FROM PUBLIC;
5390
+ GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO authenticated;
5391
+ GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO service_role;
5392
+ REVOKE EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) FROM anon;
5316
5393
  GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO authenticated;
5317
5394
  GRANT EXECUTE ON FUNCTION resolve_group_allocation(uuid,integer) TO service_role;
5318
5395
  CREATE OR REPLACE FUNCTION public.resolve_group_member_stock_key(p_trade_item_id text)
@@ -5358,7 +5435,8 @@ AS $function$
5358
5435
  $function$
5359
5436
  ;
5360
5437
  REVOKE ALL ON FUNCTION resolve_group_member_stock_key(text) FROM PUBLIC;
5361
- GRANT EXECUTE ON FUNCTION resolve_group_member_stock_key(text) TO anon;
5438
+ REVOKE ALL ON FUNCTION resolve_group_member_stock_key(text) FROM anon;
5439
+ REVOKE EXECUTE ON FUNCTION resolve_group_member_stock_key(text) FROM anon;
5362
5440
  GRANT EXECUTE ON FUNCTION resolve_group_member_stock_key(text) TO authenticated;
5363
5441
  GRANT EXECUTE ON FUNCTION resolve_group_member_stock_key(text) TO service_role;
5364
5442
  CREATE OR REPLACE FUNCTION public.resolve_product_id_for_item(p_product_name text)
@@ -5369,6 +5447,7 @@ CREATE OR REPLACE FUNCTION public.resolve_product_id_for_item(p_product_name tex
5369
5447
  AS $function$
5370
5448
  DECLARE v_id uuid;
5371
5449
  BEGIN
5450
+ PERFORM public.voorraad_vereis('ingelogd', 'resolve_product_id_for_item');
5372
5451
  IF p_product_name IS NULL OR btrim(p_product_name) = '' THEN RETURN NULL; END IF;
5373
5452
  SELECT id INTO v_id FROM public.products
5374
5453
  WHERE lower(btrim(product)) = lower(btrim(p_product_name))
@@ -5377,8 +5456,11 @@ BEGIN
5377
5456
  END $function$
5378
5457
  ;
5379
5458
  REVOKE ALL ON FUNCTION resolve_product_id_for_item(text) FROM PUBLIC;
5380
- GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO PUBLIC;
5381
- GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO anon;
5459
+ REVOKE ALL ON FUNCTION resolve_product_id_for_item(text) FROM anon;
5460
+ REVOKE EXECUTE ON FUNCTION resolve_product_id_for_item(text) FROM PUBLIC;
5461
+ GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO authenticated;
5462
+ GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO service_role;
5463
+ REVOKE EXECUTE ON FUNCTION resolve_product_id_for_item(text) FROM anon;
5382
5464
  GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO authenticated;
5383
5465
  GRANT EXECUTE ON FUNCTION resolve_product_id_for_item(text) TO service_role;
5384
5466
  CREATE OR REPLACE FUNCTION public.resolve_stock_trade_item_key(p_product_id uuid)
@@ -5401,8 +5483,11 @@ AS $function$
5401
5483
  $function$
5402
5484
  ;
5403
5485
  REVOKE ALL ON FUNCTION resolve_stock_trade_item_key(uuid) FROM PUBLIC;
5404
- GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO PUBLIC;
5405
- GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO anon;
5486
+ REVOKE ALL ON FUNCTION resolve_stock_trade_item_key(uuid) FROM anon;
5487
+ REVOKE EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) FROM PUBLIC;
5488
+ GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO authenticated;
5489
+ GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO service_role;
5490
+ REVOKE EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) FROM anon;
5406
5491
  GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO authenticated;
5407
5492
  GRANT EXECUTE ON FUNCTION resolve_stock_trade_item_key(uuid) TO service_role;
5408
5493
  CREATE OR REPLACE FUNCTION public.reverse_production(p_parent_key text, p_quantity numeric, p_user_id uuid DEFAULT NULL::uuid, p_connection_id uuid DEFAULT NULL::uuid, p_reason text DEFAULT NULL::text)
@@ -5424,7 +5509,8 @@ DECLARE
5424
5509
  v_uid uuid := COALESCE(p_user_id, auth.uid());
5425
5510
  v_reversed jsonb := '[]'::jsonb;
5426
5511
  v_batches_processed int := 0;
5427
- BEGIN
5512
+ BEGIN
5513
+ PERFORM public.voorraad_vereis('ingelogd', 'reverse_production');
5428
5514
  IF v_remaining <= 0 OR p_parent_key IS NULL THEN
5429
5515
  RETURN jsonb_build_object('ok', true, 'reversed', v_reversed);
5430
5516
  END IF;
@@ -5533,6 +5619,7 @@ END;
5533
5619
  $function$
5534
5620
  ;
5535
5621
  REVOKE ALL ON FUNCTION reverse_production(text,numeric,uuid,uuid,text) FROM PUBLIC;
5622
+ REVOKE ALL ON FUNCTION reverse_production(text,numeric,uuid,uuid,text) FROM anon;
5536
5623
  GRANT EXECUTE ON FUNCTION reverse_production(text,numeric,uuid,uuid,text) TO service_role;
5537
5624
  CREATE OR REPLACE FUNCTION public.run_floriday_base_supply_process()
5538
5625
  RETURNS void
@@ -5541,6 +5628,7 @@ CREATE OR REPLACE FUNCTION public.run_floriday_base_supply_process()
5541
5628
  SET search_path TO 'public'
5542
5629
  AS $function$
5543
5630
  BEGIN
5631
+ PERFORM public.voorraad_vereis('server', 'run_floriday_base_supply_process');
5544
5632
  IF NOT EXISTS (SELECT 1 FROM floriday_continuous_stock_queue q
5545
5633
  WHERE q.status IN ('needs_base_supply','creating_base_supply') LIMIT 1) THEN
5546
5634
  PERFORM cron.unschedule(j.jobid) FROM cron.job j WHERE j.jobname = 'floriday-base-supply-retry';
@@ -5558,6 +5646,7 @@ BEGIN
5558
5646
  END $function$
5559
5647
  ;
5560
5648
  REVOKE ALL ON FUNCTION run_floriday_base_supply_process() FROM PUBLIC;
5649
+ REVOKE ALL ON FUNCTION run_floriday_base_supply_process() FROM anon;
5561
5650
  GRANT EXECUTE ON FUNCTION run_floriday_base_supply_process() TO service_role;
5562
5651
  CREATE OR REPLACE FUNCTION public.run_floriday_continuous_stock_sync()
5563
5652
  RETURNS void
@@ -5566,6 +5655,7 @@ CREATE OR REPLACE FUNCTION public.run_floriday_continuous_stock_sync()
5566
5655
  SET search_path TO 'public'
5567
5656
  AS $function$
5568
5657
  BEGIN
5658
+ PERFORM public.voorraad_vereis('server', 'run_floriday_continuous_stock_sync');
5569
5659
  IF public.voorraad_hook_on('continuous_stock') AND EXISTS (
5570
5660
  SELECT 1 FROM floriday_continuous_stock_queue WHERE status = 'pending'
5571
5661
  AND created_at < now() - interval '5 minutes' LIMIT 1) THEN
@@ -5577,8 +5667,11 @@ BEGIN
5577
5667
  END $function$
5578
5668
  ;
5579
5669
  REVOKE ALL ON FUNCTION run_floriday_continuous_stock_sync() FROM PUBLIC;
5580
- GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO PUBLIC;
5581
- GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO anon;
5670
+ REVOKE ALL ON FUNCTION run_floriday_continuous_stock_sync() FROM anon;
5671
+ REVOKE EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() FROM PUBLIC;
5672
+ GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO authenticated;
5673
+ GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO service_role;
5674
+ REVOKE EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() FROM anon;
5582
5675
  GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO authenticated;
5583
5676
  GRANT EXECUTE ON FUNCTION run_floriday_continuous_stock_sync() TO service_role;
5584
5677
  CREATE OR REPLACE FUNCTION public.run_floriday_follow()
@@ -5588,12 +5681,14 @@ CREATE OR REPLACE FUNCTION public.run_floriday_follow()
5588
5681
  SET search_path TO 'public'
5589
5682
  AS $function$
5590
5683
  BEGIN
5684
+ PERFORM public.voorraad_vereis('server', 'run_floriday_follow');
5591
5685
  IF NOT public.voorraad_hook_on('follow_floriday') THEN RETURN; END IF;
5592
5686
  IF NOT EXISTS (SELECT 1 FROM public.floriday_inventory_settings WHERE erp_leading = false LIMIT 1) THEN RETURN; END IF;
5593
5687
  PERFORM public.voorraad_hook_post('/api/public/hooks/floriday-follow', 55000);
5594
5688
  END $function$
5595
5689
  ;
5596
5690
  REVOKE ALL ON FUNCTION run_floriday_follow() FROM PUBLIC;
5691
+ REVOKE ALL ON FUNCTION run_floriday_follow() FROM anon;
5597
5692
  GRANT EXECUTE ON FUNCTION run_floriday_follow() TO service_role;
5598
5693
  CREATE OR REPLACE FUNCTION public.run_floriday_stock_queue_process()
5599
5694
  RETURNS void
@@ -5605,6 +5700,7 @@ DECLARE
5605
5700
  v_base_url text;
5606
5701
  v_apikey text;
5607
5702
  BEGIN
5703
+ PERFORM public.voorraad_vereis('server', 'run_floriday_stock_queue_process');
5608
5704
  SELECT value INTO v_base_url FROM public.module_runtime_config WHERE key = 'stock_queue_processor_base_url';
5609
5705
  SELECT value INTO v_apikey FROM public.module_runtime_config WHERE key = 'voorraad_hook_apikey';
5610
5706
 
@@ -5621,6 +5717,7 @@ END;
5621
5717
  $function$
5622
5718
  ;
5623
5719
  REVOKE ALL ON FUNCTION run_floriday_stock_queue_process() FROM PUBLIC;
5720
+ REVOKE ALL ON FUNCTION run_floriday_stock_queue_process() FROM anon;
5624
5721
  GRANT EXECUTE ON FUNCTION run_floriday_stock_queue_process() TO service_role;
5625
5722
  CREATE OR REPLACE FUNCTION public.run_floriday_stock_reconcile()
5626
5723
  RETURNS void
@@ -5629,11 +5726,13 @@ CREATE OR REPLACE FUNCTION public.run_floriday_stock_reconcile()
5629
5726
  SET search_path TO 'public'
5630
5727
  AS $function$
5631
5728
  BEGIN
5729
+ PERFORM public.voorraad_vereis('server', 'run_floriday_stock_reconcile');
5632
5730
  IF NOT public.voorraad_hook_on('stock_reconcile') THEN RETURN; END IF;
5633
5731
  PERFORM public.voorraad_hook_post('/api/public/hooks/floriday-stock-reconcile', 55000);
5634
5732
  END $function$
5635
5733
  ;
5636
5734
  REVOKE ALL ON FUNCTION run_floriday_stock_reconcile() FROM PUBLIC;
5735
+ REVOKE ALL ON FUNCTION run_floriday_stock_reconcile() FROM anon;
5637
5736
  GRANT EXECUTE ON FUNCTION run_floriday_stock_reconcile() TO service_role;
5638
5737
  CREATE OR REPLACE FUNCTION public.run_logistics_tasks_dispatch()
5639
5738
  RETURNS void
@@ -5642,6 +5741,7 @@ CREATE OR REPLACE FUNCTION public.run_logistics_tasks_dispatch()
5642
5741
  SET search_path TO 'public'
5643
5742
  AS $function$
5644
5743
  BEGIN
5744
+ PERFORM public.voorraad_vereis('ingelogd', 'run_logistics_tasks_dispatch');
5645
5745
  IF NOT public.voorraad_hook_on('logistics_tasks') THEN RETURN; END IF;
5646
5746
  IF NOT EXISTS (SELECT 1 FROM logistics_tasks t WHERE t.owner_module = 'voorraad'
5647
5747
  AND ((t.status IN ('planned','claimed') AND (t.next_attempt_at IS NULL OR t.next_attempt_at <= now()))
@@ -5652,8 +5752,11 @@ BEGIN
5652
5752
  END $function$
5653
5753
  ;
5654
5754
  REVOKE ALL ON FUNCTION run_logistics_tasks_dispatch() FROM PUBLIC;
5655
- GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO PUBLIC;
5656
- GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO anon;
5755
+ REVOKE ALL ON FUNCTION run_logistics_tasks_dispatch() FROM anon;
5756
+ REVOKE EXECUTE ON FUNCTION run_logistics_tasks_dispatch() FROM PUBLIC;
5757
+ GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO authenticated;
5758
+ GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO service_role;
5759
+ REVOKE EXECUTE ON FUNCTION run_logistics_tasks_dispatch() FROM anon;
5657
5760
  GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO authenticated;
5658
5761
  GRANT EXECUTE ON FUNCTION run_logistics_tasks_dispatch() TO service_role;
5659
5762
  CREATE OR REPLACE FUNCTION public.self_heal_floriday_links()
@@ -5663,7 +5766,8 @@ CREATE OR REPLACE FUNCTION public.self_heal_floriday_links()
5663
5766
  SET search_path TO 'public'
5664
5767
  AS $function$
5665
5768
  DECLARE v_updated integer := 0; v_tmp integer;
5666
- BEGIN
5769
+ BEGIN
5770
+ PERFORM public.voorraad_vereis('server', 'self_heal_floriday_links');
5667
5771
  WITH upd AS (
5668
5772
  UPDATE public.products p
5669
5773
  SET floriday_trade_item_id = p.id::text,
@@ -5713,8 +5817,11 @@ BEGIN
5713
5817
  END $function$
5714
5818
  ;
5715
5819
  REVOKE ALL ON FUNCTION self_heal_floriday_links() FROM PUBLIC;
5716
- GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO PUBLIC;
5717
- GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO anon;
5820
+ REVOKE ALL ON FUNCTION self_heal_floriday_links() FROM anon;
5821
+ REVOKE EXECUTE ON FUNCTION self_heal_floriday_links() FROM PUBLIC;
5822
+ GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO authenticated;
5823
+ GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO service_role;
5824
+ REVOKE EXECUTE ON FUNCTION self_heal_floriday_links() FROM anon;
5718
5825
  GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO authenticated;
5719
5826
  GRANT EXECUTE ON FUNCTION self_heal_floriday_links() TO service_role;
5720
5827
  CREATE OR REPLACE FUNCTION public.set_module_runtime_config_updated_at()
@@ -5729,8 +5836,11 @@ END;
5729
5836
  $function$
5730
5837
  ;
5731
5838
  REVOKE ALL ON FUNCTION set_module_runtime_config_updated_at() FROM PUBLIC;
5732
- GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO PUBLIC;
5733
- GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO anon;
5839
+ REVOKE ALL ON FUNCTION set_module_runtime_config_updated_at() FROM anon;
5840
+ REVOKE EXECUTE ON FUNCTION set_module_runtime_config_updated_at() FROM PUBLIC;
5841
+ GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO authenticated;
5842
+ GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO service_role;
5843
+ REVOKE EXECUTE ON FUNCTION set_module_runtime_config_updated_at() FROM anon;
5734
5844
  GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO authenticated;
5735
5845
  GRANT EXECUTE ON FUNCTION set_module_runtime_config_updated_at() TO service_role;
5736
5846
  CREATE OR REPLACE FUNCTION public.set_product_bom_tenant()
@@ -5748,8 +5858,11 @@ END;
5748
5858
  $function$
5749
5859
  ;
5750
5860
  REVOKE ALL ON FUNCTION set_product_bom_tenant() FROM PUBLIC;
5751
- GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO PUBLIC;
5752
- GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO anon;
5861
+ REVOKE ALL ON FUNCTION set_product_bom_tenant() FROM anon;
5862
+ REVOKE EXECUTE ON FUNCTION set_product_bom_tenant() FROM PUBLIC;
5863
+ GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO authenticated;
5864
+ GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO service_role;
5865
+ REVOKE EXECUTE ON FUNCTION set_product_bom_tenant() FROM anon;
5753
5866
  GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO authenticated;
5754
5867
  GRANT EXECUTE ON FUNCTION set_product_bom_tenant() TO service_role;
5755
5868
  CREATE OR REPLACE FUNCTION public.set_product_stock(p_product_id uuid, p_physical_stock numeric, p_minimum_stock numeric DEFAULT 0, p_incoming_stock numeric DEFAULT 0, p_notes text DEFAULT NULL::text)
@@ -5762,6 +5875,7 @@ AS $function$
5762
5875
  DECLARE
5763
5876
  v_user_id uuid := auth.uid(); v_connection_id uuid; v_key text; v_row_key text; v_product_key text; v_floriday_key text;
5764
5877
  BEGIN
5878
+ PERFORM public.voorraad_vereis('ingelogd', 'set_product_stock');
5765
5879
  IF v_user_id IS NULL THEN RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501'; END IF;
5766
5880
  IF p_physical_stock IS NULL THEN RAISE EXCEPTION 'Vul een voorraadaantal in'; END IF;
5767
5881
  IF p_physical_stock < 0 OR p_minimum_stock < 0 OR p_incoming_stock < 0 THEN
@@ -5797,6 +5911,7 @@ BEGIN
5797
5911
  END; $function$
5798
5912
  ;
5799
5913
  REVOKE ALL ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text) FROM PUBLIC;
5914
+ REVOKE ALL ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text) FROM anon;
5800
5915
  GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text) TO authenticated;
5801
5916
  GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text) TO service_role;
5802
5917
  CREATE OR REPLACE FUNCTION public.set_product_stock(p_product_id uuid, p_physical_stock numeric, p_minimum_stock numeric DEFAULT 0, p_incoming_stock numeric DEFAULT 0, p_notes text DEFAULT NULL::text, p_change_source text DEFAULT NULL::text)
@@ -5809,6 +5924,7 @@ AS $function$
5809
5924
  DECLARE
5810
5925
  v_user_id uuid := auth.uid(); v_connection_id uuid; v_key text; v_row_key text; v_product_key text; v_floriday_key text; v_source text;
5811
5926
  BEGIN
5927
+ PERFORM public.voorraad_vereis('ingelogd', 'set_product_stock');
5812
5928
  IF v_user_id IS NULL THEN RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501'; END IF;
5813
5929
  IF p_physical_stock IS NULL THEN RAISE EXCEPTION 'Vul een voorraadaantal in'; END IF;
5814
5930
  IF p_physical_stock < 0 OR p_minimum_stock < 0 OR p_incoming_stock < 0 THEN
@@ -5854,8 +5970,11 @@ BEGIN
5854
5970
  END; $function$
5855
5971
  ;
5856
5972
  REVOKE ALL ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) FROM PUBLIC;
5857
- GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO PUBLIC;
5858
- GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO anon;
5973
+ REVOKE ALL ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) FROM anon;
5974
+ REVOKE EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) FROM PUBLIC;
5975
+ GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO authenticated;
5976
+ GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO service_role;
5977
+ REVOKE EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) FROM anon;
5859
5978
  GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO authenticated;
5860
5979
  GRANT EXECUTE ON FUNCTION set_product_stock(uuid,numeric,numeric,numeric,text,text) TO service_role;
5861
5980
  CREATE OR REPLACE FUNCTION public.set_updated_at_order_fust_bookings()
@@ -5866,8 +5985,11 @@ AS $function$
5866
5985
  BEGIN NEW.updated_at = now(); RETURN NEW; END; $function$
5867
5986
  ;
5868
5987
  REVOKE ALL ON FUNCTION set_updated_at_order_fust_bookings() FROM PUBLIC;
5869
- GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO PUBLIC;
5870
- GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO anon;
5988
+ REVOKE ALL ON FUNCTION set_updated_at_order_fust_bookings() FROM anon;
5989
+ REVOKE EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() FROM PUBLIC;
5990
+ GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO authenticated;
5991
+ GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO service_role;
5992
+ REVOKE EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() FROM anon;
5871
5993
  GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO authenticated;
5872
5994
  GRANT EXECUTE ON FUNCTION set_updated_at_order_fust_bookings() TO service_role;
5873
5995
  CREATE OR REPLACE FUNCTION public.stock_import_cleanup()
@@ -5878,6 +6000,7 @@ CREATE OR REPLACE FUNCTION public.stock_import_cleanup()
5878
6000
  AS $function$
5879
6001
  DECLARE v_days int; n int := 0;
5880
6002
  BEGIN
6003
+ PERFORM public.voorraad_vereis('ingelogd', 'stock_import_cleanup');
5881
6004
  SELECT import_retention_days INTO v_days FROM public.inventory_recompute_limits WHERE id;
5882
6005
  DELETE FROM public.stock_import_rows d
5883
6006
  WHERE d.id IN (SELECT ir.id FROM public.stock_import_rows ir JOIN public.stock_import_runs r ON r.id = ir.run_id
@@ -5895,6 +6018,7 @@ EXCEPTION WHEN others THEN
5895
6018
  END $function$
5896
6019
  ;
5897
6020
  REVOKE ALL ON FUNCTION stock_import_cleanup() FROM PUBLIC;
6021
+ REVOKE ALL ON FUNCTION stock_import_cleanup() FROM anon;
5898
6022
  GRANT EXECUTE ON FUNCTION stock_import_cleanup() TO service_role;
5899
6023
  CREATE OR REPLACE FUNCTION public.stock_import_create(p_connection_id uuid, p_filename text, p_file_hash text, p_rows jsonb, p_force boolean DEFAULT false)
5900
6024
  RETURNS jsonb
@@ -5905,6 +6029,7 @@ AS $function$
5905
6029
  DECLARE v_uid uuid := auth.uid(); v_ctx record; v_conn uuid; v_user uuid; l record; n int; v_run uuid; v_act record; v_dup record;
5906
6030
  v_cs int; v_ncs int; v_chunks int;
5907
6031
  BEGIN
6032
+ PERFORM public.voorraad_vereis('ingelogd', 'stock_import_create');
5908
6033
  IF v_uid IS NULL AND COALESCE(auth.role(),'') <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501'; END IF;
5909
6034
  IF NOT public.voorraad_can_write() THEN RETURN jsonb_build_object('ok', false, 'code', 'NO_WRITE_ROLE', 'message', 'Je hebt geen rechten om voorraad te importeren. Vraag een beheerder om een schrijfrol.'); END IF;
5910
6035
  SELECT * INTO v_ctx FROM public.get_active_floriday_context();
@@ -5973,6 +6098,7 @@ EXCEPTION WHEN unique_violation THEN
5973
6098
  END $function$
5974
6099
  ;
5975
6100
  REVOKE ALL ON FUNCTION stock_import_create(uuid,text,text,jsonb,boolean) FROM PUBLIC;
6101
+ REVOKE ALL ON FUNCTION stock_import_create(uuid,text,text,jsonb,boolean) FROM anon;
5976
6102
  GRANT EXECUTE ON FUNCTION stock_import_create(uuid,text,text,jsonb,boolean) TO authenticated;
5977
6103
  GRANT EXECUTE ON FUNCTION stock_import_create(uuid,text,text,jsonb,boolean) TO service_role;
5978
6104
  CREATE OR REPLACE FUNCTION public.stock_import_process_chunk(p_run_id uuid, p_chunk_no integer)
@@ -5984,6 +6110,7 @@ AS $function$
5984
6110
  DECLARE v_run record; v_chunk record; v_ctx record; r record; v_pid uuid; v_key text; s record; v_t0 timestamptz := clock_timestamp();
5985
6111
  np int; nm int; ni int; v_fid text; n_ok int := 0; n_err int := 0; v_done int;
5986
6112
  BEGIN
6113
+ PERFORM public.voorraad_vereis('ingelogd', 'stock_import_process_chunk');
5987
6114
  SELECT * INTO v_run FROM public.stock_import_runs WHERE id = p_run_id FOR UPDATE;
5988
6115
  IF v_run.id IS NULL THEN RAISE EXCEPTION 'Import niet gevonden'; END IF;
5989
6116
  IF NOT public._stock_import_caller(v_run.user_id) THEN RAISE EXCEPTION 'Geen toegang tot deze import' USING ERRCODE = '42501'; END IF;
@@ -6064,6 +6191,7 @@ BEGIN
6064
6191
  END $function$
6065
6192
  ;
6066
6193
  REVOKE ALL ON FUNCTION stock_import_process_chunk(uuid,integer) FROM PUBLIC;
6194
+ REVOKE ALL ON FUNCTION stock_import_process_chunk(uuid,integer) FROM anon;
6067
6195
  GRANT EXECUTE ON FUNCTION stock_import_process_chunk(uuid,integer) TO authenticated;
6068
6196
  GRANT EXECUTE ON FUNCTION stock_import_process_chunk(uuid,integer) TO service_role;
6069
6197
  CREATE OR REPLACE FUNCTION public.stock_import_stop(p_run_id uuid)
@@ -6074,6 +6202,7 @@ CREATE OR REPLACE FUNCTION public.stock_import_stop(p_run_id uuid)
6074
6202
  AS $function$
6075
6203
  DECLARE v_run record;
6076
6204
  BEGIN
6205
+ PERFORM public.voorraad_vereis('ingelogd', 'stock_import_stop');
6077
6206
  SELECT * INTO v_run FROM public.stock_import_runs WHERE id = p_run_id FOR UPDATE;
6078
6207
  IF v_run.id IS NULL THEN RAISE EXCEPTION 'Import niet gevonden'; END IF;
6079
6208
  IF NOT public._stock_import_caller(v_run.user_id) THEN RAISE EXCEPTION 'Geen toegang tot deze import' USING ERRCODE = '42501'; END IF;
@@ -6082,6 +6211,7 @@ BEGIN
6082
6211
  END $function$
6083
6212
  ;
6084
6213
  REVOKE ALL ON FUNCTION stock_import_stop(uuid) FROM PUBLIC;
6214
+ REVOKE ALL ON FUNCTION stock_import_stop(uuid) FROM anon;
6085
6215
  GRANT EXECUTE ON FUNCTION stock_import_stop(uuid) TO authenticated;
6086
6216
  GRANT EXECUTE ON FUNCTION stock_import_stop(uuid) TO service_role;
6087
6217
  CREATE OR REPLACE FUNCTION public.stock_import_undo_chunk(p_run_id uuid, p_chunk_no integer)
@@ -6092,6 +6222,7 @@ CREATE OR REPLACE FUNCTION public.stock_import_undo_chunk(p_run_id uuid, p_chunk
6092
6222
  AS $function$
6093
6223
  DECLARE v_run record; v_chunk record; r record; s record; tp int; tm int; ti int; v_note text; n_back int := 0; n_skip int := 0; v_left int;
6094
6224
  BEGIN
6225
+ PERFORM public.voorraad_vereis('ingelogd', 'stock_import_undo_chunk');
6095
6226
  SELECT * INTO v_run FROM public.stock_import_runs WHERE id = p_run_id FOR UPDATE;
6096
6227
  IF v_run.id IS NULL THEN RAISE EXCEPTION 'Import niet gevonden'; END IF;
6097
6228
  IF NOT public._stock_import_caller(v_run.user_id) THEN RAISE EXCEPTION 'Geen toegang tot deze import' USING ERRCODE = '42501'; END IF;
@@ -6154,6 +6285,7 @@ BEGIN
6154
6285
  END $function$
6155
6286
  ;
6156
6287
  REVOKE ALL ON FUNCTION stock_import_undo_chunk(uuid,integer) FROM PUBLIC;
6288
+ REVOKE ALL ON FUNCTION stock_import_undo_chunk(uuid,integer) FROM anon;
6157
6289
  GRANT EXECUTE ON FUNCTION stock_import_undo_chunk(uuid,integer) TO authenticated;
6158
6290
  GRANT EXECUTE ON FUNCTION stock_import_undo_chunk(uuid,integer) TO service_role;
6159
6291
  CREATE OR REPLACE FUNCTION public.sync_order_item_fusten(_order_item_id uuid)
@@ -6177,6 +6309,7 @@ DECLARE
6177
6309
  v_row record;
6178
6310
  v_user uuid;
6179
6311
  BEGIN
6312
+ PERFORM public.voorraad_vereis('ingelogd', 'sync_order_item_fusten');
6180
6313
  SELECT oi.*, o.order_number INTO v_item
6181
6314
  FROM logistics_active.order_items oi
6182
6315
  LEFT JOIN public.orders o ON o.id = oi.order_id
@@ -6286,6 +6419,7 @@ END;
6286
6419
  $function$
6287
6420
  ;
6288
6421
  REVOKE ALL ON FUNCTION sync_order_item_fusten(uuid) FROM PUBLIC;
6422
+ REVOKE ALL ON FUNCTION sync_order_item_fusten(uuid) FROM anon;
6289
6423
  GRANT EXECUTE ON FUNCTION sync_order_item_fusten(uuid) TO authenticated;
6290
6424
  GRANT EXECUTE ON FUNCTION sync_order_item_fusten(uuid) TO service_role;
6291
6425
  CREATE OR REPLACE FUNCTION public.sync_products_quantity_from_stock()
@@ -6335,8 +6469,11 @@ END;
6335
6469
  $function$
6336
6470
  ;
6337
6471
  REVOKE ALL ON FUNCTION sync_products_quantity_from_stock() FROM PUBLIC;
6338
- GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO PUBLIC;
6339
- GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO anon;
6472
+ REVOKE ALL ON FUNCTION sync_products_quantity_from_stock() FROM anon;
6473
+ REVOKE EXECUTE ON FUNCTION sync_products_quantity_from_stock() FROM PUBLIC;
6474
+ GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO authenticated;
6475
+ GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO service_role;
6476
+ REVOKE EXECUTE ON FUNCTION sync_products_quantity_from_stock() FROM anon;
6340
6477
  GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO authenticated;
6341
6478
  GRANT EXECUTE ON FUNCTION sync_products_quantity_from_stock() TO service_role;
6342
6479
  CREATE OR REPLACE FUNCTION public.touch_fust_types_updated_at()
@@ -6351,8 +6488,11 @@ END;
6351
6488
  $function$
6352
6489
  ;
6353
6490
  REVOKE ALL ON FUNCTION touch_fust_types_updated_at() FROM PUBLIC;
6354
- GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO PUBLIC;
6355
- GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO anon;
6491
+ REVOKE ALL ON FUNCTION touch_fust_types_updated_at() FROM anon;
6492
+ REVOKE EXECUTE ON FUNCTION touch_fust_types_updated_at() FROM PUBLIC;
6493
+ GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO authenticated;
6494
+ GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO service_role;
6495
+ REVOKE EXECUTE ON FUNCTION touch_fust_types_updated_at() FROM anon;
6356
6496
  GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO authenticated;
6357
6497
  GRANT EXECUTE ON FUNCTION touch_fust_types_updated_at() TO service_role;
6358
6498
  CREATE OR REPLACE FUNCTION public.trade_item_drafts_readonly()
@@ -6365,8 +6505,11 @@ END;
6365
6505
  $function$
6366
6506
  ;
6367
6507
  REVOKE ALL ON FUNCTION trade_item_drafts_readonly() FROM PUBLIC;
6368
- GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO PUBLIC;
6369
- GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO anon;
6508
+ REVOKE ALL ON FUNCTION trade_item_drafts_readonly() FROM anon;
6509
+ REVOKE EXECUTE ON FUNCTION trade_item_drafts_readonly() FROM PUBLIC;
6510
+ GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO authenticated;
6511
+ GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO service_role;
6512
+ REVOKE EXECUTE ON FUNCTION trade_item_drafts_readonly() FROM anon;
6370
6513
  GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO authenticated;
6371
6514
  GRANT EXECUTE ON FUNCTION trade_item_drafts_readonly() TO service_role;
6372
6515
  CREATE OR REPLACE FUNCTION public.trade_item_prices_touch_updated_at()
@@ -6381,8 +6524,11 @@ END;
6381
6524
  $function$
6382
6525
  ;
6383
6526
  REVOKE ALL ON FUNCTION trade_item_prices_touch_updated_at() FROM PUBLIC;
6384
- GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO PUBLIC;
6385
- GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO anon;
6527
+ REVOKE ALL ON FUNCTION trade_item_prices_touch_updated_at() FROM anon;
6528
+ REVOKE EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() FROM PUBLIC;
6529
+ GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO authenticated;
6530
+ GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO service_role;
6531
+ REVOKE EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() FROM anon;
6386
6532
  GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO authenticated;
6387
6533
  GRANT EXECUTE ON FUNCTION trade_item_prices_touch_updated_at() TO service_role;
6388
6534
  CREATE OR REPLACE FUNCTION public.trade_item_stock_duplicates()
@@ -6405,8 +6551,11 @@ AS $function$
6405
6551
  $function$
6406
6552
  ;
6407
6553
  REVOKE ALL ON FUNCTION trade_item_stock_duplicates() FROM PUBLIC;
6408
- GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO PUBLIC;
6409
- GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO anon;
6554
+ REVOKE ALL ON FUNCTION trade_item_stock_duplicates() FROM anon;
6555
+ REVOKE EXECUTE ON FUNCTION trade_item_stock_duplicates() FROM PUBLIC;
6556
+ GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO authenticated;
6557
+ GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO service_role;
6558
+ REVOKE EXECUTE ON FUNCTION trade_item_stock_duplicates() FROM anon;
6410
6559
  GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO authenticated;
6411
6560
  GRANT EXECUTE ON FUNCTION trade_item_stock_duplicates() TO service_role;
6412
6561
  CREATE OR REPLACE FUNCTION public.trg_cart_numbers_sync_order_status_fn()
@@ -6436,8 +6585,11 @@ END;
6436
6585
  $function$
6437
6586
  ;
6438
6587
  REVOKE ALL ON FUNCTION trg_cart_numbers_sync_order_status_fn() FROM PUBLIC;
6439
- GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO PUBLIC;
6440
- GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO anon;
6588
+ REVOKE ALL ON FUNCTION trg_cart_numbers_sync_order_status_fn() FROM anon;
6589
+ REVOKE EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() FROM PUBLIC;
6590
+ GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO authenticated;
6591
+ GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO service_role;
6592
+ REVOKE EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() FROM anon;
6441
6593
  GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO authenticated;
6442
6594
  GRANT EXECUTE ON FUNCTION trg_cart_numbers_sync_order_status_fn() TO service_role;
6443
6595
  CREATE OR REPLACE FUNCTION public.trg_cart_session_consume_fn()
@@ -6479,8 +6631,11 @@ BEGIN
6479
6631
  END $function$
6480
6632
  ;
6481
6633
  REVOKE ALL ON FUNCTION trg_cart_session_consume_fn() FROM PUBLIC;
6482
- GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO PUBLIC;
6483
- GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO anon;
6634
+ REVOKE ALL ON FUNCTION trg_cart_session_consume_fn() FROM anon;
6635
+ REVOKE EXECUTE ON FUNCTION trg_cart_session_consume_fn() FROM PUBLIC;
6636
+ GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO authenticated;
6637
+ GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO service_role;
6638
+ REVOKE EXECUTE ON FUNCTION trg_cart_session_consume_fn() FROM anon;
6484
6639
  GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO authenticated;
6485
6640
  GRANT EXECUTE ON FUNCTION trg_cart_session_consume_fn() TO service_role;
6486
6641
  CREATE OR REPLACE FUNCTION public.trg_check_product_structure()
@@ -6518,6 +6673,7 @@ BEGIN
6518
6673
  END $function$
6519
6674
  ;
6520
6675
  REVOKE ALL ON FUNCTION trg_check_product_structure() FROM PUBLIC;
6676
+ REVOKE ALL ON FUNCTION trg_check_product_structure() FROM anon;
6521
6677
  GRANT EXECUTE ON FUNCTION trg_check_product_structure() TO service_role;
6522
6678
  CREATE OR REPLACE FUNCTION public.trg_floriday_cache_relink_fn()
6523
6679
  RETURNS trigger
@@ -6532,8 +6688,11 @@ END;
6532
6688
  $function$
6533
6689
  ;
6534
6690
  REVOKE ALL ON FUNCTION trg_floriday_cache_relink_fn() FROM PUBLIC;
6535
- GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO PUBLIC;
6536
- GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO anon;
6691
+ REVOKE ALL ON FUNCTION trg_floriday_cache_relink_fn() FROM anon;
6692
+ REVOKE EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() FROM PUBLIC;
6693
+ GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO authenticated;
6694
+ GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO service_role;
6695
+ REVOKE EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() FROM anon;
6537
6696
  GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO authenticated;
6538
6697
  GRANT EXECUTE ON FUNCTION trg_floriday_cache_relink_fn() TO service_role;
6539
6698
  CREATE OR REPLACE FUNCTION public.trg_floriday_trade_items_autolink_fn()
@@ -6564,8 +6723,11 @@ BEGIN
6564
6723
  END $function$
6565
6724
  ;
6566
6725
  REVOKE ALL ON FUNCTION trg_floriday_trade_items_autolink_fn() FROM PUBLIC;
6567
- GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO PUBLIC;
6568
- GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO anon;
6726
+ REVOKE ALL ON FUNCTION trg_floriday_trade_items_autolink_fn() FROM anon;
6727
+ REVOKE EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() FROM PUBLIC;
6728
+ GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO authenticated;
6729
+ GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO service_role;
6730
+ REVOKE EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() FROM anon;
6569
6731
  GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO authenticated;
6570
6732
  GRANT EXECUTE ON FUNCTION trg_floriday_trade_items_autolink_fn() TO service_role;
6571
6733
  CREATE OR REPLACE FUNCTION public.trg_order_items_autolink_fn()
@@ -6584,8 +6746,11 @@ BEGIN
6584
6746
  END $function$
6585
6747
  ;
6586
6748
  REVOKE ALL ON FUNCTION trg_order_items_autolink_fn() FROM PUBLIC;
6587
- GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO PUBLIC;
6588
- GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO anon;
6749
+ REVOKE ALL ON FUNCTION trg_order_items_autolink_fn() FROM anon;
6750
+ REVOKE EXECUTE ON FUNCTION trg_order_items_autolink_fn() FROM PUBLIC;
6751
+ GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO authenticated;
6752
+ GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO service_role;
6753
+ REVOKE EXECUTE ON FUNCTION trg_order_items_autolink_fn() FROM anon;
6589
6754
  GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO authenticated;
6590
6755
  GRANT EXECUTE ON FUNCTION trg_order_items_autolink_fn() TO service_role;
6591
6756
  CREATE OR REPLACE FUNCTION public.trg_order_items_fusten()
@@ -6606,6 +6771,7 @@ END;
6606
6771
  $function$
6607
6772
  ;
6608
6773
  REVOKE ALL ON FUNCTION trg_order_items_fusten() FROM PUBLIC;
6774
+ REVOKE ALL ON FUNCTION trg_order_items_fusten() FROM anon;
6609
6775
  GRANT EXECUTE ON FUNCTION trg_order_items_fusten() TO service_role;
6610
6776
  CREATE OR REPLACE FUNCTION public.trg_order_items_reserve_fn()
6611
6777
  RETURNS trigger
@@ -6642,8 +6808,11 @@ BEGIN
6642
6808
  END $function$
6643
6809
  ;
6644
6810
  REVOKE ALL ON FUNCTION trg_order_items_reserve_fn() FROM PUBLIC;
6645
- GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO PUBLIC;
6646
- GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO anon;
6811
+ REVOKE ALL ON FUNCTION trg_order_items_reserve_fn() FROM anon;
6812
+ REVOKE EXECUTE ON FUNCTION trg_order_items_reserve_fn() FROM PUBLIC;
6813
+ GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO authenticated;
6814
+ GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO service_role;
6815
+ REVOKE EXECUTE ON FUNCTION trg_order_items_reserve_fn() FROM anon;
6647
6816
  GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO authenticated;
6648
6817
  GRANT EXECUTE ON FUNCTION trg_order_items_reserve_fn() TO service_role;
6649
6818
  CREATE OR REPLACE FUNCTION public.trg_orders_cancel_release_fn()
@@ -6667,8 +6836,11 @@ BEGIN
6667
6836
  END $function$
6668
6837
  ;
6669
6838
  REVOKE ALL ON FUNCTION trg_orders_cancel_release_fn() FROM PUBLIC;
6670
- GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO PUBLIC;
6671
- GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO anon;
6839
+ REVOKE ALL ON FUNCTION trg_orders_cancel_release_fn() FROM anon;
6840
+ REVOKE EXECUTE ON FUNCTION trg_orders_cancel_release_fn() FROM PUBLIC;
6841
+ GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO authenticated;
6842
+ GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO service_role;
6843
+ REVOKE EXECUTE ON FUNCTION trg_orders_cancel_release_fn() FROM anon;
6672
6844
  GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO authenticated;
6673
6845
  GRANT EXECUTE ON FUNCTION trg_orders_cancel_release_fn() TO service_role;
6674
6846
  CREATE OR REPLACE FUNCTION public.trg_orders_consume_on_complete_fn()
@@ -6710,8 +6882,11 @@ BEGIN
6710
6882
  END $function$
6711
6883
  ;
6712
6884
  REVOKE ALL ON FUNCTION trg_orders_consume_on_complete_fn() FROM PUBLIC;
6713
- GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO PUBLIC;
6714
- GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO anon;
6885
+ REVOKE ALL ON FUNCTION trg_orders_consume_on_complete_fn() FROM anon;
6886
+ REVOKE EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() FROM PUBLIC;
6887
+ GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO authenticated;
6888
+ GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO service_role;
6889
+ REVOKE EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() FROM anon;
6715
6890
  GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO authenticated;
6716
6891
  GRANT EXECUTE ON FUNCTION trg_orders_consume_on_complete_fn() TO service_role;
6717
6892
  CREATE OR REPLACE FUNCTION public.trg_orders_default_phase_fn()
@@ -6727,8 +6902,11 @@ BEGIN
6727
6902
  END; $function$
6728
6903
  ;
6729
6904
  REVOKE ALL ON FUNCTION trg_orders_default_phase_fn() FROM PUBLIC;
6730
- GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO PUBLIC;
6731
- GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO anon;
6905
+ REVOKE ALL ON FUNCTION trg_orders_default_phase_fn() FROM anon;
6906
+ REVOKE EXECUTE ON FUNCTION trg_orders_default_phase_fn() FROM PUBLIC;
6907
+ GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO authenticated;
6908
+ GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO service_role;
6909
+ REVOKE EXECUTE ON FUNCTION trg_orders_default_phase_fn() FROM anon;
6732
6910
  GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO authenticated;
6733
6911
  GRANT EXECUTE ON FUNCTION trg_orders_default_phase_fn() TO service_role;
6734
6912
  CREATE OR REPLACE FUNCTION public.trg_orders_external_fulfilled_fn()
@@ -6751,6 +6929,7 @@ BEGIN
6751
6929
  END $function$
6752
6930
  ;
6753
6931
  REVOKE ALL ON FUNCTION trg_orders_external_fulfilled_fn() FROM PUBLIC;
6932
+ REVOKE ALL ON FUNCTION trg_orders_external_fulfilled_fn() FROM anon;
6754
6933
  GRANT EXECUTE ON FUNCTION trg_orders_external_fulfilled_fn() TO service_role;
6755
6934
  CREATE OR REPLACE FUNCTION public.trg_orders_recompute_reserved_fn()
6756
6935
  RETURNS trigger
@@ -6768,8 +6947,11 @@ BEGIN
6768
6947
  END $function$
6769
6948
  ;
6770
6949
  REVOKE ALL ON FUNCTION trg_orders_recompute_reserved_fn() FROM PUBLIC;
6771
- GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO PUBLIC;
6772
- GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO anon;
6950
+ REVOKE ALL ON FUNCTION trg_orders_recompute_reserved_fn() FROM anon;
6951
+ REVOKE EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() FROM PUBLIC;
6952
+ GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO authenticated;
6953
+ GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO service_role;
6954
+ REVOKE EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() FROM anon;
6773
6955
  GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO authenticated;
6774
6956
  GRANT EXECUTE ON FUNCTION trg_orders_recompute_reserved_fn() TO service_role;
6775
6957
  CREATE OR REPLACE FUNCTION public.trg_pgi_assign_sort_order()
@@ -6788,6 +6970,7 @@ BEGIN
6788
6970
  END $function$
6789
6971
  ;
6790
6972
  REVOKE ALL ON FUNCTION trg_pgi_assign_sort_order() FROM PUBLIC;
6973
+ REVOKE ALL ON FUNCTION trg_pgi_assign_sort_order() FROM anon;
6791
6974
  GRANT EXECUTE ON FUNCTION trg_pgi_assign_sort_order() TO service_role;
6792
6975
  CREATE OR REPLACE FUNCTION public.trg_pgi_order_taken_check()
6793
6976
  RETURNS trigger
@@ -6813,6 +6996,7 @@ BEGIN
6813
6996
  END $function$
6814
6997
  ;
6815
6998
  REVOKE ALL ON FUNCTION trg_pgi_order_taken_check() FROM PUBLIC;
6999
+ REVOKE ALL ON FUNCTION trg_pgi_order_taken_check() FROM anon;
6816
7000
  GRANT EXECUTE ON FUNCTION trg_pgi_order_taken_check() TO service_role;
6817
7001
  CREATE OR REPLACE FUNCTION public.trg_process_recompute_on_commit()
6818
7002
  RETURNS trigger
@@ -6847,6 +7031,7 @@ BEGIN
6847
7031
  END $function$
6848
7032
  ;
6849
7033
  REVOKE ALL ON FUNCTION trg_process_recompute_on_commit() FROM PUBLIC;
7034
+ REVOKE ALL ON FUNCTION trg_process_recompute_on_commit() FROM anon;
6850
7035
  GRANT EXECUTE ON FUNCTION trg_process_recompute_on_commit() TO service_role;
6851
7036
  CREATE OR REPLACE FUNCTION public.trg_product_packings_derive_fn()
6852
7037
  RETURNS trigger
@@ -6863,6 +7048,7 @@ BEGIN
6863
7048
  END $function$
6864
7049
  ;
6865
7050
  REVOKE ALL ON FUNCTION trg_product_packings_derive_fn() FROM PUBLIC;
7051
+ REVOKE ALL ON FUNCTION trg_product_packings_derive_fn() FROM anon;
6866
7052
  GRANT EXECUTE ON FUNCTION trg_product_packings_derive_fn() TO service_role;
6867
7053
  CREATE OR REPLACE FUNCTION public.trg_products_autolink_fn()
6868
7054
  RETURNS trigger
@@ -6878,8 +7064,11 @@ BEGIN
6878
7064
  END $function$
6879
7065
  ;
6880
7066
  REVOKE ALL ON FUNCTION trg_products_autolink_fn() FROM PUBLIC;
6881
- GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO PUBLIC;
6882
- GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO anon;
7067
+ REVOKE ALL ON FUNCTION trg_products_autolink_fn() FROM anon;
7068
+ REVOKE EXECUTE ON FUNCTION trg_products_autolink_fn() FROM PUBLIC;
7069
+ GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO authenticated;
7070
+ GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO service_role;
7071
+ REVOKE EXECUTE ON FUNCTION trg_products_autolink_fn() FROM anon;
6883
7072
  GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO authenticated;
6884
7073
  GRANT EXECUTE ON FUNCTION trg_products_autolink_fn() TO service_role;
6885
7074
  CREATE OR REPLACE FUNCTION public.trg_products_floriday_link_enqueue()
@@ -6925,6 +7114,7 @@ BEGIN
6925
7114
  END $function$
6926
7115
  ;
6927
7116
  REVOKE ALL ON FUNCTION trg_products_floriday_link_enqueue() FROM PUBLIC;
7117
+ REVOKE ALL ON FUNCTION trg_products_floriday_link_enqueue() FROM anon;
6928
7118
  GRANT EXECUTE ON FUNCTION trg_products_floriday_link_enqueue() TO service_role;
6929
7119
  CREATE OR REPLACE FUNCTION public.trg_products_seed_stock_fn()
6930
7120
  RETURNS trigger
@@ -6940,8 +7130,11 @@ BEGIN
6940
7130
  END $function$
6941
7131
  ;
6942
7132
  REVOKE ALL ON FUNCTION trg_products_seed_stock_fn() FROM PUBLIC;
6943
- GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO PUBLIC;
6944
- GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO anon;
7133
+ REVOKE ALL ON FUNCTION trg_products_seed_stock_fn() FROM anon;
7134
+ REVOKE EXECUTE ON FUNCTION trg_products_seed_stock_fn() FROM PUBLIC;
7135
+ GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO authenticated;
7136
+ GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO service_role;
7137
+ REVOKE EXECUTE ON FUNCTION trg_products_seed_stock_fn() FROM anon;
6945
7138
  GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO authenticated;
6946
7139
  GRANT EXECUTE ON FUNCTION trg_products_seed_stock_fn() TO service_role;
6947
7140
  CREATE OR REPLACE FUNCTION public.trg_requeue_no_warehouse_cache()
@@ -6959,6 +7152,7 @@ BEGIN
6959
7152
  END $function$
6960
7153
  ;
6961
7154
  REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_cache() FROM PUBLIC;
7155
+ REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_cache() FROM anon;
6962
7156
  GRANT EXECUTE ON FUNCTION trg_requeue_no_warehouse_cache() TO service_role;
6963
7157
  CREATE OR REPLACE FUNCTION public.trg_requeue_no_warehouse_connection()
6964
7158
  RETURNS trigger
@@ -6974,6 +7168,7 @@ BEGIN
6974
7168
  END $function$
6975
7169
  ;
6976
7170
  REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_connection() FROM PUBLIC;
7171
+ REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_connection() FROM anon;
6977
7172
  GRANT EXECUTE ON FUNCTION trg_requeue_no_warehouse_connection() TO service_role;
6978
7173
  CREATE OR REPLACE FUNCTION public.trg_requeue_no_warehouse_item_pref()
6979
7174
  RETURNS trigger
@@ -6989,6 +7184,7 @@ BEGIN
6989
7184
  END $function$
6990
7185
  ;
6991
7186
  REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_item_pref() FROM PUBLIC;
7187
+ REVOKE ALL ON FUNCTION trg_requeue_no_warehouse_item_pref() FROM anon;
6992
7188
  GRANT EXECUTE ON FUNCTION trg_requeue_no_warehouse_item_pref() TO service_role;
6993
7189
  CREATE OR REPLACE FUNCTION public.trg_requeue_skipped_no_price()
6994
7190
  RETURNS trigger
@@ -7028,6 +7224,7 @@ EXCEPTION WHEN OTHERS THEN
7028
7224
  END $function$
7029
7225
  ;
7030
7226
  REVOKE ALL ON FUNCTION trg_requeue_skipped_no_price() FROM PUBLIC;
7227
+ REVOKE ALL ON FUNCTION trg_requeue_skipped_no_price() FROM anon;
7031
7228
  GRANT EXECUTE ON FUNCTION trg_requeue_skipped_no_price() TO service_role;
7032
7229
  CREATE OR REPLACE FUNCTION public.trg_stock_structure_recompute_ins()
7033
7230
  RETURNS trigger
@@ -7048,6 +7245,7 @@ BEGIN
7048
7245
  END $function$
7049
7246
  ;
7050
7247
  REVOKE ALL ON FUNCTION trg_stock_structure_recompute_ins() FROM PUBLIC;
7248
+ REVOKE ALL ON FUNCTION trg_stock_structure_recompute_ins() FROM anon;
7051
7249
  GRANT EXECUTE ON FUNCTION trg_stock_structure_recompute_ins() TO service_role;
7052
7250
  CREATE OR REPLACE FUNCTION public.trg_stock_structure_recompute_upd()
7053
7251
  RETURNS trigger
@@ -7071,6 +7269,7 @@ BEGIN
7071
7269
  END $function$
7072
7270
  ;
7073
7271
  REVOKE ALL ON FUNCTION trg_stock_structure_recompute_upd() FROM PUBLIC;
7272
+ REVOKE ALL ON FUNCTION trg_stock_structure_recompute_upd() FROM anon;
7074
7273
  GRANT EXECUTE ON FUNCTION trg_stock_structure_recompute_upd() TO service_role;
7075
7274
  CREATE OR REPLACE FUNCTION public.trg_structure_change_recompute()
7076
7275
  RETURNS trigger
@@ -7106,6 +7305,7 @@ BEGIN
7106
7305
  END $function$
7107
7306
  ;
7108
7307
  REVOKE ALL ON FUNCTION trg_structure_change_recompute() FROM PUBLIC;
7308
+ REVOKE ALL ON FUNCTION trg_structure_change_recompute() FROM anon;
7109
7309
  GRANT EXECUTE ON FUNCTION trg_structure_change_recompute() TO service_role;
7110
7310
  CREATE OR REPLACE FUNCTION public.trg_trade_item_drafts_autolink_fn()
7111
7311
  RETURNS trigger
@@ -7137,8 +7337,11 @@ BEGIN
7137
7337
  END $function$
7138
7338
  ;
7139
7339
  REVOKE ALL ON FUNCTION trg_trade_item_drafts_autolink_fn() FROM PUBLIC;
7140
- GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO PUBLIC;
7141
- GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO anon;
7340
+ REVOKE ALL ON FUNCTION trg_trade_item_drafts_autolink_fn() FROM anon;
7341
+ REVOKE EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() FROM PUBLIC;
7342
+ GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO authenticated;
7343
+ GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO service_role;
7344
+ REVOKE EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() FROM anon;
7142
7345
  GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO authenticated;
7143
7346
  GRANT EXECUTE ON FUNCTION trg_trade_item_drafts_autolink_fn() TO service_role;
7144
7347
  CREATE OR REPLACE FUNCTION public.trg_trade_item_stock_auto_bom()
@@ -7210,6 +7413,7 @@ END;
7210
7413
  $function$
7211
7414
  ;
7212
7415
  REVOKE ALL ON FUNCTION trg_trade_item_stock_auto_bom() FROM PUBLIC;
7416
+ REVOKE ALL ON FUNCTION trg_trade_item_stock_auto_bom() FROM anon;
7213
7417
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_auto_bom() TO service_role;
7214
7418
  CREATE OR REPLACE FUNCTION public.trg_trade_item_stock_auto_bom_reverse()
7215
7419
  RETURNS trigger
@@ -7282,6 +7486,7 @@ END;
7282
7486
  $function$
7283
7487
  ;
7284
7488
  REVOKE ALL ON FUNCTION trg_trade_item_stock_auto_bom_reverse() FROM PUBLIC;
7489
+ REVOKE ALL ON FUNCTION trg_trade_item_stock_auto_bom_reverse() FROM anon;
7285
7490
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_auto_bom_reverse() TO service_role;
7286
7491
  CREATE OR REPLACE FUNCTION public.trg_trade_item_stock_log_change()
7287
7492
  RETURNS trigger
@@ -7355,6 +7560,7 @@ EXCEPTION WHEN others THEN
7355
7560
  END $function$
7356
7561
  ;
7357
7562
  REVOKE ALL ON FUNCTION trg_trade_item_stock_log_change() FROM PUBLIC;
7563
+ REVOKE ALL ON FUNCTION trg_trade_item_stock_log_change() FROM anon;
7358
7564
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_log_change() TO service_role;
7359
7565
  CREATE OR REPLACE FUNCTION public.trg_trade_item_stock_reserve_fn()
7360
7566
  RETURNS trigger
@@ -7368,8 +7574,11 @@ BEGIN
7368
7574
  END $function$
7369
7575
  ;
7370
7576
  REVOKE ALL ON FUNCTION trg_trade_item_stock_reserve_fn() FROM PUBLIC;
7371
- GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO PUBLIC;
7372
- GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO anon;
7577
+ REVOKE ALL ON FUNCTION trg_trade_item_stock_reserve_fn() FROM anon;
7578
+ REVOKE EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() FROM PUBLIC;
7579
+ GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO authenticated;
7580
+ GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO service_role;
7581
+ REVOKE EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() FROM anon;
7373
7582
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO authenticated;
7374
7583
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_reserve_fn() TO service_role;
7375
7584
  CREATE OR REPLACE FUNCTION public.trg_trade_item_stock_zero_watch()
@@ -7422,6 +7631,7 @@ BEGIN
7422
7631
  END $function$
7423
7632
  ;
7424
7633
  REVOKE ALL ON FUNCTION trg_trade_item_stock_zero_watch() FROM PUBLIC;
7634
+ REVOKE ALL ON FUNCTION trg_trade_item_stock_zero_watch() FROM anon;
7425
7635
  GRANT EXECUTE ON FUNCTION trg_trade_item_stock_zero_watch() TO service_role;
7426
7636
  CREATE OR REPLACE FUNCTION public.trg_trade_items_cache_autolink_fn()
7427
7637
  RETURNS trigger
@@ -7451,8 +7661,11 @@ BEGIN
7451
7661
  END $function$
7452
7662
  ;
7453
7663
  REVOKE ALL ON FUNCTION trg_trade_items_cache_autolink_fn() FROM PUBLIC;
7454
- GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO PUBLIC;
7455
- GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO anon;
7664
+ REVOKE ALL ON FUNCTION trg_trade_items_cache_autolink_fn() FROM anon;
7665
+ REVOKE EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() FROM PUBLIC;
7666
+ GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO authenticated;
7667
+ GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO service_role;
7668
+ REVOKE EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() FROM anon;
7456
7669
  GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO authenticated;
7457
7670
  GRANT EXECUTE ON FUNCTION trg_trade_items_cache_autolink_fn() TO service_role;
7458
7671
  CREATE OR REPLACE FUNCTION public.update_updated_at_column()
@@ -7462,7 +7675,8 @@ CREATE OR REPLACE FUNCTION public.update_updated_at_column()
7462
7675
  AS $function$ BEGIN NEW.updated_at = now(); RETURN NEW; END; $function$
7463
7676
  ;
7464
7677
  REVOKE ALL ON FUNCTION update_updated_at_column() FROM PUBLIC;
7465
- GRANT EXECUTE ON FUNCTION update_updated_at_column() TO anon;
7678
+ REVOKE ALL ON FUNCTION update_updated_at_column() FROM anon;
7679
+ REVOKE EXECUTE ON FUNCTION update_updated_at_column() FROM anon;
7466
7680
  GRANT EXECUTE ON FUNCTION update_updated_at_column() TO authenticated;
7467
7681
  GRANT EXECUTE ON FUNCTION update_updated_at_column() TO service_role;
7468
7682
  CREATE OR REPLACE FUNCTION public.voorraad_alert_floriday_not_updated(p_key text, p_qty numeric, p_order_id uuid, p_order_item_id uuid)
@@ -7473,6 +7687,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_alert_floriday_not_updated(p_key text
7473
7687
  AS $function$
7474
7688
  DECLARE v_code text; v_name text; v_nr text; v_tx bigint := -(txid_current() + 1125899906842624);
7475
7689
  BEGIN
7690
+ PERFORM public.voorraad_vereis('ingelogd', 'voorraad_alert_floriday_not_updated');
7476
7691
  SELECT p.article_number, p.product INTO v_code, v_name FROM public.products p
7477
7692
  WHERE lower(p.floriday_trade_item_id) = lower(p_key) OR p.trade_item_key = p_key OR 'product:' || p.id::text = p_key OR p.id::text = p_key
7478
7693
  LIMIT 1;
@@ -7488,6 +7703,7 @@ EXCEPTION WHEN others THEN RAISE WARNING '[floriday-not-updated-alert] %', SQLER
7488
7703
  END $function$
7489
7704
  ;
7490
7705
  REVOKE ALL ON FUNCTION voorraad_alert_floriday_not_updated(text,numeric,uuid,uuid) FROM PUBLIC;
7706
+ REVOKE ALL ON FUNCTION voorraad_alert_floriday_not_updated(text,numeric,uuid,uuid) FROM anon;
7491
7707
  GRANT EXECUTE ON FUNCTION voorraad_alert_floriday_not_updated(text,numeric,uuid,uuid) TO service_role;
7492
7708
  CREATE OR REPLACE FUNCTION public.voorraad_can_write()
7493
7709
  RETURNS boolean
@@ -7505,6 +7721,7 @@ AS $function$
7505
7721
  $function$
7506
7722
  ;
7507
7723
  REVOKE ALL ON FUNCTION voorraad_can_write() FROM PUBLIC;
7724
+ REVOKE ALL ON FUNCTION voorraad_can_write() FROM anon;
7508
7725
  GRANT EXECUTE ON FUNCTION voorraad_can_write() TO authenticated;
7509
7726
  GRANT EXECUTE ON FUNCTION voorraad_can_write() TO service_role;
7510
7727
  CREATE OR REPLACE FUNCTION public.voorraad_cleanup_old_rows()
@@ -7518,6 +7735,7 @@ declare
7518
7735
  v_dead int := 0;
7519
7736
  v_sent int := 0;
7520
7737
  begin
7738
+ PERFORM public.voorraad_vereis('server', 'voorraad_cleanup_old_rows');
7521
7739
  delete from public.floriday_continuous_stock_queue
7522
7740
  where status = 'superseded'
7523
7741
  and created_at < now() - interval '2 days';
@@ -7542,6 +7760,7 @@ end;
7542
7760
  $function$
7543
7761
  ;
7544
7762
  REVOKE ALL ON FUNCTION voorraad_cleanup_old_rows() FROM PUBLIC;
7763
+ REVOKE ALL ON FUNCTION voorraad_cleanup_old_rows() FROM anon;
7545
7764
  GRANT EXECUTE ON FUNCTION voorraad_cleanup_old_rows() TO service_role;
7546
7765
  CREATE OR REPLACE FUNCTION public.voorraad_consume_external_fulfilled(p_order_id uuid, p_ids text[], p_source text)
7547
7766
  RETURNS integer
@@ -7551,6 +7770,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_consume_external_fulfilled(p_order_id
7551
7770
  AS $function$
7552
7771
  DECLARE oi record; n integer := 0; v_norm text := public.normalize_order_source(COALESCE(p_source,'HO'));
7553
7772
  BEGIN
7773
+ PERFORM public.voorraad_vereis('ingelogd', 'voorraad_consume_external_fulfilled');
7554
7774
  IF p_order_id IS NULL OR COALESCE(array_length(p_ids,1),0) = 0 THEN RETURN 0; END IF;
7555
7775
  FOR oi IN SELECT id, source_line_key, quantity FROM logistics_active.order_items WHERE order_id = p_order_id LOOP
7556
7776
  IF oi.source_line_key IS NOT NULL AND oi.source_line_key = ANY(p_ids) THEN
@@ -7568,7 +7788,184 @@ BEGIN
7568
7788
  END $function$
7569
7789
  ;
7570
7790
  REVOKE ALL ON FUNCTION voorraad_consume_external_fulfilled(uuid,text[],text) FROM PUBLIC;
7791
+ REVOKE ALL ON FUNCTION voorraad_consume_external_fulfilled(uuid,text[],text) FROM anon;
7571
7792
  GRANT EXECUTE ON FUNCTION voorraad_consume_external_fulfilled(uuid,text[],text) TO service_role;
7793
+ CREATE OR REPLACE FUNCTION public.voorraad_correctie_1098(p_uitvoeren boolean DEFAULT false)
7794
+ RETURNS jsonb
7795
+ LANGUAGE plpgsql
7796
+ SECURITY DEFINER
7797
+ SET search_path TO 'public'
7798
+ AS $function$
7799
+ DECLARE
7800
+ v_cache_n bigint; v_cache_h text; v_queue_n bigint; v_queue_h text;
7801
+ v_hash_ok boolean := NULL;
7802
+ v_ins int := 0; v_upd int := 0; v_art int := 0; v_meld int := 0; v_prod int := 0;
7803
+ v_ex_ins jsonb := '[]'; v_ex_upd jsonb := '[]'; v_ex_art jsonb := '[]'; v_ex_meld jsonb := '[]';
7804
+ v_door text; r record; e record; v_res jsonb;
7805
+ BEGIN
7806
+ IF NOT public.voorraad_is_server() THEN
7807
+ RAISE EXCEPTION 'Alleen de server mag deze correctie uitvoeren' USING ERRCODE = '42501';
7808
+ END IF;
7809
+ PERFORM set_config('stock.change_source', 'CORRECTIE_1098', true);
7810
+ v_door := COALESCE(auth.uid()::text, 'systeem:' || session_user::text);
7811
+
7812
+ IF p_uitvoeren THEN
7813
+ SELECT count(*), md5(coalesce(string_agg(t::text, '|' ORDER BY t::text), '')) INTO v_cache_n, v_cache_h FROM public.floriday_trade_items_cache t;
7814
+ SELECT count(*), md5(coalesce(string_agg(q::text, '|' ORDER BY q::text), '')) INTO v_queue_n, v_queue_h FROM public.floriday_continuous_stock_queue q;
7815
+ END IF;
7816
+
7817
+ FOR r IN
7818
+ SELECT p.id, p.article_number, p.plants_per_crate, p.crates_per_layer, p.layers_per_cart,
7819
+ c.connection_id, c.data->'packingConfigurations' AS cfg
7820
+ FROM public.products p
7821
+ JOIN public.floriday_trade_items_cache c
7822
+ ON c.floriday_id = NULLIF(btrim(p.floriday_trade_item_id), '')
7823
+ AND COALESCE(c.is_deleted, false) = false
7824
+ ORDER BY p.id
7825
+ LOOP
7826
+ v_prod := v_prod + 1;
7827
+ -- Twijfel = overslaan en melden. Sleutel per verpakking: Floriday-id, of zonder id het volgnummer in Floriday (product_id + volgnr).
7828
+ IF jsonb_typeof(r.cfg) IS DISTINCT FROM 'array' OR jsonb_array_length(r.cfg) = 0 THEN
7829
+ v_meld := v_meld + 1; IF jsonb_array_length(v_ex_meld) < 5 THEN v_ex_meld := v_ex_meld || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'reden', 'geen verpakkingen in Floriday'); END IF; CONTINUE;
7830
+ END IF;
7831
+ IF (SELECT count(*) FROM public.floriday_trade_items_cache c2 WHERE c2.floriday_id = (SELECT NULLIF(btrim(floriday_trade_item_id),'') FROM public.products WHERE id = r.id) AND COALESCE(c2.is_deleted,false) = false) > 1 THEN
7832
+ v_meld := v_meld + 1; IF jsonb_array_length(v_ex_meld) < 5 THEN v_ex_meld := v_ex_meld || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'reden', 'in meer dan één koppeling'); END IF; CONTINUE;
7833
+ END IF;
7834
+ IF (SELECT count(*) FROM jsonb_array_elements(r.cfg) x WHERE COALESCE((x->>'primary')::boolean, false)) <> 1 THEN
7835
+ v_meld := v_meld + 1; IF jsonb_array_length(v_ex_meld) < 5 THEN v_ex_meld := v_ex_meld || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'reden', 'niet precies één primaire'); END IF; CONTINUE;
7836
+ END IF;
7837
+ IF EXISTS (SELECT 1 FROM jsonb_array_elements(r.cfg) x
7838
+ WHERE COALESCE(x->>'piecesPerPackage','') !~ '^[1-9][0-9]*$'
7839
+ OR COALESCE(x->>'packagesPerLayer','') !~ '^[1-9][0-9]*$'
7840
+ OR COALESCE(x->>'layersPerLoadCarrier','') !~ '^[1-9][0-9]*$'
7841
+ OR (x#>>'{package,vbnPackageCode}' IS NOT NULL AND x#>>'{package,vbnPackageCode}' !~ '^[0-9]+$'))
7842
+ OR (SELECT count(DISTINCT COALESCE(NULLIF(x->>'packingConfigurationId',''), NULLIF(x->>'id',''), '#' || o)) FROM jsonb_array_elements(r.cfg) WITH ORDINALITY t(x, o)) <> jsonb_array_length(r.cfg) THEN
7843
+ v_meld := v_meld + 1; IF jsonb_array_length(v_ex_meld) < 5 THEN v_ex_meld := v_ex_meld || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'reden', 'veld ontbreekt of ongeldig'); END IF; CONTINUE;
7844
+ END IF;
7845
+ IF EXISTS (SELECT 1 FROM public.product_packings pp WHERE pp.product_id = r.id
7846
+ AND COALESCE(pp.floriday_packing_id, '#' || pp.sort_order) NOT IN
7847
+ (SELECT COALESCE(NULLIF(x->>'packingConfigurationId',''), NULLIF(x->>'id',''), '#' || o) FROM jsonb_array_elements(r.cfg) WITH ORDINALITY t(x, o)))
7848
+ OR EXISTS (SELECT 1 FROM public.product_packings pp WHERE pp.product_id = r.id
7849
+ GROUP BY COALESCE(pp.floriday_packing_id, '#' || pp.sort_order) HAVING count(*) > 1) THEN
7850
+ v_meld := v_meld + 1; IF jsonb_array_length(v_ex_meld) < 5 THEN v_ex_meld := v_ex_meld || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'reden', 'lokale verpakking niet in Floriday (blijft staan)'); END IF; CONTINUE;
7851
+ END IF;
7852
+
7853
+ SELECT x INTO e FROM jsonb_array_elements(r.cfg) x WHERE COALESCE((x->>'primary')::boolean, false);
7854
+ IF (r.plants_per_crate, r.crates_per_layer, r.layers_per_cart) IS DISTINCT FROM
7855
+ ((e.x->>'piecesPerPackage')::int, (e.x->>'packagesPerLayer')::int, (e.x->>'layersPerLoadCarrier')::int) THEN
7856
+ v_art := v_art + 1;
7857
+ IF jsonb_array_length(v_ex_art) < 5 THEN
7858
+ v_ex_art := v_ex_art || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number,
7859
+ 'oud', concat_ws('/', r.plants_per_crate, r.crates_per_layer, r.layers_per_cart),
7860
+ 'nieuw', concat_ws('/', e.x->>'piecesPerPackage', e.x->>'packagesPerLayer', e.x->>'layersPerLoadCarrier'));
7861
+ END IF;
7862
+ END IF;
7863
+
7864
+ FOR e IN
7865
+ SELECT n.*, pp.id AS pp_id, to_jsonb(pp) AS pp_row
7866
+ FROM (
7867
+ SELECT o AS sort_order,
7868
+ NULLIF(COALESCE(NULLIF(x->>'packingConfigurationId',''), x->>'id'), '') AS fpid,
7869
+ COALESCE(NULLIF(x->>'packingConfigurationId',''), NULLIF(x->>'id',''), '#' || o) AS k,
7870
+ (x#>>'{package,vbnPackageCode}')::int AS vbn,
7871
+ x#>>'{package,customPackageId}' AS cpid,
7872
+ (SELECT f.id FROM public.fust_types f WHERE f.connection_id IS NULL AND f.vbn_code IS NOT NULL
7873
+ AND f.vbn_code::text = x#>>'{package,vbnPackageCode}' ORDER BY f.id LIMIT 1) AS fust,
7874
+ x->>'loadCarrier' AS lc,
7875
+ (x->>'piecesPerPackage')::int AS pcs,
7876
+ (x->>'packagesPerLayer')::int AS ppl,
7877
+ (x->>'layersPerLoadCarrier')::int AS lay,
7878
+ COALESCE((x->>'primary')::boolean, false) AS prim,
7879
+ COALESCE(ARRAY(SELECT jsonb_array_elements_text(CASE WHEN jsonb_typeof(x->'allowedCustomerOrganizationIds') = 'array' THEN x->'allowedCustomerOrganizationIds' ELSE '[]'::jsonb END)), '{}'::text[]) AS cust
7880
+ FROM jsonb_array_elements(r.cfg) WITH ORDINALITY t(x, o)
7881
+ ) n
7882
+ LEFT JOIN public.product_packings pp ON pp.product_id = r.id AND COALESCE(pp.floriday_packing_id, '#' || pp.sort_order) = n.k
7883
+ ORDER BY n.prim, n.sort_order
7884
+ LOOP
7885
+ IF e.pp_id IS NULL THEN
7886
+ v_ins := v_ins + 1;
7887
+ IF jsonb_array_length(v_ex_ins) < 5 THEN
7888
+ v_ex_ins := v_ex_ins || jsonb_build_object('product_id', r.id, 'artikelcode', r.article_number, 'floriday_packing_id', e.fpid, 'volgnr', e.sort_order,
7889
+ 'nieuw', concat_ws('/', e.pcs, e.ppl, e.lay) || CASE WHEN e.prim THEN ' (primair)' ELSE '' END);
7890
+ END IF;
7891
+ IF p_uitvoeren THEN
7892
+ INSERT INTO public.product_packings(product_id, source, floriday_packing_id, vbn_package_code, custom_package_id, fust_type_id,
7893
+ load_carrier, pieces_per_package, packages_per_layer, layers_per_load_carrier, is_primary, customer_organization_ids, sort_order)
7894
+ VALUES (r.id, 'floriday', e.fpid, e.vbn, e.cpid, e.fust, e.lc, e.pcs, e.ppl, e.lay, e.prim, e.cust, e.sort_order);
7895
+ END IF;
7896
+ ELSIF (e.pp_row->>'source', (e.pp_row->>'vbn_package_code')::int, e.pp_row->>'custom_package_id', (e.pp_row->>'fust_type_id')::uuid,
7897
+ e.pp_row->>'load_carrier', (e.pp_row->>'pieces_per_package')::int, (e.pp_row->>'packages_per_layer')::int,
7898
+ (e.pp_row->>'layers_per_load_carrier')::int, (e.pp_row->>'is_primary')::boolean,
7899
+ ARRAY(SELECT jsonb_array_elements_text(e.pp_row->'customer_organization_ids')), (e.pp_row->>'sort_order')::int)
7900
+ IS DISTINCT FROM ('floriday', e.vbn, e.cpid, e.fust, e.lc, e.pcs, e.ppl, e.lay, e.prim, e.cust, e.sort_order::int) THEN
7901
+ v_upd := v_upd + 1;
7902
+ IF jsonb_array_length(v_ex_upd) < 5 THEN
7903
+ v_ex_upd := v_ex_upd || jsonb_build_object('id', e.pp_id, 'product_id', r.id, 'artikelcode', r.article_number,
7904
+ 'oud', concat_ws('/', e.pp_row->>'pieces_per_package', e.pp_row->>'packages_per_layer', e.pp_row->>'layers_per_load_carrier'),
7905
+ 'nieuw', concat_ws('/', e.pcs, e.ppl, e.lay));
7906
+ END IF;
7907
+ IF p_uitvoeren THEN
7908
+ UPDATE public.product_packings SET source = 'floriday', vbn_package_code = e.vbn, custom_package_id = e.cpid,
7909
+ fust_type_id = e.fust, load_carrier = e.lc, pieces_per_package = e.pcs, packages_per_layer = e.ppl,
7910
+ layers_per_load_carrier = e.lay, is_primary = e.prim, customer_organization_ids = e.cust,
7911
+ sort_order = e.sort_order, updated_at = now()
7912
+ WHERE id = e.pp_id;
7913
+ END IF;
7914
+ END IF;
7915
+ END LOOP;
7916
+ END LOOP;
7917
+
7918
+ IF p_uitvoeren THEN
7919
+ v_hash_ok := v_cache_n = (SELECT count(*) FROM public.floriday_trade_items_cache)
7920
+ AND v_cache_h = (SELECT md5(coalesce(string_agg(t::text, '|' ORDER BY t::text), '')) FROM public.floriday_trade_items_cache t)
7921
+ AND v_queue_n = (SELECT count(*) FROM public.floriday_continuous_stock_queue)
7922
+ AND v_queue_h = (SELECT md5(coalesce(string_agg(q::text, '|' ORDER BY q::text), '')) FROM public.floriday_continuous_stock_queue q);
7923
+ IF NOT v_hash_ok THEN
7924
+ RAISE EXCEPTION 'Floriday-kopie of wachtrij is gewijzigd; alles teruggedraaid' USING ERRCODE = 'P0001';
7925
+ END IF;
7926
+ END IF;
7927
+
7928
+ v_res := jsonb_build_object(
7929
+ 'uitgevoerd', p_uitvoeren,
7930
+ 'artikelen_bekeken', v_prod,
7931
+ 'toevoegen', jsonb_build_object('aantal', v_ins, 'voorbeelden', v_ex_ins),
7932
+ 'bijwerken', jsonb_build_object('aantal', v_upd, 'voorbeelden', v_ex_upd),
7933
+ 'artikelvelden', jsonb_build_object('aantal', v_art, 'voorbeelden', v_ex_art),
7934
+ 'meldingen', jsonb_build_object('aantal', v_meld, 'voorbeelden', v_ex_meld),
7935
+ 'floriday_kopie_en_wachtrij_ongewijzigd', v_hash_ok);
7936
+ INSERT INTO public.voorraad_correcties(correctie, uitgevoerd_door, proef, aantallen, hash_ok)
7937
+ VALUES ('1098', v_door, NOT p_uitvoeren, v_res - '{toevoegen,bijwerken,artikelvelden,meldingen}'::text[]
7938
+ || jsonb_build_object('toevoegen', v_ins, 'bijwerken', v_upd, 'artikelvelden', v_art, 'meldingen', v_meld), v_hash_ok);
7939
+ RETURN v_res;
7940
+ END $function$
7941
+ ;
7942
+ REVOKE ALL ON FUNCTION voorraad_correctie_1098(boolean) FROM PUBLIC;
7943
+ REVOKE ALL ON FUNCTION voorraad_correctie_1098(boolean) FROM anon;
7944
+ GRANT EXECUTE ON FUNCTION voorraad_correctie_1098(boolean) TO authenticated;
7945
+ GRANT EXECUTE ON FUNCTION voorraad_correctie_1098(boolean) TO service_role;
7946
+ CREATE OR REPLACE FUNCTION public.voorraad_correctie_status(p_correctie text DEFAULT '1098'::text)
7947
+ RETURNS jsonb
7948
+ LANGUAGE plpgsql
7949
+ STABLE SECURITY DEFINER
7950
+ SET search_path TO 'public'
7951
+ AS $function$
7952
+ DECLARE r record;
7953
+ BEGIN
7954
+ IF NOT (public.voorraad_is_server() OR auth.uid() IS NOT NULL) THEN
7955
+ RAISE EXCEPTION 'Niet ingelogd' USING ERRCODE = '42501';
7956
+ END IF;
7957
+ SELECT * INTO r FROM public.voorraad_correcties
7958
+ WHERE correctie = p_correctie AND NOT proef AND hash_ok IS TRUE
7959
+ ORDER BY uitgevoerd_op DESC LIMIT 1;
7960
+ IF NOT FOUND THEN RETURN jsonb_build_object('correctie', p_correctie, 'uitgevoerd', false); END IF;
7961
+ RETURN jsonb_build_object('correctie', p_correctie, 'uitgevoerd', true, 'laatst_op', r.uitgevoerd_op,
7962
+ 'door', r.uitgevoerd_door, 'aantallen', r.aantallen);
7963
+ END $function$
7964
+ ;
7965
+ REVOKE ALL ON FUNCTION voorraad_correctie_status(text) FROM PUBLIC;
7966
+ REVOKE ALL ON FUNCTION voorraad_correctie_status(text) FROM anon;
7967
+ GRANT EXECUTE ON FUNCTION voorraad_correctie_status(text) TO authenticated;
7968
+ GRANT EXECUTE ON FUNCTION voorraad_correctie_status(text) TO service_role;
7572
7969
  CREATE OR REPLACE FUNCTION public.voorraad_external_fulfilled_ids(p_cf jsonb)
7573
7970
  RETURNS text[]
7574
7971
  LANGUAGE sql
@@ -7581,8 +7978,11 @@ AS $function$
7581
7978
  $function$
7582
7979
  ;
7583
7980
  REVOKE ALL ON FUNCTION voorraad_external_fulfilled_ids(jsonb) FROM PUBLIC;
7584
- GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO PUBLIC;
7585
- GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO anon;
7981
+ REVOKE ALL ON FUNCTION voorraad_external_fulfilled_ids(jsonb) FROM anon;
7982
+ REVOKE EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) FROM PUBLIC;
7983
+ GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO authenticated;
7984
+ GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO service_role;
7985
+ REVOKE EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) FROM anon;
7586
7986
  GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO authenticated;
7587
7987
  GRANT EXECUTE ON FUNCTION voorraad_external_fulfilled_ids(jsonb) TO service_role;
7588
7988
  CREATE OR REPLACE FUNCTION public.voorraad_floriday_leads_key(p_key text)
@@ -7601,6 +8001,7 @@ AS $function$
7601
8001
  $function$
7602
8002
  ;
7603
8003
  REVOKE ALL ON FUNCTION voorraad_floriday_leads_key(text) FROM PUBLIC;
8004
+ REVOKE ALL ON FUNCTION voorraad_floriday_leads_key(text) FROM anon;
7604
8005
  GRANT EXECUTE ON FUNCTION voorraad_floriday_leads_key(text) TO service_role;
7605
8006
  CREATE OR REPLACE FUNCTION public.voorraad_hook_base_url()
7606
8007
  RETURNS text
@@ -7610,6 +8011,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_hook_base_url()
7610
8011
  AS $function$
7611
8012
  DECLARE v_target text; v_shell text; v_old text; v_probe text; v_last text; v_status int;
7612
8013
  BEGIN
8014
+ PERFORM public.voorraad_vereis('server', 'voorraad_hook_base_url');
7613
8015
  SELECT value INTO v_target FROM module_runtime_config WHERE key = 'voorraad_hook_target';
7614
8016
  SELECT NULLIF(rtrim(value,'/'),'') INTO v_shell FROM module_runtime_config WHERE key = 'shell_base_url';
7615
8017
  SELECT NULLIF(rtrim(value,'/'),'') INTO v_old FROM module_runtime_config WHERE key = 'voorraad_base_url';
@@ -7640,6 +8042,7 @@ BEGIN
7640
8042
  END $function$
7641
8043
  ;
7642
8044
  REVOKE ALL ON FUNCTION voorraad_hook_base_url() FROM PUBLIC;
8045
+ REVOKE ALL ON FUNCTION voorraad_hook_base_url() FROM anon;
7643
8046
  GRANT EXECUTE ON FUNCTION voorraad_hook_base_url() TO service_role;
7644
8047
  CREATE OR REPLACE FUNCTION public.voorraad_hook_on(p_name text)
7645
8048
  RETURNS boolean
@@ -7653,6 +8056,7 @@ AS $function$
7653
8056
  $function$
7654
8057
  ;
7655
8058
  REVOKE ALL ON FUNCTION voorraad_hook_on(text) FROM PUBLIC;
8059
+ REVOKE ALL ON FUNCTION voorraad_hook_on(text) FROM anon;
7656
8060
  GRANT EXECUTE ON FUNCTION voorraad_hook_on(text) TO service_role;
7657
8061
  CREATE OR REPLACE FUNCTION public.voorraad_hook_post(p_path text, p_timeout integer DEFAULT 5000)
7658
8062
  RETURNS void
@@ -7662,6 +8066,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_hook_post(p_path text, p_timeout inte
7662
8066
  AS $function$
7663
8067
  DECLARE v_base text; v_key text;
7664
8068
  BEGIN
8069
+ PERFORM public.voorraad_vereis('server', 'voorraad_hook_post');
7665
8070
  v_base := public.voorraad_hook_base_url();
7666
8071
  SELECT value INTO v_key FROM module_runtime_config WHERE key = 'voorraad_hook_apikey';
7667
8072
  IF COALESCE(v_base,'') = '' OR COALESCE(v_key,'') = '' THEN
@@ -7674,6 +8079,7 @@ BEGIN
7674
8079
  END $function$
7675
8080
  ;
7676
8081
  REVOKE ALL ON FUNCTION voorraad_hook_post(text,integer) FROM PUBLIC;
8082
+ REVOKE ALL ON FUNCTION voorraad_hook_post(text,integer) FROM anon;
7677
8083
  GRANT EXECUTE ON FUNCTION voorraad_hook_post(text,integer) TO service_role;
7678
8084
  CREATE OR REPLACE FUNCTION public.voorraad_hook_switch_jobs()
7679
8085
  RETURNS trigger
@@ -7706,7 +8112,76 @@ EXCEPTION WHEN OTHERS THEN
7706
8112
  END $function$
7707
8113
  ;
7708
8114
  REVOKE ALL ON FUNCTION voorraad_hook_switch_jobs() FROM PUBLIC;
8115
+ REVOKE ALL ON FUNCTION voorraad_hook_switch_jobs() FROM anon;
7709
8116
  GRANT EXECUTE ON FUNCTION voorraad_hook_switch_jobs() TO service_role;
8117
+ CREATE OR REPLACE FUNCTION public.voorraad_install_check()
8118
+ RETURNS jsonb
8119
+ LANGUAGE plpgsql
8120
+ STABLE SECURITY DEFINER
8121
+ SET search_path TO 'public'
8122
+ AS $function$
8123
+ DECLARE v_f text[] := ARRAY['_floriday_queue_cleanup_batch','_migrate_rewrite_stock_key','_stock_import_caller','apply_fust_stock_mutation','apply_stock_consumption','apply_stock_reservation','autolink_product_to_floriday','backfill_open_order_reservations','calculate_floriday_desired_stock','calculate_structure_available','canonicalize_trade_item_stock_key','check_product_structure','claim_floriday_base_supply','claim_floriday_stock_queue','cleanup_floriday_stock_queue','cleanup_voorraad_module_history','complete_floriday_base_supply','complete_floriday_stock_queue','complete_floriday_stock_queue_outcome','consume_bom_for_production','consume_order_item','drain_inventory_recompute_queue','enqueue_floriday_continuous_stock','enqueue_floriday_continuous_stock_after_warehouse_preference','enqueue_structure_recompute','ensure_inventory_recompute_drain','ensure_trade_item_stock_row','ensure_trade_item_stock_row_key','fcsq_block_disabled','fcsq_fallback_supersede','fcsq_wake_base_supply','find_trade_item_key','floriday_adopt_connection','floriday_autoheal_connections','floriday_capture_stock_snapshot','floriday_cleanup_stock_queue_v2','floriday_compact_stock_snapshots','floriday_default_owner','floriday_desired_stock_regression_check','floriday_ensure_inventory_settings','floriday_erp_leading_preview','floriday_fill_publish_horizon','floriday_follow_apply','floriday_ingest_sales_orders','floriday_leading_summary','floriday_make_erp_leading','floriday_norm_offer_forms','floriday_orphan_settings_count','floriday_publish_horizon_weeks','floriday_queue_erp_guard','floriday_queue_first_positive','floriday_recompute_inventory','floriday_relink_products','floriday_requeue_dead_letters','floriday_settings_change_recompute','floriday_settings_change_recompute_stmt','floriday_stock_change_recompute','floriday_stock_queue_supersede','floriday_takeover_apply','floriday_takeover_fetch_state','floriday_takeover_store_forms','floriday_takeover_undo','fust_negative_stock_report','fust_types_duplicate_guard','get_active_floriday_context','get_group_allocation_keys','get_group_head_key','get_product_stock','get_product_structure_totals','get_product_structure_totals_batch','inventory_inline_budget_ok','merge_products','normalize_order_source','process_inventory_recompute_queue','produce_designed_product','product_active_group_id','product_id_from_ref','product_is_set','product_label','product_member_group_ids','product_own_available','product_packings_derive','product_packings_replace','product_packings_sync_from_floriday','product_primary_pieces','product_set_depth_above','product_set_depth_below','product_structure_ancestors','product_structure_max_depth','product_structure_path','product_tray_stickers_touch','product_type','promote_trade_item_key','recompute_all_reserved_stock','recompute_order_status','recompute_reserved_for_order','recompute_reserved_stock','requeue_skipped_stock_rows','reset_stalled_floriday_stock_queue','resolve_group_allocation','resolve_group_member_stock_key','resolve_product_id_for_item','resolve_stock_trade_item_key','reverse_production','run_floriday_base_supply_process','run_floriday_continuous_stock_sync','run_floriday_follow','run_floriday_stock_queue_process','run_floriday_stock_reconcile','run_logistics_tasks_dispatch','self_heal_floriday_links','set_module_runtime_config_updated_at','set_product_bom_tenant','set_product_stock','set_updated_at_order_fust_bookings','stock_import_cleanup','stock_import_create','stock_import_process_chunk','stock_import_stop','stock_import_undo_chunk','sync_order_item_fusten','sync_products_quantity_from_stock','touch_fust_types_updated_at','trade_item_drafts_readonly','trade_item_prices_touch_updated_at','trade_item_stock_duplicates','trg_cart_numbers_sync_order_status_fn','trg_cart_session_consume_fn','trg_check_product_structure','trg_floriday_cache_relink_fn','trg_floriday_trade_items_autolink_fn','trg_order_items_autolink_fn','trg_order_items_fusten','trg_order_items_reserve_fn','trg_orders_cancel_release_fn','trg_orders_consume_on_complete_fn','trg_orders_default_phase_fn','trg_orders_external_fulfilled_fn','trg_orders_recompute_reserved_fn','trg_pgi_assign_sort_order','trg_pgi_order_taken_check','trg_process_recompute_on_commit','trg_product_packings_derive_fn','trg_products_autolink_fn','trg_products_floriday_link_enqueue','trg_products_seed_stock_fn','trg_requeue_no_warehouse_cache','trg_requeue_no_warehouse_connection','trg_requeue_no_warehouse_item_pref','trg_requeue_skipped_no_price','trg_stock_structure_recompute_ins','trg_stock_structure_recompute_upd','trg_structure_change_recompute','trg_trade_item_drafts_autolink_fn','trg_trade_item_stock_auto_bom','trg_trade_item_stock_auto_bom_reverse','trg_trade_item_stock_log_change','trg_trade_item_stock_reserve_fn','trg_trade_item_stock_zero_watch','trg_trade_items_cache_autolink_fn','update_updated_at_column','voorraad_alert_floriday_not_updated','voorraad_can_write','voorraad_cleanup_old_rows','voorraad_consume_external_fulfilled','voorraad_correctie_1098','voorraad_correctie_status','voorraad_external_fulfilled_ids','voorraad_floriday_leads_key','voorraad_hook_base_url','voorraad_hook_on','voorraad_hook_post','voorraad_hook_switch_jobs','voorraad_install_check','voorraad_is_server','voorraad_mark_floriday_sold_before_switch','voorraad_production_enabled','voorraad_schema_ddl','voorraad_touch_updated_at','voorraad_vereis','voorraad_week_is_past'];
8124
+ v_t text[] := ARRAY['aa_fcsq_erp_leading_guard@floriday_continuous_stock_queue','aa_fis_norm_offer_forms@floriday_inventory_settings','aa_pgi_assign_sort_order@product_group_items','fcsq_block_disabled@floriday_continuous_stock_queue','fcsq_wake_base_supply_ins@floriday_continuous_stock_queue','fcsq_wake_base_supply_upd@floriday_continuous_stock_queue','fust_stock_mutations_apply@fust_stock_mutations','fust_types_duplicate_guard@fust_types','fust_types_touch@fust_types','product_packings_derive_trg@product_packings','product_packings_updated_at@product_packings','set_product_bom_tenant_trigger@product_bom_items','trade_item_prices_set_updated_at@trade_item_prices','trg_cart_numbers_sync_order_status@cart_numbers','trg_cart_session_consume@cart_control_sessions','trg_check_product_structure@product_bom_items','trg_check_product_structure@product_group_items','trg_check_product_structure@product_groups','trg_fcs_queue_updated_at@floriday_continuous_stock_queue','trg_fcsq_fallback_supersede@floriday_continuous_stock_queue','trg_fcsq_supersede@floriday_continuous_stock_queue','trg_floriday_cache_relink@floriday_trade_items_cache','trg_floriday_ensure_inventory_settings@products','trg_floriday_gate_stock_queue@floriday_continuous_stock_queue','trg_floriday_settings_change_recompute_ins@floriday_inventory_settings','trg_floriday_settings_change_recompute_upd@floriday_inventory_settings','trg_floriday_stock_change_recompute@trade_item_stock','trg_floriday_takeover_runs_updated_at@floriday_takeover_runs','trg_floriday_trade_items_autolink@floriday_trade_items_cache','trg_fust_types_requeue_blocked@fust_types','trg_module_runtime_config_updated_at@module_runtime_config','trg_order_fust_bookings_updated_at@order_fust_bookings','trg_order_items_autolink@order_items','trg_order_items_fusten_aiud@order_items','trg_order_items_reserve@order_items','trg_orders_cancel_release@orders','trg_orders_consume_on_complete@orders','trg_orders_default_phase@orders','trg_orders_external_fulfilled@orders','trg_orders_recompute_reserved@orders','trg_prevent_duplicate_product_draft@trade_item_drafts','trg_product_tray_stickers_touch@product_tray_stickers','trg_products_autolink@products','trg_products_floriday_link_enqueue@products','trg_products_seed_stock@products','trg_requeue_no_warehouse_cache@floriday_trade_items_cache','trg_requeue_no_warehouse_connection@floriday_connections','trg_requeue_no_warehouse_item_pref@trade_item_warehouse_preferences','trg_requeue_skipped_no_price@products','trg_stock_mutation_alert@stock_mutation_log','trg_stock_structure_recompute_ins@trade_item_stock','trg_stock_structure_recompute_upd@trade_item_stock','trg_structure_change_recompute@product_bom_items','trg_structure_change_recompute@product_group_items','trg_structure_change_recompute@product_groups','trg_sync_layer_stock_from_trade_stock@trade_item_stock','trg_sync_products_quantity_from_stock_del@trade_item_stock','trg_sync_products_quantity_from_stock_iu@trade_item_stock','trg_trade_item_drafts_autolink@trade_item_drafts','trg_trade_item_drafts_readonly@trade_item_drafts','trg_trade_item_stock_canonical_key@trade_item_stock','trg_trade_item_stock_publish@trade_item_stock','trg_trade_item_stock_reserve@trade_item_stock','trg_trade_item_stock_updated_at@trade_item_stock','trg_trade_item_stock_zero_watch@trade_item_stock','trg_trade_item_supply_lines_touch@trade_item_supply_lines','trg_trade_item_warehouse_preference_enqueue_stock@trade_item_warehouse_preferences','trg_trade_items_cache_autolink@floriday_trade_items_cache','trg_voorraad_buffer_state_updated_at@voorraad_buffer_state','trg_voorraad_event_log_updated_at@voorraad_logistics_event_log','update_trade_item_drafts_updated_at@trade_item_drafts','update_trade_item_warehouse_preferences_updated_at@trade_item_warehouse_preferences','update_voorraad_custom_fields_updated_at@voorraad_custom_fields','update_voorraad_publish_jobs_updated_at@voorraad_publish_jobs','update_voorraad_publish_learnings_updated_at@voorraad_publish_learnings','update_voorraad_publish_steps_updated_at@voorraad_publish_steps','voorraad_hook_switch_jobs@module_runtime_config','zz_fcsq_first_positive@floriday_continuous_stock_queue'];
8125
+ v_p text[] := ARRAY['Authenticated can add learnings@voorraad_publish_learnings','Authenticated can delete voorraad custom fields@voorraad_custom_fields','Authenticated can insert vbn required characteristics@floriday_vbn_required_characteristics','Authenticated can insert voorraad custom fields@voorraad_custom_fields','Authenticated can read continuous stock cache@floriday_continuous_stock_cache','Authenticated can read learnings@voorraad_publish_learnings','Authenticated can read vbn required characteristics@floriday_vbn_required_characteristics','Authenticated can read voorraad custom fields@voorraad_custom_fields','Authenticated can update learnings@voorraad_publish_learnings','Authenticated can update vbn required characteristics@floriday_vbn_required_characteristics','Authenticated can update voorraad custom fields@voorraad_custom_fields','Authenticated delete trade_item_warehouse_preferences@trade_item_warehouse_preferences','Authenticated insert trade_item_warehouse_preferences@trade_item_warehouse_preferences','Authenticated select trade_item_warehouse_preferences@trade_item_warehouse_preferences','Authenticated update trade_item_warehouse_preferences@trade_item_warehouse_preferences','Eigen momentopnamen lezen@inventory_stock_snapshots','Eigen voorraadinstellingen beheren@floriday_inventory_settings','Eigenaar leest importporties@stock_import_chunks','Eigenaar leest importregels@stock_import_rows','Fust mutations delete@fust_stock_mutations','Fust mutations insert@fust_stock_mutations','Fust mutations read@fust_stock_mutations','Fust mutations update@fust_stock_mutations','Fust types delete@fust_types','Fust types insert@fust_types','Fust types read@fust_types','Fust types update@fust_types','Ingelogde gebruikers kunnen bufferstatus lezen@voorraad_buffer_state','Ingelogde gebruikers kunnen de eventlog lezen@voorraad_logistics_event_log','Ingelogde gebruikers kunnen fustboekingen lezen@order_fust_bookings','Ingelogde gebruikers lezen drempels@inventory_recompute_limits','Ingelogde gebruikers lezen opruimlogboek@structure_cleanup_log','Ingelogde gebruikers lezen opruimruns@floriday_queue_cleanup_runs','Ingelogden beheren traystickers@product_tray_stickers','Ingelogden lezen herberekenwachtrij@inventory_recompute_queue','Ingelogden lezen voorraadmeldingen@stock_integrity_alerts','Ingelogden markeren voorraadmeldingen als gezien@stock_integrity_alerts','Own queue rows select@floriday_continuous_stock_queue','Owner delete trade_item_drafts@trade_item_drafts','Owner insert trade_item_drafts@trade_item_drafts','Owner select trade_item_drafts@trade_item_drafts','Owner update trade_item_drafts@trade_item_drafts','Signed-in users read reconcile runs@floriday_reconcile_runs','Stock delete@trade_item_stock','Stock insert@trade_item_stock','Stock read@trade_item_stock','Stock update@trade_item_stock','Synchronisatieposities lezen@floriday_sync_cursors','Users can insert own publish attempts@voorraad_publish_attempts','Users can read own publish attempts@voorraad_publish_attempts','Users can read own stock mutations@stock_mutation_log','Users manage own import runs@stock_import_runs','Users manage own supply lines@trade_item_supply_lines','Users manage own trade item prices@trade_item_prices','Users manage their own publish jobs@voorraad_publish_jobs','Users manage their own publish steps@voorraad_publish_steps','Verwerkte orders lezen@floriday_sales_order_ingest','Voorraadschrijvers lezen overnameregels@floriday_takeover_items','Voorraadschrijvers lezen overnames@floriday_takeover_runs','authenticated can insert merge log@product_merge_log','authenticated can read merge log@product_merge_log','service role only@voorraad_media_upload_failures','product_packings_read@product_packings','product_packings_write@product_packings'];
8126
+ v_open text[] := ARRAY['voorraad_is_server','voorraad_vereis'];
8127
+ v_func jsonb; v_trig jsonb; v_pol jsonb;
8128
+ BEGIN
8129
+ IF NOT public.voorraad_is_server() THEN
8130
+ RAISE EXCEPTION 'Alleen de server mag de installatiecontrole uitvoeren' USING ERRCODE = '42501';
8131
+ END IF;
8132
+ SELECT jsonb_agg(x ORDER BY x->>'functie', x->>'argumenten') INTO v_func FROM (
8133
+ SELECT jsonb_build_object('functie', n.f, 'argumenten', pg_get_function_identity_arguments(p.oid), 'aanwezig', p.oid IS NOT NULL,
8134
+ 'soort', CASE WHEN p.oid IS NULL THEN NULL WHEN pg_get_function_result(p.oid) = 'trigger' THEN 'trigger'
8135
+ WHEN p.provolatile = 'i' THEN 'rekenhulp' WHEN l.lanname = 'sql' THEN 'sql' ELSE 'plpgsql' END,
8136
+ 'interne_controle', CASE WHEN p.oid IS NULL THEN NULL
8137
+ WHEN n.f = ANY(v_open) THEN false
8138
+ ELSE p.prosrc ~* 'voorraad_vereis\(|voorraad_is_server\(|42501|auth\.uid\(\)|auth\.role\(\)|voorraad_can_write\(|_stock_import_caller\(' END,
8139
+ 'controle_niveau', substring(p.prosrc from 'voorraad_vereis\(''([a-z]+)'''),
8140
+ 'anon_uitvoerrecht', CASE WHEN p.oid IS NULL THEN NULL ELSE has_function_privilege('anon', p.oid, 'EXECUTE') END,
8141
+ 'authenticated_uitvoerrecht', CASE WHEN p.oid IS NULL THEN NULL ELSE has_function_privilege('authenticated', p.oid, 'EXECUTE') END) x
8142
+ FROM unnest(v_f) n(f)
8143
+ LEFT JOIN pg_proc p ON p.proname = n.f AND p.pronamespace = 'public'::regnamespace
8144
+ LEFT JOIN pg_language l ON l.oid = p.prolang) s;
8145
+ SELECT jsonb_agg(jsonb_build_object('trigger', split_part(t, '@', 1), 'tabel', split_part(t, '@', 2),
8146
+ 'aanwezig', EXISTS (SELECT 1 FROM pg_trigger g WHERE NOT g.tgisinternal AND g.tgname = split_part(t, '@', 1)
8147
+ AND g.tgrelid = to_regclass('public.' || split_part(t, '@', 2)))) ORDER BY t) INTO v_trig FROM unnest(v_t) t;
8148
+ SELECT jsonb_agg(jsonb_build_object('policy', split_part(t, '@', 1), 'tabel', split_part(t, '@', 2),
8149
+ 'aanwezig', EXISTS (SELECT 1 FROM pg_policies x WHERE x.schemaname = 'public' AND x.policyname = split_part(t, '@', 1)
8150
+ AND x.tablename = split_part(t, '@', 2))) ORDER BY t) INTO v_pol FROM unnest(v_p) t;
8151
+ RETURN jsonb_build_object(
8152
+ 'samenvatting', jsonb_build_object(
8153
+ 'functies', jsonb_array_length(v_func),
8154
+ 'functies_ontbrekend', (SELECT count(*) FROM jsonb_array_elements(v_func) e WHERE NOT (e->>'aanwezig')::boolean),
8155
+ 'functies_zonder_controle_plpgsql', (SELECT count(*) FROM jsonb_array_elements(v_func) e WHERE e->>'soort' = 'plpgsql' AND NOT COALESCE((e->>'interne_controle')::boolean, false)),
8156
+ 'triggers_ontbrekend', (SELECT count(*) FROM jsonb_array_elements(v_trig) e WHERE NOT (e->>'aanwezig')::boolean),
8157
+ 'policies_ontbrekend', (SELECT count(*) FROM jsonb_array_elements(v_pol) e WHERE NOT (e->>'aanwezig')::boolean),
8158
+ 'bewust_open', 'geen pickscherm/scanner-functies zonder inlog in Voorraad'),
8159
+ 'correctie_1098', public.voorraad_correctie_status('1098'),
8160
+ 'functies', v_func, 'triggers', v_trig, 'policies', v_pol);
8161
+ END $function$
8162
+ ;
8163
+ REVOKE ALL ON FUNCTION voorraad_install_check() FROM PUBLIC;
8164
+ REVOKE ALL ON FUNCTION voorraad_install_check() FROM anon;
8165
+ GRANT EXECUTE ON FUNCTION voorraad_install_check() TO authenticated;
8166
+ GRANT EXECUTE ON FUNCTION voorraad_install_check() TO service_role;
8167
+ CREATE OR REPLACE FUNCTION public.voorraad_is_server()
8168
+ RETURNS boolean
8169
+ LANGUAGE sql
8170
+ STABLE
8171
+ SET search_path TO 'public'
8172
+ AS $function$
8173
+ SELECT COALESCE(NULLIF(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role', '') = 'service_role'
8174
+ OR session_user::text <> 'authenticator'
8175
+ $function$
8176
+ ;
8177
+ REVOKE ALL ON FUNCTION voorraad_is_server() FROM PUBLIC;
8178
+ REVOKE ALL ON FUNCTION voorraad_is_server() FROM anon;
8179
+ REVOKE EXECUTE ON FUNCTION voorraad_is_server() FROM PUBLIC;
8180
+ GRANT EXECUTE ON FUNCTION voorraad_is_server() TO authenticated;
8181
+ GRANT EXECUTE ON FUNCTION voorraad_is_server() TO service_role;
8182
+ GRANT EXECUTE ON FUNCTION voorraad_is_server() TO anon;
8183
+ GRANT EXECUTE ON FUNCTION voorraad_is_server() TO authenticated;
8184
+ GRANT EXECUTE ON FUNCTION voorraad_is_server() TO service_role;
7710
8185
  CREATE OR REPLACE FUNCTION public.voorraad_mark_floriday_sold_before_switch(p_product_id uuid)
7711
8186
  RETURNS integer
7712
8187
  LANGUAGE plpgsql
@@ -7715,6 +8190,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_mark_floriday_sold_before_switch(p_pr
7715
8190
  AS $function$
7716
8191
  DECLARE r record; n int := 0; v_key text;
7717
8192
  BEGIN
8193
+ PERFORM public.voorraad_vereis('ingelogd', 'voorraad_mark_floriday_sold_before_switch');
7718
8194
  SELECT COALESCE(NULLIF(btrim(p.floriday_trade_item_id),''), p.trade_item_key, 'product:'||p.id::text) INTO v_key
7719
8195
  FROM public.products p WHERE p.id = p_product_id;
7720
8196
  FOR r IN
@@ -7735,6 +8211,7 @@ BEGIN
7735
8211
  END $function$
7736
8212
  ;
7737
8213
  REVOKE ALL ON FUNCTION voorraad_mark_floriday_sold_before_switch(uuid) FROM PUBLIC;
8214
+ REVOKE ALL ON FUNCTION voorraad_mark_floriday_sold_before_switch(uuid) FROM anon;
7738
8215
  GRANT EXECUTE ON FUNCTION voorraad_mark_floriday_sold_before_switch(uuid) TO service_role;
7739
8216
  CREATE OR REPLACE FUNCTION public.voorraad_production_enabled()
7740
8217
  RETURNS boolean
@@ -7746,8 +8223,11 @@ AS $function$
7746
8223
  $function$
7747
8224
  ;
7748
8225
  REVOKE ALL ON FUNCTION voorraad_production_enabled() FROM PUBLIC;
7749
- GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO PUBLIC;
7750
- GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO anon;
8226
+ REVOKE ALL ON FUNCTION voorraad_production_enabled() FROM anon;
8227
+ REVOKE EXECUTE ON FUNCTION voorraad_production_enabled() FROM PUBLIC;
8228
+ GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO authenticated;
8229
+ GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO service_role;
8230
+ REVOKE EXECUTE ON FUNCTION voorraad_production_enabled() FROM anon;
7751
8231
  GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO authenticated;
7752
8232
  GRANT EXECUTE ON FUNCTION voorraad_production_enabled() TO service_role;
7753
8233
  CREATE OR REPLACE FUNCTION public.voorraad_schema_ddl(p_tables text[], p_functions text[])
@@ -7758,6 +8238,7 @@ CREATE OR REPLACE FUNCTION public.voorraad_schema_ddl(p_tables text[], p_functio
7758
8238
  AS $function$
7759
8239
  DECLARE o text := ''; r record; q text; g text;
7760
8240
  BEGIN
8241
+ PERFORM public.voorraad_vereis('server', 'voorraad_schema_ddl');
7761
8242
  -- reeksen
7762
8243
  FOR r IN SELECT DISTINCT substring(pg_get_expr(d.adbin, d.adrelid) from 'nextval\(''(?:public\.)?([^'']+)''') AS s
7763
8244
  FROM pg_attrdef d JOIN pg_class c ON c.oid = d.adrelid JOIN pg_namespace n ON n.oid = c.relnamespace
@@ -7850,6 +8331,7 @@ BEGIN
7850
8331
  END $function$
7851
8332
  ;
7852
8333
  REVOKE ALL ON FUNCTION voorraad_schema_ddl(text[],text[]) FROM PUBLIC;
8334
+ REVOKE ALL ON FUNCTION voorraad_schema_ddl(text[],text[]) FROM anon;
7853
8335
  GRANT EXECUTE ON FUNCTION voorraad_schema_ddl(text[],text[]) TO service_role;
7854
8336
  CREATE OR REPLACE FUNCTION public.voorraad_touch_updated_at()
7855
8337
  RETURNS trigger
@@ -7863,10 +8345,39 @@ END;
7863
8345
  $function$
7864
8346
  ;
7865
8347
  REVOKE ALL ON FUNCTION voorraad_touch_updated_at() FROM PUBLIC;
7866
- GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO PUBLIC;
7867
- GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO anon;
8348
+ REVOKE ALL ON FUNCTION voorraad_touch_updated_at() FROM anon;
8349
+ REVOKE EXECUTE ON FUNCTION voorraad_touch_updated_at() FROM PUBLIC;
8350
+ GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO authenticated;
8351
+ GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO service_role;
8352
+ REVOKE EXECUTE ON FUNCTION voorraad_touch_updated_at() FROM anon;
7868
8353
  GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO authenticated;
7869
8354
  GRANT EXECUTE ON FUNCTION voorraad_touch_updated_at() TO service_role;
8355
+ CREATE OR REPLACE FUNCTION public.voorraad_vereis(p_niveau text, p_functie text)
8356
+ RETURNS void
8357
+ LANGUAGE plpgsql
8358
+ STABLE
8359
+ SET search_path TO 'public'
8360
+ AS $function$
8361
+ BEGIN
8362
+ -- Server (service_role of directe databaseverbinding) mag altijd.
8363
+ IF public.voorraad_is_server() THEN RETURN; END IF;
8364
+ -- Keten: binnen een trigger, of aangeroepen door een andere functie (de bovenste aanroep noemt deze functie niet).
8365
+ IF pg_trigger_depth() > 0 THEN RETURN; END IF;
8366
+ IF COALESCE(current_query(), '') !~* ('\m' || p_functie || '\M') THEN RETURN; END IF;
8367
+ IF p_niveau = 'ingelogd' AND auth.uid() IS NOT NULL THEN RETURN; END IF;
8368
+ RAISE EXCEPTION 'Geen toegang tot %: %', p_functie,
8369
+ CASE WHEN p_niveau = 'server' THEN 'alleen de server mag deze functie aanroepen' ELSE 'log eerst in' END
8370
+ USING ERRCODE = '42501';
8371
+ END $function$
8372
+ ;
8373
+ REVOKE ALL ON FUNCTION voorraad_vereis(text,text) FROM PUBLIC;
8374
+ REVOKE ALL ON FUNCTION voorraad_vereis(text,text) FROM anon;
8375
+ REVOKE EXECUTE ON FUNCTION voorraad_vereis(text,text) FROM PUBLIC;
8376
+ GRANT EXECUTE ON FUNCTION voorraad_vereis(text,text) TO authenticated;
8377
+ GRANT EXECUTE ON FUNCTION voorraad_vereis(text,text) TO service_role;
8378
+ GRANT EXECUTE ON FUNCTION voorraad_vereis(text,text) TO anon;
8379
+ GRANT EXECUTE ON FUNCTION voorraad_vereis(text,text) TO authenticated;
8380
+ GRANT EXECUTE ON FUNCTION voorraad_vereis(text,text) TO service_role;
7870
8381
  CREATE OR REPLACE FUNCTION public.voorraad_week_is_past(p_year integer, p_week integer)
7871
8382
  RETURNS boolean
7872
8383
  LANGUAGE sql
@@ -7880,6 +8391,7 @@ AS $function$
7880
8391
  $function$
7881
8392
  ;
7882
8393
  REVOKE ALL ON FUNCTION voorraad_week_is_past(integer,integer) FROM PUBLIC;
8394
+ REVOKE ALL ON FUNCTION voorraad_week_is_past(integer,integer) FROM anon;
7883
8395
  GRANT EXECUTE ON FUNCTION voorraad_week_is_past(integer,integer) TO authenticated;
7884
8396
  GRANT EXECUTE ON FUNCTION voorraad_week_is_past(integer,integer) TO service_role;
7885
8397
 
@@ -7915,6 +8427,7 @@ DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'trade_i
7915
8427
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'trade_item_supply_lines_pkey' AND conrelid = 'public.trade_item_supply_lines'::regclass) THEN ALTER TABLE public.trade_item_supply_lines ADD CONSTRAINT trade_item_supply_lines_pkey PRIMARY KEY (id); END IF; END $c$;
7916
8428
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'trade_item_warehouse_preferences_pkey' AND conrelid = 'public.trade_item_warehouse_preferences'::regclass) THEN ALTER TABLE public.trade_item_warehouse_preferences ADD CONSTRAINT trade_item_warehouse_preferences_pkey PRIMARY KEY (id); END IF; END $c$;
7917
8429
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'voorraad_buffer_state_pkey' AND conrelid = 'public.voorraad_buffer_state'::regclass) THEN ALTER TABLE public.voorraad_buffer_state ADD CONSTRAINT voorraad_buffer_state_pkey PRIMARY KEY (buffer_id); END IF; END $c$;
8430
+ DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'voorraad_correcties_pkey' AND conrelid = 'public.voorraad_correcties'::regclass) THEN ALTER TABLE public.voorraad_correcties ADD CONSTRAINT voorraad_correcties_pkey PRIMARY KEY (id); END IF; END $c$;
7918
8431
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'voorraad_custom_fields_pkey' AND conrelid = 'public.voorraad_custom_fields'::regclass) THEN ALTER TABLE public.voorraad_custom_fields ADD CONSTRAINT voorraad_custom_fields_pkey PRIMARY KEY (id); END IF; END $c$;
7919
8432
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'voorraad_logistics_event_log_pkey' AND conrelid = 'public.voorraad_logistics_event_log'::regclass) THEN ALTER TABLE public.voorraad_logistics_event_log ADD CONSTRAINT voorraad_logistics_event_log_pkey PRIMARY KEY (event_id); END IF; END $c$;
7920
8433
  DO $c$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'voorraad_media_upload_failures_pkey' AND conrelid = 'public.voorraad_media_upload_failures'::regclass) THEN ALTER TABLE public.voorraad_media_upload_failures ADD CONSTRAINT voorraad_media_upload_failures_pkey PRIMARY KEY (id); END IF; END $c$;
@@ -8035,155 +8548,157 @@ CREATE UNIQUE INDEX IF NOT EXISTS ux_stock_log_consumption_done ON public.stock_
8035
8548
 
8036
8549
  -- toegang
8037
8550
  ALTER TABLE public.floriday_continuous_stock_cache ENABLE ROW LEVEL SECURITY;
8038
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_cache TO anon;
8551
+ REVOKE ALL ON public.floriday_continuous_stock_cache FROM anon;
8039
8552
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_cache TO authenticated;
8040
8553
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_cache TO service_role;
8041
8554
  ALTER TABLE public.floriday_continuous_stock_queue ENABLE ROW LEVEL SECURITY;
8042
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_queue TO anon;
8555
+ REVOKE ALL ON public.floriday_continuous_stock_queue FROM anon;
8043
8556
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_queue TO authenticated;
8044
8557
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_continuous_stock_queue TO service_role;
8045
8558
  ALTER TABLE public.floriday_inventory_settings ENABLE ROW LEVEL SECURITY;
8046
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_inventory_settings TO anon;
8559
+ REVOKE ALL ON public.floriday_inventory_settings FROM anon;
8047
8560
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_inventory_settings TO authenticated;
8048
8561
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_inventory_settings TO service_role;
8049
8562
  ALTER TABLE public.floriday_queue_cleanup_runs ENABLE ROW LEVEL SECURITY;
8050
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_queue_cleanup_runs TO anon;
8563
+ REVOKE ALL ON public.floriday_queue_cleanup_runs FROM anon;
8051
8564
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_queue_cleanup_runs TO authenticated;
8052
8565
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_queue_cleanup_runs TO service_role;
8053
8566
  ALTER TABLE public.floriday_reconcile_runs ENABLE ROW LEVEL SECURITY;
8054
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_reconcile_runs TO anon;
8567
+ REVOKE ALL ON public.floriday_reconcile_runs FROM anon;
8055
8568
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_reconcile_runs TO authenticated;
8056
8569
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_reconcile_runs TO service_role;
8057
8570
  ALTER TABLE public.floriday_sales_order_ingest ENABLE ROW LEVEL SECURITY;
8058
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sales_order_ingest TO anon;
8571
+ REVOKE ALL ON public.floriday_sales_order_ingest FROM anon;
8059
8572
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sales_order_ingest TO authenticated;
8060
8573
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sales_order_ingest TO service_role;
8061
8574
  ALTER TABLE public.floriday_sync_cursors ENABLE ROW LEVEL SECURITY;
8062
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sync_cursors TO anon;
8575
+ REVOKE ALL ON public.floriday_sync_cursors FROM anon;
8063
8576
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sync_cursors TO authenticated;
8064
8577
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_sync_cursors TO service_role;
8065
8578
  ALTER TABLE public.floriday_takeover_items ENABLE ROW LEVEL SECURITY;
8066
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_items TO anon;
8579
+ REVOKE ALL ON public.floriday_takeover_items FROM anon;
8067
8580
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_items TO authenticated;
8068
8581
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_items TO service_role;
8069
8582
  ALTER TABLE public.floriday_takeover_runs ENABLE ROW LEVEL SECURITY;
8070
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_runs TO anon;
8583
+ REVOKE ALL ON public.floriday_takeover_runs FROM anon;
8071
8584
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_runs TO authenticated;
8072
8585
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_takeover_runs TO service_role;
8073
8586
  ALTER TABLE public.floriday_vbn_required_characteristics ENABLE ROW LEVEL SECURITY;
8074
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_vbn_required_characteristics TO anon;
8587
+ REVOKE ALL ON public.floriday_vbn_required_characteristics FROM anon;
8075
8588
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_vbn_required_characteristics TO authenticated;
8076
8589
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.floriday_vbn_required_characteristics TO service_role;
8077
8590
  ALTER TABLE public.fust_stock_mutations ENABLE ROW LEVEL SECURITY;
8078
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_stock_mutations TO anon;
8591
+ REVOKE ALL ON public.fust_stock_mutations FROM anon;
8079
8592
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_stock_mutations TO authenticated;
8080
8593
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_stock_mutations TO service_role;
8081
8594
  ALTER TABLE public.fust_types ENABLE ROW LEVEL SECURITY;
8082
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_types TO anon;
8595
+ REVOKE ALL ON public.fust_types FROM anon;
8083
8596
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_types TO authenticated;
8084
8597
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.fust_types TO service_role;
8085
8598
  ALTER TABLE public.inventory_recompute_limits ENABLE ROW LEVEL SECURITY;
8086
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_limits TO anon;
8599
+ REVOKE ALL ON public.inventory_recompute_limits FROM anon;
8087
8600
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_limits TO authenticated;
8088
8601
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_limits TO service_role;
8089
8602
  ALTER TABLE public.inventory_recompute_queue ENABLE ROW LEVEL SECURITY;
8090
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_queue TO anon;
8603
+ REVOKE ALL ON public.inventory_recompute_queue FROM anon;
8091
8604
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_queue TO authenticated;
8092
8605
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_recompute_queue TO service_role;
8093
8606
  ALTER TABLE public.inventory_stock_snapshots ENABLE ROW LEVEL SECURITY;
8094
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_stock_snapshots TO anon;
8607
+ REVOKE ALL ON public.inventory_stock_snapshots FROM anon;
8095
8608
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_stock_snapshots TO authenticated;
8096
8609
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.inventory_stock_snapshots TO service_role;
8097
8610
  ALTER TABLE public.order_fust_bookings ENABLE ROW LEVEL SECURITY;
8098
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.order_fust_bookings TO anon;
8611
+ REVOKE ALL ON public.order_fust_bookings FROM anon;
8099
8612
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.order_fust_bookings TO authenticated;
8100
8613
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.order_fust_bookings TO service_role;
8101
8614
  ALTER TABLE public.product_merge_log ENABLE ROW LEVEL SECURITY;
8102
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_merge_log TO anon;
8615
+ REVOKE ALL ON public.product_merge_log FROM anon;
8103
8616
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_merge_log TO authenticated;
8104
8617
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_merge_log TO service_role;
8105
8618
  ALTER TABLE public.product_packings ENABLE ROW LEVEL SECURITY;
8106
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_packings TO anon;
8619
+ REVOKE ALL ON public.product_packings FROM anon;
8107
8620
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_packings TO authenticated;
8108
8621
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_packings TO service_role;
8109
8622
  ALTER TABLE public.product_tray_stickers ENABLE ROW LEVEL SECURITY;
8110
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_tray_stickers TO anon;
8623
+ REVOKE ALL ON public.product_tray_stickers FROM anon;
8111
8624
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_tray_stickers TO authenticated;
8112
8625
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.product_tray_stickers TO service_role;
8113
8626
  ALTER TABLE public.stock_import_chunks ENABLE ROW LEVEL SECURITY;
8114
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_chunks TO anon;
8627
+ REVOKE ALL ON public.stock_import_chunks FROM anon;
8115
8628
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_chunks TO authenticated;
8116
8629
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_chunks TO service_role;
8117
8630
  ALTER TABLE public.stock_import_rows ENABLE ROW LEVEL SECURITY;
8118
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_rows TO anon;
8631
+ REVOKE ALL ON public.stock_import_rows FROM anon;
8119
8632
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_rows TO authenticated;
8120
8633
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_rows TO service_role;
8121
8634
  ALTER TABLE public.stock_import_runs ENABLE ROW LEVEL SECURITY;
8122
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_runs TO anon;
8635
+ REVOKE ALL ON public.stock_import_runs FROM anon;
8123
8636
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_runs TO authenticated;
8124
8637
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_import_runs TO service_role;
8125
8638
  ALTER TABLE public.stock_integrity_alerts ENABLE ROW LEVEL SECURITY;
8126
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_integrity_alerts TO anon;
8639
+ REVOKE ALL ON public.stock_integrity_alerts FROM anon;
8127
8640
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_integrity_alerts TO authenticated;
8128
8641
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_integrity_alerts TO service_role;
8129
8642
  ALTER TABLE public.stock_mutation_log ENABLE ROW LEVEL SECURITY;
8130
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_mutation_log TO anon;
8643
+ REVOKE ALL ON public.stock_mutation_log FROM anon;
8131
8644
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_mutation_log TO authenticated;
8132
8645
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.stock_mutation_log TO service_role;
8133
8646
  ALTER TABLE public.structure_cleanup_log ENABLE ROW LEVEL SECURITY;
8134
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.structure_cleanup_log TO anon;
8647
+ REVOKE ALL ON public.structure_cleanup_log FROM anon;
8135
8648
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.structure_cleanup_log TO authenticated;
8136
8649
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.structure_cleanup_log TO service_role;
8137
8650
  ALTER TABLE public.trade_item_drafts ENABLE ROW LEVEL SECURITY;
8138
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_drafts TO anon;
8651
+ REVOKE ALL ON public.trade_item_drafts FROM anon;
8139
8652
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_drafts TO authenticated;
8140
8653
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_drafts TO service_role;
8141
8654
  ALTER TABLE public.trade_item_prices ENABLE ROW LEVEL SECURITY;
8142
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_prices TO anon;
8655
+ REVOKE ALL ON public.trade_item_prices FROM anon;
8143
8656
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_prices TO authenticated;
8144
8657
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_prices TO service_role;
8145
8658
  ALTER TABLE public.trade_item_stock ENABLE ROW LEVEL SECURITY;
8146
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_stock TO anon;
8659
+ REVOKE ALL ON public.trade_item_stock FROM anon;
8147
8660
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_stock TO authenticated;
8148
8661
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_stock TO service_role;
8149
8662
  ALTER TABLE public.trade_item_supply_lines ENABLE ROW LEVEL SECURITY;
8150
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_supply_lines TO anon;
8663
+ REVOKE ALL ON public.trade_item_supply_lines FROM anon;
8151
8664
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_supply_lines TO authenticated;
8152
8665
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_supply_lines TO service_role;
8153
8666
  ALTER TABLE public.trade_item_warehouse_preferences ENABLE ROW LEVEL SECURITY;
8154
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_warehouse_preferences TO anon;
8667
+ REVOKE ALL ON public.trade_item_warehouse_preferences FROM anon;
8155
8668
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_warehouse_preferences TO authenticated;
8156
8669
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.trade_item_warehouse_preferences TO service_role;
8157
8670
  ALTER TABLE public.voorraad_buffer_state ENABLE ROW LEVEL SECURITY;
8158
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_buffer_state TO anon;
8671
+ REVOKE ALL ON public.voorraad_buffer_state FROM anon;
8159
8672
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_buffer_state TO authenticated;
8160
8673
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_buffer_state TO service_role;
8674
+ ALTER TABLE public.voorraad_correcties ENABLE ROW LEVEL SECURITY;
8675
+ GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_correcties TO service_role;
8161
8676
  ALTER TABLE public.voorraad_custom_fields ENABLE ROW LEVEL SECURITY;
8162
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_custom_fields TO anon;
8677
+ REVOKE ALL ON public.voorraad_custom_fields FROM anon;
8163
8678
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_custom_fields TO authenticated;
8164
8679
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_custom_fields TO service_role;
8165
8680
  ALTER TABLE public.voorraad_logistics_event_log ENABLE ROW LEVEL SECURITY;
8166
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_logistics_event_log TO anon;
8681
+ REVOKE ALL ON public.voorraad_logistics_event_log FROM anon;
8167
8682
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_logistics_event_log TO authenticated;
8168
8683
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_logistics_event_log TO service_role;
8169
8684
  ALTER TABLE public.voorraad_media_upload_failures ENABLE ROW LEVEL SECURITY;
8170
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_media_upload_failures TO anon;
8685
+ REVOKE ALL ON public.voorraad_media_upload_failures FROM anon;
8171
8686
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_media_upload_failures TO authenticated;
8172
8687
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_media_upload_failures TO service_role;
8173
8688
  ALTER TABLE public.voorraad_publish_attempts ENABLE ROW LEVEL SECURITY;
8174
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_attempts TO anon;
8689
+ REVOKE ALL ON public.voorraad_publish_attempts FROM anon;
8175
8690
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_attempts TO authenticated;
8176
8691
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_attempts TO service_role;
8177
8692
  ALTER TABLE public.voorraad_publish_jobs ENABLE ROW LEVEL SECURITY;
8178
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_jobs TO anon;
8693
+ REVOKE ALL ON public.voorraad_publish_jobs FROM anon;
8179
8694
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_jobs TO authenticated;
8180
8695
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_jobs TO service_role;
8181
8696
  ALTER TABLE public.voorraad_publish_learnings ENABLE ROW LEVEL SECURITY;
8182
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_learnings TO anon;
8697
+ REVOKE ALL ON public.voorraad_publish_learnings FROM anon;
8183
8698
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_learnings TO authenticated;
8184
8699
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_learnings TO service_role;
8185
8700
  ALTER TABLE public.voorraad_publish_steps ENABLE ROW LEVEL SECURITY;
8186
- GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_steps TO anon;
8701
+ REVOKE ALL ON public.voorraad_publish_steps FROM anon;
8187
8702
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_steps TO authenticated;
8188
8703
  GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON public.voorraad_publish_steps TO service_role;
8189
8704
  DROP POLICY IF EXISTS "Authenticated can read continuous stock cache" ON public.floriday_continuous_stock_cache;