@flowselections/pick-schermen-kwekers 1.0.84 → 1.0.89

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.
Files changed (85) hide show
  1. package/dist-lib/components/PickPublicPage.d.ts.map +1 -1
  2. package/dist-lib/components/PickPublicPage.js +12 -0
  3. package/dist-lib/components/pick/DocumentChoiceMelding.d.ts +1 -1
  4. package/dist-lib/components/pick/DocumentChoiceMelding.d.ts.map +1 -1
  5. package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
  6. package/dist-lib/components/pick/PickScherm.js +377 -159
  7. package/dist-lib/components/pick/werkvloer/Werkvloer.d.ts +52 -0
  8. package/dist-lib/components/pick/werkvloer/Werkvloer.d.ts.map +1 -0
  9. package/dist-lib/components/pick/werkvloer/Werkvloer.js +33 -0
  10. package/dist-lib/hooks/useCartStickerStates.d.ts +1 -1
  11. package/dist-lib/hooks/useCartStickerStates.d.ts.map +1 -1
  12. package/dist-lib/hooks/usePickConfig.d.ts +11 -11
  13. package/dist-lib/hooks/usePickConfig.d.ts.map +1 -1
  14. package/dist-lib/hooks/usePickPrintStatus.d.ts +3 -3
  15. package/dist-lib/hooks/usePickPrintStatus.d.ts.map +1 -1
  16. package/dist-lib/hooks/usePickPrintStatus.js +4 -4
  17. package/dist-lib/hooks/usePickQueue.d.ts +3 -3
  18. package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
  19. package/dist-lib/hooks/usePickReferenceData.d.ts +1 -1
  20. package/dist-lib/hooks/usePickReferenceData.d.ts.map +1 -1
  21. package/dist-lib/hooks/useShippingNoteStatus.d.ts +1 -1
  22. package/dist-lib/hooks/useShippingNoteStatus.d.ts.map +1 -1
  23. package/dist-lib/hooks/useShippingNoteStatus.js +11 -9
  24. package/dist-lib/hooks/useWerkvloer.d.ts +20 -0
  25. package/dist-lib/hooks/useWerkvloer.d.ts.map +1 -0
  26. package/dist-lib/hooks/useWerkvloer.js +98 -0
  27. package/dist-lib/integrations/supabase/client.js +1 -1
  28. package/dist-lib/integrations/supabase/client.server.js +1 -1
  29. package/dist-lib/integrations/supabase/types.d.ts +1331 -91
  30. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  31. package/dist-lib/lib/__tests__/pickPublicStatus.test.d.ts +2 -0
  32. package/dist-lib/lib/__tests__/pickPublicStatus.test.d.ts.map +1 -0
  33. package/dist-lib/lib/__tests__/pickPublicStatus.test.js +48 -0
  34. package/dist-lib/lib/labels.d.ts +2 -0
  35. package/dist-lib/lib/labels.d.ts.map +1 -1
  36. package/dist-lib/lib/labels.js +41 -0
  37. package/dist-lib/lib/pick142.d.ts.map +1 -1
  38. package/dist-lib/lib/pick142.js +7 -10
  39. package/dist-lib/lib/pick156.d.ts.map +1 -1
  40. package/dist-lib/lib/pick156.js +6 -20
  41. package/dist-lib/lib/pick159.js +1 -1
  42. package/dist-lib/lib/pickApi.d.ts +20 -0
  43. package/dist-lib/lib/pickApi.d.ts.map +1 -1
  44. package/dist-lib/lib/pickApi.js +27 -0
  45. package/dist-lib/lib/shippingNoteStatus.d.ts +1 -1
  46. package/dist-lib/lib/shippingNoteStatus.d.ts.map +1 -1
  47. package/dist-lib/lib/shippingNoteStatus.js +5 -2
  48. package/dist-lib/lib/werkvloer.d.ts +40 -0
  49. package/dist-lib/lib/werkvloer.d.ts.map +1 -0
  50. package/dist-lib/lib/werkvloer.js +121 -0
  51. package/dist-lib/lib/werkvloer.test.d.ts +2 -0
  52. package/dist-lib/lib/werkvloer.test.d.ts.map +1 -0
  53. package/dist-lib/lib/werkvloer.test.js +49 -0
  54. package/package.json +1 -1
  55. package/schema/pickschermen.sql +176 -0
  56. package/dist-lib/lib/layoutApi.d.ts +0 -23
  57. package/dist-lib/lib/layoutApi.d.ts.map +0 -1
  58. package/dist-lib/lib/layoutApi.js +0 -94
  59. package/dist-lib/lib/layoutMaker/documentProfiles.d.ts +0 -50
  60. package/dist-lib/lib/layoutMaker/documentProfiles.d.ts.map +0 -1
  61. package/dist-lib/lib/layoutMaker/documentProfiles.js +0 -458
  62. package/dist-lib/lib/layoutMaker/documentTypes.d.ts +0 -123
  63. package/dist-lib/lib/layoutMaker/documentTypes.d.ts.map +0 -1
  64. package/dist-lib/lib/layoutMaker/documentTypes.js +0 -74
  65. package/dist-lib/lib/layoutMaker/logoLibrary.d.ts +0 -13
  66. package/dist-lib/lib/layoutMaker/logoLibrary.d.ts.map +0 -1
  67. package/dist-lib/lib/layoutMaker/logoLibrary.js +0 -54
  68. package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts +0 -196
  69. package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts.map +0 -1
  70. package/dist-lib/lib/layoutMaker/pakbonBuilder.js +0 -813
  71. package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts +0 -48
  72. package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts.map +0 -1
  73. package/dist-lib/lib/layoutMaker/pakbonHtml.js +0 -703
  74. package/dist-lib/lib/layoutRenderer.d.ts +0 -7
  75. package/dist-lib/lib/layoutRenderer.d.ts.map +0 -1
  76. package/dist-lib/lib/layoutRenderer.js +0 -233
  77. package/dist-lib/lib/layoutTypes.d.ts +0 -84
  78. package/dist-lib/lib/layoutTypes.d.ts.map +0 -1
  79. package/dist-lib/lib/layoutTypes.js +0 -25
  80. package/dist-lib/lib/orderContext.d.ts +0 -50
  81. package/dist-lib/lib/orderContext.d.ts.map +0 -1
  82. package/dist-lib/lib/orderContext.js +0 -162
  83. package/dist-lib/lib/pakbonOrderInput.d.ts +0 -8
  84. package/dist-lib/lib/pakbonOrderInput.d.ts.map +0 -1
  85. package/dist-lib/lib/pakbonOrderInput.js +0 -150
@@ -5836,3 +5836,179 @@ REVOKE ALL ON FUNCTION public._pick_defaults_apply(text, text[], jsonb) FROM PUB
5836
5836
  GRANT EXECUTE ON FUNCTION public._pick_defaults_apply(text, text[], jsonb) TO service_role;
5837
5837
  REVOKE ALL ON FUNCTION public.pick_ensure_defaults() FROM PUBLIC, anon;
5838
5838
  GRANT EXECUTE ON FUNCTION public.pick_ensure_defaults() TO authenticated, service_role;
5839
+
5840
+ -- 1.0.85: "Print volgende order" / "Print" zet een hele order (of gezamenlijke levering) in één stap vast.
5841
+ CREATE TABLE IF NOT EXISTS public.pick_order_claims (
5842
+ idempotency_key text PRIMARY KEY,
5843
+ station_id uuid NOT NULL,
5844
+ session_id text NOT NULL,
5845
+ unit_ref text NOT NULL,
5846
+ queue_item_ids uuid[] NOT NULL DEFAULT '{}'::uuid[],
5847
+ created_at timestamptz NOT NULL DEFAULT now()
5848
+ );
5849
+ CREATE INDEX IF NOT EXISTS idx_pick_order_claims_created ON public.pick_order_claims(created_at);
5850
+ GRANT ALL ON public.pick_order_claims TO service_role;
5851
+ ALTER TABLE public.pick_order_claims ENABLE ROW LEVEL SECURITY;
5852
+
5853
+ CREATE OR REPLACE FUNCTION public._pick_claim_order_core(_station_id uuid, _session_id text, _unit_refs text[], _idempotency_key text, _pick_day date, _timeout_seconds integer)
5854
+ RETURNS jsonb
5855
+ LANGUAGE plpgsql
5856
+ VOLATILE SECURITY DEFINER
5857
+ SET search_path TO 'public'
5858
+ AS $function$
5859
+ DECLARE
5860
+ v_path text := nullif(current_setting('request.path', true), '');
5861
+ v_prev public.pick_order_claims;
5862
+ v_ref text;
5863
+ v_cand uuid[];
5864
+ v_total int;
5865
+ v_timeout int := LEAST(GREATEST(COALESCE(_timeout_seconds, 120), 30), 120);
5866
+ v_printing uuid;
5867
+ BEGIN
5868
+ -- Interne controle: server, of geneste aanroep vanuit een eigen functie (ketenregel via request.path).
5869
+ IF NOT (public.pick_is_server() OR (v_path IS NOT NULL AND v_path NOT ILIKE '%/rpc/_pick_claim_order_core%')) THEN
5870
+ RAISE EXCEPTION 'Deze interne functie mag niet rechtstreeks aangeroepen worden.' USING ERRCODE = '42501';
5871
+ END IF;
5872
+ IF _station_id IS NULL THEN RAISE EXCEPTION 'Kies eerst een pickstation.'; END IF;
5873
+ IF nullif(_session_id, '') IS NULL OR nullif(_idempotency_key, '') IS NULL THEN
5874
+ RAISE EXCEPTION 'De printopdracht mist een sleutel. Ververs het scherm.';
5875
+ END IF;
5876
+ IF NOT EXISTS (SELECT 1 FROM public.pick_stations s WHERE s.id = _station_id AND s.active) THEN
5877
+ RAISE EXCEPTION 'Dit pickstation is niet actief.';
5878
+ END IF;
5879
+
5880
+ PERFORM public.pick_release_expired_locks();
5881
+ -- Bewaartermijn: sleutels zijn alleen nodig zolang een herhaling kan binnenkomen.
5882
+ DELETE FROM public.pick_order_claims WHERE created_at < now() - interval '1 day';
5883
+
5884
+ -- Zelfde sleutel opnieuw (haperende verbinding): zelfde uitkomst, geen tweede claim.
5885
+ SELECT * INTO v_prev FROM public.pick_order_claims WHERE idempotency_key = _idempotency_key FOR UPDATE;
5886
+ IF FOUND THEN
5887
+ IF v_prev.session_id <> _session_id OR v_prev.station_id <> _station_id THEN
5888
+ RAISE EXCEPTION 'Deze printopdracht hoort bij een ander scherm.' USING ERRCODE = '42501';
5889
+ END IF;
5890
+ RETURN jsonb_build_object('ok', true, 'herhaald', true, 'unitRef', v_prev.unit_ref,
5891
+ 'queueItemIds', to_jsonb(v_prev.queue_item_ids));
5892
+ END IF;
5893
+
5894
+ SELECT id INTO v_printing FROM public.pick_document_statuses WHERE code = 'printing' LIMIT 1;
5895
+
5896
+ FOREACH v_ref IN ARRAY COALESCE(_unit_refs, '{}'::text[]) LOOP
5897
+ CONTINUE WHEN nullif(v_ref, '') IS NULL;
5898
+
5899
+ SELECT count(*) INTO v_total
5900
+ FROM public.pick_queue q
5901
+ WHERE q.station_id = _station_id
5902
+ AND q.printed_at IS NULL AND q.cancelled_at IS NULL AND q.completed_at IS NULL
5903
+ AND COALESCE(q.payload->>'printbaar', 'true') <> 'false'
5904
+ AND COALESCE(nullif(q.payload->>'unitRef', ''), nullif(q.payload->>'unit_ref', ''), q.order_number, q.id::text) = v_ref
5905
+ AND (_pick_day IS NULL OR nullif(q.payload->>'pickDate', '') IS NULL OR (nullif(q.payload->>'pickDate', ''))::date = _pick_day);
5906
+ CONTINUE WHEN v_total = 0;
5907
+
5908
+ -- Rijen die een ander op dit moment vastzet, worden overgeslagen (SKIP LOCKED).
5909
+ SELECT array_agg(c.id) INTO v_cand FROM (
5910
+ SELECT q.id
5911
+ FROM public.pick_queue q
5912
+ WHERE q.station_id = _station_id
5913
+ AND q.printed_at IS NULL AND q.cancelled_at IS NULL AND q.completed_at IS NULL
5914
+ AND COALESCE(q.payload->>'printbaar', 'true') <> 'false'
5915
+ AND COALESCE(nullif(q.payload->>'unitRef', ''), nullif(q.payload->>'unit_ref', ''), q.order_number, q.id::text) = v_ref
5916
+ AND (_pick_day IS NULL OR nullif(q.payload->>'pickDate', '') IS NULL OR (nullif(q.payload->>'pickDate', ''))::date = _pick_day)
5917
+ FOR UPDATE OF q SKIP LOCKED
5918
+ ) c;
5919
+ -- Alleen de hele order: is een deel al bij iemand anders, dan de volgende order.
5920
+ CONTINUE WHEN v_cand IS NULL OR cardinality(v_cand) < v_total;
5921
+ CONTINUE WHEN EXISTS (
5922
+ SELECT 1 FROM public.pick_queue_locks l
5923
+ WHERE l.queue_item_id = ANY(v_cand)
5924
+ AND l.session_id IS DISTINCT FROM _session_id
5925
+ AND l.expires_at > now());
5926
+
5927
+ INSERT INTO public.pick_queue_locks(queue_item_id, station_id, session_id, locked_by, expires_at)
5928
+ SELECT x, _station_id, _session_id, auth.uid(), now() + make_interval(secs => v_timeout)
5929
+ FROM unnest(v_cand) AS x
5930
+ ON CONFLICT (queue_item_id) DO UPDATE
5931
+ SET expires_at = EXCLUDED.expires_at
5932
+ WHERE public.pick_queue_locks.session_id = EXCLUDED.session_id;
5933
+
5934
+ UPDATE public.pick_queue
5935
+ SET status_id = COALESCE(v_printing, status_id),
5936
+ assigned_user_id = auth.uid()
5937
+ WHERE id = ANY(v_cand);
5938
+
5939
+ INSERT INTO public.pick_station_logs(station_id, queue_item_id, user_id, session_id, action, detail)
5940
+ SELECT _station_id, x, auth.uid(), _session_id, 'claim',
5941
+ jsonb_build_object('soort', 'order', 'unitRef', v_ref, 'sleutel', _idempotency_key)
5942
+ FROM unnest(v_cand) AS x;
5943
+
5944
+ INSERT INTO public.pick_order_claims(idempotency_key, station_id, session_id, unit_ref, queue_item_ids)
5945
+ VALUES (_idempotency_key, _station_id, _session_id, v_ref, v_cand);
5946
+
5947
+ RETURN jsonb_build_object('ok', true, 'herhaald', false, 'unitRef', v_ref, 'queueItemIds', to_jsonb(v_cand));
5948
+ END LOOP;
5949
+
5950
+ RETURN jsonb_build_object('ok', false, 'herhaald', false,
5951
+ 'reden', CASE WHEN cardinality(COALESCE(_unit_refs, '{}'::text[])) = 1
5952
+ THEN 'Deze order wordt al door iemand anders geprint.'
5953
+ ELSE 'Er is nu geen order vrij om te printen.' END);
5954
+ END $function$;
5955
+
5956
+ CREATE OR REPLACE FUNCTION public.pick_claim_order_v1(p_device_key text, _station_id uuid, _session_id text, _unit_refs text[], _idempotency_key text, _pick_day date, _timeout_seconds integer)
5957
+ RETURNS jsonb
5958
+ LANGUAGE plpgsql
5959
+ VOLATILE SECURITY DEFINER
5960
+ SET search_path TO 'public'
5961
+ AS $function$ BEGIN PERFORM public.pick_device_check(p_device_key, _station_id, NULL, NULL, NULL, NULL); RETURN public._pick_claim_order_core(_station_id, _session_id, _unit_refs, _idempotency_key, _pick_day, _timeout_seconds); END $function$;
5962
+
5963
+ CREATE OR REPLACE FUNCTION public.pick_claim_order_v1(_station_id uuid, _session_id text, _unit_refs text[], _idempotency_key text, _pick_day date, _timeout_seconds integer)
5964
+ RETURNS jsonb
5965
+ LANGUAGE plpgsql
5966
+ VOLATILE SECURITY DEFINER
5967
+ SET search_path TO 'public'
5968
+ AS $function$ BEGIN PERFORM public.pick_device_check(NULL, _station_id, NULL, NULL, NULL, NULL); RETURN public._pick_claim_order_core(_station_id, _session_id, _unit_refs, _idempotency_key, _pick_day, _timeout_seconds); END $function$;
5969
+
5970
+ REVOKE ALL ON FUNCTION public._pick_claim_order_core(uuid, text, text[], text, date, integer) FROM PUBLIC, anon, authenticated;
5971
+ GRANT EXECUTE ON FUNCTION public._pick_claim_order_core(uuid, text, text[], text, date, integer) TO service_role;
5972
+ REVOKE ALL ON FUNCTION public.pick_claim_order_v1(text, uuid, text, text[], text, date, integer) FROM PUBLIC;
5973
+ GRANT EXECUTE ON FUNCTION public.pick_claim_order_v1(text, uuid, text, text[], text, date, integer) TO anon, authenticated, service_role;
5974
+ REVOKE ALL ON FUNCTION public.pick_claim_order_v1(uuid, text, text[], text, date, integer) FROM PUBLIC;
5975
+ GRANT EXECUTE ON FUNCTION public.pick_claim_order_v1(uuid, text, text[], text, date, integer) TO anon, authenticated, service_role;
5976
+
5977
+ -- 1.0.86: openbare verzendbriefstatus, beperkt tot eigen station.
5978
+ CREATE OR REPLACE FUNCTION public.pickstation_shipping_note_status(p_slug text, p_slip_job_id uuid DEFAULT NULL, p_cart_id uuid DEFAULT NULL, p_device_key text DEFAULT NULL)
5979
+ RETURNS jsonb
5980
+ LANGUAGE plpgsql
5981
+ STABLE SECURITY DEFINER
5982
+ SET search_path TO 'public'
5983
+ AS $function$
5984
+ DECLARE
5985
+ v_station uuid;
5986
+ v_job uuid;
5987
+ BEGIN
5988
+ SELECT s.id INTO v_station FROM public.pick_stations s
5989
+ WHERE s.slug = p_slug AND s.active IS TRUE AND nullif(btrim(p_slug), '') IS NOT NULL
5990
+ LIMIT 1;
5991
+ IF v_station IS NULL THEN
5992
+ RAISE EXCEPTION 'Dit pickstation is onbekend of niet actief.' USING ERRCODE = '42501';
5993
+ END IF;
5994
+ PERFORM public.pick_device_check(p_device_key, v_station, NULL, NULL, p_slug, NULL);
5995
+ IF p_slip_job_id IS NULL AND p_cart_id IS NULL THEN
5996
+ RAISE EXCEPTION 'De pakbon of kar ontbreekt.' USING ERRCODE = '22023';
5997
+ END IF;
5998
+
5999
+ -- Ook bij een batch/herprint: de opdracht moet bij een echte rij van dit station horen.
6000
+ -- De kar-terugval kiest alleen een pakbon van dit station, nooit een globale Engine-terugval.
6001
+ SELECT j.id INTO v_job FROM public.print_jobs j
6002
+ WHERE (p_slip_job_id IS NULL OR j.id = p_slip_job_id)
6003
+ AND (p_cart_id IS NULL OR nullif(coalesce(j.payload->>'cart_id', j.payload->'cart'->>'cartId'), '') = p_cart_id::text)
6004
+ AND lower(coalesce(j.payload->>'document_type_code', j.payload->>'documentType', j.documenttype::text, '')) LIKE '%pakbon%'
6005
+ AND EXISTS (SELECT 1 FROM public.pick_queue q WHERE q.station_id = v_station
6006
+ AND (q.print_job_id = j.id OR q.id::text = j.payload->>'queue_item_id'))
6007
+ ORDER BY j.created_at DESC, j.id DESC LIMIT 1;
6008
+ IF v_job IS NULL THEN
6009
+ RAISE EXCEPTION 'Deze pakbon of kar hoort niet bij dit pickstation.' USING ERRCODE = '42501';
6010
+ END IF;
6011
+ RETURN public.logistics_shipping_note_status(p_slip_job_id => v_job, p_cart_id => NULL);
6012
+ END $function$;
6013
+ REVOKE ALL ON FUNCTION public.pickstation_shipping_note_status(text, uuid, uuid, text) FROM PUBLIC;
6014
+ GRANT EXECUTE ON FUNCTION public.pickstation_shipping_note_status(text, uuid, uuid, text) TO anon, authenticated, service_role;
@@ -1,23 +0,0 @@
1
- import { type LayoutLogoRow, type LayoutRef, type ResolvedLayout } from "./layoutTypes.js";
2
- /** Vraagt de actieve layout voor een documentsoort op bij de Logistiek Engine. */
3
- export declare function fetchLayoutRef(documentType: string): Promise<LayoutRef | null>;
4
- /** Haalt de layoutrij plus elementen, variabelen en logo's op. */
5
- export declare function fetchLayout(layoutId: string, documentType: string): Promise<ResolvedLayout>;
6
- /**
7
- * Bepaalt en laadt de layout voor een documentsoort. Gebruikt bij voorkeur de
8
- * layoutId die de Engine in de wachtrijregel heeft meegegeven.
9
- */
10
- export declare function resolveLayout(args: {
11
- documentType: string;
12
- layoutId?: string | null;
13
- }): Promise<ResolvedLayout>;
14
- /**
15
- * Zet de logo-records uit de layout om in de vorm die de layout-module
16
- * verwacht: een publiek bereikbare `viewUrl` per logo.
17
- */
18
- export declare function logosMetViewUrl(logos: Record<string, LayoutLogoRow>): Promise<{
19
- id: string;
20
- naam: string;
21
- viewUrl: string | null;
22
- }[]>;
23
- //# sourceMappingURL=layoutApi.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layoutApi.d.ts","sourceRoot":"","sources":["../../src/lib/layoutApi.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,kFAAkF;AAClF,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAOpF;AAED,kEAAkE;AAClE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBjG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,OAAO,CAAC,cAAc,CAAC,CAS1B;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACnC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,CAAC,CAgCjE"}
@@ -1,94 +0,0 @@
1
- // Leest documentlayouts uit de gedeelde database. De module bepaalt zelf nooit
2
- // welke layout bij een documentsoort hoort: dat doet logistics_document_layout.
3
- import { pickDb } from "./pickApi.js";
4
- import { safeArray } from "./pickTypes.js";
5
- import { MissingLayoutError, } from "./layoutTypes.js";
6
- /** Vraagt de actieve layout voor een documentsoort op bij de Logistiek Engine. */
7
- export async function fetchLayoutRef(documentType) {
8
- const { data, error } = await pickDb.rpc("logistics_document_layout", {
9
- _document_code: documentType,
10
- });
11
- if (error)
12
- throw new Error(error.message);
13
- const ref = data;
14
- return ref && ref.layoutId ? ref : null;
15
- }
16
- /** Haalt de layoutrij plus elementen, variabelen en logo's op. */
17
- export async function fetchLayout(layoutId, documentType) {
18
- // Het pickscherm is openbaar. Lees daarom via de beperkte SECURITY DEFINER
19
- // functie in plaats van rechtstreeks door de RLS van de Layout maker heen.
20
- const { data, error } = await pickDb.rpc("pick_document_layout_data", {
21
- _layout_id: layoutId,
22
- });
23
- if (error)
24
- throw new Error(error.message);
25
- const bundle = data && typeof data === "object" && !Array.isArray(data)
26
- ? data
27
- : {};
28
- const layout = bundle["layout"];
29
- if (!layout || layout.actief === false)
30
- throw new MissingLayoutError(documentType);
31
- const elements = safeArray(bundle["elements"]);
32
- const variables = safeArray(bundle["variables"]);
33
- const logos = {};
34
- for (const logo of safeArray(bundle["logos"]))
35
- logos[logo.id] = logo;
36
- return { layout, elements, variables, logos };
37
- }
38
- /**
39
- * Bepaalt en laadt de layout voor een documentsoort. Gebruikt bij voorkeur de
40
- * layoutId die de Engine in de wachtrijregel heeft meegegeven.
41
- */
42
- export async function resolveLayout(args) {
43
- const documentType = args.documentType || "pakbon";
44
- let layoutId = args.layoutId ?? null;
45
- if (!layoutId) {
46
- const ref = await fetchLayoutRef(documentType);
47
- if (!ref)
48
- throw new MissingLayoutError(documentType);
49
- layoutId = ref.layoutId;
50
- }
51
- return fetchLayout(layoutId, documentType);
52
- }
53
- const LOGO_BUCKET = "layout-logos";
54
- /**
55
- * Zet de logo-records uit de layout om in de vorm die de layout-module
56
- * verwacht: een publiek bereikbare `viewUrl` per logo.
57
- */
58
- export async function logosMetViewUrl(logos) {
59
- const rijen = Object.values(logos ?? {});
60
- if (!rijen.length)
61
- return [];
62
- const storage = pickDb.storage;
63
- const paden = rijen.map((l) => l.bestandspad ?? l.bestand_url).filter(Boolean);
64
- const map = new Map();
65
- if (storage && paden.length) {
66
- try {
67
- const { data } = await storage.from(LOGO_BUCKET).createSignedUrls(paden, 60 * 60);
68
- for (const r of safeArray(data)) {
69
- if (r.path && r.signedUrl)
70
- map.set(r.path, r.signedUrl);
71
- }
72
- }
73
- catch {
74
- // geen leesrechten op ondertekende URL's: hieronder valt de publieke URL in
75
- }
76
- for (const pad of paden) {
77
- if (map.has(pad))
78
- continue;
79
- try {
80
- const { data } = storage.from(LOGO_BUCKET).getPublicUrl(pad);
81
- if (data?.publicUrl)
82
- map.set(pad, data.publicUrl);
83
- }
84
- catch {
85
- // logo blijft leeg
86
- }
87
- }
88
- }
89
- return rijen.map((l) => {
90
- const pad = l.bestandspad ?? l.bestand_url ?? "";
91
- const url = map.get(pad) ?? (/^https?:\/\//.test(pad) ? pad : null);
92
- return { id: l.id, naam: l.naam, viewUrl: url };
93
- });
94
- }
@@ -1,50 +0,0 @@
1
- import type { PapierFormaatDef } from "./documentTypes.js";
2
- export type InstellingType = "schakelaar" | "keuze" | "meerkeuze" | "tekst" | "getal" | "kleur";
3
- export interface InstellingDef {
4
- key: string;
5
- label: string;
6
- type: InstellingType;
7
- hint?: string;
8
- /** opties voor keuze / meerkeuze */
9
- opties?: {
10
- value: string;
11
- label: string;
12
- }[];
13
- standaard?: unknown;
14
- }
15
- export interface InstellingGroep {
16
- key: string;
17
- label: string;
18
- omschrijving?: string;
19
- instellingen: InstellingDef[];
20
- }
21
- export interface DocumentProfiel {
22
- /** komt overeen met document_layouts.documenttype */
23
- id: string;
24
- label: string;
25
- omschrijving: string;
26
- /** getoond in stap 1 van de wizard */
27
- primair?: boolean;
28
- /** formaten die bij dit documenttype horen */
29
- formaten: PapierFormaatDef[];
30
- standaardFormaat: string;
31
- standaardOrientatie: "portrait" | "landscape";
32
- /** entiteiten uit het veldregister die relevant zijn */
33
- entiteiten: string[];
34
- /** extra aanwijzing voor de AI-layoutimport */
35
- aiHint: string;
36
- /** kan per formaat een standaardprinter krijgen */
37
- printerPerFormaat?: boolean;
38
- groepen: InstellingGroep[];
39
- }
40
- export declare const STICKER_FORMATEN: PapierFormaatDef[];
41
- export declare const VERZENDLABEL_FORMATEN: PapierFormaatDef[];
42
- export declare const DOCUMENT_PROFIELEN: DocumentProfiel[];
43
- export declare function documentProfiel(id: string): DocumentProfiel;
44
- export declare function primaireProfielen(): DocumentProfiel[];
45
- export type DocumentConfig = Record<string, Record<string, unknown>>;
46
- /** Standaardwaarden van een profiel als opslagbaar configuratieobject. */
47
- export declare function standaardConfig(profiel: DocumentProfiel): DocumentConfig;
48
- /** Waarde uit de opgeslagen config, met terugval op de profielstandaard. */
49
- export declare function configWaarde(config: DocumentConfig | null | undefined, groep: InstellingGroep, inst: InstellingDef): unknown;
50
- //# sourceMappingURL=documentProfiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documentProfiles.d.ts","sourceRoot":"","sources":["../../../src/lib/layoutMaker/documentProfiles.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEhG,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,UAAU,GAAG,WAAW,CAAC;IAC9C,wDAAwD;IACxD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAyBD,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,EAO9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,EAOnD,CAAC;AA4YF,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAe/C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,CAK3D;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAErD;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAErE,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAUxE;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,aAAa,GAClB,OAAO,CAIT"}