@flowselections/pick-schermen-kwekers 1.0.70 → 1.0.74
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.
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +24 -7
- package/dist-lib/hooks/usePickQueue.d.ts +2 -0
- package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
- package/dist-lib/hooks/usePickQueue.js +6 -1
- package/dist-lib/integrations/supabase/types.d.ts +470 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pickBackoff.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickBackoff.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickBackoff.test.js +10 -0
- package/dist-lib/lib/__tests__/pickLoadOrder.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickLoadOrder.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickLoadOrder.test.js +37 -0
- package/dist-lib/lib/__tests__/pickSharedCart.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickSharedCart.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickSharedCart.test.js +14 -0
- package/dist-lib/lib/pick159.d.ts.map +1 -1
- package/dist-lib/lib/pick159.js +1 -0
- package/dist-lib/lib/pickApi.d.ts +2 -0
- package/dist-lib/lib/pickApi.d.ts.map +1 -1
- package/dist-lib/lib/pickApi.js +16 -0
- package/dist-lib/lib/pickBackoff.d.ts +12 -0
- package/dist-lib/lib/pickBackoff.d.ts.map +1 -0
- package/dist-lib/lib/pickBackoff.js +16 -0
- package/dist-lib/lib/pickCartResults.d.ts +1 -1
- package/dist-lib/lib/pickCartResults.d.ts.map +1 -1
- package/dist-lib/lib/pickCartResults.js +5 -2
- package/dist-lib/lib/pickLoadOrder.d.ts +15 -0
- package/dist-lib/lib/pickLoadOrder.d.ts.map +1 -0
- package/dist-lib/lib/pickLoadOrder.js +13 -0
- package/package.json +1 -1
- package/schema/pickschermen.sql +234 -19
package/schema/pickschermen.sql
CHANGED
|
@@ -338,6 +338,8 @@ CREATE TABLE IF NOT EXISTS public.pick_sync_state (
|
|
|
338
338
|
);
|
|
339
339
|
|
|
340
340
|
ALTER TABLE public.pick_sync_state ENABLE ROW LEVEL SECURITY;
|
|
341
|
+
ALTER TABLE public.pick_sync_state ADD COLUMN IF NOT EXISTS sync_requested_at timestamptz;
|
|
342
|
+
ALTER TABLE public.pick_sync_state ADD COLUMN IF NOT EXISTS last_duration_ms integer;
|
|
341
343
|
|
|
342
344
|
ALTER TABLE public.pick_queue
|
|
343
345
|
ADD COLUMN IF NOT EXISTS printed_cart_ids jsonb NOT NULL DEFAULT '[]'::jsonb;
|
|
@@ -601,7 +603,11 @@ BEGIN
|
|
|
601
603
|
END IF;
|
|
602
604
|
|
|
603
605
|
PERFORM public.logistics_cancel_stale_cart_pick_rows(v_ids);
|
|
604
|
-
|
|
606
|
+
-- 1.0.73: geen eigen, ongeknepen Engine-sync meer. Verzoek vastleggen en de
|
|
607
|
+
-- gedeelde afgeknepen sync laten draaien (één Engine-sync per ronde). Is die
|
|
608
|
+
-- al bezig, dan pakt de volgende aanroep het verzoek op.
|
|
609
|
+
UPDATE public.pick_sync_state SET sync_requested_at = now(), updated_at = now() WHERE id;
|
|
610
|
+
PERFORM public.pick_sync_queue_throttled(_min_seconds => 5);
|
|
605
611
|
|
|
606
612
|
UPDATE public.pick_buffer_event_cursor
|
|
607
613
|
SET last_event_at = GREATEST(last_event_at, v_max), updated_at = now()
|
|
@@ -990,6 +996,81 @@ CREATE OR REPLACE FUNCTION public.pick_complete_print_cart(p_device_key text, _q
|
|
|
990
996
|
SET search_path TO 'public'
|
|
991
997
|
AS $function$ BEGIN PERFORM public.pick_device_check(p_device_key, NULL, _queue_item_id::uuid, _cart_id::text, NULL, NULL); RETURN public.pick_complete_print_cart(_queue_item_id => _queue_item_id, _printer_id => _printer_id, _session_id => _session_id, _cart_id => _cart_id); END $function$;
|
|
992
998
|
|
|
999
|
+
CREATE OR REPLACE FUNCTION public.pick_read_shared_cart_messages(_queue_item_id uuid, _cart_ids text[])
|
|
1000
|
+
RETURNS jsonb
|
|
1001
|
+
LANGUAGE plpgsql
|
|
1002
|
+
STABLE SECURITY DEFINER
|
|
1003
|
+
SET search_path TO 'public'
|
|
1004
|
+
AS $function$
|
|
1005
|
+
-- 1.0.73: uitleg bij gedeelde karren voor het scherm (zelfde tekst als de printfuncties).
|
|
1006
|
+
-- Toegang: ingelogd of server via pick_device_gate; anoniem zonder sleutel 42501.
|
|
1007
|
+
DECLARE item public.pick_queue; c text; res jsonb := '{}'::jsonb; m text;
|
|
1008
|
+
BEGIN
|
|
1009
|
+
PERFORM public.pick_device_check(NULL, NULL, _queue_item_id, NULL, NULL, NULL);
|
|
1010
|
+
SELECT * INTO item FROM public.pick_queue WHERE id = _queue_item_id;
|
|
1011
|
+
IF NOT FOUND OR _cart_ids IS NULL THEN RETURN res; END IF;
|
|
1012
|
+
FOREACH c IN ARRAY _cart_ids LOOP
|
|
1013
|
+
m := public.pick_shared_cart_message(c, item);
|
|
1014
|
+
IF m IS NOT NULL THEN res := res || jsonb_build_object(c, m); END IF;
|
|
1015
|
+
END LOOP;
|
|
1016
|
+
RETURN res;
|
|
1017
|
+
END $function$;
|
|
1018
|
+
|
|
1019
|
+
CREATE OR REPLACE FUNCTION public.pick_read_shared_cart_messages(p_device_key text, _queue_item_id uuid, _cart_ids text[])
|
|
1020
|
+
RETURNS jsonb
|
|
1021
|
+
LANGUAGE plpgsql
|
|
1022
|
+
STABLE SECURITY DEFINER
|
|
1023
|
+
SET search_path TO 'public'
|
|
1024
|
+
AS $function$
|
|
1025
|
+
DECLARE item public.pick_queue; c text; res jsonb := '{}'::jsonb; m text;
|
|
1026
|
+
BEGIN
|
|
1027
|
+
-- Sleutel geldig en regel hoort bij dit station, anders 42501.
|
|
1028
|
+
PERFORM public.pick_device_check(p_device_key, NULL, _queue_item_id, NULL, NULL, NULL);
|
|
1029
|
+
SELECT * INTO item FROM public.pick_queue WHERE id = _queue_item_id;
|
|
1030
|
+
IF NOT FOUND OR _cart_ids IS NULL THEN RETURN res; END IF;
|
|
1031
|
+
FOREACH c IN ARRAY _cart_ids LOOP
|
|
1032
|
+
m := public.pick_shared_cart_message(c, item);
|
|
1033
|
+
IF m IS NOT NULL THEN res := res || jsonb_build_object(c, m); END IF;
|
|
1034
|
+
END LOOP;
|
|
1035
|
+
RETURN res;
|
|
1036
|
+
END $function$;
|
|
1037
|
+
|
|
1038
|
+
CREATE OR REPLACE FUNCTION public.pick_shared_cart_message(_cart_id text, _item public.pick_queue)
|
|
1039
|
+
RETURNS text
|
|
1040
|
+
LANGUAGE plpgsql
|
|
1041
|
+
STABLE SECURITY INVOKER
|
|
1042
|
+
SET search_path TO 'public'
|
|
1043
|
+
AS $function$
|
|
1044
|
+
-- 1.0.73: eerste pakbon voor deze kar (op cart_id). Hoort die bij een andere
|
|
1045
|
+
-- order, dan uitleg met documentnaam en tijdstip (vestigingstijdzone); anders
|
|
1046
|
+
-- null zodat de bestaande melding blijft. Fout: ook null.
|
|
1047
|
+
DECLARE v_order text; v_naam text; v_eerste_order text; v_at timestamptz; v_tz text; v_tijd text := NULL;
|
|
1048
|
+
v_maand text[] := ARRAY['jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec'];
|
|
1049
|
+
BEGIN
|
|
1050
|
+
IF nullif(btrim(_cart_id), '') IS NULL THEN RETURN NULL; END IF;
|
|
1051
|
+
v_order := nullif(coalesce(_item.payload->>'orderId', _item.payload->>'order_id'), '');
|
|
1052
|
+
IF v_order IS NULL THEN RETURN NULL; END IF;
|
|
1053
|
+
SELECT pj.documentnaam, pj.created_at, pj.payload->>'order_id' INTO v_naam, v_at, v_eerste_order
|
|
1054
|
+
FROM public.print_jobs pj
|
|
1055
|
+
WHERE pj.documenttype = 'pakbon' AND pj.payload->>'cart_id' = _cart_id
|
|
1056
|
+
ORDER BY pj.created_at ASC LIMIT 1;
|
|
1057
|
+
IF v_naam IS NULL OR v_eerste_order IS NULL OR v_eerste_order = v_order THEN RETURN NULL; END IF;
|
|
1058
|
+
BEGIN
|
|
1059
|
+
IF to_regprocedure('public.logistics_opening_timezone()') IS NOT NULL THEN
|
|
1060
|
+
EXECUTE 'SELECT public.logistics_opening_timezone()' INTO v_tz;
|
|
1061
|
+
END IF;
|
|
1062
|
+
IF nullif(v_tz, '') IS NOT NULL THEN
|
|
1063
|
+
v_tijd := to_char(v_at AT TIME ZONE v_tz, 'FMDD') || ' '
|
|
1064
|
+
|| v_maand[extract(month FROM v_at AT TIME ZONE v_tz)::int] || ' '
|
|
1065
|
+
|| to_char(v_at AT TIME ZONE v_tz, 'HH24:MI');
|
|
1066
|
+
END IF;
|
|
1067
|
+
EXCEPTION WHEN others THEN v_tijd := NULL;
|
|
1068
|
+
END;
|
|
1069
|
+
RETURN 'Deze kar is al geprint (gedeelde kar, al geprint met ' || v_naam
|
|
1070
|
+
|| CASE WHEN v_tijd IS NULL THEN '' ELSE ', ' || v_tijd END || ').';
|
|
1071
|
+
EXCEPTION WHEN others THEN RETURN NULL;
|
|
1072
|
+
END $function$;
|
|
1073
|
+
|
|
993
1074
|
CREATE OR REPLACE FUNCTION public.pick_complete_print_cart(_queue_item_id uuid, _printer_id uuid, _session_id text, _cart_id text)
|
|
994
1075
|
RETURNS pick_queue
|
|
995
1076
|
LANGUAGE plpgsql
|
|
@@ -1024,7 +1105,8 @@ BEGIN
|
|
|
1024
1105
|
END IF;
|
|
1025
1106
|
|
|
1026
1107
|
IF COALESCE(item.printed_cart_ids, '[]'::jsonb) @> jsonb_build_array(_cart_id) THEN
|
|
1027
|
-
|
|
1108
|
+
-- 1.0.73: gedeelde kar krijgt uitleg met de eerste pakbon van de andere order.
|
|
1109
|
+
RAISE EXCEPTION '%', COALESCE(public.pick_shared_cart_message(_cart_id, item), 'Deze kar is al geprint.');
|
|
1028
1110
|
END IF;
|
|
1029
1111
|
|
|
1030
1112
|
BEGIN
|
|
@@ -1190,7 +1272,8 @@ BEGIN
|
|
|
1190
1272
|
IF next_cart_ids @> jsonb_build_array(requested_cart_id) THEN
|
|
1191
1273
|
skipped_count := skipped_count + 1;
|
|
1192
1274
|
INSERT INTO pg_temp.pick_batch_jobs(cart_id, cart_label, job_id, status, message)
|
|
1193
|
-
VALUES (requested_cart_id, selected_cart->>'cartLabel', NULL, 'already_printed',
|
|
1275
|
+
VALUES (requested_cart_id, selected_cart->>'cartLabel', NULL, 'already_printed',
|
|
1276
|
+
COALESCE(public.pick_shared_cart_message(requested_cart_id, item), 'al geprint; kies Herprint'));
|
|
1194
1277
|
CONTINUE;
|
|
1195
1278
|
END IF;
|
|
1196
1279
|
|
|
@@ -3794,26 +3877,29 @@ CREATE OR REPLACE FUNCTION public.pick_sync_queue_throttled(_min_seconds integer
|
|
|
3794
3877
|
SECURITY DEFINER
|
|
3795
3878
|
SET search_path TO 'public'
|
|
3796
3879
|
AS $function$
|
|
3797
|
-
DECLARE last_at timestamptz; needs_cleanup boolean; res jsonb; err text; prev_err text;
|
|
3880
|
+
DECLARE last_at timestamptz; needs_cleanup boolean; res jsonb; err text; prev_err text; req_at timestamptz; t0 timestamptz;
|
|
3798
3881
|
BEGIN
|
|
3799
3882
|
SELECT s.last_error INTO prev_err FROM public.pick_sync_state s WHERE s.id;
|
|
3800
3883
|
IF NOT pg_try_advisory_xact_lock(hashtext('pick_sync_queue')) THEN
|
|
3801
3884
|
RETURN jsonb_build_object('synced', false, 'reason', 'busy', 'error', prev_err);
|
|
3802
3885
|
END IF;
|
|
3803
3886
|
|
|
3804
|
-
SELECT s.last_sync_at, COALESCE(s.last_cleanup_at, 'epoch'::timestamptz) < now() - interval '6 hours'
|
|
3805
|
-
INTO last_at, needs_cleanup
|
|
3887
|
+
SELECT s.last_sync_at, COALESCE(s.last_cleanup_at, 'epoch'::timestamptz) < now() - interval '6 hours', s.sync_requested_at
|
|
3888
|
+
INTO last_at, needs_cleanup, req_at
|
|
3806
3889
|
FROM public.pick_sync_state s WHERE s.id FOR UPDATE;
|
|
3807
3890
|
|
|
3808
|
-
IF last_at IS NOT NULL AND last_at > now() - make_interval(secs => GREATEST(_min_seconds, 5))
|
|
3891
|
+
IF last_at IS NOT NULL AND last_at > now() - make_interval(secs => GREATEST(_min_seconds, 5))
|
|
3892
|
+
AND (req_at IS NULL OR req_at <= last_at) THEN
|
|
3809
3893
|
RETURN jsonb_build_object('synced', false, 'reason', 'throttled', 'last_sync_at', last_at, 'error', prev_err);
|
|
3810
3894
|
END IF;
|
|
3811
3895
|
|
|
3896
|
+
t0 := clock_timestamp();
|
|
3812
3897
|
res := to_jsonb(public.logistics_sync_pick_queue());
|
|
3813
3898
|
err := CASE WHEN jsonb_typeof(res) = 'object' THEN NULLIF(res->>'error', '') ELSE NULL END;
|
|
3814
3899
|
|
|
3815
3900
|
UPDATE public.pick_sync_state
|
|
3816
|
-
SET last_sync_at = now(), updated_at = now(),
|
|
3901
|
+
SET last_sync_at = now(), updated_at = now(), sync_requested_at = NULL,
|
|
3902
|
+
last_duration_ms = (extract(epoch FROM clock_timestamp() - t0) * 1000)::integer,
|
|
3817
3903
|
last_error = err, last_error_at = CASE WHEN err IS NULL THEN NULL ELSE now() END
|
|
3818
3904
|
WHERE id;
|
|
3819
3905
|
|
|
@@ -3826,7 +3912,7 @@ BEGIN
|
|
|
3826
3912
|
PERFORM public.pick_cleanup_maintenance();
|
|
3827
3913
|
END IF;
|
|
3828
3914
|
|
|
3829
|
-
RETURN jsonb_build_object('synced', true, 'last_sync_at', now());
|
|
3915
|
+
RETURN jsonb_build_object('synced', true, 'last_sync_at', now(), 'duur_ms', (extract(epoch FROM clock_timestamp() - t0) * 1000)::integer);
|
|
3830
3916
|
END $function$;
|
|
3831
3917
|
|
|
3832
3918
|
CREATE OR REPLACE FUNCTION public.pick_sync_queue_throttled(p_device_key text, _min_seconds integer DEFAULT 60)
|
|
@@ -3843,29 +3929,141 @@ CREATE OR REPLACE FUNCTION public.pick_touch_updated_at()
|
|
|
3843
3929
|
AS $function$
|
|
3844
3930
|
BEGIN NEW.updated_at = now(); RETURN NEW; END; $function$;
|
|
3845
3931
|
|
|
3932
|
+
CREATE OR REPLACE FUNCTION public.pick_queue_cart_plans(_queue_item_ids uuid[])
|
|
3933
|
+
RETURNS jsonb
|
|
3934
|
+
LANGUAGE plpgsql
|
|
3935
|
+
STABLE SECURITY DEFINER
|
|
3936
|
+
SET search_path TO 'public'
|
|
3937
|
+
AS $function$
|
|
3938
|
+
-- Set-based variant van pick_queue_cart_plan: het karplan wordt één keer per order
|
|
3939
|
+
-- opgebouwd en daarna per pickrij gesneden. Uitvoer: { "<queue-id>": {"plan":..} | {"error":..} }.
|
|
3940
|
+
DECLARE
|
|
3941
|
+
v_id uuid; item public.pick_queue; v_order_id uuid; v_key text; v_base jsonb; v_bases jsonb := '{}'::jsonb;
|
|
3942
|
+
v_orders uuid[]; v_oid uuid; v_plan jsonb; v_carts jsonb; v_seen jsonb; v_cart jsonb; v_onum text; v_ow jsonb;
|
|
3943
|
+
v_order_list jsonb; v_total integer; v_row_cart text; v_own jsonb; v_warnings jsonb; v_r jsonb;
|
|
3944
|
+
out jsonb := '{}'::jsonb;
|
|
3945
|
+
BEGIN
|
|
3946
|
+
IF _queue_item_ids IS NULL THEN RETURN out; END IF;
|
|
3947
|
+
IF cardinality(_queue_item_ids) > 200 THEN
|
|
3948
|
+
RAISE EXCEPTION 'pick_queue_cart_plans: maximaal 200 regels per aanroep';
|
|
3949
|
+
END IF;
|
|
3950
|
+
FOREACH v_id IN ARRAY _queue_item_ids LOOP
|
|
3951
|
+
BEGIN
|
|
3952
|
+
SELECT * INTO item FROM public.pick_queue WHERE id = v_id;
|
|
3953
|
+
IF NOT FOUND THEN RAISE EXCEPTION 'Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.' USING ERRCODE = 'P0002'; END IF;
|
|
3954
|
+
BEGIN v_order_id := nullif(coalesce(item.payload->>'orderId', item.payload->>'order_id'), '')::uuid;
|
|
3955
|
+
EXCEPTION WHEN invalid_text_representation THEN v_order_id := NULL; END;
|
|
3956
|
+
IF v_order_id IS NULL THEN RAISE EXCEPTION 'Geen order-id beschikbaar voor het karplan.'; END IF;
|
|
3957
|
+
v_key := v_order_id::text;
|
|
3958
|
+
|
|
3959
|
+
IF NOT (v_bases ? v_key) THEN
|
|
3960
|
+
BEGIN
|
|
3961
|
+
v_orders := public.pick_buffer_order_ids(v_order_id);
|
|
3962
|
+
IF v_orders IS NULL OR cardinality(v_orders) = 0 THEN v_orders := ARRAY[v_order_id]; END IF;
|
|
3963
|
+
v_carts := '[]'::jsonb; v_seen := '{}'::jsonb; v_order_list := '[]'::jsonb;
|
|
3964
|
+
FOREACH v_oid IN ARRAY v_orders LOOP
|
|
3965
|
+
v_plan := public.logistics_cart_slip_plan(v_oid);
|
|
3966
|
+
SELECT o.order_number INTO v_onum FROM public.orders o WHERE o.id = v_oid;
|
|
3967
|
+
v_ow := CASE WHEN jsonb_typeof(v_plan->'warnings') = 'array' THEN v_plan->'warnings' ELSE '[]'::jsonb END;
|
|
3968
|
+
v_order_list := v_order_list || jsonb_build_array(jsonb_build_object('orderId', v_oid, 'orderNumber', v_onum, 'warnings', v_ow));
|
|
3969
|
+
FOR v_cart IN SELECT c FROM jsonb_array_elements(COALESCE(v_plan->'carts', '[]'::jsonb)) AS c LOOP
|
|
3970
|
+
IF NOT (v_seen ? coalesce(v_cart->>'cartId', '')) THEN
|
|
3971
|
+
v_seen := v_seen || jsonb_build_object(coalesce(v_cart->>'cartId', ''), true);
|
|
3972
|
+
v_carts := v_carts || jsonb_build_array(public.logistics_cart_json_fixed(v_cart || jsonb_build_object('orderId', v_oid, 'orderNumber', v_onum)));
|
|
3973
|
+
END IF;
|
|
3974
|
+
END LOOP;
|
|
3975
|
+
END LOOP;
|
|
3976
|
+
SELECT coalesce(max((e->>'cartTotal')::int), jsonb_array_length(v_carts)) INTO v_total FROM jsonb_array_elements(v_carts) e;
|
|
3977
|
+
SELECT COALESCE(jsonb_agg(DISTINCT w.value), '[]'::jsonb) INTO v_warnings
|
|
3978
|
+
FROM jsonb_array_elements(v_order_list) o CROSS JOIN LATERAL jsonb_array_elements(o->'warnings') w;
|
|
3979
|
+
v_base := jsonb_build_object('isBuffer', cardinality(v_orders) > 1, 'total', v_total,
|
|
3980
|
+
'carts', v_carts, 'orders', v_order_list, 'warnings', v_warnings);
|
|
3981
|
+
EXCEPTION WHEN others THEN
|
|
3982
|
+
v_base := jsonb_build_object('error', SQLERRM);
|
|
3983
|
+
END;
|
|
3984
|
+
v_bases := v_bases || jsonb_build_object(v_key, v_base);
|
|
3985
|
+
END IF;
|
|
3986
|
+
|
|
3987
|
+
v_base := v_bases->v_key;
|
|
3988
|
+
IF v_base ? 'error' THEN RAISE EXCEPTION '%', v_base->>'error'; END IF;
|
|
3989
|
+
|
|
3990
|
+
v_row_cart := nullif(btrim(coalesce(item.payload->>'cartId', '')), '');
|
|
3991
|
+
v_own := NULL;
|
|
3992
|
+
IF v_row_cart IS NOT NULL THEN
|
|
3993
|
+
SELECT e INTO v_own FROM jsonb_array_elements(v_base->'carts') AS e WHERE e->>'cartId' = v_row_cart LIMIT 1;
|
|
3994
|
+
IF v_own IS NULL THEN RAISE EXCEPTION 'De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij.'; END IF;
|
|
3995
|
+
v_total := coalesce((v_own->>'cartTotal')::int, (v_base->>'total')::int);
|
|
3996
|
+
v_r := jsonb_build_object('orderId', v_order_id, 'isBuffer', v_base->'isBuffer',
|
|
3997
|
+
'totalCarts', v_total, 'cartTotal', v_total, 'rowCartId', v_row_cart,
|
|
3998
|
+
'carts', jsonb_build_array(v_own), 'orders', v_base->'orders',
|
|
3999
|
+
'warnings', CASE WHEN coalesce((v_own->>'cartSeq')::int, 1) = 1 THEN v_base->'warnings' ELSE '[]'::jsonb END,
|
|
4000
|
+
'wachtTot', item.payload->'wachtTot', 'wachtReden', item.payload->'wachtReden',
|
|
4001
|
+
'printbaar', coalesce((item.payload->>'printbaar')::boolean, true));
|
|
4002
|
+
ELSE
|
|
4003
|
+
v_r := jsonb_build_object('orderId', v_order_id, 'isBuffer', v_base->'isBuffer',
|
|
4004
|
+
'totalCarts', (v_base->>'total')::int, 'cartTotal', (v_base->>'total')::int,
|
|
4005
|
+
'carts', v_base->'carts', 'orders', v_base->'orders', 'warnings', v_base->'warnings');
|
|
4006
|
+
END IF;
|
|
4007
|
+
-- Zelfde aanvulling als pick_queue_cart_plan(uuid)
|
|
4008
|
+
v_r := v_r || jsonb_build_object(
|
|
4009
|
+
'cartCrates', CASE WHEN v_own IS NOT NULL THEN v_own->'cartCrates' END,
|
|
4010
|
+
'bufferCrates', CASE WHEN v_own IS NOT NULL THEN v_own->'bufferCrates' END,
|
|
4011
|
+
'departureAt', CASE WHEN v_own IS NOT NULL THEN v_own->'departureAt' END,
|
|
4012
|
+
'pickStartsAt', CASE WHEN v_own IS NOT NULL THEN v_own->'pickStartsAt' END,
|
|
4013
|
+
'releaseAt', CASE WHEN v_own IS NOT NULL THEN v_own->'releaseAt' END,
|
|
4014
|
+
'releaseReason', CASE WHEN v_own IS NOT NULL THEN v_own->'releaseReason' END);
|
|
4015
|
+
out := out || jsonb_build_object(v_id::text, jsonb_build_object('plan', v_r));
|
|
4016
|
+
EXCEPTION WHEN others THEN
|
|
4017
|
+
out := out || jsonb_build_object(v_id::text, jsonb_build_object('error', SQLERRM));
|
|
4018
|
+
END;
|
|
4019
|
+
END LOOP;
|
|
4020
|
+
RETURN out;
|
|
4021
|
+
END $function$;
|
|
4022
|
+
|
|
3846
4023
|
CREATE OR REPLACE FUNCTION public.pick_verify_rows(_rows jsonb)
|
|
3847
4024
|
RETURNS jsonb
|
|
3848
4025
|
LANGUAGE plpgsql
|
|
3849
4026
|
STABLE
|
|
3850
4027
|
SET search_path TO 'public'
|
|
3851
4028
|
AS $function$
|
|
3852
|
-
|
|
4029
|
+
-- Set-based: karplan één keer per order (pick_queue_cart_plans), Engine-status één keer per ref.
|
|
4030
|
+
DECLARE r jsonb; out jsonb := '[]'::jsonb; v_ids uuid[] := '{}'; v_plans jsonb := '{}'::jsonb;
|
|
4031
|
+
v_status_cache jsonb := '{}'::jsonb; v_status jsonb; v_ref text; v_err text; v_p jsonb; v_id uuid;
|
|
3853
4032
|
BEGIN
|
|
3854
4033
|
IF jsonb_typeof(_rows) <> 'array' THEN RETURN out; END IF;
|
|
3855
4034
|
IF jsonb_array_length(_rows) > 200 THEN
|
|
3856
4035
|
RAISE EXCEPTION 'pick_verify_rows: maximaal 200 regels per aanroep';
|
|
3857
4036
|
END IF;
|
|
3858
4037
|
FOR r IN SELECT * FROM jsonb_array_elements(_rows) LOOP
|
|
3859
|
-
|
|
4038
|
+
BEGIN v_id := (r->>'id')::uuid; EXCEPTION WHEN others THEN v_id := NULL; END;
|
|
4039
|
+
IF v_id IS NOT NULL THEN v_ids := v_ids || v_id; END IF;
|
|
4040
|
+
END LOOP;
|
|
4041
|
+
BEGIN
|
|
4042
|
+
v_plans := public.pick_queue_cart_plans(v_ids);
|
|
4043
|
+
EXCEPTION WHEN others THEN v_err := SQLERRM;
|
|
4044
|
+
END;
|
|
4045
|
+
FOR r IN SELECT * FROM jsonb_array_elements(_rows) LOOP
|
|
3860
4046
|
v_ref := NULLIF(r->>'ref', '');
|
|
3861
|
-
|
|
3862
|
-
|
|
3863
|
-
|
|
3864
|
-
|
|
4047
|
+
v_p := v_plans->(r->>'id');
|
|
4048
|
+
v_status := NULL;
|
|
4049
|
+
IF v_ref IS NOT NULL AND v_p IS NOT NULL AND NOT (v_p ? 'error') THEN
|
|
4050
|
+
IF v_status_cache ? v_ref THEN
|
|
4051
|
+
v_status := v_status_cache->v_ref;
|
|
4052
|
+
ELSE
|
|
4053
|
+
BEGIN
|
|
4054
|
+
v_status := to_jsonb(public.logistics_cart_plan_status(v_ref));
|
|
4055
|
+
EXCEPTION WHEN others THEN v_status := jsonb_build_object('__error', SQLERRM);
|
|
4056
|
+
END;
|
|
4057
|
+
v_status_cache := v_status_cache || jsonb_build_object(v_ref, coalesce(v_status, 'null'::jsonb));
|
|
3865
4058
|
END IF;
|
|
3866
|
-
|
|
3867
|
-
END;
|
|
3868
|
-
out := out || jsonb_build_array(jsonb_build_object(
|
|
4059
|
+
IF v_status = 'null'::jsonb THEN v_status := NULL; END IF;
|
|
4060
|
+
END IF;
|
|
4061
|
+
out := out || jsonb_build_array(jsonb_build_object(
|
|
4062
|
+
'id', r->>'id',
|
|
4063
|
+
'plan', CASE WHEN v_status ? '__error' THEN NULL ELSE v_p->'plan' END,
|
|
4064
|
+
'status', CASE WHEN v_status ? '__error' THEN NULL ELSE v_status END,
|
|
4065
|
+
'error', coalesce(v_err, v_p->>'error', v_status->>'__error',
|
|
4066
|
+
CASE WHEN v_p IS NULL THEN 'Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.' END)));
|
|
3869
4067
|
END LOOP;
|
|
3870
4068
|
RETURN out;
|
|
3871
4069
|
END $function$;
|
|
@@ -3928,6 +4126,22 @@ BEGIN
|
|
|
3928
4126
|
ELSE
|
|
3929
4127
|
v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: stickerbundel levert printopdrachten.');
|
|
3930
4128
|
END IF;
|
|
4129
|
+
-- 1.0.71: pickregels-controle set-based (één karplan per order).
|
|
4130
|
+
v_oid := to_regprocedure('public.pick_verify_rows(jsonb)');
|
|
4131
|
+
IF to_regprocedure('public.pick_queue_cart_plans(uuid[])') IS NULL OR v_oid IS NULL
|
|
4132
|
+
OR position('pick_queue_cart_plans' IN pg_get_functiondef(v_oid)) = 0 THEN
|
|
4133
|
+
v := v || jsonb_build_object('niveau','fout','tekst','Pickschermen: controle pickregels nog per kar; kan bij grote orders vastlopen (pick_queue_cart_plans ontbreekt).');
|
|
4134
|
+
ELSE
|
|
4135
|
+
v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: controle pickregels set-based (één karplan per order).');
|
|
4136
|
+
END IF;
|
|
4137
|
+
-- 1.0.73: bufferseintjes doen geen eigen Engine-sync; één gedeelde sync per ronde.
|
|
4138
|
+
v_oid := to_regprocedure('public.pick_apply_buffer_events()');
|
|
4139
|
+
IF v_oid IS NULL OR position('logistics_sync_pick_queue()' IN pg_get_functiondef(v_oid)) > 0
|
|
4140
|
+
OR NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='pick_sync_state' AND column_name='sync_requested_at') THEN
|
|
4141
|
+
v := v || jsonb_build_object('niveau','waarschuwing','tekst','Pickschermen: bufferseintjes synchroniseren nog apart; openen kan traag zijn.');
|
|
4142
|
+
ELSE
|
|
4143
|
+
v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: openen wacht niet op synchronisatie (één Engine-sync per ronde).');
|
|
4144
|
+
END IF;
|
|
3931
4145
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='order_items' AND column_name='needs_sticker') THEN
|
|
3932
4146
|
v := v || jsonb_build_object('niveau','waarschuwing','tekst','Pickschermen: stickervraag per orderregel niet leesbaar (order_items.needs_sticker ontbreekt, Verkoop).');
|
|
3933
4147
|
END IF;
|
|
@@ -3982,7 +4196,7 @@ BEGIN
|
|
|
3982
4196
|
FOREACH t IN ARRAY ARRAY['pick_buffer_event_cursor','pick_countries','pick_document_statuses','pick_document_types','pick_queue','pick_queue_locks','pick_screen_document_types','pick_settings','pick_station_devices','pick_station_heartbeats','pick_station_history','pick_station_logs','pick_station_pair_codes','pick_station_permissions','pick_station_printers','pick_station_screens','pick_station_signals','pick_station_tasks','pick_station_types','pick_station_users','pick_stations','pick_sync_state','pick_taken','pick_task_document_types'] LOOP
|
|
3983
4197
|
IF to_regclass('public.'||t) IS NULL THEN v_mis := v_mis || ('tabel '||t); END IF;
|
|
3984
4198
|
END LOOP;
|
|
3985
|
-
FOREACH t IN ARRAY string_to_array('_pick_job_of_station(uuid,uuid);_pick_printstatus_via_engine();_pick_station_for_cart(uuid);_pick_sticker_ids_for_cart(uuid);pick_active_printers();pick_active_printers(text);pick_apply_buffer_events();pick_apply_buffer_events(text);pick_assert_printable(pick_queue);pick_assert_station(text);pick_available_pick_days(integer);pick_available_pick_days(text,integer);pick_buffer_order_ids(uuid);pick_build_key_variants();pick_cart_breakdown(uuid);pick_claim_document(text,uuid,uuid,uuid,text,integer);pick_claim_document(uuid,uuid,uuid,text,integer);pick_claim_next_document(text,uuid,uuid,text,text,integer,date);pick_claim_next_document(uuid,uuid,text,text,integer,date);pick_cleanup_maintenance(integer,integer);pick_complete_print(text,uuid,uuid,text);pick_complete_print(uuid,uuid,text);pick_complete_print_cart(text,uuid,uuid,text,text);pick_complete_print_cart(uuid,uuid,text,text);pick_complete_print_carts(text,uuid,text,text[]);pick_complete_print_carts(uuid,text,text[]);pick_create_pair_code(uuid);pick_current_pick_day();pick_current_pick_day(text);pick_day_counts(text,uuid,uuid,date);pick_day_counts(uuid,uuid,date);pick_device_check(text,uuid,uuid,text,text,text);pick_device_gate(text);pick_device_key_required();pick_document_layout_data(uuid);pick_enqueue_print_job(text,uuid,uuid,text,boolean);pick_enqueue_print_job(text,uuid,uuid,text,boolean,text);pick_enqueue_print_job(uuid,uuid,text,boolean);pick_enqueue_print_job(uuid,uuid,text,boolean,text);pick_enqueue_print_job_from_cart(uuid,uuid,text,boolean,text,jsonb);pick_ensure_settings();pick_find_sent_elsewhere(uuid,text);pick_has_station_role();pick_is_reference_admin();pick_is_server();pick_key_hash(text);pick_mark_printed(text,uuid,text,text);pick_mark_printed(uuid,text,text);pick_order_context(uuid,text);pick_preview_job(text,text,uuid);pick_preview_job(text,uuid);pick_print_job_status(text,uuid);pick_print_job_status(uuid);pick_print_jobs_status(text,uuid[]);pick_print_jobs_status(uuid[]);pick_print_plekken();pick_print_plekken(text);pick_protect_required_reference_rows();pick_queue_apply_cart_breakdown();pick_queue_audit();pick_queue_cart_plan(text,uuid);pick_queue_cart_plan(uuid);pick_queue_cart_plan_v152(uuid);pick_queue_enforce_routing();pick_read_by_code(text,text,uuid);pick_read_country_counts(text,uuid,uuid);pick_read_locks(text,uuid);pick_read_print_job_uitwijk(text,uuid[]);pick_read_queue(text,uuid,uuid,text,text,uuid,boolean,boolean,text,jsonb,integer,integer);pick_read_station(text,text);pick_read_unscanned_earlier(text,uuid,text);pick_read_vroege_sticker_waarschuwing(text,uuid);pick_reference_data_status();pick_reference_data_status(text);pick_release_expired_locks();pick_release_expired_locks(text);pick_release_lock(text,uuid);pick_release_lock(uuid);pick_report_missing_cart_plan();pick_report_missing_cart_plan(text);pick_reprint_cart(text,uuid,text,text,integer);pick_reprint_cart(uuid,text,text,integer);pick_reprint_document(text,uuid,text,integer);pick_reprint_document(uuid,text,integer);pick_reset_print(text,uuid,text);pick_reset_print(text,uuid,text,text);pick_reset_print(uuid,text);pick_reset_print(uuid,text,text);pick_reset_print_job(text,uuid,text,text,uuid);pick_reset_print_job(uuid,text,text,uuid);pick_reset_print_jobs(text,uuid,text,uuid[],text[]);pick_reset_print_jobs(uuid,text,uuid[],text[]);pick_resolve_scan_code(text,text);pick_restore_to_queue(text,uuid,text);pick_restore_to_queue(uuid,text);pick_revoke_device(uuid);pick_role_allowed(text);pick_seed_reference_data();pick_set_station_print_plek(text,uuid,uuid);pick_set_station_print_plek(uuid,uuid);pick_signal_station(uuid);pick_signal_trg();pick_station_cleanup_print_plek();pick_station_dashboard();pick_station_dashboard(text);pick_station_devices_list(uuid);pick_station_print_plek(text,uuid);pick_station_print_plek(uuid);pick_station_print_plekken();pick_station_print_plekken(text);pick_station_slugify(text,uuid);pick_stations_set_slug();pick_sticker_past_controle(uuid);pick_sync_pick_day(date);pick_sync_pick_day(text,date);pick_sync_queue_throttled(integer);pick_sync_queue_throttled(text,integer);pick_touch_updated_at();pick_verify_rows(jsonb);pick_verify_rows(text,jsonb);pickschermen_install_check();pickschermen_missing_objects();pickstation_auto_send_status(text,text,uuid);pickstation_auto_send_status(text,uuid);pickstation_cart_sticker_state(text,text,uuid);pickstation_cart_sticker_state(text,uuid);pickstation_cart_sticker_states(text,text,uuid[]);pickstation_cart_sticker_states(text,uuid[]);pickstation_device_status(text,text);pickstation_document_for_order(text,text,uuid);pickstation_document_for_order(text,uuid);pickstation_get_orders_raw();pickstation_get_orders_raw(text);pickstation_get_planning_context();pickstation_get_planning_context(text);pickstation_get_settings();pickstation_get_settings(text);pickstation_log_print(text,text,text,text,text[],text);pickstation_log_print(text,text,text,text[],text);pickstation_logistics_barcode_lookup(text,text);pickstation_logistics_cart_plan_status(text,text);pickstation_logistics_cart_slip_plan(text,uuid);pickstation_logistics_is_pick_workday(text,date);pickstation_logistics_order_released(text,text);pickstation_logistics_pick_mode(text);pickstation_logistics_shipping_note_from_barcode(text,text,boolean,uuid);pickstation_logistics_working_hours_status(text);pickstation_order_sticker_meldingen(text,text,uuid);pickstation_order_sticker_meldingen(text,uuid);pickstation_pair_device(text,text,text);pickstation_print_status(text,text,uuid[]);pickstation_print_status(text,uuid[]);pickstation_resolve_delivery_orders(text,text[]);pickstation_resolve_delivery_orders(text[]);pickstation_set_cart_status(text,text,integer,text);pickstation_sticker_past_controle(text,text,uuid);pickstation_sticker_past_controle(text,uuid);pickstation_sticker_reprint(text,text,uuid,text);pickstation_sticker_reprint(text,uuid,text);sync_order_cart_totals()', ';') LOOP
|
|
4199
|
+
FOREACH t IN ARRAY string_to_array('_pick_job_of_station(uuid,uuid);_pick_printstatus_via_engine();_pick_station_for_cart(uuid);_pick_sticker_ids_for_cart(uuid);pick_active_printers();pick_active_printers(text);pick_apply_buffer_events();pick_apply_buffer_events(text);pick_assert_printable(pick_queue);pick_assert_station(text);pick_available_pick_days(integer);pick_available_pick_days(text,integer);pick_buffer_order_ids(uuid);pick_build_key_variants();pick_cart_breakdown(uuid);pick_claim_document(text,uuid,uuid,uuid,text,integer);pick_claim_document(uuid,uuid,uuid,text,integer);pick_claim_next_document(text,uuid,uuid,text,text,integer,date);pick_claim_next_document(uuid,uuid,text,text,integer,date);pick_cleanup_maintenance(integer,integer);pick_complete_print(text,uuid,uuid,text);pick_complete_print(uuid,uuid,text);pick_complete_print_cart(text,uuid,uuid,text,text);pick_complete_print_cart(uuid,uuid,text,text);pick_complete_print_carts(text,uuid,text,text[]);pick_complete_print_carts(uuid,text,text[]);pick_create_pair_code(uuid);pick_current_pick_day();pick_current_pick_day(text);pick_day_counts(text,uuid,uuid,date);pick_day_counts(uuid,uuid,date);pick_device_check(text,uuid,uuid,text,text,text);pick_device_gate(text);pick_device_key_required();pick_document_layout_data(uuid);pick_enqueue_print_job(text,uuid,uuid,text,boolean);pick_enqueue_print_job(text,uuid,uuid,text,boolean,text);pick_enqueue_print_job(uuid,uuid,text,boolean);pick_enqueue_print_job(uuid,uuid,text,boolean,text);pick_enqueue_print_job_from_cart(uuid,uuid,text,boolean,text,jsonb);pick_ensure_settings();pick_find_sent_elsewhere(uuid,text);pick_has_station_role();pick_is_reference_admin();pick_is_server();pick_key_hash(text);pick_mark_printed(text,uuid,text,text);pick_mark_printed(uuid,text,text);pick_order_context(uuid,text);pick_preview_job(text,text,uuid);pick_preview_job(text,uuid);pick_print_job_status(text,uuid);pick_print_job_status(uuid);pick_print_jobs_status(text,uuid[]);pick_print_jobs_status(uuid[]);pick_print_plekken();pick_print_plekken(text);pick_protect_required_reference_rows();pick_queue_apply_cart_breakdown();pick_queue_audit();pick_queue_cart_plan(text,uuid);pick_queue_cart_plan(uuid);pick_queue_cart_plan_v152(uuid);pick_queue_cart_plans(uuid[]);pick_queue_enforce_routing();pick_read_by_code(text,text,uuid);pick_read_country_counts(text,uuid,uuid);pick_read_locks(text,uuid);pick_read_print_job_uitwijk(text,uuid[]);pick_read_queue(text,uuid,uuid,text,text,uuid,boolean,boolean,text,jsonb,integer,integer);pick_read_station(text,text);pick_read_unscanned_earlier(text,uuid,text);pick_read_vroege_sticker_waarschuwing(text,uuid);pick_reference_data_status();pick_reference_data_status(text);pick_release_expired_locks();pick_release_expired_locks(text);pick_release_lock(text,uuid);pick_release_lock(uuid);pick_report_missing_cart_plan();pick_report_missing_cart_plan(text);pick_reprint_cart(text,uuid,text,text,integer);pick_reprint_cart(uuid,text,text,integer);pick_reprint_document(text,uuid,text,integer);pick_reprint_document(uuid,text,integer);pick_reset_print(text,uuid,text);pick_reset_print(text,uuid,text,text);pick_reset_print(uuid,text);pick_reset_print(uuid,text,text);pick_reset_print_job(text,uuid,text,text,uuid);pick_reset_print_job(uuid,text,text,uuid);pick_reset_print_jobs(text,uuid,text,uuid[],text[]);pick_reset_print_jobs(uuid,text,uuid[],text[]);pick_resolve_scan_code(text,text);pick_restore_to_queue(text,uuid,text);pick_restore_to_queue(uuid,text);pick_revoke_device(uuid);pick_role_allowed(text);pick_seed_reference_data();pick_set_station_print_plek(text,uuid,uuid);pick_shared_cart_message(text,pick_queue);pick_read_shared_cart_messages(uuid,text[]);pick_read_shared_cart_messages(text,uuid,text[]);pick_set_station_print_plek(uuid,uuid);pick_signal_station(uuid);pick_signal_trg();pick_station_cleanup_print_plek();pick_station_dashboard();pick_station_dashboard(text);pick_station_devices_list(uuid);pick_station_print_plek(text,uuid);pick_station_print_plek(uuid);pick_station_print_plekken();pick_station_print_plekken(text);pick_station_slugify(text,uuid);pick_stations_set_slug();pick_sticker_past_controle(uuid);pick_sync_pick_day(date);pick_sync_pick_day(text,date);pick_sync_queue_throttled(integer);pick_sync_queue_throttled(text,integer);pick_touch_updated_at();pick_verify_rows(jsonb);pick_verify_rows(text,jsonb);pickschermen_install_check();pickschermen_missing_objects();pickstation_auto_send_status(text,text,uuid);pickstation_auto_send_status(text,uuid);pickstation_cart_sticker_state(text,text,uuid);pickstation_cart_sticker_state(text,uuid);pickstation_cart_sticker_states(text,text,uuid[]);pickstation_cart_sticker_states(text,uuid[]);pickstation_device_status(text,text);pickstation_document_for_order(text,text,uuid);pickstation_document_for_order(text,uuid);pickstation_get_orders_raw();pickstation_get_orders_raw(text);pickstation_get_planning_context();pickstation_get_planning_context(text);pickstation_get_settings();pickstation_get_settings(text);pickstation_log_print(text,text,text,text,text[],text);pickstation_log_print(text,text,text,text[],text);pickstation_logistics_barcode_lookup(text,text);pickstation_logistics_cart_plan_status(text,text);pickstation_logistics_cart_slip_plan(text,uuid);pickstation_logistics_is_pick_workday(text,date);pickstation_logistics_order_released(text,text);pickstation_logistics_pick_mode(text);pickstation_logistics_shipping_note_from_barcode(text,text,boolean,uuid);pickstation_logistics_working_hours_status(text);pickstation_order_sticker_meldingen(text,text,uuid);pickstation_order_sticker_meldingen(text,uuid);pickstation_pair_device(text,text,text);pickstation_print_status(text,text,uuid[]);pickstation_print_status(text,uuid[]);pickstation_resolve_delivery_orders(text,text[]);pickstation_resolve_delivery_orders(text[]);pickstation_set_cart_status(text,text,integer,text);pickstation_sticker_past_controle(text,text,uuid);pickstation_sticker_past_controle(text,uuid);pickstation_sticker_reprint(text,text,uuid,text);pickstation_sticker_reprint(text,uuid,text);sync_order_cart_totals()', ';') LOOP
|
|
3986
4200
|
IF to_regprocedure('public.'||t) IS NULL THEN v_mis := v_mis || ('functie '||t); END IF;
|
|
3987
4201
|
END LOOP;
|
|
3988
4202
|
-- Alleen verwacht als de Engine-tabel logistics_tasks bestaat.
|
|
@@ -5309,6 +5523,7 @@ DO $g$ BEGIN IF to_regprocedure('public.pick_sync_pick_day(text,date)') IS NOT N
|
|
|
5309
5523
|
DO $g$ BEGIN IF to_regprocedure('public.pick_sync_queue_throttled(integer)') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_sync_queue_throttled(integer) TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5310
5524
|
DO $g$ BEGIN IF to_regprocedure('public.pick_sync_queue_throttled(text,integer)') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_sync_queue_throttled(text,integer) TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5311
5525
|
DO $g$ BEGIN IF to_regprocedure('public.pick_touch_updated_at()') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_touch_updated_at() TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5526
|
+
DO $g$ BEGIN IF to_regprocedure('public.pick_queue_cart_plans(uuid[])') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_queue_cart_plans(uuid[]) TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5312
5527
|
DO $g$ BEGIN IF to_regprocedure('public.pick_verify_rows(jsonb)') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_verify_rows(jsonb) TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5313
5528
|
DO $g$ BEGIN IF to_regprocedure('public.pick_verify_rows(text,jsonb)') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pick_verify_rows(text,jsonb) TO anon, authenticated, service_role'; END IF; END $g$;
|
|
5314
5529
|
DO $g$ BEGIN IF to_regprocedure('public.pickschermen_install_check()') IS NOT NULL THEN EXECUTE 'GRANT EXECUTE ON FUNCTION public.pickschermen_install_check() TO authenticated, service_role'; END IF; END $g$;
|