@flowselections/floriday-voorraad 1.0.133 → 1.0.137
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +42 -18
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.js +19 -0
- package/dist-lib/integrations/supabase/types.d.ts +283 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/release-134.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/release-134.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/release-134.test.js +50 -0
- package/dist-lib/lib/__tests__/release-136.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/release-136.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/release-136.test.js +36 -0
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-warehouse.functions.js +4 -2
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.js +11 -10
- package/dist-lib/lib/idempotency-key.d.ts +11 -0
- package/dist-lib/lib/idempotency-key.d.ts.map +1 -0
- package/dist-lib/lib/idempotency-key.js +41 -0
- package/dist-lib/lib/publish-errors.d.ts +1 -1
- package/dist-lib/lib/publish-errors.d.ts.map +1 -1
- package/dist-lib/lib/publish-errors.js +10 -0
- package/dist-lib/lib/publish-pipeline.js +1 -1
- package/dist-lib/lib/publish-status.d.ts +13 -1
- package/dist-lib/lib/publish-status.d.ts.map +1 -1
- package/dist-lib/lib/publish-status.js +22 -1
- package/dist-lib/lib/publish-verify.d.ts +25 -0
- package/dist-lib/lib/publish-verify.d.ts.map +1 -0
- package/dist-lib/lib/publish-verify.js +44 -0
- package/package.json +2 -2
- package/sql/floriday-voorraad-schema.sql +108 -27
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
-- @flowselections/floriday-voorraad 1.0.
|
|
1
|
+
-- @flowselections/floriday-voorraad 1.0.136 – volledig schema (idempotent, geen gegevens).
|
|
2
2
|
-- Gegenereerd uit de database met scripts/generate-voorraad-schema.py. Niet met de hand wijzigen.
|
|
3
3
|
-- Volgorde 20. Ontbrekende tabellen van andere modules worden overgeslagen met een NOTICE; draai opnieuw na die module.
|
|
4
4
|
-- De statuscontrole van floriday_continuous_stock_queue is van Voorraad en wordt hier opnieuw gemaakt.
|
|
@@ -5181,12 +5181,11 @@ DECLARE k text;
|
|
|
5181
5181
|
BEGIN
|
|
5182
5182
|
PERFORM public.voorraad_vereis('ingelogd', 'recompute_reserved_for_order');
|
|
5183
5183
|
FOR k IN
|
|
5184
|
-
SELECT DISTINCT
|
|
5184
|
+
SELECT DISTINCT public.voorraad_orderregel_sleutel(oi.product_id::text)
|
|
5185
5185
|
FROM logistics_active.order_items oi
|
|
5186
|
-
|
|
5187
|
-
WHERE oi.order_id = p_order_id AND p.trade_item_key IS NOT NULL
|
|
5186
|
+
WHERE oi.order_id = p_order_id AND oi.product_id IS NOT NULL
|
|
5188
5187
|
LOOP
|
|
5189
|
-
PERFORM public.recompute_reserved_stock(k);
|
|
5188
|
+
IF k IS NOT NULL THEN PERFORM public.recompute_reserved_stock(k); END IF;
|
|
5190
5189
|
END LOOP;
|
|
5191
5190
|
END $function$
|
|
5192
5191
|
;
|
|
@@ -5210,16 +5209,15 @@ DECLARE
|
|
|
5210
5209
|
v_products uuid[];
|
|
5211
5210
|
v_pid uuid;
|
|
5212
5211
|
v_leads boolean;
|
|
5212
|
+
v_refs text[];
|
|
5213
5213
|
BEGIN
|
|
5214
5214
|
PERFORM public.voorraad_vereis('ingelogd', 'recompute_reserved_stock');
|
|
5215
5215
|
IF p_trade_item_key IS NULL OR btrim(p_trade_item_key) = '' THEN RETURN; END IF;
|
|
5216
5216
|
IF current_setting('app.recomputing_reserved', true) = 'on' THEN RETURN; END IF;
|
|
5217
5217
|
|
|
5218
|
-
-- B1: nieuwe of losse sleutel zonder orderregels, toewijzing of set-/groepsrelatie en reservering 0: niets te doen.
|
|
5219
5218
|
v_key := public.logistics_reserved_key(p_trade_item_key);
|
|
5220
5219
|
IF public.logistics_reserved_fast_skip(p_trade_item_key, v_key) THEN RETURN; END IF;
|
|
5221
5220
|
|
|
5222
|
-
-- Set of groepshoofdproduct: gericht herberekenen op de onderdelen en leden (M7).
|
|
5223
5221
|
SELECT array_agg(p.id) INTO v_products
|
|
5224
5222
|
FROM public.products p
|
|
5225
5223
|
WHERE (p.trade_item_key = btrim(p_trade_item_key)
|
|
@@ -5247,8 +5245,6 @@ BEGIN
|
|
|
5247
5245
|
RETURN;
|
|
5248
5246
|
END IF;
|
|
5249
5247
|
|
|
5250
|
-
-- Sleutel hoort bij een groep of samenstelling: de toewijzing hangt van andere
|
|
5251
|
-
-- regels af, dus volledig herberekenen.
|
|
5252
5248
|
IF v_key LIKE 'group:%'
|
|
5253
5249
|
OR EXISTS (SELECT 1 FROM public.logistics_reservation_allocations a
|
|
5254
5250
|
WHERE a.trade_item_key = v_key AND a.source = 'group')
|
|
@@ -5265,18 +5261,28 @@ BEGIN
|
|
|
5265
5261
|
RETURN;
|
|
5266
5262
|
END IF;
|
|
5267
5263
|
|
|
5264
|
+
SELECT array_agg(DISTINCT r) INTO v_refs FROM (
|
|
5265
|
+
SELECT p.id::text AS r FROM public.products p
|
|
5266
|
+
WHERE p.trade_item_key = v_key OR p.floriday_trade_item_id = v_key OR p.id::text = v_key
|
|
5267
|
+
OR 'product:' || p.id::text = v_key
|
|
5268
|
+
UNION
|
|
5269
|
+
SELECT btrim(p.floriday_trade_item_id) FROM public.products p
|
|
5270
|
+
WHERE (p.trade_item_key = v_key OR p.floriday_trade_item_id = v_key OR 'product:' || p.id::text = v_key)
|
|
5271
|
+
AND NULLIF(btrim(COALESCE(p.floriday_trade_item_id,'')),'') IS NOT NULL
|
|
5272
|
+
UNION SELECT v_key
|
|
5273
|
+
) x WHERE r IS NOT NULL;
|
|
5274
|
+
|
|
5268
5275
|
v_leads := public.voorraad_floriday_leads_key(v_key);
|
|
5269
5276
|
SELECT CEIL(COALESCE(SUM(COALESCE(oi.quantity, 0)), 0))::integer INTO v_sum
|
|
5270
5277
|
FROM logistics_active.order_items oi
|
|
5271
5278
|
JOIN public.orders o ON o.id = oi.order_id
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
NULLIF(btrim(COALESCE(p.trade_item_key, '')), ''), p.id::text) = v_key
|
|
5279
|
+
WHERE oi.product_id::text = ANY(v_refs)
|
|
5280
|
+
AND public.voorraad_orderregel_sleutel(oi.product_id::text) = v_key
|
|
5275
5281
|
AND o.status = 'Nog te picken' AND NOT public.logistics_reserved_order_excluded(o.id)
|
|
5276
5282
|
AND NOT (public.normalize_order_source(o.order_source) = 'FO' AND v_leads)
|
|
5277
|
-
AND NOT EXISTS (SELECT 1 FROM public.product_bom_items b WHERE b.parent_product_id =
|
|
5283
|
+
AND NOT EXISTS (SELECT 1 FROM public.product_bom_items b WHERE b.parent_product_id = oi.product_id)
|
|
5278
5284
|
AND NOT EXISTS (SELECT 1 FROM public.product_groups pg
|
|
5279
|
-
WHERE pg.is_active = true AND (pg.id =
|
|
5285
|
+
WHERE pg.is_active = true AND (pg.id = oi.product_id OR pg.head_product_id = oi.product_id))
|
|
5280
5286
|
AND NOT EXISTS (
|
|
5281
5287
|
SELECT 1 FROM public.stock_mutation_log sml
|
|
5282
5288
|
WHERE sml.order_item_id = oi.id
|
|
@@ -6752,7 +6758,7 @@ AS $function$
|
|
|
6752
6758
|
DECLARE v_key text; v_old_key text;
|
|
6753
6759
|
BEGIN
|
|
6754
6760
|
IF (TG_OP = 'INSERT') THEN
|
|
6755
|
-
|
|
6761
|
+
v_key := public.voorraad_orderregel_sleutel(NEW.product_id::text);
|
|
6756
6762
|
PERFORM public.recompute_reserved_stock(v_key);
|
|
6757
6763
|
RETURN NEW;
|
|
6758
6764
|
ELSIF (TG_OP = 'UPDATE') THEN
|
|
@@ -6763,15 +6769,15 @@ BEGIN
|
|
|
6763
6769
|
AND NEW.source_line_key IS NOT DISTINCT FROM OLD.source_line_key THEN
|
|
6764
6770
|
RETURN NEW;
|
|
6765
6771
|
END IF;
|
|
6766
|
-
|
|
6767
|
-
|
|
6772
|
+
v_key := public.voorraad_orderregel_sleutel(NEW.product_id::text);
|
|
6773
|
+
v_old_key := public.voorraad_orderregel_sleutel(OLD.product_id::text);
|
|
6768
6774
|
PERFORM public.recompute_reserved_stock(v_key);
|
|
6769
6775
|
IF v_old_key IS DISTINCT FROM v_key THEN
|
|
6770
6776
|
PERFORM public.recompute_reserved_stock(v_old_key);
|
|
6771
6777
|
END IF;
|
|
6772
6778
|
RETURN NEW;
|
|
6773
6779
|
ELSIF (TG_OP = 'DELETE') THEN
|
|
6774
|
-
|
|
6780
|
+
v_old_key := public.voorraad_orderregel_sleutel(OLD.product_id::text);
|
|
6775
6781
|
PERFORM public.recompute_reserved_stock(v_old_key);
|
|
6776
6782
|
RETURN OLD;
|
|
6777
6783
|
END IF;
|
|
@@ -8704,31 +8710,51 @@ CREATE OR REPLACE FUNCTION public.voorraad_correctie_1131(p_uitvoeren boolean DE
|
|
|
8704
8710
|
SECURITY DEFINER
|
|
8705
8711
|
SET search_path TO 'public'
|
|
8706
8712
|
AS $function$
|
|
8707
|
-
DECLARE v_rows jsonb; v_result jsonb;
|
|
8713
|
+
DECLARE v_rows jsonb; v_result jsonb; v_done jsonb := '[]'::jsonb; r record;
|
|
8708
8714
|
BEGIN
|
|
8709
8715
|
PERFORM public.voorraad_vereis('server', 'voorraad_correctie_1131');
|
|
8710
|
-
|
|
8711
|
-
RAISE EXCEPTION 'Correctie 1131 is alleen als overzicht vrijgegeven; uitvoeren wacht op akkoord' USING ERRCODE = 'VR012';
|
|
8712
|
-
END IF;
|
|
8716
|
+
PERFORM pg_advisory_xact_lock(hashtextextended('voorraad_correctie_1131', 0));
|
|
8713
8717
|
SELECT COALESCE(jsonb_agg(jsonb_build_object(
|
|
8714
8718
|
'artikelnummer', c.article_number,
|
|
8715
8719
|
'voorraadartikel', c.id, 'canonieke_sleutel', public.voorraad_canoniek_sleutel(c.id),
|
|
8716
8720
|
'spiegelproduct', m.id, 'spiegel_bron', m.custom_fields->>'source',
|
|
8717
|
-
'spiegel_herkend_als_verkoop', (m.custom_fields->>'source') = 'sales-module-floriday-mirror',
|
|
8718
8721
|
'canonieke_regel', (SELECT to_jsonb(s) - 'notes' FROM public.trade_item_stock s
|
|
8719
8722
|
WHERE s.trade_item_key = public.voorraad_canoniek_sleutel(c.id) AND s.archived_at IS NULL LIMIT 1),
|
|
8720
8723
|
'spiegelregels', (SELECT jsonb_agg(to_jsonb(s) - 'notes' ORDER BY s.id) FROM public.trade_item_stock s
|
|
8721
8724
|
WHERE s.trade_item_key IN (m.id::text, m.trade_item_key, 'product:' || m.id::text)
|
|
8722
8725
|
AND s.trade_item_key IS DISTINCT FROM public.voorraad_canoniek_sleutel(c.id)
|
|
8723
|
-
AND s.archived_at IS NULL)
|
|
8724
|
-
'voorstel', 'reserveringen opnieuw berekenen zodat ze op de canonieke regel landen; spiegelregel archiveren (archived_at, archived_into = canonieke sleutel); fysieke voorraad van de spiegel niet optellen, alleen loggen; spiegelproduct verdwijnt uit voorraadlijst en tellingen; niets verwijderen'
|
|
8726
|
+
AND s.archived_at IS NULL)
|
|
8725
8727
|
) ORDER BY c.article_number), '[]'::jsonb)
|
|
8726
8728
|
INTO v_rows
|
|
8727
8729
|
FROM public.products m
|
|
8728
8730
|
JOIN public.products c ON c.floriday_trade_item_id = m.id::text AND c.id <> m.id;
|
|
8729
|
-
|
|
8731
|
+
|
|
8732
|
+
IF p_uitvoeren THEN
|
|
8733
|
+
-- Archiveren in vaste volgorde; fysieke voorraad van de spiegel wordt niet opgeteld, alleen vastgelegd.
|
|
8734
|
+
FOR r IN
|
|
8735
|
+
SELECT s.id, s.trade_item_key, s.physical_stock, s.reserved_stock, public.voorraad_canoniek_sleutel(c.id) AS canon
|
|
8736
|
+
FROM public.products m
|
|
8737
|
+
JOIN public.products c ON c.floriday_trade_item_id = m.id::text AND c.id <> m.id
|
|
8738
|
+
JOIN public.trade_item_stock s ON s.trade_item_key IN (m.id::text, m.trade_item_key, 'product:' || m.id::text)
|
|
8739
|
+
WHERE s.archived_at IS NULL
|
|
8740
|
+
AND s.trade_item_key IS DISTINCT FROM public.voorraad_canoniek_sleutel(c.id)
|
|
8741
|
+
ORDER BY s.id
|
|
8742
|
+
FOR UPDATE OF s
|
|
8743
|
+
LOOP
|
|
8744
|
+
UPDATE public.trade_item_stock
|
|
8745
|
+
SET archived_at = now(), archived_into = r.canon,
|
|
8746
|
+
archived_reason = 'voorraad_correctie_1131: spiegelregel; reserveringen landen na herberekening op ' || r.canon,
|
|
8747
|
+
reserved_stock = 0
|
|
8748
|
+
WHERE id = r.id AND archived_at IS NULL;
|
|
8749
|
+
v_done := v_done || jsonb_build_object('regel', r.id, 'sleutel', r.trade_item_key, 'fysiek', r.physical_stock,
|
|
8750
|
+
'gereserveerd_voor', r.reserved_stock, 'naar', r.canon);
|
|
8751
|
+
END LOOP;
|
|
8752
|
+
END IF;
|
|
8753
|
+
|
|
8754
|
+
v_result := jsonb_build_object('ok', true, 'status', CASE WHEN p_uitvoeren THEN 'uitgevoerd' ELSE 'voorstel' END,
|
|
8755
|
+
'artikelen', v_rows, 'gearchiveerd', v_done);
|
|
8730
8756
|
INSERT INTO public.voorraad_correcties(correctie, uitgevoerd_door, proef, aantallen, hash_ok)
|
|
8731
|
-
VALUES ('voorraad_correctie_1131', COALESCE(auth.uid()::text, session_user::text),
|
|
8757
|
+
VALUES ('voorraad_correctie_1131', COALESCE(auth.uid()::text, session_user::text), NOT p_uitvoeren, v_result, true);
|
|
8732
8758
|
RETURN v_result;
|
|
8733
8759
|
END $function$
|
|
8734
8760
|
;
|
|
@@ -8763,6 +8789,39 @@ END $function$
|
|
|
8763
8789
|
REVOKE ALL ON FUNCTION voorraad_correctie_1132(boolean) FROM PUBLIC;
|
|
8764
8790
|
REVOKE ALL ON FUNCTION voorraad_correctie_1132(boolean) FROM anon;
|
|
8765
8791
|
GRANT EXECUTE ON FUNCTION voorraad_correctie_1132(boolean) TO service_role;
|
|
8792
|
+
CREATE OR REPLACE FUNCTION public.voorraad_correctie_1136(p_uitvoeren boolean DEFAULT false)
|
|
8793
|
+
RETURNS jsonb
|
|
8794
|
+
LANGUAGE plpgsql
|
|
8795
|
+
SECURITY DEFINER
|
|
8796
|
+
SET search_path TO 'public'
|
|
8797
|
+
AS $function$
|
|
8798
|
+
DECLARE pid constant uuid := '27612767-2b14-468c-b169-a8f9a4abe053'; p record; v_status text; v_result jsonb; v_after numeric;
|
|
8799
|
+
BEGIN
|
|
8800
|
+
PERFORM public.voorraad_vereis('server', 'voorraad_correctie_1136');
|
|
8801
|
+
PERFORM pg_advisory_xact_lock(hashtextextended('voorraad_correctie_1136', 0));
|
|
8802
|
+
SELECT * INTO p FROM public.products WHERE id = pid FOR UPDATE;
|
|
8803
|
+
IF p.id IS NULL OR p.article_number IS DISTINCT FROM 'TQA2810A' THEN v_status := 'overgeslagen: artikel wijkt af';
|
|
8804
|
+
ELSIF p.sale_price = 1.40 THEN v_status := 'al uitgevoerd';
|
|
8805
|
+
ELSIF p.sale_price IS DISTINCT FROM 1.25 THEN v_status := 'overgeslagen: prijs gewijzigd';
|
|
8806
|
+
ELSE v_status := CASE WHEN p_uitvoeren THEN 'uitgevoerd' ELSE 'voorstel' END; END IF;
|
|
8807
|
+
IF v_status = 'uitgevoerd' THEN
|
|
8808
|
+
UPDATE public.products SET sale_price = 1.40, updated_at = now() WHERE id = pid;
|
|
8809
|
+
END IF;
|
|
8810
|
+
SELECT sale_price INTO v_after FROM public.products WHERE id = pid;
|
|
8811
|
+
v_result := jsonb_build_object('ok', v_status NOT LIKE 'overgeslagen%', 'status', v_status, 'product', pid, 'voor', p.sale_price, 'na', v_after);
|
|
8812
|
+
INSERT INTO public.voorraad_correcties(correctie, uitgevoerd_door, proef, aantallen, hash_ok)
|
|
8813
|
+
VALUES ('voorraad_correctie_1136', COALESCE(auth.uid()::text, session_user::text), NOT p_uitvoeren, v_result, true);
|
|
8814
|
+
RETURN v_result;
|
|
8815
|
+
END $function$
|
|
8816
|
+
;
|
|
8817
|
+
REVOKE ALL ON FUNCTION voorraad_correctie_1136(boolean) FROM PUBLIC;
|
|
8818
|
+
REVOKE ALL ON FUNCTION voorraad_correctie_1136(boolean) FROM anon;
|
|
8819
|
+
REVOKE EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) FROM PUBLIC;
|
|
8820
|
+
GRANT EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) TO authenticated;
|
|
8821
|
+
GRANT EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) TO service_role;
|
|
8822
|
+
REVOKE EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) FROM anon;
|
|
8823
|
+
GRANT EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) TO authenticated;
|
|
8824
|
+
GRANT EXECUTE ON FUNCTION voorraad_correctie_1136(boolean) TO service_role;
|
|
8766
8825
|
CREATE OR REPLACE FUNCTION public.voorraad_correctie_status(p_correctie text DEFAULT '1098'::text)
|
|
8767
8826
|
RETURNS jsonb
|
|
8768
8827
|
LANGUAGE plpgsql
|
|
@@ -9252,6 +9311,28 @@ GRANT EXECUTE ON FUNCTION voorraad_order_geannuleerd(text,timestamp with time zo
|
|
|
9252
9311
|
REVOKE EXECUTE ON FUNCTION voorraad_order_geannuleerd(text,timestamp with time zone,timestamp with time zone) FROM anon;
|
|
9253
9312
|
GRANT EXECUTE ON FUNCTION voorraad_order_geannuleerd(text,timestamp with time zone,timestamp with time zone) TO authenticated;
|
|
9254
9313
|
GRANT EXECUTE ON FUNCTION voorraad_order_geannuleerd(text,timestamp with time zone,timestamp with time zone) TO service_role;
|
|
9314
|
+
CREATE OR REPLACE FUNCTION public.voorraad_orderregel_sleutel(p_ref text)
|
|
9315
|
+
RETURNS text
|
|
9316
|
+
LANGUAGE plpgsql
|
|
9317
|
+
STABLE SECURITY DEFINER
|
|
9318
|
+
SET search_path TO 'public'
|
|
9319
|
+
AS $function$
|
|
9320
|
+
DECLARE v_key text;
|
|
9321
|
+
BEGIN
|
|
9322
|
+
PERFORM public.voorraad_vereis('ingelogd', 'voorraad_orderregel_sleutel');
|
|
9323
|
+
IF p_ref IS NULL OR btrim(p_ref) = '' THEN RETURN NULL; END IF;
|
|
9324
|
+
BEGIN
|
|
9325
|
+
SELECT c.trade_item_key INTO v_key FROM public.voorraad_canoniek_artikel(p_ref) c;
|
|
9326
|
+
EXCEPTION WHEN others THEN
|
|
9327
|
+
RETURN NULL;
|
|
9328
|
+
END;
|
|
9329
|
+
RETURN v_key;
|
|
9330
|
+
END $function$
|
|
9331
|
+
;
|
|
9332
|
+
REVOKE ALL ON FUNCTION voorraad_orderregel_sleutel(text) FROM PUBLIC;
|
|
9333
|
+
REVOKE ALL ON FUNCTION voorraad_orderregel_sleutel(text) FROM anon;
|
|
9334
|
+
GRANT EXECUTE ON FUNCTION voorraad_orderregel_sleutel(text) TO authenticated;
|
|
9335
|
+
GRANT EXECUTE ON FUNCTION voorraad_orderregel_sleutel(text) TO service_role;
|
|
9255
9336
|
CREATE OR REPLACE FUNCTION public.voorraad_packing_from_floriday(p_product_id uuid, p_uitvoeren boolean)
|
|
9256
9337
|
RETURNS jsonb
|
|
9257
9338
|
LANGUAGE plpgsql
|