@flowselections/pick-schermen-kwekers 1.0.82 → 1.0.87
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/fs-ui/DataTable.js +2 -2
- package/dist-lib/components/fs-ui/TableSkeleton.js +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/components/settings/ReferentiedataPickdocumentenCard.d.ts.map +1 -1
- package/dist-lib/components/settings/ReferentiedataPickdocumentenCard.js +10 -3
- package/dist-lib/hooks/usePickPrintStatus.d.ts +1 -1
- package/dist-lib/hooks/usePickPrintStatus.d.ts.map +1 -1
- package/dist-lib/hooks/usePickPrintStatus.js +4 -4
- 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/types.d.ts +69 -0
- 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 +2 -2
- package/schema/pickschermen.sql +176 -0
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;
|