@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.
- package/dist-lib/components/PickPublicPage.d.ts.map +1 -1
- package/dist-lib/components/PickPublicPage.js +12 -0
- package/dist-lib/components/pick/DocumentChoiceMelding.d.ts +1 -1
- package/dist-lib/components/pick/DocumentChoiceMelding.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +377 -159
- package/dist-lib/components/pick/werkvloer/Werkvloer.d.ts +52 -0
- package/dist-lib/components/pick/werkvloer/Werkvloer.d.ts.map +1 -0
- package/dist-lib/components/pick/werkvloer/Werkvloer.js +33 -0
- package/dist-lib/hooks/useCartStickerStates.d.ts +1 -1
- package/dist-lib/hooks/useCartStickerStates.d.ts.map +1 -1
- package/dist-lib/hooks/usePickConfig.d.ts +11 -11
- package/dist-lib/hooks/usePickConfig.d.ts.map +1 -1
- package/dist-lib/hooks/usePickPrintStatus.d.ts +3 -3
- package/dist-lib/hooks/usePickPrintStatus.d.ts.map +1 -1
- package/dist-lib/hooks/usePickPrintStatus.js +4 -4
- package/dist-lib/hooks/usePickQueue.d.ts +3 -3
- package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
- package/dist-lib/hooks/usePickReferenceData.d.ts +1 -1
- package/dist-lib/hooks/usePickReferenceData.d.ts.map +1 -1
- package/dist-lib/hooks/useShippingNoteStatus.d.ts +1 -1
- package/dist-lib/hooks/useShippingNoteStatus.d.ts.map +1 -1
- package/dist-lib/hooks/useShippingNoteStatus.js +11 -9
- package/dist-lib/hooks/useWerkvloer.d.ts +20 -0
- package/dist-lib/hooks/useWerkvloer.d.ts.map +1 -0
- package/dist-lib/hooks/useWerkvloer.js +98 -0
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1331 -91
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pickPublicStatus.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickPublicStatus.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickPublicStatus.test.js +48 -0
- package/dist-lib/lib/labels.d.ts +2 -0
- package/dist-lib/lib/labels.d.ts.map +1 -1
- package/dist-lib/lib/labels.js +41 -0
- package/dist-lib/lib/pick142.d.ts.map +1 -1
- package/dist-lib/lib/pick142.js +7 -10
- package/dist-lib/lib/pick156.d.ts.map +1 -1
- package/dist-lib/lib/pick156.js +6 -20
- package/dist-lib/lib/pick159.js +1 -1
- package/dist-lib/lib/pickApi.d.ts +20 -0
- package/dist-lib/lib/pickApi.d.ts.map +1 -1
- package/dist-lib/lib/pickApi.js +27 -0
- package/dist-lib/lib/shippingNoteStatus.d.ts +1 -1
- package/dist-lib/lib/shippingNoteStatus.d.ts.map +1 -1
- package/dist-lib/lib/shippingNoteStatus.js +5 -2
- package/dist-lib/lib/werkvloer.d.ts +40 -0
- package/dist-lib/lib/werkvloer.d.ts.map +1 -0
- package/dist-lib/lib/werkvloer.js +121 -0
- package/dist-lib/lib/werkvloer.test.d.ts +2 -0
- package/dist-lib/lib/werkvloer.test.d.ts.map +1 -0
- package/dist-lib/lib/werkvloer.test.js +49 -0
- package/package.json +1 -1
- package/schema/pickschermen.sql +176 -0
- package/dist-lib/lib/layoutApi.d.ts +0 -23
- package/dist-lib/lib/layoutApi.d.ts.map +0 -1
- package/dist-lib/lib/layoutApi.js +0 -94
- package/dist-lib/lib/layoutMaker/documentProfiles.d.ts +0 -50
- package/dist-lib/lib/layoutMaker/documentProfiles.d.ts.map +0 -1
- package/dist-lib/lib/layoutMaker/documentProfiles.js +0 -458
- package/dist-lib/lib/layoutMaker/documentTypes.d.ts +0 -123
- package/dist-lib/lib/layoutMaker/documentTypes.d.ts.map +0 -1
- package/dist-lib/lib/layoutMaker/documentTypes.js +0 -74
- package/dist-lib/lib/layoutMaker/logoLibrary.d.ts +0 -13
- package/dist-lib/lib/layoutMaker/logoLibrary.d.ts.map +0 -1
- package/dist-lib/lib/layoutMaker/logoLibrary.js +0 -54
- package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts +0 -196
- package/dist-lib/lib/layoutMaker/pakbonBuilder.d.ts.map +0 -1
- package/dist-lib/lib/layoutMaker/pakbonBuilder.js +0 -813
- package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts +0 -48
- package/dist-lib/lib/layoutMaker/pakbonHtml.d.ts.map +0 -1
- package/dist-lib/lib/layoutMaker/pakbonHtml.js +0 -703
- package/dist-lib/lib/layoutRenderer.d.ts +0 -7
- package/dist-lib/lib/layoutRenderer.d.ts.map +0 -1
- package/dist-lib/lib/layoutRenderer.js +0 -233
- package/dist-lib/lib/layoutTypes.d.ts +0 -84
- package/dist-lib/lib/layoutTypes.d.ts.map +0 -1
- package/dist-lib/lib/layoutTypes.js +0 -25
- package/dist-lib/lib/orderContext.d.ts +0 -50
- package/dist-lib/lib/orderContext.d.ts.map +0 -1
- package/dist-lib/lib/orderContext.js +0 -162
- package/dist-lib/lib/pakbonOrderInput.d.ts +0 -8
- package/dist-lib/lib/pakbonOrderInput.d.ts.map +0 -1
- package/dist-lib/lib/pakbonOrderInput.js +0 -150
package/schema/pickschermen.sql
CHANGED
|
@@ -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"}
|