@flowselections/logistiek-engine 1.0.214 → 1.0.216
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 +230 -0
- package/dist-lib/components/BeheerPage.d.ts.map +1 -1
- package/dist-lib/components/BeheerPage.js +2 -1
- package/dist-lib/components/ProefindelingPage.d.ts +4 -0
- package/dist-lib/components/ProefindelingPage.d.ts.map +1 -0
- package/dist-lib/components/ProefindelingPage.js +102 -0
- package/dist-lib/index.d.ts +2 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -0
- package/dist-lib/integrations/supabase/types.d.ts +831 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +28 -70
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/package.json +7 -1
|
@@ -36952,3 +36952,233 @@ RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SECURITY D
|
|
|
36952
36952
|
UNION ALL SELECT 'guard', to_regprocedure('public.logistics_acc_guard(text,text)') IS NOT NULL, 'Toegangscontrole aanwezig'
|
|
36953
36953
|
$$;
|
|
36954
36954
|
GRANT EXECUTE ON FUNCTION public.logistics_install_check_213() TO authenticated, service_role;
|
|
36955
|
+
|
|
36956
|
+
-- ===== 1.0.215 =====
|
|
36957
|
+
|
|
36958
|
+
CREATE OR REPLACE FUNCTION public.logistics_product_hoofdverpakking(p_product_id uuid)
|
|
36959
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public'
|
|
36960
|
+
AS $function$
|
|
36961
|
+
DECLARE v_lc text; v_found boolean := false; v_heeft_lc boolean; v_n int; v_sid uuid; v_lijst text;
|
|
36962
|
+
BEGIN
|
|
36963
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_product_hoofdverpakking');
|
|
36964
|
+
IF to_regclass('public.product_packings') IS NULL THEN RETURN NULL; END IF;
|
|
36965
|
+
SELECT EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'public.product_packings'::regclass AND attname = 'load_carrier' AND NOT attisdropped) INTO v_heeft_lc;
|
|
36966
|
+
IF NOT v_heeft_lc THEN
|
|
36967
|
+
EXECUTE 'SELECT true FROM public.product_packings WHERE product_id = $1 AND is_primary LIMIT 1' INTO v_found USING p_product_id;
|
|
36968
|
+
RETURN jsonb_build_object('aanwezig', coalesce(v_found, false), 'ladingdrager', NULL, 'bron', CASE WHEN v_found THEN 'product' END);
|
|
36969
|
+
END IF;
|
|
36970
|
+
-- Stap 2: primaire verpakking van het product zelf.
|
|
36971
|
+
EXECUTE 'SELECT true, nullif(btrim(load_carrier::text), '''') FROM public.product_packings WHERE product_id = $1 AND is_primary
|
|
36972
|
+
ORDER BY sort_order NULLS LAST, created_at LIMIT 1' INTO v_found, v_lc USING p_product_id;
|
|
36973
|
+
IF coalesce(v_found, false) AND v_lc IS NOT NULL THEN
|
|
36974
|
+
RETURN jsonb_build_object('aanwezig', true, 'ladingdrager', v_lc, 'bron', 'product');
|
|
36975
|
+
END IF;
|
|
36976
|
+
-- Stap 3 (1.0.215): eigen artikel → voorraadartikel met products.floriday_trade_item_id = dit product-id.
|
|
36977
|
+
IF EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = 'public.products'::regclass AND attname = 'floriday_trade_item_id' AND NOT attisdropped) THEN
|
|
36978
|
+
EXECUTE $q$
|
|
36979
|
+
SELECT count(DISTINCT x.lc), min(x.lc), (array_agg(x.pid ORDER BY x.pid))[1], string_agg(DISTINCT x.lc, ', ')
|
|
36980
|
+
FROM (SELECT DISTINCT ON (s.id) s.id pid, nullif(btrim(pp.load_carrier::text), '') lc
|
|
36981
|
+
FROM public.products s JOIN public.product_packings pp ON pp.product_id = s.id AND pp.is_primary
|
|
36982
|
+
WHERE s.floriday_trade_item_id = $1::text AND s.id <> $1
|
|
36983
|
+
ORDER BY s.id, pp.sort_order NULLS LAST, pp.created_at) x
|
|
36984
|
+
WHERE x.lc IS NOT NULL$q$
|
|
36985
|
+
INTO v_n, v_lc, v_sid, v_lijst USING p_product_id;
|
|
36986
|
+
IF coalesce(v_n, 0) = 1 THEN
|
|
36987
|
+
RETURN jsonb_build_object('aanwezig', true, 'ladingdrager', v_lc, 'bron', 'voorraadartikel', 'voorraadartikelId', v_sid);
|
|
36988
|
+
ELSIF coalesce(v_n, 0) > 1 THEN
|
|
36989
|
+
RETURN jsonb_build_object('aanwezig', false, 'ladingdrager', NULL, 'bron', 'voorraadartikel',
|
|
36990
|
+
'fout', format('gekoppelde voorraadartikelen hebben verschillende ladingdragers (%s)', v_lijst));
|
|
36991
|
+
END IF;
|
|
36992
|
+
END IF;
|
|
36993
|
+
RETURN jsonb_build_object('aanwezig', coalesce(v_found, false), 'ladingdrager', NULL, 'bron', CASE WHEN v_found THEN 'product' END);
|
|
36994
|
+
END $function$;
|
|
36995
|
+
GRANT EXECUTE ON FUNCTION public.logistics_product_hoofdverpakking(uuid) TO authenticated, service_role;
|
|
36996
|
+
|
|
36997
|
+
-- Gedeelde keuze per planregel: regel → product → voorraadartikel → Floriday-verpakking → werkwijze (waarschuwing).
|
|
36998
|
+
-- p_regels: [{ "key": text, "regel_code": text|null, "product_id": uuid|null }], max 2000.
|
|
36999
|
+
CREATE OR REPLACE FUNCTION public.logistics_ladingdrager_kies(p_regels jsonb)
|
|
37000
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public'
|
|
37001
|
+
AS $function$
|
|
37002
|
+
DECLARE e jsonb; uit jsonb := '{}'; rc jsonb; hv jsonb; v_pid uuid; v_key text; v_def text; v_ti text; v_lc text;
|
|
37003
|
+
v_cache boolean := to_regclass('public.floriday_trade_items_cache') IS NOT NULL;
|
|
37004
|
+
BEGIN
|
|
37005
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_ladingdrager_kies');
|
|
37006
|
+
IF p_regels IS NULL OR jsonb_typeof(p_regels) <> 'array' THEN RETURN '{}'; END IF;
|
|
37007
|
+
IF jsonb_array_length(p_regels) > 2000 THEN
|
|
37008
|
+
RAISE EXCEPTION 'Maximaal 2000 regels per aanroep.' USING ERRCODE = '22023';
|
|
37009
|
+
END IF;
|
|
37010
|
+
SELECT nullif(btrim(coalesce(s.settings->'karrenindeling'->'fields'->>'default_carrier_type', s.settings->'karrenindeling'->>'default_carrier_type')), '')
|
|
37011
|
+
INTO v_def FROM public.logistics_rule_configs s WHERE s.is_active ORDER BY s.updated_at DESC LIMIT 1;
|
|
37012
|
+
IF v_def IS NULL OR NOT EXISTS (SELECT 1 FROM public.load_carrier_types t WHERE t.is_active AND t.code = v_def) THEN
|
|
37013
|
+
SELECT t.code INTO v_def FROM public.load_carrier_types t WHERE t.is_active AND t.is_default ORDER BY t.sort_order LIMIT 1;
|
|
37014
|
+
END IF;
|
|
37015
|
+
FOR e IN SELECT x FROM jsonb_array_elements(p_regels) x LOOP
|
|
37016
|
+
v_key := e->>'key';
|
|
37017
|
+
CONTINUE WHEN v_key IS NULL;
|
|
37018
|
+
v_pid := CASE WHEN nullif(btrim(e->>'product_id'), '') ~* '^[0-9a-f-]{36}$' THEN (e->>'product_id')::uuid END;
|
|
37019
|
+
-- 1. orderregel
|
|
37020
|
+
rc := public.logistics_ladingdrager_resolve(e->>'regel_code');
|
|
37021
|
+
IF rc->>'code' IS NOT NULL THEN
|
|
37022
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', rc->>'code', 'bron', 'orderregel', 'invoer', rc->>'invoer'));
|
|
37023
|
+
CONTINUE;
|
|
37024
|
+
END IF;
|
|
37025
|
+
-- 2/3. product, dan voorraadartikel
|
|
37026
|
+
IF v_pid IS NOT NULL THEN
|
|
37027
|
+
hv := public.logistics_product_hoofdverpakking(v_pid);
|
|
37028
|
+
IF nullif(hv->>'ladingdrager', '') IS NOT NULL THEN
|
|
37029
|
+
rc := public.logistics_ladingdrager_resolve(hv->>'ladingdrager');
|
|
37030
|
+
IF rc->>'code' IS NOT NULL THEN
|
|
37031
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', rc->>'code', 'bron', hv->>'bron', 'invoer', rc->>'invoer',
|
|
37032
|
+
'voorraadartikelId', hv->'voorraadartikelId'));
|
|
37033
|
+
CONTINUE;
|
|
37034
|
+
ELSIF upper(hv->>'ladingdrager') = 'NONE' OR rc->>'fout' = 'ladingdrager ontbreekt' THEN
|
|
37035
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', NULL, 'bron', hv->>'bron', 'fout', 'ladingdrager ontbreekt (geen ladingdrager)'));
|
|
37036
|
+
CONTINUE;
|
|
37037
|
+
END IF;
|
|
37038
|
+
ELSIF hv->>'fout' IS NOT NULL THEN
|
|
37039
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', NULL, 'bron', hv->>'bron', 'fout', hv->>'fout'));
|
|
37040
|
+
CONTINUE;
|
|
37041
|
+
END IF;
|
|
37042
|
+
-- 3b. Floriday-verpakking van het artikel (bestaand gedrag sinds 1.0.190).
|
|
37043
|
+
IF v_cache THEN
|
|
37044
|
+
v_lc := NULL;
|
|
37045
|
+
SELECT p.floriday_trade_item_id INTO v_ti FROM public.products p WHERE p.id = v_pid;
|
|
37046
|
+
IF v_ti IS NOT NULL THEN
|
|
37047
|
+
EXECUTE $q$SELECT c->>'loadCarrier' FROM public.floriday_trade_items_cache t,
|
|
37048
|
+
jsonb_array_elements(coalesce(t.data->'packingConfigurations', '[]')) c
|
|
37049
|
+
WHERE t.floriday_id = $1 AND NOT coalesce(t.is_deleted, false) AND nullif(c->>'loadCarrier', '') IS NOT NULL
|
|
37050
|
+
ORDER BY coalesce((c->>'primary')::boolean, false) DESC LIMIT 1$q$ INTO v_lc USING v_ti;
|
|
37051
|
+
rc := public.logistics_ladingdrager_resolve(v_lc);
|
|
37052
|
+
IF rc->>'code' IS NOT NULL THEN
|
|
37053
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', rc->>'code', 'bron', 'floriday_verpakking', 'invoer', rc->>'invoer'));
|
|
37054
|
+
CONTINUE;
|
|
37055
|
+
END IF;
|
|
37056
|
+
END IF;
|
|
37057
|
+
END IF;
|
|
37058
|
+
END IF;
|
|
37059
|
+
-- 4. werkwijze, zichtbaar
|
|
37060
|
+
uit := uit || jsonb_build_object(v_key, jsonb_build_object('code', v_def, 'bron', CASE WHEN v_def IS NOT NULL THEN 'werkwijze' END,
|
|
37061
|
+
'waarschuwing', CASE WHEN v_def IS NOT NULL THEN 'ladingdrager uit de werkwijze, niet uit het artikel' END,
|
|
37062
|
+
'fout', CASE WHEN v_def IS NULL THEN 'ladingdrager ontbreekt' END));
|
|
37063
|
+
END LOOP;
|
|
37064
|
+
RETURN uit;
|
|
37065
|
+
END $function$;
|
|
37066
|
+
GRANT EXECUTE ON FUNCTION public.logistics_ladingdrager_kies(jsonb) TO authenticated, service_role;
|
|
37067
|
+
|
|
37068
|
+
-- Kar die volgens de huidige regels anders zou worden ingedeeld (geen blokkade).
|
|
37069
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_regels_verouderd_core(p_cart_id uuid)
|
|
37070
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SET search_path TO 'public'
|
|
37071
|
+
AS $function$
|
|
37072
|
+
DECLARE v_cart record; v_reg jsonb; k jsonb; v_codes text[]; v_naam text; v_max int; v_lagen numeric; v_lh numeric;
|
|
37073
|
+
BEGIN
|
|
37074
|
+
IF p_cart_id IS NULL THEN RETURN NULL; END IF;
|
|
37075
|
+
SELECT c.id, c.cart_number, c.carrier_type, c.total_layers_used INTO v_cart FROM public.order_carts c WHERE c.id = p_cart_id;
|
|
37076
|
+
IF v_cart.id IS NULL THEN RETURN NULL; END IF;
|
|
37077
|
+
IF nullif(v_cart.carrier_type, '') IS NULL OR v_cart.carrier_type IN ('loose', 'none', 'NONE') THEN
|
|
37078
|
+
RETURN jsonb_build_object('reden', 'geen_ladingdrager', 'tekst', 'Kar staat zonder ladingdrager; een product zonder ladingdrager kan niet op een kar.');
|
|
37079
|
+
END IF;
|
|
37080
|
+
SELECT coalesce(jsonb_agg(jsonb_build_object('key', ci.id::text, 'regel_code', oi.load_carrier_type, 'product_id', coalesce(ci.product_id, oi.product_id))), '[]')
|
|
37081
|
+
INTO v_reg
|
|
37082
|
+
FROM public.order_cart_items ci LEFT JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
37083
|
+
WHERE ci.cart_id = p_cart_id AND coalesce(ci.crates, 0) > 0;
|
|
37084
|
+
IF jsonb_array_length(v_reg) > 0 THEN
|
|
37085
|
+
k := public.logistics_ladingdrager_kies(v_reg);
|
|
37086
|
+
SELECT array_agg(DISTINCT x.value->>'code') FILTER (WHERE x.value->>'code' IS NOT NULL AND x.value->>'bron' <> 'werkwijze')
|
|
37087
|
+
INTO v_codes FROM jsonb_each(k) x;
|
|
37088
|
+
IF coalesce(cardinality(v_codes), 0) > 0 AND NOT (v_cart.carrier_type = ANY(v_codes)) THEN
|
|
37089
|
+
SELECT coalesce(t.name, t.code) INTO v_naam FROM public.load_carrier_types t WHERE t.code = v_codes[1] LIMIT 1;
|
|
37090
|
+
RETURN jsonb_build_object('reden', 'andere_ladingdrager', 'ladingdrager', v_codes[1],
|
|
37091
|
+
'tekst', format('Volgens het artikel hoort deze kar op %s, niet op %s.', coalesce(v_naam, v_codes[1]),
|
|
37092
|
+
coalesce((SELECT coalesce(t.name, t.code) FROM public.load_carrier_types t WHERE t.code = v_cart.carrier_type LIMIT 1), v_cart.carrier_type)));
|
|
37093
|
+
END IF;
|
|
37094
|
+
END IF;
|
|
37095
|
+
-- Fysieke hoogte: lagen × laaghoogte (max(fusthoogte, planthoogte)) boven de hoogte van de ladingdrager.
|
|
37096
|
+
SELECT t.max_height_cm INTO v_max FROM public.load_carrier_types t WHERE t.code = v_cart.carrier_type ORDER BY t.is_active DESC LIMIT 1;
|
|
37097
|
+
IF v_max IS NOT NULL AND v_max > 0 THEN
|
|
37098
|
+
SELECT max(greatest(coalesce(m.fust_height_mm / 10.0, 0), coalesce(m.plant_height_cm, 0))) INTO v_lh
|
|
37099
|
+
FROM public.logistics_product_maten((SELECT array_agg(DISTINCT ci.product_id) FROM public.order_cart_items ci
|
|
37100
|
+
WHERE ci.cart_id = p_cart_id AND ci.product_id IS NOT NULL)) m
|
|
37101
|
+
WHERE m.fust_height_mm IS NOT NULL AND m.plant_height_cm IS NOT NULL;
|
|
37102
|
+
v_lagen := coalesce(v_cart.total_layers_used,
|
|
37103
|
+
(SELECT sum(ci.crates::numeric / nullif(ci.crates_per_layer, 0)) FROM public.order_cart_items ci WHERE ci.cart_id = p_cart_id));
|
|
37104
|
+
IF v_lh IS NOT NULL AND v_lh > 0 AND v_lagen IS NOT NULL
|
|
37105
|
+
AND ceil(v_lagen - 0.001) > floor(v_max * (1 + public.logistics_laag_tolerantie()) / v_lh) THEN
|
|
37106
|
+
RETURN jsonb_build_object('reden', 'te_veel_lagen', 'tekst',
|
|
37107
|
+
format('%s lagen van %s cm passen niet in %s cm; maximaal %s lagen.', trim_scale(round(v_lagen, 1)), trim_scale(round(v_lh, 1)), v_max,
|
|
37108
|
+
floor(v_max * (1 + public.logistics_laag_tolerantie()) / v_lh)));
|
|
37109
|
+
END IF;
|
|
37110
|
+
END IF;
|
|
37111
|
+
RETURN NULL;
|
|
37112
|
+
END $function$;
|
|
37113
|
+
GRANT EXECUTE ON FUNCTION public.logistics_cart_regels_verouderd_core(uuid) TO service_role;
|
|
37114
|
+
|
|
37115
|
+
-- ===== 1.0.215 =====
|
|
37116
|
+
|
|
37117
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_verouderd_core(p_cart_id uuid)
|
|
37118
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SET search_path TO 'public'
|
|
37119
|
+
AS $function$
|
|
37120
|
+
DECLARE v_nr text; v_n int; v_live int; v_afw text[]; v_r jsonb;
|
|
37121
|
+
BEGIN
|
|
37122
|
+
IF p_cart_id IS NULL THEN RETURN NULL; END IF;
|
|
37123
|
+
SELECT cart_number::text INTO v_nr FROM public.order_carts WHERE id = p_cart_id;
|
|
37124
|
+
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'order_items' AND column_name = 'quarantined_at') THEN
|
|
37125
|
+
SELECT count(*) INTO v_n FROM public.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
37126
|
+
WHERE ci.cart_id = p_cart_id AND oi.quarantined_at IS NOT NULL;
|
|
37127
|
+
IF coalesce(v_n, 0) > 0 THEN
|
|
37128
|
+
RETURN jsonb_build_object('verouderd', true, 'reden', 'quarantaine', 'regelsInQuarantaine', v_n,
|
|
37129
|
+
'tekst', format('Kar %s heeft %s regel(s) in quarantaine.', coalesce(v_nr, '?'), v_n),
|
|
37130
|
+
'blokkade', jsonb_build_object('code', 'kar_verouderd',
|
|
37131
|
+
'tekst', format('Kar %s heeft %s regel(s) die Verkoop in quarantaine heeft gezet. Deel de niet-geprinte karren opnieuw in.', coalesce(v_nr, '?'), v_n)));
|
|
37132
|
+
END IF;
|
|
37133
|
+
SELECT count(*) INTO v_live FROM public.order_cart_items ci LEFT JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
37134
|
+
WHERE ci.cart_id = p_cart_id AND coalesce(ci.crates, 0) > 0 AND oi.quarantined_at IS NULL;
|
|
37135
|
+
ELSE
|
|
37136
|
+
SELECT count(*) INTO v_live FROM public.order_cart_items ci WHERE ci.cart_id = p_cart_id AND coalesce(ci.crates, 0) > 0;
|
|
37137
|
+
END IF;
|
|
37138
|
+
IF coalesce(v_live, 0) = 0 THEN
|
|
37139
|
+
RETURN jsonb_build_object('verouderd', true, 'reden', 'leeg', 'tekst', format('Kar %s heeft geen regels meer.', coalesce(v_nr, '?')),
|
|
37140
|
+
'blokkade', jsonb_build_object('code', 'kar_leeg',
|
|
37141
|
+
'tekst', format('Kar %s heeft geen regels meer. Deel de niet-geprinte karren opnieuw in.', coalesce(v_nr, '?'))));
|
|
37142
|
+
END IF;
|
|
37143
|
+
v_afw := public.logistics_cart_aantal_afwijking_core(p_cart_id);
|
|
37144
|
+
IF coalesce(cardinality(v_afw), 0) > 0 THEN
|
|
37145
|
+
RETURN jsonb_build_object('verouderd', true, 'reden', 'aantal', 'producten', to_jsonb(v_afw),
|
|
37146
|
+
'tekst', format('De aantallen wijken af van de order (%s).', array_to_string(v_afw, ', ')),
|
|
37147
|
+
'blokkade', jsonb_build_object('code', 'kar_verouderd',
|
|
37148
|
+
'tekst', format('Kar %s: de aantallen wijken af van de order (%s). Deel de niet-geprinte karren opnieuw in.', coalesce(v_nr, '?'), array_to_string(v_afw, ', '))));
|
|
37149
|
+
END IF;
|
|
37150
|
+
-- 1.0.215: huidige regels zouden de kar anders indelen → alleen melden, geen blokkade.
|
|
37151
|
+
v_r := public.logistics_cart_regels_verouderd_core(p_cart_id);
|
|
37152
|
+
IF v_r IS NOT NULL THEN
|
|
37153
|
+
RETURN jsonb_build_object('verouderd', true, 'reden', v_r->>'reden', 'tekst', v_r->>'tekst', 'blokkade', NULL);
|
|
37154
|
+
END IF;
|
|
37155
|
+
RETURN NULL;
|
|
37156
|
+
END $function$;
|
|
37157
|
+
GRANT EXECUTE ON FUNCTION public.logistics_cart_verouderd_core(uuid) TO service_role;
|
|
37158
|
+
|
|
37159
|
+
DO $do$
|
|
37160
|
+
DECLARE d text; n text;
|
|
37161
|
+
BEGIN
|
|
37162
|
+
d := pg_get_functiondef('public.logistics_cart_platen_verrijk(jsonb)'::regprocedure);
|
|
37163
|
+
IF position('verouderdReden' IN d) = 0 THEN
|
|
37164
|
+
n := replace(d,
|
|
37165
|
+
$a$THEN jsonb_build_object('teHoog', false, 'indelingVerouderd', true, 'blokkade', public.logistics_cart_verouderd_core(v_id)->'blokkade')$a$,
|
|
37166
|
+
$a$THEN jsonb_build_object('teHoog', false, 'indelingVerouderd', true, 'blokkade', public.logistics_cart_verouderd_core(v_id)->'blokkade',
|
|
37167
|
+
'verouderdReden', public.logistics_cart_verouderd_core(v_id)->>'tekst')$a$);
|
|
37168
|
+
IF n = d THEN RAISE EXCEPTION 'patroon platen_verrijk niet gevonden'; END IF;
|
|
37169
|
+
EXECUTE n;
|
|
37170
|
+
END IF;
|
|
37171
|
+
END $do$;
|
|
37172
|
+
|
|
37173
|
+
CREATE OR REPLACE FUNCTION public.logistics_install_check_215()
|
|
37174
|
+
RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
37175
|
+
SELECT 'hoofdverpakking via voorraadartikel', position('floriday_trade_item_id' IN pg_get_functiondef('public.logistics_product_hoofdverpakking(uuid)'::regprocedure)) > 0,
|
|
37176
|
+
'Eigen artikel: belading van het voorraadartikel (products.floriday_trade_item_id)'
|
|
37177
|
+
UNION ALL SELECT 'gedeelde ladingdragerkeuze', to_regprocedure('public.logistics_ladingdrager_kies(jsonb)') IS NOT NULL,
|
|
37178
|
+
'Orderregel → artikel → voorraadartikel → Floriday-verpakking → werkwijze met waarschuwing'
|
|
37179
|
+
UNION ALL SELECT 'kar verouderd volgens regels', position('logistics_cart_regels_verouderd_core' IN pg_get_functiondef('public.logistics_cart_verouderd_core(uuid)'::regprocedure)) > 0,
|
|
37180
|
+
'Geen/andere ladingdrager of te veel lagen → verouderd: opnieuw indelen (geen blokkade)'
|
|
37181
|
+
UNION ALL SELECT 'reden op kar', position('verouderdReden' IN pg_get_functiondef('public.logistics_cart_platen_verrijk(jsonb)'::regprocedure)) > 0, 'Reden zichtbaar per kar'
|
|
37182
|
+
UNION ALL SELECT 'guard', position('logistics_acc_guard' IN pg_get_functiondef('public.logistics_ladingdrager_kies(jsonb)'::regprocedure)) > 0, 'Keuze controleert de aanroeper'
|
|
37183
|
+
$$;
|
|
37184
|
+
GRANT EXECUTE ON FUNCTION public.logistics_install_check_215() TO authenticated, service_role;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AAgKA,wBAAgB,UAAU,gCAwBzB"}
|
|
@@ -9,6 +9,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
9
9
|
import { useState } from "react";
|
|
10
10
|
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, } from "@flowselections/core";
|
|
11
11
|
import { RotateCcw } from "lucide-react";
|
|
12
|
+
import { Link } from "@tanstack/react-router";
|
|
12
13
|
import { supabase } from "../integrations/supabase/moduleClient.js";
|
|
13
14
|
import { RolPoort } from "./RolPoort.js";
|
|
14
15
|
import { OudeOrderregelsCard } from "./OudeOrderregelsCard.js";
|
|
@@ -81,5 +82,5 @@ function HerindelenBeheer() {
|
|
|
81
82
|
: `${voor?.geprintOfGepickt ?? 0} order(s) die al geprint of gepickt zijn, blijven ongemoeid.` })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsxs(AlertDialogAction, { onClick: () => void voerUit(), disabled: (voor?.aantal ?? 0) === 0, children: ["Ja, ", voor?.aantal ?? 0, " order(s) opnieuw indelen"] })] })] }) })] }));
|
|
82
83
|
}
|
|
83
84
|
export function BeheerPage() {
|
|
84
|
-
return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(StartlijstCard, {}), _jsx(HerindelenBeheer, {}), _jsx(HerindelingMeldingCard, {}), _jsx(VervoerderBewakingCard, {}), _jsx(EtiketInstellenMelding, {}), _jsx(DataGereedheidCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(DocumentkeuzeCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
|
|
85
|
+
return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(StartlijstCard, {}), _jsx(HerindelenBeheer, {}), _jsxs("p", { className: "text-sm", children: [_jsx(Link, { to: "/logistiek-engine/proefindeling", className: "underline", children: "Proefindeling" }), " ", "\u2014 reken de karindeling na zonder iets op te slaan."] }), _jsx(HerindelingMeldingCard, {}), _jsx(VervoerderBewakingCard, {}), _jsx(EtiketInstellenMelding, {}), _jsx(DataGereedheidCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(DocumentkeuzeCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
|
|
85
86
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProefindelingPage.d.ts","sourceRoot":"","sources":["../../src/components/ProefindelingPage.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAW3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqBnE;AAED,wBAAgB,iBAAiB,gCA2HhC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// src/components/ProefindelingPage.tsx — karindeling narekenen zonder te schrijven
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Roept de bestaande serverfunctie logisticsPlanPreview aan (zelfde planner en
|
|
6
|
+
// werkwijze als de wachtrij, droge modus). Er wordt niets opgeslagen.
|
|
7
|
+
// GEEN <Header /> hier — die levert de shell.
|
|
8
|
+
// ============================================================================
|
|
9
|
+
import { useState } from "react";
|
|
10
|
+
import { useServerFn } from "@tanstack/react-start";
|
|
11
|
+
import { Link } from "@tanstack/react-router";
|
|
12
|
+
import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, } from "@flowselections/core";
|
|
13
|
+
import { Download, FlaskConical } from "lucide-react";
|
|
14
|
+
import { supabase } from "../integrations/supabase/moduleClient.js";
|
|
15
|
+
import { logisticsPlanPreview } from "../lib/planPreview.functions.js";
|
|
16
|
+
import { RolPoort } from "./RolPoort.js";
|
|
17
|
+
import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
|
|
18
|
+
const MAX = 50;
|
|
19
|
+
function csvCel(v) {
|
|
20
|
+
const s = v == null ? "" : String(v);
|
|
21
|
+
return /[";\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
|
|
22
|
+
}
|
|
23
|
+
export function proefindelingCsv(orders) {
|
|
24
|
+
const kop = ["order", "status", "reden", "kar", "ladingdrager", "lagen", "platen", "vulgraad_pct", "kartekst", "product", "fust", "stuks"];
|
|
25
|
+
const rijen = [];
|
|
26
|
+
for (const o of Array.isArray(orders) ? orders : []) {
|
|
27
|
+
const karren = Array.isArray(o.karren) ? o.karren : [];
|
|
28
|
+
if (karren.length === 0) {
|
|
29
|
+
rijen.push([o.orderNummer ?? o.orderId, o.ok ? "ok" : "geen indeling", o.reden ?? "", "", "", "", "", "", "", "", "", ""]);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
for (const k of karren) {
|
|
33
|
+
const regels = Array.isArray(k.regels) ? k.regels : [];
|
|
34
|
+
for (const r of regels.length ? regels : [null]) {
|
|
35
|
+
rijen.push([
|
|
36
|
+
o.orderNummer ?? o.orderId, o.ok ? "ok" : "geen indeling", o.reden ?? "",
|
|
37
|
+
String(k.karNummer), k.ladingdrager, String(k.lagen).replace(".", ","), String(k.platen), String(k.vulgraadPct),
|
|
38
|
+
k.karTekst, r?.product ?? "", r ? String(r.fust) : "", r ? String(r.stuks) : "",
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [kop, ...rijen].map((r) => r.map(csvCel).join(";")).join("\n");
|
|
44
|
+
}
|
|
45
|
+
export function ProefindelingPage() {
|
|
46
|
+
const preview = useServerFn(logisticsPlanPreview);
|
|
47
|
+
const [datum, setDatum] = useState("");
|
|
48
|
+
const [klant, setKlant] = useState("");
|
|
49
|
+
const [nummers, setNummers] = useState("");
|
|
50
|
+
const [bezig, setBezig] = useState(false);
|
|
51
|
+
const [melding, setMelding] = useState(null);
|
|
52
|
+
const [orders, setOrders] = useState([]);
|
|
53
|
+
const zoekOrderIds = async () => {
|
|
54
|
+
const lijst = nummers.split(/[\s,;]+/).map((s) => s.trim()).filter(Boolean);
|
|
55
|
+
let q = supabase.from("orders").select("id, order_number").is("deleted_at", null).limit(MAX + 1);
|
|
56
|
+
if (lijst.length > 0)
|
|
57
|
+
q = q.in("order_number", lijst);
|
|
58
|
+
if (datum)
|
|
59
|
+
q = q.eq("delivery_date", datum);
|
|
60
|
+
if (klant.trim())
|
|
61
|
+
q = q.ilike("customer_name", `%${klant.trim()}%`);
|
|
62
|
+
if (lijst.length === 0 && !datum && !klant.trim())
|
|
63
|
+
throw new Error("Kies een leverdag, klant of ordernummers.");
|
|
64
|
+
const { data, error } = await q;
|
|
65
|
+
if (error)
|
|
66
|
+
throw new Error(error.message);
|
|
67
|
+
const ids = (Array.isArray(data) ? data : []).map((r) => String(r.id));
|
|
68
|
+
if (ids.length > MAX)
|
|
69
|
+
throw new Error(`Meer dan ${MAX} orders gevonden. Maak de keuze kleiner.`);
|
|
70
|
+
if (ids.length === 0)
|
|
71
|
+
throw new Error("Geen orders gevonden.");
|
|
72
|
+
return ids;
|
|
73
|
+
};
|
|
74
|
+
const reken = async () => {
|
|
75
|
+
setBezig(true);
|
|
76
|
+
setMelding(null);
|
|
77
|
+
try {
|
|
78
|
+
const ids = await zoekOrderIds();
|
|
79
|
+
const res = await preview({ data: { orderIds: ids } });
|
|
80
|
+
const lijst = Array.isArray(res?.orders) ? res.orders : [];
|
|
81
|
+
setOrders(lijst);
|
|
82
|
+
setMelding(`${lijst.length} order(s) nagerekend. Er is niets opgeslagen.`);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
setOrders([]);
|
|
86
|
+
setMelding(e?.message ? String(e.message) : "Narekenen is niet gelukt.");
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
setBezig(false);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const exporteer = () => {
|
|
93
|
+
const blob = new Blob(["\ufeff" + proefindelingCsv(orders)], { type: "text/csv;charset=utf-8" });
|
|
94
|
+
const url = URL.createObjectURL(blob);
|
|
95
|
+
const a = document.createElement("a");
|
|
96
|
+
a.href = url;
|
|
97
|
+
a.download = `proefindeling-${new Date().toISOString().slice(0, 10)}.csv`;
|
|
98
|
+
a.click();
|
|
99
|
+
URL.revokeObjectURL(url);
|
|
100
|
+
};
|
|
101
|
+
return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Proefindeling" }), _jsxs(CardDescription, { children: ["Reken de karindeling na met de huidige werkwijze, zonder iets op te slaan. Maximaal ", MAX, " orders per keer."] })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 sm:grid-cols-3", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "proef-datum", children: "Leverdag" }), _jsx(Input, { id: "proef-datum", type: "date", value: datum, onChange: (e) => setDatum(e.target.value) })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "proef-klant", children: "Klant" }), _jsx(Input, { id: "proef-klant", value: klant, onChange: (e) => setKlant(e.target.value), placeholder: "Deel van de naam" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "proef-nummers", children: "Ordernummers" }), _jsx(Input, { id: "proef-nummers", value: nummers, onChange: (e) => setNummers(e.target.value), placeholder: "HO-2601465, HO-2601466" })] })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { onClick: () => void reken(), disabled: bezig, children: [_jsx(FlaskConical, { className: "h-4 w-4" }), bezig ? "Bezig…" : "Narekenen"] }), _jsxs(Button, { variant: "outline", onClick: exporteer, disabled: orders.length === 0, children: [_jsx(Download, { className: "h-4 w-4" }), "Exporteren (CSV)"] }), _jsx(Link, { to: "/logistiek-engine/beheer", className: "self-center text-sm underline", children: "Terug naar Beheer" })] }), melding ? _jsx("p", { className: "text-sm", children: melding }) : null] })] }), orders.map((o) => (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2 text-base", children: [o.orderNummer ?? o.orderId, o.ok ? _jsxs(Badge, { variant: "secondary", children: [o.karren.length, " kar(ren)"] }) : _jsx(Badge, { variant: "destructive", children: "Geen indeling" })] }), o.reden ? _jsx(CardDescription, { children: o.reden }) : null] }), _jsxs(CardContent, { className: "space-y-3", children: [(Array.isArray(o.waarschuwingen) ? o.waarschuwingen : []).map((w, i) => (_jsx("p", { className: "text-sm text-muted-foreground", children: w }, i))), (Array.isArray(o.karren) ? o.karren : []).map((k) => (_jsxs("div", { className: "rounded-md border p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm font-medium", children: ["Kar ", k.karNummer, ": ", k.karTekst, k.teHoog ? _jsx(Badge, { variant: "destructive", children: "Te hoog" }) : null] }), _jsx("ul", { className: "mt-2 space-y-1 text-sm text-muted-foreground", children: (Array.isArray(k.regels) ? k.regels : []).map((r) => (_jsxs("li", { children: [r.product, ": ", r.fust, " fust \u00B7 ", r.stuks, " stuks"] }, r.orderItemId))) })] }, k.karNummer)))] })] }, o.orderId)))] }) }));
|
|
102
|
+
}
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './components/RegiePage.js';
|
|
|
6
6
|
export { InplanVoortgangCard } from './components/InplanVoortgangCard.js';
|
|
7
7
|
export * from './components/ModulePromptsPage.js';
|
|
8
8
|
export * from './components/LadingdragersPage.js';
|
|
9
|
+
export * from './components/ProefindelingPage.js';
|
|
9
10
|
export * from './components/BeladingIndelingCard.js';
|
|
10
11
|
export * from './components/VoorraadMeldingenCard.js';
|
|
11
12
|
export { FloridayPushCard } from './components/FloridayPushCard.js';
|
|
@@ -46,6 +47,7 @@ export { BeheerPage } from './components/BeheerPage.js';
|
|
|
46
47
|
export { RolPoort } from './components/RolPoort.js';
|
|
47
48
|
export * from './hooks/useEngineRollen.js';
|
|
48
49
|
export { LadingdragersPage } from './components/LadingdragersPage.js';
|
|
50
|
+
export { ProefindelingPage } from './components/ProefindelingPage.js';
|
|
49
51
|
export { LogistiekEngineQueuePage } from './components/LogistiekEngineQueuePage.js';
|
|
50
52
|
export { FlowPage } from './components/FlowPage.js';
|
|
51
53
|
export { PlanWachtrijPage } from './components/PlanWachtrijPage.js';
|
package/dist-lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AAKpD,eAAO,MAAM,qBAAqB,EAAE,UAanC,CAAC;AACF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,cAAc,mBAAmB,CAAC"}
|
package/dist-lib/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export * from './components/RegiePage.js';
|
|
|
9
9
|
export { InplanVoortgangCard } from './components/InplanVoortgangCard.js';
|
|
10
10
|
export * from './components/ModulePromptsPage.js';
|
|
11
11
|
export * from './components/LadingdragersPage.js';
|
|
12
|
+
export * from './components/ProefindelingPage.js';
|
|
12
13
|
export * from './components/BeladingIndelingCard.js';
|
|
13
14
|
export * from './components/VoorraadMeldingenCard.js';
|
|
14
15
|
export { FloridayPushCard } from './components/FloridayPushCard.js';
|
|
@@ -50,6 +51,7 @@ export { BeheerPage } from './components/BeheerPage.js';
|
|
|
50
51
|
export { RolPoort } from './components/RolPoort.js';
|
|
51
52
|
export * from './hooks/useEngineRollen.js';
|
|
52
53
|
export { LadingdragersPage } from './components/LadingdragersPage.js';
|
|
54
|
+
export { ProefindelingPage } from './components/ProefindelingPage.js';
|
|
53
55
|
export { LogistiekEngineQueuePage } from './components/LogistiekEngineQueuePage.js';
|
|
54
56
|
export { FlowPage } from './components/FlowPage.js';
|
|
55
57
|
export { PlanWachtrijPage } from './components/PlanWachtrijPage.js';
|