@flowselections/logistiek-engine 1.0.211 → 1.0.214

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.
@@ -36719,3 +36719,236 @@ RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SECURITY D
36719
36719
  'Verouderde kar toont geen lagen en %'
36720
36720
  $$;
36721
36721
  GRANT EXECUTE ON FUNCTION public.logistics_install_check_210() TO authenticated, service_role;
36722
+
36723
+
36724
+ -- ============================================================
36725
+ -- 1.0.213
36726
+ -- ============================================================
36727
+ -- Punt 1: geldige buffer nooit splitsen in de voorbeeldberekening.
36728
+ CREATE OR REPLACE FUNCTION public.logistics_rebuffer_simulate_open()
36729
+ RETURNS TABLE(id uuid, order_number text, delivery_date text, buffer_id uuid, cur_label text, new_label text, changed boolean, reason text)
36730
+ LANGUAGE plpgsql
36731
+ STABLE SECURITY DEFINER
36732
+ SET search_path TO 'public'
36733
+ AS $function$
36734
+ BEGIN
36735
+ PERFORM public.logistics_acc_guard('server', 'logistics_rebuffer_simulate_open');
36736
+ RETURN QUERY
36737
+ WITH c AS MATERIALIZED (
36738
+ SELECT o.id, o.order_number, o.delivery_date, o.buffer_id, public.logistics_buffer_target(o.id) AS t,
36739
+ public.logistics_order_afgemeld(o.id) AS afgemeld,
36740
+ (o.buffer_id IS NOT NULL AND coalesce(public.logistics_buffer_frozen(o.buffer_id), false)) AS buf_vast
36741
+ FROM public.orders o JOIN public.logistics_rebuffer_candidates() k ON k.order_id = o.id
36742
+ ), m AS (
36743
+ SELECT c.*,
36744
+ (c.afgemeld OR c.buf_vast) AS beschermd,
36745
+ (SELECT array_agg(x.id ORDER BY x.id) FROM public.orders x WHERE c.buffer_id IS NOT NULL AND x.buffer_id = c.buffer_id AND x.deleted_at IS NULL AND x.id <> c.id) AS cur_mates,
36746
+ (SELECT array_agg(x.id ORDER BY x.id) FROM public.orders x WHERE c.t->>'soort' = 'buffer' AND x.buffer_id = (c.t->>'bufferId')::uuid AND x.deleted_at IS NULL AND x.id <> c.id) AS new_mates
36747
+ FROM c
36748
+ ), l AS (
36749
+ SELECT m.*,
36750
+ CASE WHEN m.buffer_id IS NULL THEN 'Geen buffer (eigen kar)'
36751
+ WHEN m.cur_mates IS NULL THEN 'Eigen buffer'
36752
+ ELSE 'Buffer met ' || (SELECT string_agg(x.order_number, ', ' ORDER BY x.order_number) FROM public.orders x WHERE x.id = ANY(m.cur_mates)) END AS cur_l
36753
+ FROM m
36754
+ )
36755
+ SELECT l.id, l.order_number, l.delivery_date, l.buffer_id, l.cur_l,
36756
+ CASE WHEN l.beschermd THEN l.cur_l
36757
+ WHEN l.t->>'soort' IN ('solo','uitgesloten') THEN 'Geen buffer (eigen kar)'
36758
+ WHEN l.new_mates IS NULL THEN 'Eigen buffer'
36759
+ ELSE 'Buffer met ' || (SELECT string_agg(x.order_number, ', ' ORDER BY x.order_number) FROM public.orders x WHERE x.id = ANY(l.new_mates)) END,
36760
+ CASE WHEN l.beschermd THEN false
36761
+ ELSE coalesce(l.cur_mates, '{}') IS DISTINCT FROM coalesce(l.new_mates, '{}')
36762
+ OR ((l.t->>'soort') IN ('solo','uitgesloten') AND l.buffer_id IS NOT NULL AND l.cur_mates IS NOT NULL) END,
36763
+ CASE WHEN l.afgemeld THEN 'Ongewijzigd: de order is al verzonden of afgemeld; een bestaande buffer wordt niet gesplitst.'
36764
+ WHEN l.buf_vast THEN 'Ongewijzigd: de buffer ligt al vast (geprint, gescand of verstuurd) en wordt niet gesplitst.'
36765
+ WHEN jsonb_array_length(coalesce(l.t->'overgeslagen','[]'::jsonb)) > 0
36766
+ THEN 'Niet samengevoegd: buffer van ' || (SELECT string_agg(v, '; ') FROM jsonb_array_elements_text(l.t->'overgeslagen') v)
36767
+ || ' ligt vast (geprint, gescand of verstuurd).'
36768
+ WHEN l.t->>'soort' = 'uitgesloten' THEN 'Deze order is uitgesloten van combineren (handmatig uitgesloten van indeling).'
36769
+ WHEN l.t->>'soort' = 'solo' THEN 'Volgens de huidige combineerregels krijgt deze order een eigen kar (' || coalesce(l.t->>'reason','onbekend') || ').'
36770
+ ELSE 'Volgens de huidige combineerregels (' || coalesce(l.t->>'reason','onbekend') || ').' END
36771
+ FROM l;
36772
+ END $function$;
36773
+
36774
+ -- Punt 3: oordeel per product, ladingdrager uit de hoofdverpakking eerst.
36775
+ CREATE OR REPLACE FUNCTION public.logistics_product_oordeel_many(p_product_ids uuid[])
36776
+ RETURNS TABLE(product_id uuid, oordeel text, tekst text, "actieUrl" text)
36777
+ LANGUAGE plpgsql
36778
+ STABLE SECURITY DEFINER
36779
+ SET search_path TO 'public'
36780
+ AS $function$
36781
+ #variable_conflict use_column
36782
+ DECLARE r record; c record; cd record; v_carrier text; hv jsonb; rs jsonb; v_code text; v_lfout text; ls int; fh numeric; ph numeric; cpl numeric; lpc numeric; laag numeric;
36783
+ blok text[]; waar text[]; mist text[]; hmist text[]; naam text; bron text;
36784
+ c_url constant text := '/logistiek-engine/beheer#gegevens-voor-karindeling';
36785
+ BEGIN
36786
+ PERFORM public.logistics_acc_guard('ingelogd', 'logistics_product_oordeel_many');
36787
+ IF coalesce(cardinality(p_product_ids), 0) = 0 THEN RETURN; END IF;
36788
+ IF cardinality(p_product_ids) > 1000 THEN
36789
+ RAISE EXCEPTION 'Maximaal 1000 producten per aanroep (ontvangen: %).', cardinality(p_product_ids) USING ERRCODE = '22023';
36790
+ END IF;
36791
+ SELECT nullif(btrim(coalesce(s.settings->'karrenindeling'->'fields'->>'default_carrier_type', s.settings->'karrenindeling'->>'default_carrier_type')), '')
36792
+ INTO v_carrier FROM public.logistics_rule_configs s WHERE s.is_active ORDER BY s.updated_at DESC LIMIT 1;
36793
+ SELECT t.code, t.name, t.layer_length_cm, t.layer_width_cm, t.max_height_cm, t.max_crates_per_layer, t.layers_per_carrier INTO cd
36794
+ FROM public.load_carrier_types t
36795
+ WHERE t.is_active AND (t.code = v_carrier OR (v_carrier IS NULL AND t.is_default))
36796
+ ORDER BY (t.code = v_carrier) DESC NULLS LAST LIMIT 1;
36797
+
36798
+ FOR r IN SELECT * FROM public.logistics_data_gereedheid(p_product_ids) LOOP
36799
+ blok := '{}'; waar := '{}'; hmist := '{}';
36800
+ mist := array_remove(coalesce(r.ontbrekend, '{}'), 'weight');
36801
+ hv := public.logistics_product_hoofdverpakking(r.product_id);
36802
+ v_code := NULL; v_lfout := NULL;
36803
+ IF hv IS NOT NULL AND NOT coalesce((hv->>'aanwezig')::boolean, false) THEN
36804
+ mist := mist || 'belading niet ingesteld'::text;
36805
+ END IF;
36806
+ IF hv IS NOT NULL AND coalesce((hv->>'aanwezig')::boolean, false) AND nullif(hv->>'ladingdrager', '') IS NOT NULL THEN
36807
+ rs := public.logistics_ladingdrager_resolve(hv->>'ladingdrager');
36808
+ v_code := rs->>'code'; v_lfout := rs->>'fout';
36809
+ END IF;
36810
+ SELECT NULL::text AS code, NULL::text AS name, NULL::int AS layer_length_cm, NULL::int AS layer_width_cm, NULL::int AS max_height_cm, NULL::int AS max_crates_per_layer, NULL::int AS layers_per_carrier INTO c;
36811
+ IF v_code IS NOT NULL THEN
36812
+ SELECT t.code, t.name, t.layer_length_cm, t.layer_width_cm, t.max_height_cm, t.max_crates_per_layer, t.layers_per_carrier INTO c
36813
+ FROM public.load_carrier_types t WHERE t.is_active AND t.code = v_code LIMIT 1;
36814
+ ELSIF v_lfout IS NULL THEN
36815
+ SELECT cd.code, cd.name, cd.layer_length_cm, cd.layer_width_cm, cd.max_height_cm, cd.max_crates_per_layer, cd.layers_per_carrier INTO c;
36816
+ ELSE
36817
+ mist := mist || v_lfout;
36818
+ END IF;
36819
+ naam := coalesce(c.name, c.code, 'de ladingdrager');
36820
+ bron := coalesce(r.velden->'crates_per_layer'->>'bron', 'product');
36821
+ cpl := coalesce(nullif(r.velden->'crates_per_layer'->>'waarde', '')::numeric, 0);
36822
+ lpc := coalesce(nullif(r.velden->'layers_per_cart'->>'waarde', '')::numeric, 0);
36823
+ fh := nullif(r.velden->'fust_height_mm'->>'waarde', '')::numeric / 10.0;
36824
+ ph := nullif(r.velden->'plant_height_cm'->>'waarde', '')::numeric;
36825
+ ls := public.logistics_max_fusten_per_laag(c.layer_length_cm, c.layer_width_cm,
36826
+ nullif(r.velden->'fust_length_mm'->>'waarde', '')::numeric / 10.0, nullif(r.velden->'fust_width_mm'->>'waarde', '')::numeric / 10.0);
36827
+ IF coalesce(fh,0) > 0 AND coalesce(ph,0) > 0 AND coalesce(c.max_height_cm,0) > 0 THEN
36828
+ laag := greatest(fh, ph);
36829
+ IF lpc * laag > c.max_height_cm + 1e-9 AND ph >= fh AND coalesce(r.velden->'plant_height_cm'->>'bron', '') ILIKE 'floricode%' THEN
36830
+ waar := waar || format('planthoogte volgens Floricode; controleer: %s lagen × %s cm = %s cm, hoger dan %s (%s cm)',
36831
+ lpc, trim_scale(round(laag,1)), trim_scale(round(lpc*laag,1)), naam, trim_scale(round(c.max_height_cm::numeric,1)));
36832
+ ELSIF lpc * laag > c.max_height_cm + 1e-9 THEN
36833
+ blok := blok || format('%s lagen × %s cm = %s cm, terwijl %s %s cm hoog is; er passen maximaal %s lagen',
36834
+ lpc, trim_scale(round(laag,1)), trim_scale(round(lpc*laag,1)), naam, trim_scale(round(c.max_height_cm::numeric,1)), floor(c.max_height_cm / laag));
36835
+ END IF;
36836
+ ELSE
36837
+ IF coalesce(fh,0) <= 0 THEN hmist := hmist || 'fusthoogte'::text; END IF;
36838
+ IF coalesce(ph,0) <= 0 THEN hmist := hmist || 'planthoogte'::text; END IF;
36839
+ IF coalesce(c.max_height_cm,0) <= 0 THEN hmist := hmist || ('hoogte van ' || naam); END IF;
36840
+ END IF;
36841
+ IF public.logistics_laag_tolerantie_tekst(c.layer_length_cm, c.layer_width_cm,
36842
+ nullif(r.velden->'fust_length_mm'->>'waarde', '')::numeric / 10.0, nullif(r.velden->'fust_width_mm'->>'waarde', '')::numeric / 10.0, cpl) IS NOT NULL THEN
36843
+ waar := waar || public.logistics_laag_tolerantie_tekst(c.layer_length_cm, c.layer_width_cm,
36844
+ nullif(r.velden->'fust_length_mm'->>'waarde', '')::numeric / 10.0, nullif(r.velden->'fust_width_mm'->>'waarde', '')::numeric / 10.0, cpl);
36845
+ END IF;
36846
+ IF ls IS NOT NULL AND cpl > ls THEN
36847
+ blok := blok || format('%s fust per laag (bron: %s), maar op een laag van %s passen er maximaal %s', cpl, bron, naam, ls);
36848
+ END IF;
36849
+ IF coalesce(c.max_crates_per_layer,0) > 0 AND cpl > c.max_crates_per_layer THEN
36850
+ blok := blok || format('%s fust per laag (bron: %s), maar %s staat maximaal %s fust per laag toe', cpl, bron, naam, c.max_crates_per_layer);
36851
+ END IF;
36852
+ IF cardinality(blok) = 0 AND cardinality(hmist) > 0 AND coalesce(c.layers_per_carrier,0) > 0 AND lpc > c.layers_per_carrier THEN
36853
+ waar := waar || format('%s lagen opgegeven, standaard %s; niet te controleren omdat de %s ontbreekt', lpc, c.layers_per_carrier, array_to_string(hmist, ', '));
36854
+ END IF;
36855
+ IF 'weight' = ANY(coalesce(r.ontbrekend, '{}')) THEN waar := waar || 'gewicht per fust ontbreekt'::text; END IF;
36856
+
36857
+ product_id := r.product_id; "actieUrl" := c_url;
36858
+ IF cardinality(blok) > 0 THEN
36859
+ oordeel := 'onmogelijk'; tekst := format('%s past niet op %s: %s.', r.product, naam, array_to_string(blok, '; '));
36860
+ ELSIF cardinality(mist) > 0 THEN
36861
+ oordeel := 'mist_gegevens';
36862
+ tekst := CASE WHEN 'belading niet ingesteld' = ANY(mist) THEN format('%s: belading niet ingesteld.', r.product)
36863
+ WHEN v_lfout IS NOT NULL AND v_lfout = ANY(mist) THEN format('%s: %s.', r.product, v_lfout)
36864
+ ELSE r.uitleg END;
36865
+ ELSIF cardinality(waar) > 0 THEN
36866
+ oordeel := 'waarschuwing'; tekst := format('%s: %s.', r.product, array_to_string(waar, '; '));
36867
+ ELSE
36868
+ oordeel := 'compleet'; tekst := format('%s: gegevens voor karindeling compleet.', r.product);
36869
+ END IF;
36870
+ RETURN NEXT;
36871
+ END LOOP;
36872
+ END $function$;
36873
+ -- 1.0.213 punt 6/2: verouderde kar ook bij aantalafwijking of zonder geldige regels.
36874
+ CREATE OR REPLACE FUNCTION public.logistics_cart_aantal_afwijking_core(p_cart_id uuid)
36875
+ RETURNS text[] LANGUAGE sql STABLE SET search_path TO 'public' AS $$
36876
+ -- Regels op deze kar waarvan het totaal aantal fust (over alle actieve karren) niet past bij de order:
36877
+ -- fust moet gelijk zijn aan het orderaantal (eenheid fust) of aan ceil(aantal ÷ planten per fust) (eenheid planten).
36878
+ -- Groepsartikelen (meerdere producten onder één orderregel) worden per lid afgerond en tellen hier niet mee.
36879
+ WITH r AS (
36880
+ SELECT DISTINCT ci.order_item_id FROM public.order_cart_items ci WHERE ci.cart_id = p_cart_id AND ci.order_item_id IS NOT NULL
36881
+ ), s AS (
36882
+ SELECT oi.id, coalesce(oi.product_name, 'regel') naam, oi.quantity q, sum(ci.crates) fust,
36883
+ max(ci.plants_per_crate) ppc, count(DISTINCT ci.product_id) nprod,
36884
+ bool_or(ci.components IS NOT NULL AND ci.components::text NOT IN ('null','[]','{}')) comp
36885
+ FROM r JOIN public.order_items oi ON oi.id = r.order_item_id
36886
+ JOIN public.order_cart_items ci ON ci.order_item_id = oi.id
36887
+ JOIN public.order_carts c ON c.id = ci.cart_id AND c.archived_at IS NULL
36888
+ WHERE oi.quarantined_at IS NULL
36889
+ GROUP BY oi.id, oi.product_name, oi.quantity)
36890
+ SELECT array_agg(naam ORDER BY naam) FROM s
36891
+ WHERE NOT comp AND nprod <= 1 AND q IS NOT NULL AND q > 0
36892
+ AND fust <> q AND fust <> ceil(q::numeric / greatest(coalesce(ppc, 1), 1))
36893
+ $$;
36894
+
36895
+ CREATE OR REPLACE FUNCTION public.logistics_cart_verouderd_core(p_cart_id uuid)
36896
+ RETURNS jsonb LANGUAGE plpgsql STABLE SET search_path TO 'public'
36897
+ AS $function$
36898
+ DECLARE v_nr text; v_n int; v_live int; v_afw text[];
36899
+ BEGIN
36900
+ IF p_cart_id IS NULL THEN RETURN NULL; END IF;
36901
+ SELECT cart_number::text INTO v_nr FROM public.order_carts WHERE id = p_cart_id;
36902
+ IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'order_items' AND column_name = 'quarantined_at') THEN
36903
+ SELECT count(*) INTO v_n FROM public.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
36904
+ WHERE ci.cart_id = p_cart_id AND oi.quarantined_at IS NOT NULL;
36905
+ IF coalesce(v_n, 0) > 0 THEN
36906
+ RETURN jsonb_build_object('verouderd', true, 'reden', 'quarantaine', 'regelsInQuarantaine', v_n,
36907
+ 'blokkade', jsonb_build_object('code', 'kar_verouderd',
36908
+ '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)));
36909
+ END IF;
36910
+ SELECT count(*) INTO v_live FROM public.order_cart_items ci LEFT JOIN public.order_items oi ON oi.id = ci.order_item_id
36911
+ WHERE ci.cart_id = p_cart_id AND coalesce(ci.crates, 0) > 0 AND oi.quarantined_at IS NULL;
36912
+ ELSE
36913
+ SELECT count(*) INTO v_live FROM public.order_cart_items ci WHERE ci.cart_id = p_cart_id AND coalesce(ci.crates, 0) > 0;
36914
+ END IF;
36915
+ IF coalesce(v_live, 0) = 0 THEN
36916
+ RETURN jsonb_build_object('verouderd', true, 'reden', 'leeg',
36917
+ 'blokkade', jsonb_build_object('code', 'kar_leeg',
36918
+ 'tekst', format('Kar %s heeft geen regels meer. Deel de niet-geprinte karren opnieuw in.', coalesce(v_nr, '?'))));
36919
+ END IF;
36920
+ v_afw := public.logistics_cart_aantal_afwijking_core(p_cart_id);
36921
+ IF coalesce(cardinality(v_afw), 0) > 0 THEN
36922
+ RETURN jsonb_build_object('verouderd', true, 'reden', 'aantal', 'producten', to_jsonb(v_afw),
36923
+ 'blokkade', jsonb_build_object('code', 'kar_verouderd',
36924
+ '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, ', '))));
36925
+ END IF;
36926
+ RETURN NULL;
36927
+ END $function$;
36928
+
36929
+ -- "1 laag" i.p.v. "1 lagen".
36930
+ CREATE OR REPLACE FUNCTION public.logistics_kar_tekst(p_carrier_code text, p_lagen numeric, p_pct numeric)
36931
+ RETURNS text LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
36932
+ SELECT CASE WHEN p_lagen IS NULL THEN NULL ELSE
36933
+ replace(trim_scale(round(p_lagen, 1))::text, '.', ',') || CASE WHEN round(p_lagen, 1) = 1 THEN ' laag · ' ELSE ' lagen · ' END
36934
+ || coalesce((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), 'Ladingdrager')
36935
+ || CASE WHEN coalesce(public.logistics_extra_platen(p_lagen), 0) = 0 THEN ''
36936
+ WHEN public.logistics_extra_platen(p_lagen) = 1 THEN ' + 1 plaat'
36937
+ ELSE ' + ' || public.logistics_extra_platen(p_lagen) || ' platen' END
36938
+ || CASE WHEN p_pct IS NULL THEN '' ELSE ' · ' || round(p_pct)::int || ' %' END END
36939
+ $$;
36940
+ CREATE OR REPLACE FUNCTION public.logistics_install_check_213()
36941
+ RETURNS TABLE(punt text, ok boolean, uitleg text) LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$
36942
+ SELECT 'buffer niet splitsen', position('beschermd' IN pg_get_functiondef('public.logistics_rebuffer_simulate_open()'::regprocedure)) > 0,
36943
+ 'Verzonden/afgemelde of vastliggende buffers blijven bij de voorbeeldberekening ongewijzigd'
36944
+ UNION ALL SELECT 'oordeel_many: hoofdverpakking eerst', position('logistics_product_hoofdverpakking' IN pg_get_functiondef('public.logistics_product_oordeel_many(uuid[])'::regprocedure)) > 0
36945
+ AND position('logistics_ladingdrager_resolve' IN pg_get_functiondef('public.logistics_product_oordeel_many(uuid[])'::regprocedure)) > 0,
36946
+ 'Ladingdrager: hoofdverpakking → standaard werkwijze'
36947
+ UNION ALL SELECT 'kar verouderd bij aantalafwijking', to_regprocedure('public.logistics_cart_aantal_afwijking_core(uuid)') IS NOT NULL
36948
+ AND position('aantal_afwijking' IN pg_get_functiondef('public.logistics_cart_verouderd_core(uuid)'::regprocedure)) > 0,
36949
+ 'Afwijkende aantallen of lege kar → verouderd: opnieuw indelen'
36950
+ UNION ALL SELECT 'karTekst enkelvoud', position(' laag · ' IN pg_get_functiondef('public.logistics_kar_tekst(text,numeric,numeric)'::regprocedure)) > 0,
36951
+ '"1 laag" in plaats van "1 lagen"'
36952
+ UNION ALL SELECT 'guard', to_regprocedure('public.logistics_acc_guard(text,text)') IS NOT NULL, 'Toegangscontrole aanwezig'
36953
+ $$;
36954
+ GRANT EXECUTE ON FUNCTION public.logistics_install_check_213() TO authenticated, service_role;
@@ -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;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"}
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,gCAmMjC"}
@@ -78,6 +78,8 @@ export function DataGereedheidCard() {
78
78
  const [bezig, setBezig] = useState(null);
79
79
  const [fusten, setFusten] = useState(new Map());
80
80
  const [dragers, setDragers] = useState(new Map());
81
+ // 1.0.213: het oordeel per product komt van de server (zelfde regel als de planner).
82
+ const [oordelen, setOordelen] = useState(new Map());
81
83
  const floricodeNamen = useFloricodeLadingdragers();
82
84
  const laden = useCallback(async () => {
83
85
  setLoading(true);
@@ -88,6 +90,16 @@ export function DataGereedheidCard() {
88
90
  const lijst = !error && Array.isArray(data) ? data : [];
89
91
  if (!error)
90
92
  setRijen(lijst);
93
+ const pids = Array.from(new Set(lijst.map((r) => r.product_id).filter(Boolean))).slice(0, 1000);
94
+ if (pids.length > 0) {
95
+ const { data: o, error: oe } = await supabase.rpc("logistics_product_oordeel_many", { p_product_ids: pids });
96
+ if (oe)
97
+ setFout(oe.message);
98
+ const ol = !oe && Array.isArray(o) ? o : [];
99
+ setOordelen(new Map(ol.map((x) => [String(x.product_id), String(x.oordeel)])));
100
+ }
101
+ else
102
+ setOordelen(new Map());
91
103
  const fustIds = Array.from(new Set(lijst.map((r) => r.velden?.fust_type_id?.waarde).filter((x) => typeof x === "string")));
92
104
  const codes = Array.from(new Set(lijst.map((r) => r.ladingdrager).filter((x) => !!x)));
93
105
  if (fustIds.length > 0) {
@@ -123,19 +135,26 @@ export function DataGereedheidCard() {
123
135
  };
124
136
  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);
125
137
  // 1.0.201: onmogelijk bovenaan, dan ontbrekende gegevens, dan alleen een waarschuwing (gewicht).
138
+ // 1.0.213: status volgt het serveroordeel (logistics_product_oordeel_many); alleen
139
+ // "onmogelijk" als de server dat zegt, ontbrekende gegevens → "Gegevens ontbreken".
126
140
  const rang = (r) => {
127
- if (fysiek(r).status === "onmogelijk")
141
+ const o = oordelen.get(String(r.product_id));
142
+ if (o === "onmogelijk")
128
143
  return 0;
129
- const mist = (Array.isArray(r.ontbrekend) ? r.ontbrekend : []).filter((v) => v !== "weight");
130
- if (mist.length > 0)
144
+ if (o === "mist_gegevens")
131
145
  return 1;
146
+ if (o == null) {
147
+ const mist = (Array.isArray(r.ontbrekend) ? r.ontbrekend : []).filter((v) => v !== "weight");
148
+ if (mist.length > 0)
149
+ return 1;
150
+ }
132
151
  return 2;
133
152
  };
134
153
  const metGaten = rijen
135
- .filter((r) => (Array.isArray(r.ontbrekend) && r.ontbrekend.length > 0) || fysiek(r).status === "onmogelijk")
154
+ .filter((r) => (Array.isArray(r.ontbrekend) && r.ontbrekend.length > 0) || oordelen.get(String(r.product_id)) === "onmogelijk")
136
155
  .sort((a, b) => rang(a) - rang(b) || a.product.localeCompare(b.product));
137
156
  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"]
157
+ 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) === 1 ? "Gegevens ontbreken · " : "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"]
139
158
  .map((k) => `${r.velden?.[k]?.waarde ?? "?"} mm (${bronTekst(r.velden?.[k]?.bron)})`)
140
159
  .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) => {
141
160
  const k = `${r.product_id}:${veld}`;
@@ -85,4 +85,6 @@ export * from './hooks/useShellAdres.js';
85
85
  export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
86
86
  export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
87
87
  export * from './lib/extraPlaten.js';
88
+ export { logisticsPlanPreview } from './lib/planPreview.functions.js';
89
+ export * from './lib/planPreview.js';
88
90
  //# sourceMappingURL=index.d.ts.map
@@ -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;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,cAAc,mBAAmB,CAAC"}
package/dist-lib/index.js CHANGED
@@ -99,3 +99,5 @@ export * from './hooks/useShellAdres.js';
99
99
  export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
100
100
  export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
101
101
  export * from './lib/extraPlaten.js';
102
+ export { logisticsPlanPreview } from './lib/planPreview.functions.js';
103
+ export * from './lib/planPreview.js';
@@ -28593,6 +28593,21 @@ export type Database = {
28593
28593
  };
28594
28594
  Relationships: [];
28595
28595
  };
28596
+ voorraad_placeholder_codes: {
28597
+ Row: {
28598
+ code: string;
28599
+ created_at: string;
28600
+ };
28601
+ Insert: {
28602
+ code: string;
28603
+ created_at?: string;
28604
+ };
28605
+ Update: {
28606
+ code?: string;
28607
+ created_at?: string;
28608
+ };
28609
+ Relationships: [];
28610
+ };
28596
28611
  voorraad_publish_attempts: {
28597
28612
  Row: {
28598
28613
  action: string;
@@ -34982,6 +34997,12 @@ export type Database = {
34982
34997
  Args: never;
34983
34998
  Returns: Json;
34984
34999
  };
35000
+ logistics_cart_aantal_afwijking_core: {
35001
+ Args: {
35002
+ p_cart_id: string;
35003
+ };
35004
+ Returns: string[];
35005
+ };
34985
35006
  logistics_cart_archive: {
34986
35007
  Args: {
34987
35008
  p_confirm_count: number;
@@ -36285,6 +36306,14 @@ export type Database = {
36285
36306
  uitleg: string;
36286
36307
  }[];
36287
36308
  };
36309
+ logistics_install_check_213: {
36310
+ Args: never;
36311
+ Returns: {
36312
+ ok: boolean;
36313
+ punt: string;
36314
+ uitleg: string;
36315
+ }[];
36316
+ };
36288
36317
  logistics_is_beheer: {
36289
36318
  Args: never;
36290
36319
  Returns: boolean;
@@ -44001,6 +44030,18 @@ export type Database = {
44001
44030
  };
44002
44031
  Returns: Json;
44003
44032
  };
44033
+ voorraad_correctie_1126: {
44034
+ Args: {
44035
+ p_uitvoeren?: boolean;
44036
+ };
44037
+ Returns: Json;
44038
+ };
44039
+ voorraad_correctie_1127: {
44040
+ Args: {
44041
+ p_uitvoeren?: boolean;
44042
+ };
44043
+ Returns: Json;
44044
+ };
44004
44045
  voorraad_correctie_status: {
44005
44046
  Args: {
44006
44047
  p_correctie?: string;
@@ -44091,6 +44132,26 @@ export type Database = {
44091
44132
  };
44092
44133
  Returns: boolean;
44093
44134
  };
44135
+ voorraad_packing_from_floriday: {
44136
+ Args: {
44137
+ p_product_id: string;
44138
+ p_uitvoeren: boolean;
44139
+ };
44140
+ Returns: Json;
44141
+ };
44142
+ voorraad_packing_missing: {
44143
+ Args: {
44144
+ p_packing: Json;
44145
+ };
44146
+ Returns: string[];
44147
+ };
44148
+ voorraad_placeholder_code_reason: {
44149
+ Args: {
44150
+ p_code: string;
44151
+ p_name: string;
44152
+ };
44153
+ Returns: string;
44154
+ };
44094
44155
  voorraad_production_enabled: {
44095
44156
  Args: never;
44096
44157
  Returns: boolean;