@flowselections/logistiek-engine 1.0.230 → 1.0.233
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/db/schema/logistiek-engine.sql +110 -30
- 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 +383 -1
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/autoSend.functions.js +3 -3
- package/dist-lib/lib/cartCoverage.functions.js +1 -1
- package/dist-lib/lib/floridayDocuments.functions.js +1 -1
- package/dist-lib/lib/floridayPush.functions.js +1 -1
- package/dist-lib/lib/loadCarrierPlanning.functions.js +1 -1
- package/dist-lib/lib/logisticsRecalcJob.functions.js +1 -1
- package/dist-lib/lib/logisticsRecalculate.functions.js +2 -2
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/planPreview.functions.js +1 -1
- package/dist-lib/lib/plannerDiff.functions.js +1 -1
- package/dist-lib/lib/shellAdres.functions.js +2 -2
- package/package.json +2 -2
|
@@ -12860,36 +12860,7 @@ EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR inva
|
|
|
12860
12860
|
RAISE NOTICE 'logistiek-engine: functie public.logistics_order_is_topick overgeslagen (onderdeel van andere module ontbreekt): %', SQLERRM;
|
|
12861
12861
|
END $fsdo$;
|
|
12862
12862
|
|
|
12863
|
-
|
|
12864
|
-
EXECUTE $fsdef$CREATE OR REPLACE FUNCTION public.logistics_order_item_autolink()
|
|
12865
|
-
RETURNS trigger
|
|
12866
|
-
LANGUAGE plpgsql
|
|
12867
|
-
SECURITY DEFINER
|
|
12868
|
-
SET search_path TO 'public'
|
|
12869
|
-
AS $function$
|
|
12870
|
-
DECLARE m record;
|
|
12871
|
-
BEGIN
|
|
12872
|
-
IF NEW.product_id IS NULL THEN
|
|
12873
|
-
m := public.logistics_resolve_product_match(NEW.product_name::text);
|
|
12874
|
-
NEW.product_id := m.product_id;
|
|
12875
|
-
IF m.match_type IN ('naam', 'onbekend')
|
|
12876
|
-
AND (TG_OP = 'INSERT' OR NEW.product_name IS DISTINCT FROM OLD.product_name) THEN
|
|
12877
|
-
BEGIN
|
|
12878
|
-
INSERT INTO public.logistics_autolink_audit
|
|
12879
|
-
(order_id, order_item_id, order_source, product_name, product_id, match_type, product_floriday_id)
|
|
12880
|
-
SELECT NEW.order_id, NEW.id, o.order_source, NEW.product_name::text, m.product_id, m.match_type,
|
|
12881
|
-
(SELECT p.floriday_trade_item_id::text FROM public.products p WHERE p.id = m.product_id)
|
|
12882
|
-
FROM (SELECT NEW.order_id AS id) x LEFT JOIN public.orders o ON o.id = x.id;
|
|
12883
|
-
EXCEPTION WHEN others THEN NULL; -- loggen mag een orderregel nooit laten mislukken
|
|
12884
|
-
END;
|
|
12885
|
-
END IF;
|
|
12886
|
-
END IF;
|
|
12887
|
-
RETURN NEW;
|
|
12888
|
-
END $function$
|
|
12889
|
-
$fsdef$;
|
|
12890
|
-
EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR invalid_schema_name THEN
|
|
12891
|
-
RAISE NOTICE 'logistiek-engine: functie public.logistics_order_item_autolink overgeslagen (onderdeel van andere module ontbreekt): %', SQLERRM;
|
|
12892
|
-
END $fsdo$;
|
|
12863
|
+
-- logistics_order_item_autolink: zie blok 1.0.231 onderaan (hoogste niveau, geen DO-blok).
|
|
12893
12864
|
|
|
12894
12865
|
DO $fsdo$ BEGIN
|
|
12895
12866
|
EXECUTE $fsdef$CREATE OR REPLACE FUNCTION public.logistics_order_line_allocation(p_order_item_id uuid)
|
|
@@ -39729,3 +39700,112 @@ BEGIN
|
|
|
39729
39700
|
END $function$;
|
|
39730
39701
|
REVOKE ALL ON FUNCTION public.logistics_ladingdrager_resolve_plan(text) FROM authenticated;
|
|
39731
39702
|
|
|
39703
|
+
-- logistiek-engine 1.0.231: de Engine is de enige eigenaar van het koppelen van orderregels.
|
|
39704
|
+
-- Floriday-regels (met source_line_key) koppelen alleen via Voorraad (voorraad_orderregel_trade_item_bron), nooit op naam.
|
|
39705
|
+
-- Functies staan op het hoogste niveau (geen DO-blok), zodat het update-dashboard ze meeneemt.
|
|
39706
|
+
|
|
39707
|
+
ALTER TABLE IF EXISTS public.logistics_autolink_audit ADD COLUMN IF NOT EXISTS bron text;
|
|
39708
|
+
ALTER TABLE IF EXISTS public.logistics_autolink_audit ADD COLUMN IF NOT EXISTS status text;
|
|
39709
|
+
ALTER TABLE IF EXISTS public.logistics_autolink_audit ADD COLUMN IF NOT EXISTS source_line_key text;
|
|
39710
|
+
ALTER TABLE IF EXISTS public.logistics_autolink_audit ADD COLUMN IF NOT EXISTS melding text;
|
|
39711
|
+
|
|
39712
|
+
CREATE OR REPLACE FUNCTION public.logistics_order_item_autolink()
|
|
39713
|
+
RETURNS trigger
|
|
39714
|
+
LANGUAGE plpgsql
|
|
39715
|
+
SECURITY DEFINER
|
|
39716
|
+
SET search_path TO 'public'
|
|
39717
|
+
AS $function$
|
|
39718
|
+
DECLARE
|
|
39719
|
+
m record;
|
|
39720
|
+
v_key text := NULLIF(btrim(COALESCE(NEW.source_line_key, '')), '');
|
|
39721
|
+
v_res jsonb;
|
|
39722
|
+
v_status text;
|
|
39723
|
+
v_pid uuid;
|
|
39724
|
+
v_melding text;
|
|
39725
|
+
BEGIN
|
|
39726
|
+
-- Een al gevulde product_id nooit overschrijven.
|
|
39727
|
+
IF NEW.product_id IS NOT NULL THEN RETURN NEW; END IF;
|
|
39728
|
+
|
|
39729
|
+
IF v_key IS NOT NULL THEN
|
|
39730
|
+
-- Floriday-regel: alleen bij het aanmaken via Voorraad koppelen; nooit op naam gokken.
|
|
39731
|
+
IF TG_OP <> 'INSERT' THEN RETURN NEW; END IF;
|
|
39732
|
+
BEGIN
|
|
39733
|
+
IF to_regprocedure('public.voorraad_orderregel_trade_item_bron(uuid,text)') IS NULL THEN
|
|
39734
|
+
v_status := 'voorraad_ontbreekt';
|
|
39735
|
+
v_melding := 'Voorraad-functie voorraad_orderregel_trade_item_bron ontbreekt; regel opgeslagen zonder artikel';
|
|
39736
|
+
ELSE
|
|
39737
|
+
EXECUTE 'SELECT public.voorraad_orderregel_trade_item_bron($1, $2)' INTO v_res USING NEW.order_id, v_key;
|
|
39738
|
+
v_status := COALESCE(NULLIF(v_res->>'status', ''), 'onbekend');
|
|
39739
|
+
IF v_status IN ('eenduidig', 'ok') THEN
|
|
39740
|
+
BEGIN
|
|
39741
|
+
v_pid := NULLIF(v_res->>'product_id', '')::uuid;
|
|
39742
|
+
EXCEPTION WHEN others THEN v_pid := NULL;
|
|
39743
|
+
END;
|
|
39744
|
+
-- Alleen een bestaand artikel (ook gearchiveerd) koppelen.
|
|
39745
|
+
IF v_pid IS NOT NULL AND EXISTS (SELECT 1 FROM public.products p WHERE p.id = v_pid) THEN
|
|
39746
|
+
NEW.product_id := v_pid;
|
|
39747
|
+
ELSE
|
|
39748
|
+
v_melding := 'Voorraad gaf een artikel dat niet bestaat; regel opgeslagen zonder artikel';
|
|
39749
|
+
v_pid := NULL;
|
|
39750
|
+
END IF;
|
|
39751
|
+
END IF;
|
|
39752
|
+
END IF;
|
|
39753
|
+
EXCEPTION WHEN others THEN
|
|
39754
|
+
v_status := 'voorraad_fout';
|
|
39755
|
+
v_melding := left(SQLERRM, 500);
|
|
39756
|
+
v_pid := NULL;
|
|
39757
|
+
NEW.product_id := NULL;
|
|
39758
|
+
END;
|
|
39759
|
+
BEGIN
|
|
39760
|
+
INSERT INTO public.logistics_autolink_audit
|
|
39761
|
+
(order_id, order_item_id, order_source, product_name, product_id, match_type, product_floriday_id,
|
|
39762
|
+
bron, status, source_line_key, melding)
|
|
39763
|
+
SELECT NEW.order_id, NEW.id, o.order_source, NEW.product_name::text, v_pid, v_status,
|
|
39764
|
+
COALESCE(v_res->>'trade_item_id', (SELECT p.floriday_trade_item_id::text FROM public.products p WHERE p.id = v_pid)),
|
|
39765
|
+
'voorraad_floriday', v_status, v_key, v_melding
|
|
39766
|
+
FROM (SELECT NEW.order_id AS id) x LEFT JOIN public.orders o ON o.id = x.id;
|
|
39767
|
+
EXCEPTION WHEN others THEN NULL; -- loggen mag een orderregel nooit laten mislukken
|
|
39768
|
+
END;
|
|
39769
|
+
RETURN NEW;
|
|
39770
|
+
END IF;
|
|
39771
|
+
|
|
39772
|
+
-- Mailbox- en handmatige orders (zonder source_line_key): koppelen op naam, zoals voorheen.
|
|
39773
|
+
BEGIN
|
|
39774
|
+
m := public.logistics_resolve_product_match(NEW.product_name::text);
|
|
39775
|
+
NEW.product_id := m.product_id;
|
|
39776
|
+
EXCEPTION WHEN others THEN
|
|
39777
|
+
NEW.product_id := NULL;
|
|
39778
|
+
RETURN NEW;
|
|
39779
|
+
END;
|
|
39780
|
+
IF m.match_type IN ('naam', 'onbekend')
|
|
39781
|
+
AND (TG_OP = 'INSERT' OR NEW.product_name IS DISTINCT FROM OLD.product_name) THEN
|
|
39782
|
+
BEGIN
|
|
39783
|
+
INSERT INTO public.logistics_autolink_audit
|
|
39784
|
+
(order_id, order_item_id, order_source, product_name, product_id, match_type, product_floriday_id, bron, status)
|
|
39785
|
+
SELECT NEW.order_id, NEW.id, o.order_source, NEW.product_name::text, m.product_id, m.match_type,
|
|
39786
|
+
(SELECT p.floriday_trade_item_id::text FROM public.products p WHERE p.id = m.product_id),
|
|
39787
|
+
'naam', m.match_type
|
|
39788
|
+
FROM (SELECT NEW.order_id AS id) x LEFT JOIN public.orders o ON o.id = x.id;
|
|
39789
|
+
EXCEPTION WHEN others THEN NULL;
|
|
39790
|
+
END;
|
|
39791
|
+
END IF;
|
|
39792
|
+
RETURN NEW;
|
|
39793
|
+
END $function$;
|
|
39794
|
+
|
|
39795
|
+
REVOKE ALL ON FUNCTION public.logistics_order_item_autolink() FROM PUBLIC, anon, authenticated;
|
|
39796
|
+
GRANT EXECUTE ON FUNCTION public.logistics_order_item_autolink() TO service_role;
|
|
39797
|
+
|
|
39798
|
+
CREATE OR REPLACE FUNCTION public.logistics_install_check_231()
|
|
39799
|
+
RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SET search_path TO 'public' AS $$
|
|
39800
|
+
SELECT 'koppelen via Voorraad', position('voorraad_orderregel_trade_item_bron' IN pg_get_functiondef('public.logistics_order_item_autolink()'::regprocedure)) > 0,
|
|
39801
|
+
'Floriday-regels koppelen via Voorraad, nooit op naam'
|
|
39802
|
+
UNION ALL SELECT 'audit-kolommen', EXISTS (SELECT 1 FROM information_schema.columns
|
|
39803
|
+
WHERE table_schema = 'public' AND table_name = 'logistics_autolink_audit' AND column_name = 'bron'),
|
|
39804
|
+
'Koppelaudit heeft bron en status'
|
|
39805
|
+
UNION ALL SELECT 'triggervolgorde', 'trg_logistics_order_item_autolink' < 'trg_order_items_autolink',
|
|
39806
|
+
'Engine-koppeling vuurt vóór de Voorraad-trigger'
|
|
39807
|
+
UNION ALL SELECT 'vingerafdruk met artikel', position('product_id' IN pg_get_functiondef('public.logistics_plan_inhoud_fp(uuid)'::regprocedure)) > 0,
|
|
39808
|
+
'Een later gekoppeld artikel biedt de order opnieuw aan'
|
|
39809
|
+
$$;
|
|
39810
|
+
REVOKE ALL ON FUNCTION public.logistics_install_check_231() FROM PUBLIC, anon, authenticated;
|
|
39811
|
+
GRANT EXECUTE ON FUNCTION public.logistics_install_check_231() TO service_role;
|
|
@@ -45,7 +45,7 @@ function createSupabaseClient() {
|
|
|
45
45
|
}
|
|
46
46
|
let _supabase;
|
|
47
47
|
// Import the supabase client like this:
|
|
48
|
-
// import { supabase } from "
|
|
48
|
+
// import { supabase } from "../../integrations/supabase/client.js";
|
|
49
49
|
export const supabase = new Proxy({}, {
|
|
50
50
|
get(_, prop, receiver) {
|
|
51
51
|
if (!_supabase)
|
|
@@ -20,7 +20,7 @@ function createSupabaseAdminClient() {
|
|
|
20
20
|
let _supabaseAdmin;
|
|
21
21
|
// Server-side Supabase client with service role - bypasses RLS
|
|
22
22
|
// SECURITY: Only use this for trusted server-side operations, never expose to client code
|
|
23
|
-
// Import like: import { supabaseAdmin } from "
|
|
23
|
+
// Import like: import { supabaseAdmin } from "../../integrations/supabase/client.server.js";
|
|
24
24
|
export const supabaseAdmin = new Proxy({}, {
|
|
25
25
|
get(_, prop, receiver) {
|
|
26
26
|
if (!_supabaseAdmin)
|