@flowselections/logistiek-engine 1.0.200 → 1.0.202
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 +339 -0
- package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
- package/dist-lib/components/BeladingIndelingCard.js +2 -4
- package/dist-lib/components/DataGereedheidCard.d.ts.map +1 -1
- package/dist-lib/components/DataGereedheidCard.js +22 -2
- package/dist-lib/components/HerindelingMeldingCard.js +2 -2
- package/dist-lib/components/StartlijstCard.d.ts.map +1 -1
- package/dist-lib/components/StartlijstCard.js +4 -1
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/types.d.ts +196 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/extraPlaten.d.ts +4 -0
- package/dist-lib/lib/extraPlaten.d.ts.map +1 -0
- package/dist-lib/lib/extraPlaten.js +26 -0
- package/dist-lib/lib/floridayCartCarriers.d.ts.map +1 -1
- package/dist-lib/lib/floridayCartCarriers.js +3 -1
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/package.json +1 -1
|
@@ -34601,3 +34601,342 @@ BEGIN
|
|
|
34601
34601
|
END IF;
|
|
34602
34602
|
EXCEPTION WHEN undefined_function THEN NULL;
|
|
34603
34603
|
END $do$;
|
|
34604
|
+
|
|
34605
|
+
-- ============================================================================
|
|
34606
|
+
-- 1.0.201 — extra platen, geenIndeling, vastzet-bevestiging, stickerstand, startlijst
|
|
34607
|
+
-- ============================================================================
|
|
34608
|
+
-- logistiek-engine 1.0.201 (additief, idempotent)
|
|
34609
|
+
|
|
34610
|
+
CREATE OR REPLACE FUNCTION public.logistics_extra_platen(p_lagen numeric)
|
|
34611
|
+
RETURNS integer LANGUAGE sql IMMUTABLE SET search_path TO 'public' AS $$
|
|
34612
|
+
SELECT CASE WHEN p_lagen IS NULL OR p_lagen < 0 THEN NULL
|
|
34613
|
+
ELSE greatest(0, ceil(p_lagen - 0.001)::int - 1) END
|
|
34614
|
+
$$;
|
|
34615
|
+
|
|
34616
|
+
CREATE OR REPLACE FUNCTION public.logistics_ladingdrager_tekst(p_carrier_code text, p_lagen numeric, p_pct numeric)
|
|
34617
|
+
RETURNS text LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34618
|
+
WITH n AS (
|
|
34619
|
+
SELECT coalesce(
|
|
34620
|
+
(SELECT nullif(btrim(t.name), '') FROM public.load_carrier_types t WHERE t.code = p_carrier_code ORDER BY t.is_active DESC LIMIT 1),
|
|
34621
|
+
'Ladingdrager') AS naam,
|
|
34622
|
+
public.logistics_extra_platen(p_lagen) AS platen)
|
|
34623
|
+
SELECT n.naam
|
|
34624
|
+
|| CASE WHEN n.platen IS NULL OR n.platen = 0 THEN '' WHEN n.platen = 1 THEN ' + 1 plaat' ELSE ' + ' || n.platen || ' platen' END
|
|
34625
|
+
|| CASE WHEN p_lagen IS NULL THEN ''
|
|
34626
|
+
ELSE ' (' || replace(trim(trailing '.' FROM trim(trailing '0' FROM round(p_lagen, 2)::text)), '.', ',') || ' lagen'
|
|
34627
|
+
|| CASE WHEN p_pct IS NULL THEN '' ELSE ', ' || round(p_pct)::int || ' %' END || ')' END
|
|
34628
|
+
FROM n
|
|
34629
|
+
$$;
|
|
34630
|
+
|
|
34631
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_platen_verrijk(p_cart jsonb)
|
|
34632
|
+
RETURNS jsonb LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34633
|
+
SELECT p_cart || jsonb_build_object(
|
|
34634
|
+
'additionalLayers', public.logistics_extra_platen(nullif(p_cart->>'layersUsed', '')::numeric),
|
|
34635
|
+
'ladingdragerTekst', public.logistics_ladingdrager_tekst(p_cart->>'carrierType', nullif(p_cart->>'layersUsed', '')::numeric,
|
|
34636
|
+
coalesce(nullif(p_cart->>'layerUtilizationPct', '')::numeric, nullif(p_cart->>'occupancyPct', '')::numeric)))
|
|
34637
|
+
$$;
|
|
34638
|
+
|
|
34639
|
+
-- Kopie van de huidige slip-plan als _v200 (eenmalig), daarna wrapper met additionalLayers.
|
|
34640
|
+
DO $do$
|
|
34641
|
+
BEGIN
|
|
34642
|
+
IF to_regprocedure('public.logistics_cart_slip_plan_v200(uuid)') IS NULL
|
|
34643
|
+
AND to_regprocedure('public.logistics_cart_slip_plan(uuid)') IS NOT NULL THEN
|
|
34644
|
+
EXECUTE replace(pg_get_functiondef('public.logistics_cart_slip_plan(uuid)'::regprocedure),
|
|
34645
|
+
'FUNCTION public.logistics_cart_slip_plan(', 'FUNCTION public.logistics_cart_slip_plan_v200(');
|
|
34646
|
+
END IF;
|
|
34647
|
+
END $do$;
|
|
34648
|
+
|
|
34649
|
+
DO $do$
|
|
34650
|
+
BEGIN
|
|
34651
|
+
IF to_regprocedure('public.logistics_cart_slip_plan_v200(uuid)') IS NOT NULL THEN
|
|
34652
|
+
EXECUTE $f$
|
|
34653
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_slip_plan(p_order_id uuid)
|
|
34654
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $b$
|
|
34655
|
+
DECLARE b jsonb := public.logistics_cart_slip_plan_v200(p_order_id);
|
|
34656
|
+
BEGIN
|
|
34657
|
+
IF b IS NULL OR jsonb_typeof(b->'carts') IS DISTINCT FROM 'array' THEN RETURN b; END IF;
|
|
34658
|
+
RETURN b || jsonb_build_object('carts', (
|
|
34659
|
+
SELECT coalesce(jsonb_agg(public.logistics_cart_platen_verrijk(t.e) ORDER BY t.o), '[]'::jsonb)
|
|
34660
|
+
FROM jsonb_array_elements(b->'carts') WITH ORDINALITY t(e, o)));
|
|
34661
|
+
END $b$;
|
|
34662
|
+
$f$;
|
|
34663
|
+
END IF;
|
|
34664
|
+
END $do$;
|
|
34665
|
+
|
|
34666
|
+
-- Reden bij geen/deels indeling.
|
|
34667
|
+
CREATE OR REPLACE FUNCTION public.logistics_order_geen_indeling_core(p_order_id uuid)
|
|
34668
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34669
|
+
DECLARE o record; q record; d record; v_code text; v_tekst text; v_soort text; v_actie text;
|
|
34670
|
+
BEGIN
|
|
34671
|
+
SELECT id, order_number, buffer_id INTO o FROM public.orders WHERE id = p_order_id;
|
|
34672
|
+
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
34673
|
+
SELECT status, reason, reason_code INTO q FROM public.logistics_plan_queue
|
|
34674
|
+
WHERE order_id = p_order_id ORDER BY updated_at DESC NULLS LAST LIMIT 1;
|
|
34675
|
+
IF FOUND AND q.status = 'geblokkeerd' THEN
|
|
34676
|
+
v_code := coalesce(q.reason_code, 'geblokkeerd'); v_tekst := q.reason;
|
|
34677
|
+
ELSE
|
|
34678
|
+
SELECT dd.result, dd.explanation, dd.input_snapshot INTO d
|
|
34679
|
+
FROM public.logistics_decisions dd
|
|
34680
|
+
WHERE dd.slot = 'beladingindeling'
|
|
34681
|
+
AND ((dd.subject_type = 'order' AND dd.subject_id = o.id::text)
|
|
34682
|
+
OR (dd.subject_type = 'buffer' AND o.buffer_id IS NOT NULL AND dd.subject_id = o.buffer_id::text)
|
|
34683
|
+
OR (o.order_number IS NOT NULL AND coalesce(dd.input_snapshot->'members', '[]'::jsonb) ? o.order_number))
|
|
34684
|
+
ORDER BY dd.created_at DESC LIMIT 1;
|
|
34685
|
+
IF FOUND AND coalesce((d.result->>'blocked')::boolean, false) THEN
|
|
34686
|
+
v_code := coalesce(d.result->>'reason_code', 'geblokkeerd'); v_tekst := d.explanation;
|
|
34687
|
+
v_soort := d.input_snapshot->>'soort';
|
|
34688
|
+
ELSIF q.status IN ('pending', 'running') THEN
|
|
34689
|
+
v_code := 'wacht_op_indeling'; v_tekst := 'De karindeling wordt gemaakt; dit duurt meestal enkele seconden.';
|
|
34690
|
+
ELSE
|
|
34691
|
+
v_code := 'onbekend';
|
|
34692
|
+
v_tekst := 'Er is nog geen karindeling en er is geen blokkade vastgelegd. De minuutronde probeert het opnieuw; blijft dit staan, meld het aan beheer.';
|
|
34693
|
+
END IF;
|
|
34694
|
+
END IF;
|
|
34695
|
+
IF v_code IN ('belading_onwaarschijnlijk', 'belading_onvolledig', 'ladingdrager_niet_in_beheer') OR v_code LIKE 'belading%' THEN
|
|
34696
|
+
v_actie := 'belading_aanpassen';
|
|
34697
|
+
END IF;
|
|
34698
|
+
RETURN jsonb_build_object('code', v_code, 'soort', v_soort,
|
|
34699
|
+
'tekst', coalesce(nullif(btrim(v_tekst), ''), 'Geen indeling; de reden is niet bekend.'),
|
|
34700
|
+
'actie', v_actie,
|
|
34701
|
+
'actieLabel', CASE WHEN v_actie IS NOT NULL THEN 'Belading aanpassen' END,
|
|
34702
|
+
'actieUrl', CASE WHEN v_actie IS NOT NULL THEN '/logistiek-engine/beheer#gegevens-voor-karindeling' END);
|
|
34703
|
+
END $$;
|
|
34704
|
+
|
|
34705
|
+
CREATE OR REPLACE FUNCTION public.logistics_order_geen_indeling_many(p_order_ids uuid[])
|
|
34706
|
+
RETURNS TABLE(order_id uuid, geen_indeling jsonb) LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34707
|
+
BEGIN
|
|
34708
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_geen_indeling_many');
|
|
34709
|
+
IF coalesce(cardinality(p_order_ids), 0) > 1000 THEN
|
|
34710
|
+
RAISE EXCEPTION 'Maximaal 1000 orders per aanroep (ontvangen: %).', cardinality(p_order_ids) USING ERRCODE = '22023';
|
|
34711
|
+
END IF;
|
|
34712
|
+
RETURN QUERY
|
|
34713
|
+
SELECT b.order_id,
|
|
34714
|
+
CASE WHEN b.state IN ('geen_indeling', 'deels') AND NOT coalesce(x.full_fulfilled, false)
|
|
34715
|
+
THEN public.logistics_order_geen_indeling_core(b.order_id) END
|
|
34716
|
+
FROM public.logistics_order_plan_coverage_list_v152(p_order_ids) b
|
|
34717
|
+
LEFT JOIN public.logistics_external_fulfillment x ON x.order_id = b.order_id;
|
|
34718
|
+
END $$;
|
|
34719
|
+
|
|
34720
|
+
CREATE OR REPLACE FUNCTION public.logistics_order_plan_coverage(p_order_id uuid)
|
|
34721
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34722
|
+
DECLARE b jsonb := public.logistics_order_plan_coverage_v165(p_order_id); x jsonb := public.logistics_order_external_state(p_order_id);
|
|
34723
|
+
BEGIN
|
|
34724
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_plan_coverage');
|
|
34725
|
+
IF jsonb_typeof(b->'carts') = 'array' THEN
|
|
34726
|
+
b := b || jsonb_build_object('carts', (
|
|
34727
|
+
SELECT coalesce(jsonb_agg(
|
|
34728
|
+
CASE WHEN c.id IS NULL THEN t.e || jsonb_build_object('additionalLayers', NULL, 'layersUsed', NULL)
|
|
34729
|
+
ELSE public.logistics_cart_platen_verrijk(t.e || jsonb_build_object(
|
|
34730
|
+
'layersUsed', c.total_layers_used, 'occupancyPct', c.occupancy_pct, 'maxLayers', c.max_layers,
|
|
34731
|
+
'layerUtilizationPct', CASE WHEN coalesce(c.max_layers, 0) > 0 AND c.total_layers_used IS NOT NULL
|
|
34732
|
+
THEN round(100.0 * c.total_layers_used / c.max_layers, 1) END)) END
|
|
34733
|
+
ORDER BY t.o), '[]'::jsonb)
|
|
34734
|
+
FROM jsonb_array_elements(b->'carts') WITH ORDINALITY t(e, o)
|
|
34735
|
+
LEFT JOIN logistics_active.order_carts c ON c.id::text = t.e->>'cartId'));
|
|
34736
|
+
END IF;
|
|
34737
|
+
IF x IS NOT NULL AND (x->>'full')::boolean THEN
|
|
34738
|
+
b := b || jsonb_build_object('state', 'afgehandeld_extern', 'label', 'Afgehandeld in Floriday',
|
|
34739
|
+
'reason', 'De order is in Floriday afgehandeld; de Engine plant en print er niets meer voor.');
|
|
34740
|
+
END IF;
|
|
34741
|
+
b := b || jsonb_build_object('geenIndeling',
|
|
34742
|
+
CASE WHEN b->>'state' IN ('geen_indeling', 'deels') THEN public.logistics_order_geen_indeling_core(p_order_id) END);
|
|
34743
|
+
RETURN b || jsonb_build_object('externalFulfilled', x);
|
|
34744
|
+
END $$;
|
|
34745
|
+
|
|
34746
|
+
-- Lijstvariant met extra kolom (bestaande lijst-RPC heeft een vast tabeltype).
|
|
34747
|
+
CREATE OR REPLACE FUNCTION public.logistics_order_plan_coverage_list_v201(p_order_ids uuid[])
|
|
34748
|
+
RETURNS TABLE(order_id uuid, order_number text, buffer_id uuid, state text, label text, progress_pct integer, reason text,
|
|
34749
|
+
cart_count integer, pick_row_count integer, pick_status text, picked_at timestamptz,
|
|
34750
|
+
buffer_order_count integer, buffer_cart_count integer, geen_indeling jsonb)
|
|
34751
|
+
LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34752
|
+
BEGIN
|
|
34753
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_plan_coverage_list_v201');
|
|
34754
|
+
IF coalesce(cardinality(p_order_ids), 0) > 1000 THEN
|
|
34755
|
+
RAISE EXCEPTION 'Maximaal 1000 orders per aanroep (ontvangen: %).', cardinality(p_order_ids) USING ERRCODE = '22023';
|
|
34756
|
+
END IF;
|
|
34757
|
+
RETURN QUERY
|
|
34758
|
+
SELECT l.*, CASE WHEN l.state IN ('geen_indeling', 'deels') THEN public.logistics_order_geen_indeling_core(l.order_id) END
|
|
34759
|
+
FROM public.logistics_order_plan_coverage_list(p_order_ids) l;
|
|
34760
|
+
END $$;
|
|
34761
|
+
|
|
34762
|
+
-- Vastzetten met vooraf het gevolg.
|
|
34763
|
+
CREATE OR REPLACE FUNCTION public.logistics_belading_vastzet_preview(p_order_item_id uuid, p_wijziging jsonb)
|
|
34764
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34765
|
+
DECLARE oi record; w jsonb := coalesce(p_wijziging, '{}'::jsonb);
|
|
34766
|
+
o_ppc numeric; o_cpl numeric; o_lpc numeric; n_ppc numeric; n_cpl numeric; n_lpc numeric;
|
|
34767
|
+
o_fust numeric; n_fust numeric; o_kar numeric; o_kar_echt int; n_kar numeric; v_nodig boolean := false; v_tekst text;
|
|
34768
|
+
BEGIN
|
|
34769
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_belading_vastzet_preview');
|
|
34770
|
+
SELECT * INTO oi FROM public.order_items WHERE id = p_order_item_id;
|
|
34771
|
+
IF NOT FOUND THEN RAISE EXCEPTION 'Orderregel niet gevonden.'; END IF;
|
|
34772
|
+
o_ppc := nullif(oi.plants_per_crate, 0); o_cpl := nullif(oi.crates_per_layer, 0); o_lpc := nullif(oi.layers_per_cart, 0);
|
|
34773
|
+
n_ppc := coalesce(nullif(w->>'plants_per_crate', '')::numeric, o_ppc);
|
|
34774
|
+
n_cpl := coalesce(nullif(w->>'crates_per_layer', '')::numeric, o_cpl);
|
|
34775
|
+
n_lpc := coalesce(nullif(w->>'layers_per_cart', '')::numeric, o_lpc);
|
|
34776
|
+
IF n_ppc IS NOT NULL AND n_ppc <= 0 OR n_cpl IS NOT NULL AND n_cpl <= 0 OR n_lpc IS NOT NULL AND n_lpc <= 0 THEN
|
|
34777
|
+
RAISE EXCEPTION 'Waarden moeten groter dan 0 zijn.';
|
|
34778
|
+
END IF;
|
|
34779
|
+
o_fust := CASE WHEN o_ppc IS NOT NULL THEN ceil(oi.quantity / o_ppc) END;
|
|
34780
|
+
n_fust := CASE WHEN n_ppc IS NOT NULL THEN ceil(oi.quantity / n_ppc) END;
|
|
34781
|
+
SELECT count(DISTINCT ci.cart_id) INTO o_kar_echt FROM logistics_active.order_cart_items ci WHERE ci.order_item_id = p_order_item_id;
|
|
34782
|
+
o_kar := CASE WHEN coalesce(o_kar_echt, 0) > 0 THEN o_kar_echt
|
|
34783
|
+
WHEN o_fust IS NOT NULL AND o_cpl IS NOT NULL AND o_lpc IS NOT NULL THEN ceil(o_fust / (o_cpl * o_lpc)) END;
|
|
34784
|
+
n_kar := CASE WHEN n_fust IS NOT NULL AND n_cpl IS NOT NULL AND n_lpc IS NOT NULL THEN ceil(n_fust / (n_cpl * n_lpc)) END;
|
|
34785
|
+
IF o_fust > 0 AND n_fust > 0 AND greatest(n_fust / o_fust, o_fust / n_fust) > 2 THEN v_nodig := true; END IF;
|
|
34786
|
+
IF o_kar > 0 AND n_kar > 0 AND greatest(n_kar / o_kar, o_kar / n_kar) > 2 THEN v_nodig := true; END IF;
|
|
34787
|
+
v_tekst := 'Wordt ' || coalesce(n_fust::int::text, '?') || ' fust (was ' || coalesce(o_fust::int::text, '?') || ') op '
|
|
34788
|
+
|| coalesce(n_kar::int::text, '?') || ' kar(ren) (was ' || coalesce(o_kar::int::text, '?') || ').';
|
|
34789
|
+
IF v_nodig THEN v_tekst := 'Let op: ' || coalesce(n_fust::int::text, '?') || ' fust (was ' || coalesce(o_fust::int::text, '?') || ') op '
|
|
34790
|
+
|| coalesce(n_kar::int::text, '?') || ' kar(ren) (was ' || coalesce(o_kar::int::text, '?') || '). Klopt het aantal planten per fust?';
|
|
34791
|
+
END IF;
|
|
34792
|
+
RETURN jsonb_build_object('orderItemId', p_order_item_id, 'planten', oi.quantity,
|
|
34793
|
+
'oud', jsonb_build_object('plantsPerCrate', o_ppc, 'cratesPerLayer', o_cpl, 'layersPerCart', o_lpc, 'fust', o_fust, 'karren', o_kar, 'karrenBron', CASE WHEN coalesce(o_kar_echt,0) > 0 THEN 'indeling' ELSE 'berekend' END),
|
|
34794
|
+
'nieuw', jsonb_build_object('plantsPerCrate', n_ppc, 'cratesPerLayer', n_cpl, 'layersPerCart', n_lpc, 'fust', n_fust, 'karren', n_kar),
|
|
34795
|
+
'bevestigingNodig', v_nodig, 'tekst', v_tekst);
|
|
34796
|
+
END $$;
|
|
34797
|
+
|
|
34798
|
+
CREATE OR REPLACE FUNCTION public.logistics_packing_set_manual_checked(p_order_item_id uuid, p_wijziging jsonb, p_bevestigd boolean)
|
|
34799
|
+
RETURNS jsonb LANGUAGE plpgsql SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34800
|
+
DECLARE pv jsonb; w jsonb := coalesce(p_wijziging, '{}'::jsonb);
|
|
34801
|
+
BEGIN
|
|
34802
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_set_manual_checked');
|
|
34803
|
+
IF auth.uid() IS NULL THEN RAISE EXCEPTION 'niet ingelogd'; END IF;
|
|
34804
|
+
pv := public.logistics_belading_vastzet_preview(p_order_item_id, w);
|
|
34805
|
+
IF (pv->>'bevestigingNodig')::boolean AND NOT coalesce(p_bevestigd, false) THEN
|
|
34806
|
+
RETURN jsonb_build_object('ok', false, 'bevestigingNodig', true, 'tekst', pv->>'tekst', 'preview', pv);
|
|
34807
|
+
END IF;
|
|
34808
|
+
UPDATE public.order_items SET
|
|
34809
|
+
plants_per_crate = coalesce(nullif(w->>'plants_per_crate', '')::numeric, plants_per_crate),
|
|
34810
|
+
crates_per_layer = coalesce(nullif(w->>'crates_per_layer', '')::numeric, crates_per_layer),
|
|
34811
|
+
layers_per_cart = coalesce(nullif(w->>'layers_per_cart', '')::numeric, layers_per_cart),
|
|
34812
|
+
packing_locked_at = now(), packing_locked_by = auth.uid()
|
|
34813
|
+
WHERE id = p_order_item_id;
|
|
34814
|
+
RETURN jsonb_build_object('ok', true, 'bevestigingNodig', (pv->>'bevestigingNodig')::boolean, 'tekst', pv->>'tekst', 'preview', pv);
|
|
34815
|
+
END $$;
|
|
34816
|
+
|
|
34817
|
+
-- Stickerstand per kar inclusief printopdrachten en stickerGevraagd.
|
|
34818
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_sticker_state(p_cart_id uuid)
|
|
34819
|
+
RETURNS jsonb LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $function$
|
|
34820
|
+
WITH s AS (SELECT * FROM public.logistics_sticker_prints WHERE cart_id = p_cart_id),
|
|
34821
|
+
vraag AS (
|
|
34822
|
+
SELECT count(*) FILTER (WHERE coalesce(oi.needs_sticker, false)) AS met_sticker, count(*) AS regels,
|
|
34823
|
+
array_agg(DISTINCT oi.order_id) FILTER (WHERE oi.order_id IS NOT NULL) AS order_ids
|
|
34824
|
+
FROM public.order_cart_items ci
|
|
34825
|
+
LEFT JOIN public.order_items oi ON oi.id::text = split_part(ci.order_item_id::text, '::', 1)
|
|
34826
|
+
WHERE ci.cart_id = p_cart_id
|
|
34827
|
+
),
|
|
34828
|
+
klant AS (
|
|
34829
|
+
SELECT EXISTS (
|
|
34830
|
+
SELECT 1 FROM public.orders o JOIN public.customers c ON c.id = o.customer_id, vraag v
|
|
34831
|
+
WHERE o.id = ANY(coalesce(v.order_ids, '{}'::uuid[]))
|
|
34832
|
+
AND (EXISTS (SELECT 1 FROM public.customer_product_stickers ps
|
|
34833
|
+
WHERE ps.customer_key IN (c.id::text, 'tf:' || coalesce(c.twinfield_code, '-'), 'cn:' || coalesce(c.customer_number, '-')))
|
|
34834
|
+
OR EXISTS (SELECT 1 FROM public.customer_sticker_settings ss
|
|
34835
|
+
WHERE ss.customer_key IN (c.id::text, 'tf:' || coalesce(c.twinfield_code, '-'), 'cn:' || coalesce(c.customer_number, '-'))))
|
|
34836
|
+
) AS ingesteld
|
|
34837
|
+
),
|
|
34838
|
+
pj AS (
|
|
34839
|
+
SELECT coalesce(jsonb_agg(jsonb_build_object('printJobId', j.id, 'documenttype', j.documenttype::text, 'documentnaam', j.documentnaam,
|
|
34840
|
+
'status', j.status::text, 'kopieen', j.kopieen, 'isHerprint', coalesce(j.is_herprint, false),
|
|
34841
|
+
'aangemaaktOp', j.created_at, 'voltooidOp', j.voltooid_op, 'foutmelding', j.foutmelding) ORDER BY j.created_at), '[]'::jsonb) AS lijst,
|
|
34842
|
+
count(*) AS n,
|
|
34843
|
+
count(*) FILTER (WHERE j.status::text = 'voltooid') AS n_klaar,
|
|
34844
|
+
count(*) FILTER (WHERE j.status::text IN ('mislukt')) AS n_fout
|
|
34845
|
+
FROM public.print_jobs j
|
|
34846
|
+
WHERE j.payload->>'cart_id' = p_cart_id::text
|
|
34847
|
+
AND j.documenttype::text ILIKE '%sticker%'
|
|
34848
|
+
),
|
|
34849
|
+
t AS (
|
|
34850
|
+
SELECT
|
|
34851
|
+
count(*) FILTER (WHERE status <> 'niet_printen') AS totaal,
|
|
34852
|
+
count(*) FILTER (WHERE status IN ('in_printwachtrij','afgemeld')) AS in_wachtrij,
|
|
34853
|
+
count(*) FILTER (WHERE status IN ('wacht_op_moment','klaar')) AS wachtend,
|
|
34854
|
+
count(*) FILTER (WHERE status IN ('geblokkeerd','mislukt')) AS geblokkeerd,
|
|
34855
|
+
count(*) FILTER (WHERE status = 'niet_printen') AS niet_printen,
|
|
34856
|
+
(array_agg(reden ORDER BY soort, bron_id) FILTER (WHERE status = 'niet_printen' AND coalesce(btrim(reden), '') <> ''))[1] AS niet_reden,
|
|
34857
|
+
coalesce(jsonb_agg(jsonb_build_object('soort', soort, 'stickerId', bron_id, 'kopieen', kopieen,
|
|
34858
|
+
'status', status, 'reden', reden, 'printJobId', print_job_id, 'breedteMm', breedte_mm, 'hoogteMm', hoogte_mm)
|
|
34859
|
+
ORDER BY soort, bron_id), '[]'::jsonb) AS regels
|
|
34860
|
+
FROM s
|
|
34861
|
+
)
|
|
34862
|
+
SELECT jsonb_build_object(
|
|
34863
|
+
'cartId', p_cart_id,
|
|
34864
|
+
'totaal', t.totaal,
|
|
34865
|
+
'inPrintwachtrij', t.in_wachtrij,
|
|
34866
|
+
'wachtend', t.wachtend,
|
|
34867
|
+
'geblokkeerd', t.geblokkeerd,
|
|
34868
|
+
'regels', t.regels,
|
|
34869
|
+
'stickersNodig', t.totaal > 0,
|
|
34870
|
+
'geenStickersReden', CASE
|
|
34871
|
+
WHEN t.totaal > 0 THEN NULL
|
|
34872
|
+
WHEN t.niet_printen > 0 THEN coalesce(t.niet_reden, 'De stickers van deze kar hoeven niet geprint te worden.')
|
|
34873
|
+
WHEN v.regels = 0 THEN 'Deze kar heeft geen regels.'
|
|
34874
|
+
WHEN v.met_sticker = 0 THEN 'Geen regel op deze kar vraagt om een sticker.'
|
|
34875
|
+
ELSE 'Er vraagt een regel om een sticker, maar die is nog niet klaargezet. De stickerronde pakt dit automatisch op.'
|
|
34876
|
+
END,
|
|
34877
|
+
'stickerGevraagd', (v.met_sticker > 0 OR k.ingesteld),
|
|
34878
|
+
'stickerGevraagdBron', CASE WHEN v.met_sticker > 0 THEN 'orderregel' WHEN k.ingesteld THEN 'klant' END,
|
|
34879
|
+
'printopdrachten', pj.lijst,
|
|
34880
|
+
'printopdrachtenTotaal', pj.n,
|
|
34881
|
+
'printopdrachtenVoltooid', pj.n_klaar,
|
|
34882
|
+
'printopdrachtenMislukt', pj.n_fout)
|
|
34883
|
+
FROM t, vraag v, klant k, pj;
|
|
34884
|
+
$function$;
|
|
34885
|
+
|
|
34886
|
+
-- Startlijst: alleen gewicht ontbreekt = compleet met waarschuwing.
|
|
34887
|
+
CREATE OR REPLACE FUNCTION public.logistics_startlijst()
|
|
34888
|
+
RETURNS jsonb LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34889
|
+
DECLARE v_drag int; v_drag_mist int; v_werk boolean; v_prod int; v_prod_mist int; v_prod_warn int;
|
|
34890
|
+
BEGIN
|
|
34891
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_startlijst');
|
|
34892
|
+
SELECT count(*), count(*) FILTER (WHERE coalesce(t.layer_length_cm, 0) <= 0 OR coalesce(t.layer_width_cm, 0) <= 0 OR coalesce(t.max_height_cm, 0) <= 0)
|
|
34893
|
+
INTO v_drag, v_drag_mist
|
|
34894
|
+
FROM public.load_carrier_types t
|
|
34895
|
+
WHERE t.is_active AND NOT EXISTS (SELECT 1 FROM public.logistics_floriday_carrier_map m WHERE m.carrier_code = t.code AND m.floriday_code = 'NONE');
|
|
34896
|
+
SELECT EXISTS (SELECT 1 FROM public.logistics_rule_configs s WHERE s.is_active AND s.settings ? 'karrenindeling') INTO v_werk;
|
|
34897
|
+
SELECT count(*),
|
|
34898
|
+
count(*) FILTER (WHERE cardinality(array_remove(g.ontbrekend, 'weight')) > 0),
|
|
34899
|
+
count(*) FILTER (WHERE g.ontbrekend = ARRAY['weight']::text[])
|
|
34900
|
+
INTO v_prod, v_prod_mist, v_prod_warn FROM public.logistics_data_gereedheid(NULL) g;
|
|
34901
|
+
RETURN jsonb_build_object(
|
|
34902
|
+
'ladingdragers', jsonb_build_object('klaar', v_drag > 0 AND v_drag_mist = 0, 'aantal', v_drag, 'onvolledig', v_drag_mist),
|
|
34903
|
+
'werkwijze', jsonb_build_object('klaar', v_werk),
|
|
34904
|
+
'gereedheid', jsonb_build_object('klaar', v_prod_mist = 0, 'producten', v_prod, 'onvolledig', v_prod_mist, 'waarschuwing', v_prod_warn));
|
|
34905
|
+
END $$;
|
|
34906
|
+
|
|
34907
|
+
CREATE OR REPLACE FUNCTION public.logistics_install_check_201()
|
|
34908
|
+
RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34909
|
+
SELECT '1 extra platen', public.logistics_extra_platen(7.45) = 7 AND public.logistics_extra_platen(2.0) = 1 AND public.logistics_extra_platen(0.125) = 0,
|
|
34910
|
+
'logistics_extra_platen rekent extra platen boven de bodem'
|
|
34911
|
+
UNION ALL SELECT '1 slip-plan wrapper', to_regprocedure('public.logistics_cart_slip_plan_v200(uuid)') IS NOT NULL, 'logistics_cart_slip_plan geeft additionalLayers per kar'
|
|
34912
|
+
UNION ALL SELECT '2 reden geen indeling', to_regprocedure('public.logistics_order_geen_indeling_core(uuid)') IS NOT NULL
|
|
34913
|
+
AND to_regprocedure('public.logistics_order_plan_coverage_list_v201(uuid[])') IS NOT NULL, 'geenIndeling in coverage en lijst'
|
|
34914
|
+
UNION ALL SELECT '3 vastzet-bevestiging', to_regprocedure('public.logistics_packing_set_manual_checked(uuid,jsonb,boolean)') IS NOT NULL, 'bevestiging bij >2x fust of karren'
|
|
34915
|
+
UNION ALL SELECT '5 stickerstand', position('printopdrachten' IN pg_get_functiondef('public.logistics_cart_sticker_state(uuid)'::regprocedure)) > 0, 'printopdrachten en stickerGevraagd per kar'
|
|
34916
|
+
$$;
|
|
34917
|
+
|
|
34918
|
+
DO $g$ BEGIN
|
|
34919
|
+
GRANT EXECUTE ON FUNCTION public.logistics_extra_platen(numeric) TO authenticated, service_role;
|
|
34920
|
+
GRANT EXECUTE ON FUNCTION public.logistics_order_geen_indeling_many(uuid[]) TO authenticated, service_role;
|
|
34921
|
+
GRANT EXECUTE ON FUNCTION public.logistics_order_plan_coverage_list_v201(uuid[]) TO authenticated, service_role;
|
|
34922
|
+
GRANT EXECUTE ON FUNCTION public.logistics_belading_vastzet_preview(uuid, jsonb) TO authenticated, service_role;
|
|
34923
|
+
GRANT EXECUTE ON FUNCTION public.logistics_packing_set_manual_checked(uuid, jsonb, boolean) TO authenticated, service_role;
|
|
34924
|
+
GRANT EXECUTE ON FUNCTION public.logistics_install_check_201() TO authenticated, service_role;
|
|
34925
|
+
END $g$;
|
|
34926
|
+
|
|
34927
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_platen_verrijk(p_cart jsonb)
|
|
34928
|
+
RETURNS jsonb LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
|
|
34929
|
+
SELECT p_cart || jsonb_build_object(
|
|
34930
|
+
'additionalLayers', public.logistics_extra_platen(nullif(p_cart->>'layersUsed', '')::numeric),
|
|
34931
|
+
'ladingdragerTekst', public.logistics_ladingdrager_tekst(p_cart->>'carrierType', nullif(p_cart->>'layersUsed', '')::numeric,
|
|
34932
|
+
coalesce(nullif(p_cart->>'occupancyPct', '')::numeric, nullif(p_cart->>'layerUtilizationPct', '')::numeric)))
|
|
34933
|
+
$$;
|
|
34934
|
+
|
|
34935
|
+
DO $d$ BEGIN
|
|
34936
|
+
IF position('logistics_acc_guard' IN pg_get_functiondef('public.logistics_order_geen_indeling_core(uuid)'::regprocedure)) = 0 THEN
|
|
34937
|
+
EXECUTE replace(pg_get_functiondef('public.logistics_order_geen_indeling_core(uuid)'::regprocedure),
|
|
34938
|
+
'SELECT id, order_number, buffer_id INTO o FROM public.orders WHERE id = p_order_id;',
|
|
34939
|
+
'PERFORM public.logistics_acc_guard(''ingelogd'', ''logistics_order_geen_indeling_core'');
|
|
34940
|
+
SELECT id, order_number, buffer_id INTO o FROM public.orders WHERE id = p_order_id;');
|
|
34941
|
+
END IF;
|
|
34942
|
+
END $d$;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BeladingIndelingCard.d.ts","sourceRoot":"","sources":["../../src/components/BeladingIndelingCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BeladingIndelingCard.d.ts","sourceRoot":"","sources":["../../src/components/BeladingIndelingCard.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,oBAAoB,gCAqJnC"}
|
|
@@ -13,6 +13,7 @@ import { previewLoadCarrierPlan, replanOrderLoadCarriers } from "../lib/loadCarr
|
|
|
13
13
|
import { ladingdragerNaam } from "../lib/loadCarrierTypes.js";
|
|
14
14
|
import { useFloricodeLadingdragers } from "../hooks/useFloricodeLadingdragers.js";
|
|
15
15
|
import { layerUtilizationPct } from "../lib/layerUtilization.js";
|
|
16
|
+
import { ladingdragerPlatenTekst } from "../lib/extraPlaten.js";
|
|
16
17
|
const db = () => supabase;
|
|
17
18
|
export function BeladingIndelingCard() {
|
|
18
19
|
const floricodeNamen = useFloricodeLadingdragers();
|
|
@@ -78,8 +79,5 @@ export function BeladingIndelingCard() {
|
|
|
78
79
|
}
|
|
79
80
|
};
|
|
80
81
|
const safeCarts = Array.isArray(carts) ? carts : [];
|
|
81
|
-
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Boxes, { className: "h-5 w-5 text-primary" }), "Beladingindeling"] }), _jsx(CardDescription, { children: "De Engine deelt de orderregels van de hele buffer in over ladingdragers. Bekijk eerst het resultaat en leg het daarna vast." }), _jsxs("div", { className: "flex flex-wrap items-end gap-2 pt-2", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "indeling-order", children: "Ordernummer" }), _jsx(Input, { id: "indeling-order", value: orderNummer, onChange: (e) => setOrderNummer(e.target.value), placeholder: "SO-12345", className: "w-56" })] }), _jsxs(Button, { onClick: () => void bereken(), disabled: bezig || !orderNummer.trim(), children: [_jsx(Search, { className: "mr-2 h-4 w-4" }), "Berekenen"] }), _jsx(Button, { variant: "outline", onClick: () => void vastleggen(), disabled: bezig || !orderId, children: "Vastleggen" })] })] }), _jsxs(CardContent, { className: "space-y-4", children: [warnings.length > 0 && (_jsx("ul", { className: "space-y-1 rounded-lg border border-dashed p-3 text-sm text-muted-foreground", children: warnings.map((w, i) => (_jsx("li", { children: w }, i))) })), safeCarts.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen indeling berekend." })) : (safeCarts.map((cart) => (_jsxs("div", { className: "space-y-2 rounded-lg border p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("span", { className: "font-medium", children: ["Ladingdrager ", cart.cart_number] }), _jsx(Badge, { variant: "secondary", children: ladingdragerNaam(cart.carrier_type, floricodeNamen) }), _jsxs(Badge, { variant: cart.is_complete ? "default" : "outline", children: [cart.occupancy_pct, "% vol"] }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [cart.total_layers_used,
|
|
82
|
-
const p = layerUtilizationPct(cart.total_layers_used, cart.max_layers);
|
|
83
|
-
return p === null ? "" : ` · ${p}% van de kar`;
|
|
84
|
-
})(), cart.weight_kg ? ` · ${cart.weight_kg} kg` : ""] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Partij" }), _jsx(TableHead, { className: "text-right", children: "Fusten" }), _jsx(TableHead, { className: "text-right", children: "Planten" }), _jsx(TableHead, { className: "text-right", children: "Aandeel" })] }) }), _jsx(TableBody, { children: (Array.isArray(cart.items) ? cart.items : []).map((item, idx) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: item.product_name }), _jsx(TableCell, { className: "text-right", children: item.crates }), _jsx(TableCell, { className: "text-right", children: item.plants }), _jsxs(TableCell, { className: "text-right", children: [Math.round(item.layer_share_pct * 10) / 10, "%"] })] }, `${item.order_item_id}-${idx}`))) })] })] }, cart.cart_number))))] })] }));
|
|
82
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Boxes, { className: "h-5 w-5 text-primary" }), "Beladingindeling"] }), _jsx(CardDescription, { children: "De Engine deelt de orderregels van de hele buffer in over ladingdragers. Bekijk eerst het resultaat en leg het daarna vast." }), _jsxs("div", { className: "flex flex-wrap items-end gap-2 pt-2", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "indeling-order", children: "Ordernummer" }), _jsx(Input, { id: "indeling-order", value: orderNummer, onChange: (e) => setOrderNummer(e.target.value), placeholder: "SO-12345", className: "w-56" })] }), _jsxs(Button, { onClick: () => void bereken(), disabled: bezig || !orderNummer.trim(), children: [_jsx(Search, { className: "mr-2 h-4 w-4" }), "Berekenen"] }), _jsx(Button, { variant: "outline", onClick: () => void vastleggen(), disabled: bezig || !orderId, children: "Vastleggen" })] })] }), _jsxs(CardContent, { className: "space-y-4", children: [warnings.length > 0 && (_jsx("ul", { className: "space-y-1 rounded-lg border border-dashed p-3 text-sm text-muted-foreground", children: warnings.map((w, i) => (_jsx("li", { children: w }, i))) })), safeCarts.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen indeling berekend." })) : (safeCarts.map((cart) => (_jsxs("div", { className: "space-y-2 rounded-lg border p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("span", { className: "font-medium", children: ["Ladingdrager ", cart.cart_number] }), _jsx(Badge, { variant: "secondary", children: ladingdragerNaam(cart.carrier_type, floricodeNamen) }), _jsxs(Badge, { variant: cart.is_complete ? "default" : "outline", children: [cart.occupancy_pct, "% vol"] }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [ladingdragerPlatenTekst(ladingdragerNaam(cart.carrier_type, floricodeNamen), cart.total_layers_used, cart.occupancy_pct ?? layerUtilizationPct(cart.total_layers_used, cart.max_layers)), cart.weight_kg ? ` · ${cart.weight_kg} kg` : ""] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Partij" }), _jsx(TableHead, { className: "text-right", children: "Fusten" }), _jsx(TableHead, { className: "text-right", children: "Planten" }), _jsx(TableHead, { className: "text-right", children: "Aandeel" })] }) }), _jsx(TableBody, { children: (Array.isArray(cart.items) ? cart.items : []).map((item, idx) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: item.product_name }), _jsx(TableCell, { className: "text-right", children: item.crates }), _jsx(TableCell, { className: "text-right", children: item.plants }), _jsxs(TableCell, { className: "text-right", children: [Math.round(item.layer_share_pct * 10) / 10, "%"] })] }, `${item.order_item_id}-${idx}`))) })] })] }, cart.cart_number))))] })] }));
|
|
85
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGereedheidCard.d.ts","sourceRoot":"","sources":["../../src/components/DataGereedheidCard.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"DataGereedheidCard.d.ts","sourceRoot":"","sources":["../../src/components/DataGereedheidCard.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU3E,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACxG,KAAK,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAMzN,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAuB9H;AAED,KAAK,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,KAAK,GAAG;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAClI,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS7C,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ7C,CAAC;AAGF,wBAAgB,kBAAkB,gCAoLjC"}
|
|
@@ -13,6 +13,13 @@ import { RefreshCw } from "lucide-react";
|
|
|
13
13
|
import { supabase } from "../integrations/supabase/moduleClient.js";
|
|
14
14
|
import { maxFustenPerLaag } from "../lib/dimensionPlanner.js";
|
|
15
15
|
import { fysiekeBelading } from "../lib/beladingRegels.js";
|
|
16
|
+
import { ladingdragerNaam } from "../lib/loadCarrierTypes.js";
|
|
17
|
+
import { useFloricodeLadingdragers } from "../hooks/useFloricodeLadingdragers.js";
|
|
18
|
+
const METHODE_LABEL = {
|
|
19
|
+
belading: "Indeling op belading (fusten per laag × lagen)",
|
|
20
|
+
afmetingen: "Indeling op afmetingen",
|
|
21
|
+
dimensies: "Indeling op afmetingen",
|
|
22
|
+
};
|
|
16
23
|
const num = (v) => {
|
|
17
24
|
const n = Number(v);
|
|
18
25
|
return v != null && Number.isFinite(n) && n > 0 ? n : null;
|
|
@@ -71,6 +78,7 @@ export function DataGereedheidCard() {
|
|
|
71
78
|
const [bezig, setBezig] = useState(null);
|
|
72
79
|
const [fusten, setFusten] = useState(new Map());
|
|
73
80
|
const [dragers, setDragers] = useState(new Map());
|
|
81
|
+
const floricodeNamen = useFloricodeLadingdragers();
|
|
74
82
|
const laden = useCallback(async () => {
|
|
75
83
|
setLoading(true);
|
|
76
84
|
setFout(null);
|
|
@@ -113,9 +121,21 @@ export function DataGereedheidCard() {
|
|
|
113
121
|
else
|
|
114
122
|
await laden();
|
|
115
123
|
};
|
|
116
|
-
const metGaten = rijen.filter((r) => Array.isArray(r.ontbrekend) && r.ontbrekend.length > 0);
|
|
117
124
|
const fysiek = (r) => fysiekVoorRegel(r, typeof r.velden?.fust_type_id?.waarde === "string" ? fusten.get(r.velden.fust_type_id.waarde) ?? null : null, r.ladingdrager ? dragers.get(r.ladingdrager) ?? null : null);
|
|
118
|
-
|
|
125
|
+
// 1.0.201: onmogelijk bovenaan, dan ontbrekende gegevens, dan alleen een waarschuwing (gewicht).
|
|
126
|
+
const rang = (r) => {
|
|
127
|
+
if (fysiek(r).status === "onmogelijk")
|
|
128
|
+
return 0;
|
|
129
|
+
const mist = (Array.isArray(r.ontbrekend) ? r.ontbrekend : []).filter((v) => v !== "weight");
|
|
130
|
+
if (mist.length > 0)
|
|
131
|
+
return 1;
|
|
132
|
+
return 2;
|
|
133
|
+
};
|
|
134
|
+
const metGaten = rijen
|
|
135
|
+
.filter((r) => (Array.isArray(r.ontbrekend) && r.ontbrekend.length > 0) || fysiek(r).status === "onmogelijk")
|
|
136
|
+
.sort((a, b) => rang(a) - rang(b) || a.product.localeCompare(b.product));
|
|
137
|
+
const dragerNaam = (code) => code ? ladingdragerNaam(code, floricodeNamen, dragers.get(code)?.name ?? undefined) : "";
|
|
138
|
+
return (_jsxs(Card, { id: "gegevens-voor-karindeling", children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsx(CardTitle, { children: "Gegevens voor karindeling" }), _jsx(CardDescription, { children: "Producten in open orders waarvan een waarde ontbreekt. Een voorstel (berekend of van vergelijkbare producten) wordt pas gebruikt als je het hier invult en opslaat." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void laden(), disabled: loading, children: [_jsx(RefreshCw, { className: "h-4 w-4" }), "Verversen"] })] }), _jsxs(CardContent, { className: "space-y-3", children: [fout && _jsx("p", { className: "text-sm text-destructive", children: fout }), loading ? (_jsx(Skeleton, { className: "h-16 w-full" })) : metGaten.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Alle producten in open orders hebben de benodigde gegevens." })) : (metGaten.map((r) => (_jsxs("div", { className: "rounded-md border p-3 space-y-2", children: [_jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-2", children: [_jsx("span", { className: "font-medium", children: r.product }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [rang(r) === 0 ? "Onmogelijk · " : rang(r) === 2 ? "Compleet, 1 waarschuwing · " : "", r.in_open_order ? "In open order" : "Niet in open order", " \u00B7 ", METHODE_LABEL[r.methode] ?? "Indeling", r.ladingdrager ? ` · ${dragerNaam(r.ladingdrager)}` : ""] })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: r.uitleg }), _jsxs("p", { className: "text-xs text-muted-foreground", children: ["Fust ", String(r.velden?.fust_type_id?.naam ?? "onbekend"), " (", bronTekst(r.velden?.fust_type_id?.bron), ") \u00B7 maten", " ", ["fust_length_mm", "fust_width_mm", "fust_height_mm"]
|
|
119
139
|
.map((k) => `${r.velden?.[k]?.waarde ?? "?"} mm (${bronTekst(r.velden?.[k]?.bron)})`)
|
|
120
140
|
.join(" × "), " ", "\u00B7 planthoogte inclusief pot ", r.velden?.plant_height_cm?.waarde != null ? `${r.velden.plant_height_cm.waarde} cm` : "onbekend", " (", bronTekst(r.velden?.plant_height_cm?.bron), ")"] }), r.ontbrekend.map((veld) => {
|
|
121
141
|
const k = `${r.product_id}:${veld}`;
|
|
@@ -31,7 +31,7 @@ export function HerindelingMeldingCard() {
|
|
|
31
31
|
const orders = Array.isArray(data?.orders) ? data.orders : [];
|
|
32
32
|
const aantal = Number(data?.wouldChange ?? 0);
|
|
33
33
|
const probleem = data?.ok === false ? data.error : data?.lastError;
|
|
34
|
-
return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["Herindelen", _jsx(Badge, { variant: "outline", children: data?.mode === "apply" ? "Uitvoeren" : "Alleen melden" })] }), _jsx(CardDescription, { children: "Alleen open orders (niet geprint, gescand of verstuurd) met een leverdag vanaf vandaag. Bestaande indelingen veranderen hier niet." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void laden(), disabled: loading, children: [_jsx(RefreshCw, { className: "h-4 w-4" }), "Verversen"] })] }), _jsx(CardContent, { className: "space-y-3", children: loading ? (_jsx(Skeleton, { className: "h-16 w-full" })) : fout ? (_jsx("p", { className: "text-sm text-destructive", children: fout })) : (_jsxs(_Fragment, { children: [probleem ? _jsx("p", { className: "text-sm text-destructive", children: probleem }) : null, _jsxs("p", { className: "text-sm font-medium", children: [aantal, " order", aantal === 1 ? "" : "s", " zou", aantal === 1 ? "" : "den", " anders ingedeeld worden (alleen leverdagen vanaf vandaag)"] }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [Number(data?.checked ?? 0), " open order(s) bekeken", data?.lastRunAt
|
|
35
|
-
? ` · laatste
|
|
34
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["Herindelen", _jsx(Badge, { variant: "outline", children: data?.mode === "apply" ? "Uitvoeren" : "Alleen melden" })] }), _jsx(CardDescription, { children: "Alleen open orders (niet geprint, gescand of verstuurd) met een leverdag vanaf vandaag. Bestaande indelingen veranderen hier niet." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void laden(), disabled: loading, children: [_jsx(RefreshCw, { className: "h-4 w-4" }), "Verversen"] })] }), _jsx(CardContent, { className: "space-y-3", children: loading ? (_jsx(Skeleton, { className: "h-16 w-full" })) : fout ? (_jsx("p", { className: "text-sm text-destructive", children: fout })) : (_jsxs(_Fragment, { children: [probleem ? _jsx("p", { className: "text-sm text-destructive", children: probleem }) : null, _jsxs("p", { className: "text-sm font-medium", children: [aantal, " order", aantal === 1 ? "" : "s", " zou", aantal === 1 ? "" : "den", " anders ingedeeld worden (alleen leverdagen vanaf vandaag)"] }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [Number(data?.checked ?? 0), " open order(s) bekeken \u00B7 deze lijst is nu berekend", data?.lastRunAt
|
|
35
|
+
? ` · laatste echte herindeling ${new Date(data.lastRunAt).toLocaleString("nl-NL")} (${Number(data.lastDurationMs ?? 0)} ms; draait alleen na een wijziging in de combineerregels)`
|
|
36
36
|
: ""] }), orders.length > 0 ? (_jsx("div", { className: "overflow-x-auto rounded-md border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left", children: _jsxs("tr", { children: [_jsx("th", { className: "p-2", children: "Order" }), _jsx("th", { className: "p-2", children: "Leverdag" }), _jsx("th", { className: "p-2", children: "Uitkomst" }), _jsx("th", { className: "p-2", children: "Huidige indeling" }), _jsx("th", { className: "p-2", children: "Nieuwe indeling" }), _jsx("th", { className: "p-2", children: "Reden" })] }) }), _jsx("tbody", { children: orders.map((o) => (_jsxs("tr", { className: "border-t align-top", children: [_jsx("td", { className: "p-2 font-medium", children: o.orderNumber ?? "—" }), _jsx("td", { className: "p-2", children: o.deliveryDate ?? "—" }), _jsx("td", { className: "p-2", children: o.wijzigt === false ? "Blijft zoals het is" : "Zou wijzigen" }), _jsx("td", { className: "p-2", children: o.huidig }), _jsx("td", { className: "p-2", children: o.nieuw }), _jsx("td", { className: "p-2 break-all text-xs text-muted-foreground", children: o.reden })] }, o.orderId))) })] }) })) : null] })) })] }));
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartlijstCard.d.ts","sourceRoot":"","sources":["../../src/components/StartlijstCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"StartlijstCard.d.ts","sourceRoot":"","sources":["../../src/components/StartlijstCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,cAAc,gCA2G7B"}
|
|
@@ -47,7 +47,10 @@ export function StartlijstCard() {
|
|
|
47
47
|
await laden();
|
|
48
48
|
};
|
|
49
49
|
const Stap = ({ klaar, titel, tekst, naar }) => (_jsxs("div", { className: "flex items-start gap-3", children: [klaar ? _jsx(CheckCircle2, { className: "mt-0.5 h-5 w-5 text-primary" }) : _jsx(Circle, { className: "mt-0.5 h-5 w-5 text-muted-foreground" }), _jsxs("div", { className: "text-sm", children: [_jsx("p", { className: "font-medium", children: titel }), _jsxs("p", { className: "text-muted-foreground", children: [tekst, naar && (_jsxs(_Fragment, { children: [" ", _jsx(Link, { to: naar, className: "underline", children: "Openen" })] }))] })] })] }));
|
|
50
|
-
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Startlijst" }), _jsx(CardDescription, { children: "Wat er nodig is om karren te kunnen indelen, in deze volgorde." })] }), _jsxs(CardContent, { className: "space-y-3", children: [fout && _jsx("p", { className: "text-sm text-destructive", children: fout }), _jsx(Stap, { klaar: s?.ladingdragers?.klaar, titel: "1. Ladingdragers", tekst: `${s?.ladingdragers?.aantal ?? 0} actief, ${s?.ladingdragers?.onvolledig ?? 0} zonder volledige maten.`, naar: "/logistiek-engine/ladingdragers" }), _jsx(Stap, { klaar: s?.werkwijze?.klaar, titel: "2. Werkwijze", tekst: s?.werkwijze?.klaar ? "Ingesteld." : "Nog niet ingesteld in de Rule Engine.", naar: "/logistiek-engine/rule-engine" }), _jsx(Stap, { klaar: s?.gereedheid?.klaar, titel: "3. Gereedheid per product", tekst: `${s?.gereedheid?.onvolledig ?? 0} van ${s?.gereedheid?.producten ?? 0} producten in open orders missen gegevens.`
|
|
50
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Startlijst" }), _jsx(CardDescription, { children: "Wat er nodig is om karren te kunnen indelen, in deze volgorde." })] }), _jsxs(CardContent, { className: "space-y-3", children: [fout && _jsx("p", { className: "text-sm text-destructive", children: fout }), _jsx(Stap, { klaar: s?.ladingdragers?.klaar, titel: "1. Ladingdragers", tekst: `${s?.ladingdragers?.aantal ?? 0} actief, ${s?.ladingdragers?.onvolledig ?? 0} zonder volledige maten.`, naar: "/logistiek-engine/ladingdragers" }), _jsx(Stap, { klaar: s?.werkwijze?.klaar, titel: "2. Werkwijze", tekst: s?.werkwijze?.klaar ? "Ingesteld." : "Nog niet ingesteld in de Rule Engine.", naar: "/logistiek-engine/rule-engine" }), _jsx(Stap, { klaar: s?.gereedheid?.klaar, titel: "3. Gereedheid per product", tekst: `${s?.gereedheid?.onvolledig ?? 0} van ${s?.gereedheid?.producten ?? 0} producten in open orders missen gegevens.` +
|
|
51
|
+
((s?.gereedheid?.waarschuwing ?? 0) > 0
|
|
52
|
+
? ` ${s?.gereedheid?.waarschuwing} compleet, 1 waarschuwing (alleen gewicht ontbreekt).`
|
|
53
|
+
: ""), naar: "/logistiek-engine/beheer" }), _jsxs("div", { className: "flex flex-wrap gap-2 border-t pt-3", children: [_jsx(Button, { variant: "outline", size: "sm", disabled: bezig, onClick: () => void overnemen(false), children: "Alles overnemen uit Floricode/Floriday" }), voor && !voor.uitgevoerd && voor.aantal > 0 && (_jsxs(Button, { size: "sm", disabled: bezig, onClick: () => void overnemen(true), children: ["Bevestigen: ", voor.aantal, " veld(en) invullen"] }))] }), voor && (_jsxs("div", { className: "space-y-1 text-sm", children: [_jsxs("p", { children: [voor.uitgevoerd ? "Ingevuld" : "Voorvertoning", ": ", voor.aantal, " leeg veld(en)", Object.keys(voor.per_bron).length > 0 &&
|
|
51
54
|
` (${Object.entries(voor.per_bron)
|
|
52
55
|
.map(([b, n]) => `${n} uit ${b}`)
|
|
53
56
|
.join(", ")})`, ". Bestaande waarden blijven staan."] }), voor.velden.slice(0, 30).map((v, i) => (_jsxs("p", { className: "text-xs text-muted-foreground", children: [v.naam, ": ", VELD[v.veld] ?? v.veld, " = ", String(v.waarde), " (", v.bron, ")"] }, i)))] }))] })] }));
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -84,4 +84,5 @@ export * from './lib/shellAdres.js';
|
|
|
84
84
|
export * from './hooks/useShellAdres.js';
|
|
85
85
|
export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
|
|
86
86
|
export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
|
|
87
|
+
export * from './lib/extraPlaten.js';
|
|
87
88
|
//# sourceMappingURL=index.d.ts.map
|
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,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,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"}
|
package/dist-lib/index.js
CHANGED
|
@@ -98,3 +98,4 @@ export * from './lib/shellAdres.js';
|
|
|
98
98
|
export * from './hooks/useShellAdres.js';
|
|
99
99
|
export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
|
|
100
100
|
export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
|
|
101
|
+
export * from './lib/extraPlaten.js';
|