@flowselections/pick-schermen-kwekers 1.0.93 → 1.0.94
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowselections/pick-schermen-kwekers",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.94",
|
|
4
4
|
"flowselections": {
|
|
5
5
|
"moduleId": "pick-schermen",
|
|
6
6
|
"schema": {
|
|
@@ -20,6 +20,14 @@
|
|
|
20
20
|
"nav": false,
|
|
21
21
|
"public": true
|
|
22
22
|
}
|
|
23
|
+
],
|
|
24
|
+
"crons": [
|
|
25
|
+
{
|
|
26
|
+
"name": "pick-history-cleanup",
|
|
27
|
+
"kind": "sql",
|
|
28
|
+
"schedule": "35 * * * *",
|
|
29
|
+
"sql": "SELECT public.pick_cleanup_history();"
|
|
30
|
+
}
|
|
23
31
|
]
|
|
24
32
|
},
|
|
25
33
|
"private": false,
|
package/schema/pickschermen.sql
CHANGED
|
@@ -6441,4 +6441,132 @@ BEGIN
|
|
|
6441
6441
|
END IF;
|
|
6442
6442
|
END $mig$;
|
|
6443
6443
|
REVOKE ALL ON FUNCTION public.pick_ensure_defaults_intern() FROM PUBLIC, anon, authenticated;
|
|
6444
|
-
GRANT EXECUTE ON FUNCTION public.pick_ensure_defaults_intern() TO service_role;
|
|
6444
|
+
GRANT EXECUTE ON FUNCTION public.pick_ensure_defaults_intern() TO service_role;
|
|
6445
|
+
-- ===== Golf 1: pickhistorie (20261110191301_eb6ef686-ecc0-446d-a7d8-65dfa16a2855.sql) =====
|
|
6446
|
+
-- Golf 1: pickhistorie alleen gewijzigde velden + eigen opruiming in porties
|
|
6447
|
+
CREATE OR REPLACE FUNCTION public.pick_queue_audit()
|
|
6448
|
+
RETURNS trigger
|
|
6449
|
+
LANGUAGE plpgsql
|
|
6450
|
+
SECURITY DEFINER
|
|
6451
|
+
SET search_path TO 'public'
|
|
6452
|
+
AS $function$
|
|
6453
|
+
DECLARE
|
|
6454
|
+
v_old jsonb; v_new jsonb; v_o jsonb := '{}'::jsonb; v_n jsonb := '{}'::jsonb; k text;
|
|
6455
|
+
BEGIN
|
|
6456
|
+
IF TG_OP = 'INSERT' THEN
|
|
6457
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6458
|
+
VALUES ('pick_queue', NEW.id, TG_OP, auth.uid(), NULL, jsonb_strip_nulls(to_jsonb(NEW)));
|
|
6459
|
+
RETURN NEW;
|
|
6460
|
+
ELSIF TG_OP = 'DELETE' THEN
|
|
6461
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6462
|
+
VALUES ('pick_queue', OLD.id, TG_OP, auth.uid(), jsonb_strip_nulls(to_jsonb(OLD)), NULL);
|
|
6463
|
+
RETURN OLD;
|
|
6464
|
+
END IF;
|
|
6465
|
+
|
|
6466
|
+
v_old := to_jsonb(OLD); v_new := to_jsonb(NEW);
|
|
6467
|
+
FOR k IN SELECT jsonb_object_keys(v_new) LOOP
|
|
6468
|
+
IF k <> 'updated_at' AND (v_old -> k) IS DISTINCT FROM (v_new -> k) THEN
|
|
6469
|
+
v_o := v_o || jsonb_build_object(k, v_old -> k);
|
|
6470
|
+
v_n := v_n || jsonb_build_object(k, v_new -> k);
|
|
6471
|
+
END IF;
|
|
6472
|
+
END LOOP;
|
|
6473
|
+
IF v_n = '{}'::jsonb THEN RETURN NEW; END IF; -- niets wezenlijks gewijzigd
|
|
6474
|
+
v_o := v_o || jsonb_build_object('updated_at', v_old -> 'updated_at');
|
|
6475
|
+
v_n := v_n || jsonb_build_object('updated_at', v_new -> 'updated_at');
|
|
6476
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6477
|
+
VALUES ('pick_queue', NEW.id, TG_OP, auth.uid(), v_o, v_n);
|
|
6478
|
+
RETURN NEW;
|
|
6479
|
+
END; $function$;
|
|
6480
|
+
GRANT EXECUTE ON FUNCTION public.pick_queue_audit() TO anon, authenticated, service_role;
|
|
6481
|
+
|
|
6482
|
+
CREATE OR REPLACE FUNCTION public.pick_cleanup_history()
|
|
6483
|
+
RETURNS jsonb
|
|
6484
|
+
LANGUAGE plpgsql
|
|
6485
|
+
VOLATILE
|
|
6486
|
+
SECURITY DEFINER
|
|
6487
|
+
SET search_path TO 'public'
|
|
6488
|
+
AS $function$
|
|
6489
|
+
DECLARE
|
|
6490
|
+
v_days integer; v_start timestamptz := clock_timestamp(); v_total integer := 0; n integer; v_bron text := 'standaard';
|
|
6491
|
+
BEGIN
|
|
6492
|
+
IF current_user NOT IN ('postgres','service_role','supabase_admin')
|
|
6493
|
+
AND NOT COALESCE(public.has_role(auth.uid(), 'admin'), false) THEN
|
|
6494
|
+
RAISE EXCEPTION 'Geen toegang tot het opruimen van de pickhistorie.' USING ERRCODE = '42501';
|
|
6495
|
+
END IF;
|
|
6496
|
+
IF to_regprocedure('public.logistics_retention_days(text)') IS NOT NULL THEN
|
|
6497
|
+
BEGIN
|
|
6498
|
+
EXECUTE 'SELECT public.logistics_retention_days($1)' INTO v_days USING 'pick_history_retention_days';
|
|
6499
|
+
v_bron := 'engine';
|
|
6500
|
+
EXCEPTION WHEN OTHERS THEN
|
|
6501
|
+
RAISE WARNING 'pick_cleanup_history: termijn uit Engine niet leesbaar (%), standaard 30 dagen', SQLERRM;
|
|
6502
|
+
v_days := NULL;
|
|
6503
|
+
END;
|
|
6504
|
+
END IF;
|
|
6505
|
+
IF v_days IS NULL OR v_days < 1 THEN v_days := 30; v_bron := 'standaard'; END IF;
|
|
6506
|
+
|
|
6507
|
+
LOOP
|
|
6508
|
+
WITH weg AS (SELECT id FROM public.pick_station_history
|
|
6509
|
+
WHERE created_at < now() - make_interval(days => v_days)
|
|
6510
|
+
ORDER BY created_at LIMIT 10000)
|
|
6511
|
+
DELETE FROM public.pick_station_history h USING weg WHERE h.id = weg.id;
|
|
6512
|
+
GET DIAGNOSTICS n = ROW_COUNT;
|
|
6513
|
+
v_total := v_total + n;
|
|
6514
|
+
EXIT WHEN n = 0 OR clock_timestamp() - v_start > interval '20 seconds';
|
|
6515
|
+
END LOOP;
|
|
6516
|
+
RETURN jsonb_build_object('verwijderd', v_total, 'termijn_dagen', v_days, 'bron', v_bron,
|
|
6517
|
+
'duur_ms', round(extract(epoch FROM clock_timestamp() - v_start) * 1000));
|
|
6518
|
+
END $function$;
|
|
6519
|
+
REVOKE ALL ON FUNCTION public.pick_cleanup_history() FROM PUBLIC, anon, authenticated;
|
|
6520
|
+
GRANT EXECUTE ON FUNCTION public.pick_cleanup_history() TO service_role;
|
|
6521
|
+
|
|
6522
|
+
COMMENT ON FUNCTION public.pick_reset_print(uuid, text) IS 'Verouderd: niet meer in gebruik (scherm gebruikt variant met _cart_id via p_device_key-wrapper). Verwijderen als handmatige stap.';
|
|
6523
|
+
COMMENT ON FUNCTION public.pick_enqueue_print_job(uuid, uuid, text, boolean) IS 'Verouderd: niet meer door het scherm aangeroepen; nog genest gebruikt door oude kernvarianten. Verwijderen als handmatige stap na controle.';
|
|
6524
|
+
-- 20261110194034_4411e109-0b93-4bc4-833b-fc93487e214c.sql
|
|
6525
|
+
-- Golf 1 aanvulling: binnen payload alleen gewijzigde onderdelen in de historie
|
|
6526
|
+
CREATE OR REPLACE FUNCTION public.pick_queue_audit()
|
|
6527
|
+
RETURNS trigger
|
|
6528
|
+
LANGUAGE plpgsql
|
|
6529
|
+
SECURITY DEFINER
|
|
6530
|
+
SET search_path TO 'public'
|
|
6531
|
+
AS $function$
|
|
6532
|
+
DECLARE
|
|
6533
|
+
v_old jsonb; v_new jsonb; v_o jsonb := '{}'::jsonb; v_n jsonb := '{}'::jsonb; k text; s text;
|
|
6534
|
+
v_po jsonb; v_pn jsonb;
|
|
6535
|
+
BEGIN
|
|
6536
|
+
IF TG_OP = 'INSERT' THEN
|
|
6537
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6538
|
+
VALUES ('pick_queue', NEW.id, TG_OP, auth.uid(), NULL, jsonb_strip_nulls(to_jsonb(NEW)));
|
|
6539
|
+
RETURN NEW;
|
|
6540
|
+
ELSIF TG_OP = 'DELETE' THEN
|
|
6541
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6542
|
+
VALUES ('pick_queue', OLD.id, TG_OP, auth.uid(), jsonb_strip_nulls(to_jsonb(OLD)), NULL);
|
|
6543
|
+
RETURN OLD;
|
|
6544
|
+
END IF;
|
|
6545
|
+
|
|
6546
|
+
v_old := to_jsonb(OLD); v_new := to_jsonb(NEW);
|
|
6547
|
+
FOR k IN SELECT jsonb_object_keys(v_new) LOOP
|
|
6548
|
+
IF k <> 'updated_at' AND (v_old -> k) IS DISTINCT FROM (v_new -> k) THEN
|
|
6549
|
+
IF jsonb_typeof(v_old -> k) = 'object' AND jsonb_typeof(v_new -> k) = 'object' THEN
|
|
6550
|
+
v_po := '{}'::jsonb; v_pn := '{}'::jsonb;
|
|
6551
|
+
FOR s IN SELECT jsonb_object_keys(v_old -> k) UNION SELECT jsonb_object_keys(v_new -> k) LOOP
|
|
6552
|
+
IF (v_old -> k -> s) IS DISTINCT FROM (v_new -> k -> s) THEN
|
|
6553
|
+
v_po := v_po || jsonb_build_object(s, COALESCE(v_old -> k -> s, 'null'::jsonb));
|
|
6554
|
+
v_pn := v_pn || jsonb_build_object(s, COALESCE(v_new -> k -> s, 'null'::jsonb));
|
|
6555
|
+
END IF;
|
|
6556
|
+
END LOOP;
|
|
6557
|
+
v_o := v_o || jsonb_build_object(k, v_po);
|
|
6558
|
+
v_n := v_n || jsonb_build_object(k, v_pn);
|
|
6559
|
+
ELSE
|
|
6560
|
+
v_o := v_o || jsonb_build_object(k, v_old -> k);
|
|
6561
|
+
v_n := v_n || jsonb_build_object(k, v_new -> k);
|
|
6562
|
+
END IF;
|
|
6563
|
+
END IF;
|
|
6564
|
+
END LOOP;
|
|
6565
|
+
IF v_n = '{}'::jsonb THEN RETURN NEW; END IF;
|
|
6566
|
+
v_o := v_o || jsonb_build_object('updated_at', v_old -> 'updated_at');
|
|
6567
|
+
v_n := v_n || jsonb_build_object('updated_at', v_new -> 'updated_at');
|
|
6568
|
+
INSERT INTO public.pick_station_history(entity_table, entity_id, action, changed_by, old_data, new_data)
|
|
6569
|
+
VALUES ('pick_queue', NEW.id, TG_OP, auth.uid(), v_o, v_n);
|
|
6570
|
+
RETURN NEW;
|
|
6571
|
+
END; $function$;
|
|
6572
|
+
GRANT EXECUTE ON FUNCTION public.pick_queue_audit() TO anon, authenticated, service_role;
|