@flowselections/pick-schermen-kwekers 1.0.70 → 1.0.72

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pickBackoff.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickBackoff.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickBackoff.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { verifyDelayMs } from "../pickBackoff.js";
3
+ describe("verifyDelayMs", () => {
4
+ it("wacht na mislukkingen 10, 20, 40, 80 s en daarna maximaal 2 min", () => {
5
+ expect([1, 2, 3, 4, 5, 9].map(verifyDelayMs)).toEqual([10000, 20000, 40000, 80000, 120000, 120000]);
6
+ });
7
+ it("zonder mislukking de gewone 15 s", () => {
8
+ expect(verifyDelayMs(0)).toBe(15000);
9
+ });
10
+ });
@@ -0,0 +1,12 @@
1
+ /** Wachttijd tussen controles van pickregels. */
2
+ export declare const VERIFY_INTERVAL_MS = 15000;
3
+ export declare const VERIFY_BACKOFF_START_MS = 10000;
4
+ export declare const VERIFY_BACKOFF_MAX_MS = 120000;
5
+ export declare const VERIFY_SLOW_MESSAGE = "Controle duurt te lang, we proberen het zo opnieuw";
6
+ export declare const VERIFY_SLOW_TOAST_ID = "pick-verify-slow";
7
+ /**
8
+ * Na `failures` mislukte controles op rij: 10 → 20 → 40 → 80 → 120 s (max 2 min).
9
+ * Zonder mislukking de gewone wachttijd.
10
+ */
11
+ export declare function verifyDelayMs(failures: number): number;
12
+ //# sourceMappingURL=pickBackoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickBackoff.d.ts","sourceRoot":"","sources":["../../src/lib/pickBackoff.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C,eAAO,MAAM,mBAAmB,uDAAuD,CAAC;AACxF,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAItD"}
@@ -0,0 +1,16 @@
1
+ /** Wachttijd tussen controles van pickregels. */
2
+ export const VERIFY_INTERVAL_MS = 15000;
3
+ export const VERIFY_BACKOFF_START_MS = 10000;
4
+ export const VERIFY_BACKOFF_MAX_MS = 120000;
5
+ export const VERIFY_SLOW_MESSAGE = "Controle duurt te lang, we proberen het zo opnieuw";
6
+ export const VERIFY_SLOW_TOAST_ID = "pick-verify-slow";
7
+ /**
8
+ * Na `failures` mislukte controles op rij: 10 → 20 → 40 → 80 → 120 s (max 2 min).
9
+ * Zonder mislukking de gewone wachttijd.
10
+ */
11
+ export function verifyDelayMs(failures) {
12
+ if (!Number.isFinite(failures) || failures <= 0)
13
+ return VERIFY_INTERVAL_MS;
14
+ const d = VERIFY_BACKOFF_START_MS * 2 ** (Math.floor(failures) - 1);
15
+ return Math.min(d, VERIFY_BACKOFF_MAX_MS);
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/pick-schermen-kwekers",
3
- "version": "1.0.70",
3
+ "version": "1.0.72",
4
4
  "flowselections": {
5
5
  "moduleId": "pick-schermen",
6
6
  "schema": {
@@ -3843,29 +3843,141 @@ CREATE OR REPLACE FUNCTION public.pick_touch_updated_at()
3843
3843
  AS $function$
3844
3844
  BEGIN NEW.updated_at = now(); RETURN NEW; END; $function$;
3845
3845
 
3846
+ CREATE OR REPLACE FUNCTION public.pick_queue_cart_plans(_queue_item_ids uuid[])
3847
+ RETURNS jsonb
3848
+ LANGUAGE plpgsql
3849
+ STABLE SECURITY DEFINER
3850
+ SET search_path TO 'public'
3851
+ AS $function$
3852
+ -- Set-based variant van pick_queue_cart_plan: het karplan wordt één keer per order
3853
+ -- opgebouwd en daarna per pickrij gesneden. Uitvoer: { "<queue-id>": {"plan":..} | {"error":..} }.
3854
+ DECLARE
3855
+ v_id uuid; item public.pick_queue; v_order_id uuid; v_key text; v_base jsonb; v_bases jsonb := '{}'::jsonb;
3856
+ v_orders uuid[]; v_oid uuid; v_plan jsonb; v_carts jsonb; v_seen jsonb; v_cart jsonb; v_onum text; v_ow jsonb;
3857
+ v_order_list jsonb; v_total integer; v_row_cart text; v_own jsonb; v_warnings jsonb; v_r jsonb;
3858
+ out jsonb := '{}'::jsonb;
3859
+ BEGIN
3860
+ IF _queue_item_ids IS NULL THEN RETURN out; END IF;
3861
+ IF cardinality(_queue_item_ids) > 200 THEN
3862
+ RAISE EXCEPTION 'pick_queue_cart_plans: maximaal 200 regels per aanroep';
3863
+ END IF;
3864
+ FOREACH v_id IN ARRAY _queue_item_ids LOOP
3865
+ BEGIN
3866
+ SELECT * INTO item FROM public.pick_queue WHERE id = v_id;
3867
+ IF NOT FOUND THEN RAISE EXCEPTION 'Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.' USING ERRCODE = 'P0002'; END IF;
3868
+ BEGIN v_order_id := nullif(coalesce(item.payload->>'orderId', item.payload->>'order_id'), '')::uuid;
3869
+ EXCEPTION WHEN invalid_text_representation THEN v_order_id := NULL; END;
3870
+ IF v_order_id IS NULL THEN RAISE EXCEPTION 'Geen order-id beschikbaar voor het karplan.'; END IF;
3871
+ v_key := v_order_id::text;
3872
+
3873
+ IF NOT (v_bases ? v_key) THEN
3874
+ BEGIN
3875
+ v_orders := public.pick_buffer_order_ids(v_order_id);
3876
+ IF v_orders IS NULL OR cardinality(v_orders) = 0 THEN v_orders := ARRAY[v_order_id]; END IF;
3877
+ v_carts := '[]'::jsonb; v_seen := '{}'::jsonb; v_order_list := '[]'::jsonb;
3878
+ FOREACH v_oid IN ARRAY v_orders LOOP
3879
+ v_plan := public.logistics_cart_slip_plan(v_oid);
3880
+ SELECT o.order_number INTO v_onum FROM public.orders o WHERE o.id = v_oid;
3881
+ v_ow := CASE WHEN jsonb_typeof(v_plan->'warnings') = 'array' THEN v_plan->'warnings' ELSE '[]'::jsonb END;
3882
+ v_order_list := v_order_list || jsonb_build_array(jsonb_build_object('orderId', v_oid, 'orderNumber', v_onum, 'warnings', v_ow));
3883
+ FOR v_cart IN SELECT c FROM jsonb_array_elements(COALESCE(v_plan->'carts', '[]'::jsonb)) AS c LOOP
3884
+ IF NOT (v_seen ? coalesce(v_cart->>'cartId', '')) THEN
3885
+ v_seen := v_seen || jsonb_build_object(coalesce(v_cart->>'cartId', ''), true);
3886
+ v_carts := v_carts || jsonb_build_array(public.logistics_cart_json_fixed(v_cart || jsonb_build_object('orderId', v_oid, 'orderNumber', v_onum)));
3887
+ END IF;
3888
+ END LOOP;
3889
+ END LOOP;
3890
+ SELECT coalesce(max((e->>'cartTotal')::int), jsonb_array_length(v_carts)) INTO v_total FROM jsonb_array_elements(v_carts) e;
3891
+ SELECT COALESCE(jsonb_agg(DISTINCT w.value), '[]'::jsonb) INTO v_warnings
3892
+ FROM jsonb_array_elements(v_order_list) o CROSS JOIN LATERAL jsonb_array_elements(o->'warnings') w;
3893
+ v_base := jsonb_build_object('isBuffer', cardinality(v_orders) > 1, 'total', v_total,
3894
+ 'carts', v_carts, 'orders', v_order_list, 'warnings', v_warnings);
3895
+ EXCEPTION WHEN others THEN
3896
+ v_base := jsonb_build_object('error', SQLERRM);
3897
+ END;
3898
+ v_bases := v_bases || jsonb_build_object(v_key, v_base);
3899
+ END IF;
3900
+
3901
+ v_base := v_bases->v_key;
3902
+ IF v_base ? 'error' THEN RAISE EXCEPTION '%', v_base->>'error'; END IF;
3903
+
3904
+ v_row_cart := nullif(btrim(coalesce(item.payload->>'cartId', '')), '');
3905
+ v_own := NULL;
3906
+ IF v_row_cart IS NOT NULL THEN
3907
+ SELECT e INTO v_own FROM jsonb_array_elements(v_base->'carts') AS e WHERE e->>'cartId' = v_row_cart LIMIT 1;
3908
+ IF v_own IS NULL THEN RAISE EXCEPTION 'De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij.'; END IF;
3909
+ v_total := coalesce((v_own->>'cartTotal')::int, (v_base->>'total')::int);
3910
+ v_r := jsonb_build_object('orderId', v_order_id, 'isBuffer', v_base->'isBuffer',
3911
+ 'totalCarts', v_total, 'cartTotal', v_total, 'rowCartId', v_row_cart,
3912
+ 'carts', jsonb_build_array(v_own), 'orders', v_base->'orders',
3913
+ 'warnings', CASE WHEN coalesce((v_own->>'cartSeq')::int, 1) = 1 THEN v_base->'warnings' ELSE '[]'::jsonb END,
3914
+ 'wachtTot', item.payload->'wachtTot', 'wachtReden', item.payload->'wachtReden',
3915
+ 'printbaar', coalesce((item.payload->>'printbaar')::boolean, true));
3916
+ ELSE
3917
+ v_r := jsonb_build_object('orderId', v_order_id, 'isBuffer', v_base->'isBuffer',
3918
+ 'totalCarts', (v_base->>'total')::int, 'cartTotal', (v_base->>'total')::int,
3919
+ 'carts', v_base->'carts', 'orders', v_base->'orders', 'warnings', v_base->'warnings');
3920
+ END IF;
3921
+ -- Zelfde aanvulling als pick_queue_cart_plan(uuid)
3922
+ v_r := v_r || jsonb_build_object(
3923
+ 'cartCrates', CASE WHEN v_own IS NOT NULL THEN v_own->'cartCrates' END,
3924
+ 'bufferCrates', CASE WHEN v_own IS NOT NULL THEN v_own->'bufferCrates' END,
3925
+ 'departureAt', CASE WHEN v_own IS NOT NULL THEN v_own->'departureAt' END,
3926
+ 'pickStartsAt', CASE WHEN v_own IS NOT NULL THEN v_own->'pickStartsAt' END,
3927
+ 'releaseAt', CASE WHEN v_own IS NOT NULL THEN v_own->'releaseAt' END,
3928
+ 'releaseReason', CASE WHEN v_own IS NOT NULL THEN v_own->'releaseReason' END);
3929
+ out := out || jsonb_build_object(v_id::text, jsonb_build_object('plan', v_r));
3930
+ EXCEPTION WHEN others THEN
3931
+ out := out || jsonb_build_object(v_id::text, jsonb_build_object('error', SQLERRM));
3932
+ END;
3933
+ END LOOP;
3934
+ RETURN out;
3935
+ END $function$;
3936
+
3846
3937
  CREATE OR REPLACE FUNCTION public.pick_verify_rows(_rows jsonb)
3847
3938
  RETURNS jsonb
3848
3939
  LANGUAGE plpgsql
3849
3940
  STABLE
3850
3941
  SET search_path TO 'public'
3851
3942
  AS $function$
3852
- DECLARE r jsonb; out jsonb := '[]'::jsonb; v_plan jsonb; v_status jsonb; v_ref text; v_err text;
3943
+ -- Set-based: karplan één keer per order (pick_queue_cart_plans), Engine-status één keer per ref.
3944
+ DECLARE r jsonb; out jsonb := '[]'::jsonb; v_ids uuid[] := '{}'; v_plans jsonb := '{}'::jsonb;
3945
+ v_status_cache jsonb := '{}'::jsonb; v_status jsonb; v_ref text; v_err text; v_p jsonb; v_id uuid;
3853
3946
  BEGIN
3854
3947
  IF jsonb_typeof(_rows) <> 'array' THEN RETURN out; END IF;
3855
3948
  IF jsonb_array_length(_rows) > 200 THEN
3856
3949
  RAISE EXCEPTION 'pick_verify_rows: maximaal 200 regels per aanroep';
3857
3950
  END IF;
3858
3951
  FOR r IN SELECT * FROM jsonb_array_elements(_rows) LOOP
3859
- v_plan := NULL; v_status := NULL; v_err := NULL;
3952
+ BEGIN v_id := (r->>'id')::uuid; EXCEPTION WHEN others THEN v_id := NULL; END;
3953
+ IF v_id IS NOT NULL THEN v_ids := v_ids || v_id; END IF;
3954
+ END LOOP;
3955
+ BEGIN
3956
+ v_plans := public.pick_queue_cart_plans(v_ids);
3957
+ EXCEPTION WHEN others THEN v_err := SQLERRM;
3958
+ END;
3959
+ FOR r IN SELECT * FROM jsonb_array_elements(_rows) LOOP
3860
3960
  v_ref := NULLIF(r->>'ref', '');
3861
- BEGIN
3862
- v_plan := to_jsonb(public.pick_queue_cart_plan((r->>'id')::uuid));
3863
- IF v_ref IS NOT NULL THEN
3864
- v_status := to_jsonb(public.logistics_cart_plan_status(v_ref));
3961
+ v_p := v_plans->(r->>'id');
3962
+ v_status := NULL;
3963
+ IF v_ref IS NOT NULL AND v_p IS NOT NULL AND NOT (v_p ? 'error') THEN
3964
+ IF v_status_cache ? v_ref THEN
3965
+ v_status := v_status_cache->v_ref;
3966
+ ELSE
3967
+ BEGIN
3968
+ v_status := to_jsonb(public.logistics_cart_plan_status(v_ref));
3969
+ EXCEPTION WHEN others THEN v_status := jsonb_build_object('__error', SQLERRM);
3970
+ END;
3971
+ v_status_cache := v_status_cache || jsonb_build_object(v_ref, coalesce(v_status, 'null'::jsonb));
3865
3972
  END IF;
3866
- EXCEPTION WHEN others THEN v_err := SQLERRM;
3867
- END;
3868
- out := out || jsonb_build_array(jsonb_build_object('id', r->>'id', 'plan', v_plan, 'status', v_status, 'error', v_err));
3973
+ IF v_status = 'null'::jsonb THEN v_status := NULL; END IF;
3974
+ END IF;
3975
+ out := out || jsonb_build_array(jsonb_build_object(
3976
+ 'id', r->>'id',
3977
+ 'plan', CASE WHEN v_status ? '__error' THEN NULL ELSE v_p->'plan' END,
3978
+ 'status', CASE WHEN v_status ? '__error' THEN NULL ELSE v_status END,
3979
+ 'error', coalesce(v_err, v_p->>'error', v_status->>'__error',
3980
+ CASE WHEN v_p IS NULL THEN 'Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.' END)));
3869
3981
  END LOOP;
3870
3982
  RETURN out;
3871
3983
  END $function$;
@@ -3928,6 +4040,14 @@ BEGIN
3928
4040
  ELSE
3929
4041
  v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: stickerbundel levert printopdrachten.');
3930
4042
  END IF;
4043
+ -- 1.0.71: pickregels-controle set-based (één karplan per order).
4044
+ v_oid := to_regprocedure('public.pick_verify_rows(jsonb)');
4045
+ IF to_regprocedure('public.pick_queue_cart_plans(uuid[])') IS NULL OR v_oid IS NULL
4046
+ OR position('pick_queue_cart_plans' IN pg_get_functiondef(v_oid)) = 0 THEN
4047
+ v := v || jsonb_build_object('niveau','fout','tekst','Pickschermen: controle pickregels nog per kar; kan bij grote orders vastlopen (pick_queue_cart_plans ontbreekt).');
4048
+ ELSE
4049
+ v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: controle pickregels set-based (één karplan per order).');
4050
+ END IF;
3931
4051
  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
4052
  v := v || jsonb_build_object('niveau','waarschuwing','tekst','Pickschermen: stickervraag per orderregel niet leesbaar (order_items.needs_sticker ontbreekt, Verkoop).');
3933
4053
  END IF;
@@ -3982,7 +4102,7 @@ BEGIN
3982
4102
  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
4103
  IF to_regclass('public.'||t) IS NULL THEN v_mis := v_mis || ('tabel '||t); END IF;
3984
4104
  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
4105
+ 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_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
4106
  IF to_regprocedure('public.'||t) IS NULL THEN v_mis := v_mis || ('functie '||t); END IF;
3987
4107
  END LOOP;
3988
4108
  -- Alleen verwacht als de Engine-tabel logistics_tasks bestaat.
@@ -5309,6 +5429,7 @@ DO $g$ BEGIN IF to_regprocedure('public.pick_sync_pick_day(text,date)') IS NOT N
5309
5429
  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
5430
  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
5431
  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$;
5432
+ 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
5433
  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
5434
  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
5435
  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$;