@flowselections/logistiek-engine 1.0.187 → 1.0.189
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.
|
@@ -4066,6 +4066,7 @@ DO $fsdo$ BEGIN
|
|
|
4066
4066
|
SET search_path TO 'public'
|
|
4067
4067
|
AS $function$
|
|
4068
4068
|
BEGIN
|
|
4069
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'claim_logistics_tasks');
|
|
4069
4070
|
RETURN QUERY
|
|
4070
4071
|
WITH candidates AS (
|
|
4071
4072
|
SELECT t.id
|
|
@@ -4109,6 +4110,7 @@ AS $function$
|
|
|
4109
4110
|
DECLARE
|
|
4110
4111
|
v_total integer := 0;
|
|
4111
4112
|
BEGIN
|
|
4113
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'control_mark_carts_delivered');
|
|
4112
4114
|
SELECT count(*)::integer INTO v_total
|
|
4113
4115
|
FROM public.control_mark_carts_delivered_detail(p_carts) r
|
|
4114
4116
|
WHERE r.outcome = 'delivered';
|
|
@@ -4129,6 +4131,7 @@ DO $fsdo$ BEGIN
|
|
|
4129
4131
|
AS $function$
|
|
4130
4132
|
DECLARE r record; v_cart uuid; v_res jsonb; v_today date; v_bron text;
|
|
4131
4133
|
BEGIN
|
|
4134
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'control_mark_carts_delivered_detail');
|
|
4132
4135
|
IF auth.uid() IS NULL AND coalesce(auth.role(), '') <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
4133
4136
|
IF p_carts IS NULL OR jsonb_typeof(p_carts) <> 'array' OR jsonb_array_length(p_carts) = 0 THEN RETURN; END IF;
|
|
4134
4137
|
FOR r IN
|
|
@@ -4251,6 +4254,7 @@ DO $fsdo$ BEGIN
|
|
|
4251
4254
|
STABLE SECURITY DEFINER
|
|
4252
4255
|
SET search_path TO 'public'
|
|
4253
4256
|
AS $function$
|
|
4257
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_active_pick_workdays');
|
|
4254
4258
|
SELECT COALESCE(
|
|
4255
4259
|
(SELECT ARRAY(
|
|
4256
4260
|
SELECT jsonb_array_elements_text(c.settings -> 'orderpicken' -> 'pick_workdays')
|
|
@@ -4320,6 +4324,7 @@ AS $function$
|
|
|
4320
4324
|
DECLARE
|
|
4321
4325
|
v_buf uuid; v_sales text; v_del text; v_n int; v_id text; v_key text; v_sent boolean;
|
|
4322
4326
|
BEGIN
|
|
4327
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_afhandeling_fulfillment_order');
|
|
4323
4328
|
SELECT buffer_id, nullif(btrim(floriday_sales_order_id),'') INTO v_buf, v_sales FROM public.orders WHERE id = _order_id;
|
|
4324
4329
|
IF NOT FOUND THEN
|
|
4325
4330
|
RETURN jsonb_build_object('fulfillmentOrderId', NULL, 'sleutel', NULL, 'kandidaten', 0, 'verstuurd', false);
|
|
@@ -4372,6 +4377,7 @@ DECLARE
|
|
|
4372
4377
|
v_rem numeric := public.logistics_plan_setting('verdeling_rem_minuten', NULL);
|
|
4373
4378
|
n_base int := 0; n_replan int := 0; n_rem int := 0; n_same int := 0; n_frozen int := 0;
|
|
4374
4379
|
BEGIN
|
|
4380
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_allocation_check_changes');
|
|
4375
4381
|
IF public.logistics_plan_setting('verdeling_bevriezen_actief', 0) <> 1 THEN
|
|
4376
4382
|
RETURN jsonb_build_object('status', 'uit');
|
|
4377
4383
|
END IF;
|
|
@@ -4423,6 +4429,7 @@ DO $fsdo$ BEGIN
|
|
|
4423
4429
|
STABLE SECURITY DEFINER
|
|
4424
4430
|
SET search_path TO 'public'
|
|
4425
4431
|
AS $function$
|
|
4432
|
+
SELECT public.logistics_acc_guard('server', 'logistics_allocation_fp');
|
|
4426
4433
|
SELECT md5(COALESCE(string_agg(a.order_item_id::text || '|' || COALESCE(a.trade_item_key,'') || '|' || round(a.qty, 3)::text,
|
|
4427
4434
|
';' ORDER BY a.order_item_id, a.trade_item_key, a.source), ''))
|
|
4428
4435
|
FROM public.logistics_reservation_allocations a
|
|
@@ -4441,6 +4448,7 @@ DO $fsdo$ BEGIN
|
|
|
4441
4448
|
STABLE SECURITY DEFINER
|
|
4442
4449
|
SET search_path TO 'public'
|
|
4443
4450
|
AS $function$
|
|
4451
|
+
SELECT public.logistics_acc_guard('server', 'logistics_allocation_frozen');
|
|
4444
4452
|
SELECT p_order_id IS NOT NULL
|
|
4445
4453
|
AND public.logistics_plan_setting('verdeling_bevriezen_actief', 0) = 1
|
|
4446
4454
|
AND (EXISTS (SELECT 1 FROM public.orders o WHERE o.id = p_order_id AND o.plan_locked_at IS NOT NULL)
|
|
@@ -4476,6 +4484,7 @@ DECLARE
|
|
|
4476
4484
|
v_items jsonb := '[]'::jsonb;
|
|
4477
4485
|
c text;
|
|
4478
4486
|
BEGIN
|
|
4487
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_allowed_load_carriers');
|
|
4479
4488
|
IF p_strategy_id IS NOT NULL THEN
|
|
4480
4489
|
SELECT settings INTO v_settings
|
|
4481
4490
|
FROM public.logistics_rule_configs
|
|
@@ -4558,6 +4567,7 @@ DO $fsdo$ BEGIN
|
|
|
4558
4567
|
SET search_path TO 'public'
|
|
4559
4568
|
AS $function$
|
|
4560
4569
|
BEGIN
|
|
4570
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_apply_document_layouts');
|
|
4561
4571
|
UPDATE public.pick_queue q
|
|
4562
4572
|
SET payload = coalesce(q.payload, '{}'::jsonb),
|
|
4563
4573
|
updated_at = now()
|
|
@@ -4582,6 +4592,7 @@ DECLARE
|
|
|
4582
4592
|
v_missing text[]; v_run uuid; v_tasks int := 0; v_rows int := 0; v_carts int := 0; v_stickers int := 0;
|
|
4583
4593
|
v_peer uuid; v_reason constant text := 'Afgehandeld in Floriday'; v_fail text;
|
|
4584
4594
|
BEGIN
|
|
4595
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_apply_external_fulfillment');
|
|
4585
4596
|
SELECT * INTO ev FROM public.logistics_events WHERE id = p_event_id;
|
|
4586
4597
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
4587
4598
|
pl := coalesce(ev.payload, '{}'::jsonb);
|
|
@@ -4710,6 +4721,7 @@ DO $fsdo$ BEGIN
|
|
|
4710
4721
|
AS $function$
|
|
4711
4722
|
DECLARE v_buffer uuid; v_number text;
|
|
4712
4723
|
BEGIN
|
|
4724
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_apply_order_buffer');
|
|
4713
4725
|
SELECT order_number INTO v_number FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
4714
4726
|
IF v_number IS NULL THEN
|
|
4715
4727
|
RETURN jsonb_build_object('applied', false, 'reason', 'order_not_found');
|
|
@@ -4733,6 +4745,7 @@ AS $function$
|
|
|
4733
4745
|
DECLARE
|
|
4734
4746
|
a public.logistics_delay_alerts%ROWTYPE;
|
|
4735
4747
|
BEGIN
|
|
4748
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_approve_delay_reschedule');
|
|
4736
4749
|
SELECT * INTO a FROM public.logistics_delay_alerts WHERE id = p_alert_id;
|
|
4737
4750
|
IF NOT FOUND OR a.user_id <> auth.uid() THEN RETURN false; END IF;
|
|
4738
4751
|
|
|
@@ -4768,6 +4781,7 @@ DO $fsdo$ BEGIN
|
|
|
4768
4781
|
SET search_path TO 'public'
|
|
4769
4782
|
AS $function$
|
|
4770
4783
|
BEGIN
|
|
4784
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_archived_orders');
|
|
4771
4785
|
IF auth.uid() IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
4772
4786
|
RETURN QUERY SELECT q.id, q.order_id, COALESCE(o.order_number, q.order_id::text), o.delivery_date::date,
|
|
4773
4787
|
q.reason, q.reason_code, q.error, COALESCE(q.attempts,0), q.updated_at
|
|
@@ -4788,6 +4802,7 @@ DO $fsdo$ BEGIN
|
|
|
4788
4802
|
AS $function$
|
|
4789
4803
|
DECLARE r record; v_at timestamptz;
|
|
4790
4804
|
BEGIN
|
|
4805
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_auto_send_claim');
|
|
4791
4806
|
-- Eerst afsluiten wat al met de hand verstuurd is.
|
|
4792
4807
|
FOR r IN SELECT a.id, a.order_id FROM public.logistics_auto_send a WHERE a.status IN ('wachtend','bezig') LOOP
|
|
4793
4808
|
v_at := public.logistics_auto_send_sent_elsewhere(r.order_id);
|
|
@@ -4820,6 +4835,7 @@ DO $fsdo$ BEGIN
|
|
|
4820
4835
|
AS $function$
|
|
4821
4836
|
DECLARE v_members uuid[]; v_lead uuid; v_buf uuid; v_carts uuid[];
|
|
4822
4837
|
BEGIN
|
|
4838
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_auto_send_enqueue_for_order');
|
|
4823
4839
|
IF NOT coalesce((public.logistics_pick_mode()->>'autoSendLoading')::boolean, false) THEN RETURN false; END IF;
|
|
4824
4840
|
v_members := public.logistics_unit_order_ids(p_order_id);
|
|
4825
4841
|
v_lead := v_members[1];
|
|
@@ -4856,6 +4872,7 @@ DO $fsdo$ BEGIN
|
|
|
4856
4872
|
AS $function$
|
|
4857
4873
|
DECLARE r public.logistics_auto_send; v_wait int[] := ARRAY[1,5,15,60];
|
|
4858
4874
|
BEGIN
|
|
4875
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_auto_send_finish');
|
|
4859
4876
|
SELECT * INTO r FROM public.logistics_auto_send WHERE id = p_id FOR UPDATE;
|
|
4860
4877
|
IF NOT FOUND OR r.status IN ('verstuurd','mislukt') THEN RETURN jsonb_build_object('ok', false, 'reden', 'niet_actief'); END IF;
|
|
4861
4878
|
IF p_ok THEN
|
|
@@ -4916,6 +4933,7 @@ DO $fsdo$ BEGIN
|
|
|
4916
4933
|
STABLE SECURITY DEFINER
|
|
4917
4934
|
SET search_path TO 'public'
|
|
4918
4935
|
AS $function$
|
|
4936
|
+
SELECT public.logistics_acc_guard('server', 'logistics_auto_send_route_missing');
|
|
4919
4937
|
SELECT EXISTS (SELECT 1 FROM public.logistics_auto_send a WHERE a.last_http_status = 404
|
|
4920
4938
|
AND a.updated_at > coalesce((SELECT max(b.sent_at) FROM public.logistics_auto_send b WHERE b.status = 'verstuurd' AND coalesce(b.sent_how,'automatisch') = 'automatisch'), '-infinity'))
|
|
4921
4939
|
$function$
|
|
@@ -4933,6 +4951,7 @@ DO $fsdo$ BEGIN
|
|
|
4933
4951
|
AS $function$
|
|
4934
4952
|
DECLARE j jsonb; v_at timestamptz;
|
|
4935
4953
|
BEGIN
|
|
4954
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_auto_send_sent_elsewhere');
|
|
4936
4955
|
j := public.logistics_afhandeling_fulfillment_order(p_order_id);
|
|
4937
4956
|
IF NOT coalesce((j->>'verstuurd')::boolean, false) THEN RETURN NULL; END IF;
|
|
4938
4957
|
SELECT min(a.created_at) INTO v_at FROM public.floriday_loading_attempts a
|
|
@@ -4970,6 +4989,7 @@ DO $fsdo$ BEGIN
|
|
|
4970
4989
|
AS $function$
|
|
4971
4990
|
DECLARE r public.logistics_auto_send; v_tekst text; v_status text; v_sent timestamptz; v_how text; v_elders timestamptz;
|
|
4972
4991
|
BEGIN
|
|
4992
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_auto_send_status_core');
|
|
4973
4993
|
SELECT * INTO r FROM public.logistics_auto_send a WHERE a.order_id = p_order_id OR p_order_id = ANY(a.order_ids)
|
|
4974
4994
|
ORDER BY a.created_at DESC LIMIT 1;
|
|
4975
4995
|
IF NOT FOUND THEN
|
|
@@ -5014,6 +5034,7 @@ DECLARE
|
|
|
5014
5034
|
v_ov jsonb;
|
|
5015
5035
|
v_val text;
|
|
5016
5036
|
BEGIN
|
|
5037
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_backorder_allowed');
|
|
5017
5038
|
IF p_strategy_id IS NOT NULL THEN
|
|
5018
5039
|
SELECT settings INTO v_settings FROM public.logistics_rule_configs
|
|
5019
5040
|
WHERE strategy_id = p_strategy_id AND user_id = auth.uid() LIMIT 1;
|
|
@@ -5164,6 +5185,7 @@ DO $fsdo$ BEGIN
|
|
|
5164
5185
|
AS $function$
|
|
5165
5186
|
DECLARE v_last record; v_cur text; v_shell text;
|
|
5166
5187
|
BEGIN
|
|
5188
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_base_url_check_status');
|
|
5167
5189
|
PERFORM public.logistics_base_url_checks_resolve();
|
|
5168
5190
|
SELECT value INTO v_cur FROM public.module_runtime_config WHERE key = 'logistics_tick_base_url';
|
|
5169
5191
|
SELECT value INTO v_shell FROM public.module_runtime_config WHERE key = 'shell_base_url';
|
|
@@ -5196,6 +5218,7 @@ DECLARE
|
|
|
5196
5218
|
q_status int; q_content text; q_done boolean;
|
|
5197
5219
|
v_ping_ok boolean; v_route_ok boolean; v_rows int;
|
|
5198
5220
|
BEGIN
|
|
5221
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_base_url_checks_resolve');
|
|
5199
5222
|
FOR r IN SELECT * FROM public.logistics_base_url_checks WHERE status = 'wachtend' ORDER BY id FOR UPDATE SKIP LOCKED LOOP
|
|
5200
5223
|
SELECT h.status_code, h.content, true INTO p_status, p_content, p_done
|
|
5201
5224
|
FROM net._http_response h WHERE h.id = r.ping_request_id;
|
|
@@ -5262,6 +5285,7 @@ DO $fsdo$ BEGIN
|
|
|
5262
5285
|
STABLE SECURITY DEFINER
|
|
5263
5286
|
SET search_path TO 'public'
|
|
5264
5287
|
AS $function$
|
|
5288
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_belading_verstuurder');
|
|
5265
5289
|
SELECT CASE WHEN lower(btrim(value)) IN ('engine','afhandeling') THEN lower(btrim(value)) END
|
|
5266
5290
|
FROM public.module_runtime_config WHERE key = 'belading_verstuurder'
|
|
5267
5291
|
$function$
|
|
@@ -5377,6 +5401,7 @@ DO $fsdo$ BEGIN
|
|
|
5377
5401
|
SET search_path TO 'public'
|
|
5378
5402
|
AS $function$
|
|
5379
5403
|
BEGIN
|
|
5404
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_blocked_orders');
|
|
5380
5405
|
IF auth.uid() IS NULL THEN
|
|
5381
5406
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
5382
5407
|
END IF;
|
|
@@ -5414,6 +5439,7 @@ DECLARE
|
|
|
5414
5439
|
v_pending integer := 0;
|
|
5415
5440
|
v_last timestamptz;
|
|
5416
5441
|
BEGIN
|
|
5442
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_blocked_overview');
|
|
5417
5443
|
IF auth.uid() IS NULL THEN
|
|
5418
5444
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
5419
5445
|
END IF;
|
|
@@ -5446,6 +5472,7 @@ DO $fsdo$ BEGIN
|
|
|
5446
5472
|
STABLE SECURITY DEFINER
|
|
5447
5473
|
SET search_path TO 'public'
|
|
5448
5474
|
AS $function$
|
|
5475
|
+
SELECT public.logistics_acc_guard('server', 'logistics_buffer_closed_for_join');
|
|
5449
5476
|
SELECT b.closed_at IS NOT NULL
|
|
5450
5477
|
OR (b.close_at IS NOT NULL AND b.close_at <= now())
|
|
5451
5478
|
OR public.logistics_buffer_handled(b.id)
|
|
@@ -5511,6 +5538,7 @@ DECLARE
|
|
|
5511
5538
|
v_settings jsonb;
|
|
5512
5539
|
d jsonb;
|
|
5513
5540
|
BEGIN
|
|
5541
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_buffer_decision');
|
|
5514
5542
|
IF p_strategy_id IS NOT NULL THEN
|
|
5515
5543
|
SELECT settings INTO v_settings FROM public.logistics_rule_configs
|
|
5516
5544
|
WHERE strategy_id = p_strategy_id AND (v_user IS NULL OR user_id = v_user)
|
|
@@ -5690,6 +5718,7 @@ DECLARE
|
|
|
5690
5718
|
i int;
|
|
5691
5719
|
v_locked uuid[] := ARRAY[]::uuid[];
|
|
5692
5720
|
BEGIN
|
|
5721
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_buffer_detach_late_orders');
|
|
5693
5722
|
FOR r IN
|
|
5694
5723
|
SELECT b.id, b.buffer_key,
|
|
5695
5724
|
(SELECT count(*) FROM public.orders o WHERE o.buffer_id = b.id AND o.deleted_at IS NULL) AS orders
|
|
@@ -5812,6 +5841,7 @@ DO $fsdo$ BEGIN
|
|
|
5812
5841
|
STABLE SECURITY DEFINER
|
|
5813
5842
|
SET search_path TO 'public'
|
|
5814
5843
|
AS $function$
|
|
5844
|
+
SELECT public.logistics_acc_guard('server', 'logistics_buffer_frozen');
|
|
5815
5845
|
SELECT p_buffer IS NOT NULL AND (
|
|
5816
5846
|
EXISTS (SELECT 1 FROM logistics_active.order_carts oc
|
|
5817
5847
|
WHERE oc.buffer_id = p_buffer
|
|
@@ -5839,6 +5869,7 @@ DO $fsdo$ BEGIN
|
|
|
5839
5869
|
STABLE SECURITY DEFINER
|
|
5840
5870
|
SET search_path TO 'public'
|
|
5841
5871
|
AS $function$
|
|
5872
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_buffer_frozen_order');
|
|
5842
5873
|
SELECT EXISTS (
|
|
5843
5874
|
SELECT 1
|
|
5844
5875
|
FROM public.orders o
|
|
@@ -5868,6 +5899,7 @@ DO $fsdo$ BEGIN
|
|
|
5868
5899
|
STABLE SECURITY DEFINER
|
|
5869
5900
|
SET search_path TO 'public'
|
|
5870
5901
|
AS $function$
|
|
5902
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_buffer_handled');
|
|
5871
5903
|
WITH karren AS (
|
|
5872
5904
|
SELECT oc.id, oc.cart_number, oc.order_id
|
|
5873
5905
|
FROM logistics_active.order_carts oc
|
|
@@ -5924,6 +5956,7 @@ DECLARE
|
|
|
5924
5956
|
v_uid uuid;
|
|
5925
5957
|
v_id uuid;
|
|
5926
5958
|
BEGIN
|
|
5959
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_buffer_notify');
|
|
5927
5960
|
v_uid := auth.uid();
|
|
5928
5961
|
IF v_uid IS NULL THEN
|
|
5929
5962
|
SELECT user_id INTO v_uid FROM public.logistics_rule_configs
|
|
@@ -5964,6 +5997,7 @@ DECLARE
|
|
|
5964
5997
|
v_id uuid;
|
|
5965
5998
|
v_closed boolean;
|
|
5966
5999
|
BEGIN
|
|
6000
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_buffer_open_key');
|
|
5967
6001
|
IF p_base_key IS NULL OR btrim(p_base_key) = '' THEN
|
|
5968
6002
|
RETURN p_base_key;
|
|
5969
6003
|
END IF;
|
|
@@ -6017,6 +6051,7 @@ DECLARE
|
|
|
6017
6051
|
d jsonb;
|
|
6018
6052
|
results jsonb := '[]'::jsonb;
|
|
6019
6053
|
BEGIN
|
|
6054
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_buffer_simulate');
|
|
6020
6055
|
IF jsonb_typeof(p_orders) <> 'array' THEN
|
|
6021
6056
|
RETURN jsonb_build_object('orders', '[]'::jsonb, 'groups', '[]'::jsonb);
|
|
6022
6057
|
END IF;
|
|
@@ -6063,6 +6098,7 @@ DO $fsdo$ BEGIN
|
|
|
6063
6098
|
AS $function$
|
|
6064
6099
|
DECLARE o public.orders%ROWTYPE; d jsonb; v_ref text; v_key text; v_buffer uuid; v_try int := 0; v_skip text[] := '{}';
|
|
6065
6100
|
BEGIN
|
|
6101
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_buffer_target');
|
|
6066
6102
|
SELECT * INTO o FROM public.orders WHERE id = p_order_id;
|
|
6067
6103
|
IF NOT FOUND OR o.deleted_at IS NOT NULL THEN RETURN jsonb_build_object('soort','geen'); END IF;
|
|
6068
6104
|
IF public.logistics_order_buffer_excluded(o.id) THEN RETURN jsonb_build_object('soort','uitgesloten'); END IF;
|
|
@@ -6137,6 +6173,7 @@ DO $fsdo$ BEGIN
|
|
|
6137
6173
|
AS $function$
|
|
6138
6174
|
DECLARE uid uuid := COALESCE(p_user_id, auth.uid()); n integer;
|
|
6139
6175
|
BEGIN
|
|
6176
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cancel_order');
|
|
6140
6177
|
IF uid IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
6141
6178
|
|
|
6142
6179
|
UPDATE public.logistics_tasks
|
|
@@ -6165,6 +6202,7 @@ AS $function$
|
|
|
6165
6202
|
DECLARE
|
|
6166
6203
|
v_n integer;
|
|
6167
6204
|
BEGIN
|
|
6205
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cancel_orphan_tasks');
|
|
6168
6206
|
UPDATE public.logistics_tasks t
|
|
6169
6207
|
SET status = 'cancelled',
|
|
6170
6208
|
updated_at = now(),
|
|
@@ -6215,6 +6253,7 @@ DO $fsdo$ BEGIN
|
|
|
6215
6253
|
AS $function$
|
|
6216
6254
|
DECLARE v_n integer := 0;
|
|
6217
6255
|
BEGIN
|
|
6256
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cancel_stale_cart_pick_rows');
|
|
6218
6257
|
IF p_order_ids IS NULL OR array_length(p_order_ids,1) IS NULL THEN RETURN 0; END IF;
|
|
6219
6258
|
UPDATE public.pick_queue q
|
|
6220
6259
|
SET cancelled_at = now(), updated_at = now(),
|
|
@@ -6271,6 +6310,7 @@ DECLARE
|
|
|
6271
6310
|
v_capacity numeric;
|
|
6272
6311
|
v_result jsonb := '[]'::jsonb;
|
|
6273
6312
|
BEGIN
|
|
6313
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_capacity_day_check');
|
|
6274
6314
|
SELECT settings, user_id INTO v_settings, v_owner
|
|
6275
6315
|
FROM public.logistics_rule_configs
|
|
6276
6316
|
WHERE (v_user IS NULL OR user_id = v_user)
|
|
@@ -6531,6 +6571,7 @@ DO $fsdo$ BEGIN
|
|
|
6531
6571
|
AS $function$
|
|
6532
6572
|
DECLARE v_n int; v_ok int; v_bad text; v_done int;
|
|
6533
6573
|
BEGIN
|
|
6574
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_archive');
|
|
6534
6575
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
6535
6576
|
RAISE EXCEPTION 'Alleen beheer mag karren archiveren.';
|
|
6536
6577
|
END IF;
|
|
@@ -6568,6 +6609,7 @@ DO $fsdo$ BEGIN
|
|
|
6568
6609
|
STABLE SECURITY DEFINER
|
|
6569
6610
|
SET search_path TO 'public'
|
|
6570
6611
|
AS $function$
|
|
6612
|
+
SELECT public.logistics_acc_guard('server', 'logistics_cart_archive_classify');
|
|
6571
6613
|
WITH k AS MATERIALIZED (SELECT public.logistics_tz() AS tz, public.logistics_local_today() AS d),
|
|
6572
6614
|
base AS MATERIALIZED (
|
|
6573
6615
|
SELECT c.id, c.cart_number, c.buffer_id, c.order_id, c.created_at,
|
|
@@ -6654,6 +6696,7 @@ DO $fsdo$ BEGIN
|
|
|
6654
6696
|
SET search_path TO 'public'
|
|
6655
6697
|
AS $function$
|
|
6656
6698
|
BEGIN
|
|
6699
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_archive_preview');
|
|
6657
6700
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
6658
6701
|
RAISE EXCEPTION 'Alleen beheer mag de archiveerlijst bekijken.';
|
|
6659
6702
|
END IF;
|
|
@@ -6704,6 +6747,7 @@ DO $fsdo$ BEGIN
|
|
|
6704
6747
|
AS $function$
|
|
6705
6748
|
DECLARE v_n int; v_weg int;
|
|
6706
6749
|
BEGIN
|
|
6750
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_barcode_opschonen');
|
|
6707
6751
|
WITH kandidaat AS (
|
|
6708
6752
|
SELECT b.cart_id FROM public.logistics_cart_barcode b
|
|
6709
6753
|
WHERE b.created_at < now() - interval '14 days'
|
|
@@ -6733,7 +6777,9 @@ DO $fsdo$ BEGIN
|
|
|
6733
6777
|
RETURNS text
|
|
6734
6778
|
LANGUAGE sql
|
|
6735
6779
|
IMMUTABLE
|
|
6780
|
+
SET search_path TO 'public'
|
|
6736
6781
|
AS $function$
|
|
6782
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_barcode_value');
|
|
6737
6783
|
SELECT CASE WHEN _cart_id IS NULL THEN NULL
|
|
6738
6784
|
ELSE 'LC' || upper(substring(replace(_cart_id::text, '-', '') from 1 for 16))
|
|
6739
6785
|
END;
|
|
@@ -6750,6 +6796,7 @@ DO $fsdo$ BEGIN
|
|
|
6750
6796
|
STABLE SECURITY DEFINER
|
|
6751
6797
|
SET search_path TO 'public'
|
|
6752
6798
|
AS $function$
|
|
6799
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_checkin_at');
|
|
6753
6800
|
select min(coalesce(
|
|
6754
6801
|
lt.planned_end,
|
|
6755
6802
|
lt.due_at,
|
|
@@ -6771,6 +6818,7 @@ DO $fsdo$ BEGIN
|
|
|
6771
6818
|
STABLE SECURITY DEFINER
|
|
6772
6819
|
SET search_path TO 'public'
|
|
6773
6820
|
AS $function$
|
|
6821
|
+
SELECT public.logistics_acc_guard('server', 'logistics_cart_coverage_check');
|
|
6774
6822
|
WITH o AS (
|
|
6775
6823
|
SELECT id, order_number, order_source, status, buffer_id,
|
|
6776
6824
|
(status IN ('Verzonden','Gereed voor facturatie')) afgehandeld
|
|
@@ -6822,6 +6870,7 @@ DO $fsdo$ BEGIN
|
|
|
6822
6870
|
AS $function$
|
|
6823
6871
|
DECLARE v_c record; v_crates int; v_buf int; v_start timestamptz; v_reason text; v_wait timestamptz;
|
|
6824
6872
|
BEGIN
|
|
6873
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_cart_extra_fields');
|
|
6825
6874
|
SELECT * INTO v_c FROM logistics_active.order_carts WHERE id = p_cart_id;
|
|
6826
6875
|
IF NOT FOUND THEN RETURN '{}'::jsonb; END IF;
|
|
6827
6876
|
SELECT sum(coalesce(crates,0))::int INTO v_crates FROM logistics_active.order_cart_items WHERE cart_id = p_cart_id;
|
|
@@ -6851,6 +6900,7 @@ DO $fsdo$ BEGIN
|
|
|
6851
6900
|
STABLE SECURITY DEFINER
|
|
6852
6901
|
SET search_path TO 'public'
|
|
6853
6902
|
AS $function$
|
|
6903
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_fixed_numbering');
|
|
6854
6904
|
WITH c AS (SELECT * FROM public.order_carts WHERE id = p_cart_id),
|
|
6855
6905
|
u AS (
|
|
6856
6906
|
SELECT c2.id, c2.total_carts FROM c JOIN public.order_carts c2
|
|
@@ -6876,6 +6926,7 @@ DO $fsdo$ BEGIN
|
|
|
6876
6926
|
STABLE SECURITY DEFINER
|
|
6877
6927
|
SET search_path TO 'public'
|
|
6878
6928
|
AS $function$
|
|
6929
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_handled');
|
|
6879
6930
|
WITH parts AS (
|
|
6880
6931
|
SELECT DISTINCT btrim(t.nr) AS ref FROM unnest(string_to_array(coalesce(p_order_id, ''), ',')) AS t(nr) WHERE btrim(t.nr) <> ''
|
|
6881
6932
|
), keys AS (
|
|
@@ -6909,6 +6960,7 @@ DO $fsdo$ BEGIN
|
|
|
6909
6960
|
STABLE SECURITY DEFINER
|
|
6910
6961
|
SET search_path TO 'public'
|
|
6911
6962
|
AS $function$
|
|
6963
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_has_packing_slip');
|
|
6912
6964
|
SELECT p_cart_id IS NOT NULL AND EXISTS (
|
|
6913
6965
|
SELECT 1 FROM public.pick_queue q
|
|
6914
6966
|
WHERE q.cancelled_at IS NULL
|
|
@@ -6928,6 +6980,7 @@ DO $fsdo$ BEGIN
|
|
|
6928
6980
|
STABLE SECURITY DEFINER
|
|
6929
6981
|
SET search_path TO 'public'
|
|
6930
6982
|
AS $function$
|
|
6983
|
+
SELECT public.logistics_acc_guard('server', 'logistics_cart_ids_frozen');
|
|
6931
6984
|
SELECT c FROM unnest(COALESCE(p_cart_ids, ARRAY[]::uuid[])) AS c
|
|
6932
6985
|
WHERE public.logistics_cart_is_frozen(c);
|
|
6933
6986
|
$function$
|
|
@@ -6943,6 +6996,7 @@ DO $fsdo$ BEGIN
|
|
|
6943
6996
|
STABLE SECURITY DEFINER
|
|
6944
6997
|
SET search_path TO 'public'
|
|
6945
6998
|
AS $function$
|
|
6999
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_index');
|
|
6946
7000
|
WITH bounds AS (
|
|
6947
7001
|
SELECT
|
|
6948
7002
|
COALESCE(p_from, (now() AT TIME ZONE public.logistics_tz())::date) AS d_from,
|
|
@@ -7082,6 +7136,7 @@ DO $fsdo$ BEGIN
|
|
|
7082
7136
|
STABLE SECURITY DEFINER
|
|
7083
7137
|
SET search_path TO 'public'
|
|
7084
7138
|
AS $function$
|
|
7139
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_is_archived');
|
|
7085
7140
|
SELECT EXISTS (SELECT 1 FROM public.order_carts WHERE id = p_cart_id AND archived_at IS NOT NULL)
|
|
7086
7141
|
$function$
|
|
7087
7142
|
$fsdef$;
|
|
@@ -7096,6 +7151,7 @@ DO $fsdo$ BEGIN
|
|
|
7096
7151
|
STABLE SECURITY DEFINER
|
|
7097
7152
|
SET search_path TO 'public'
|
|
7098
7153
|
AS $function$
|
|
7154
|
+
SELECT public.logistics_acc_guard('server', 'logistics_cart_is_frozen');
|
|
7099
7155
|
SELECT p_cart_id IS NOT NULL AND (
|
|
7100
7156
|
EXISTS (
|
|
7101
7157
|
SELECT 1 FROM public.print_jobs pj
|
|
@@ -7126,6 +7182,7 @@ DO $fsdo$ BEGIN
|
|
|
7126
7182
|
AS $function$
|
|
7127
7183
|
declare c public.order_carts; l integer; p integer;
|
|
7128
7184
|
begin
|
|
7185
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_is_full');
|
|
7129
7186
|
select * into c from logistics_active.order_carts where id = p_cart_id;
|
|
7130
7187
|
if not found then return false; end if;
|
|
7131
7188
|
l := public.logistics_full_cart_min_layers();
|
|
@@ -7174,6 +7231,7 @@ DO $fsdo$ BEGIN
|
|
|
7174
7231
|
AS $function$
|
|
7175
7232
|
DECLARE v_id uuid; v_fix jsonb; v_lead uuid; v_items jsonb;
|
|
7176
7233
|
BEGIN
|
|
7234
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_json_fixed');
|
|
7177
7235
|
BEGIN v_id := nullif(p_cart->>'cartId','')::uuid; EXCEPTION WHEN others THEN RETURN p_cart; END;
|
|
7178
7236
|
IF v_id IS NULL THEN RETURN p_cart; END IF;
|
|
7179
7237
|
v_fix := public.logistics_cart_fixed_numbering(v_id);
|
|
@@ -7204,6 +7262,7 @@ DO $fsdo$ BEGIN
|
|
|
7204
7262
|
STABLE SECURITY DEFINER
|
|
7205
7263
|
SET search_path TO 'public'
|
|
7206
7264
|
AS $function$
|
|
7265
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_layout_method');
|
|
7207
7266
|
select jsonb_build_object(
|
|
7208
7267
|
'layoutMethod', m,
|
|
7209
7268
|
'showLayerLayout', m = 'afmetingen'
|
|
@@ -7229,6 +7288,7 @@ DO $fsdo$ BEGIN
|
|
|
7229
7288
|
STABLE SECURITY DEFINER
|
|
7230
7289
|
SET search_path TO 'public'
|
|
7231
7290
|
AS $function$
|
|
7291
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_order_ids');
|
|
7232
7292
|
SELECT coalesce(array_agg(DISTINCT x.oid) FILTER (WHERE x.oid IS NOT NULL), '{}') FROM (
|
|
7233
7293
|
SELECT c.order_id AS oid FROM logistics_active.order_carts c WHERE c.id = p_cart_id
|
|
7234
7294
|
UNION SELECT oi.order_id FROM logistics_active.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
@@ -7247,6 +7307,7 @@ DO $fsdo$ BEGIN
|
|
|
7247
7307
|
STABLE SECURITY DEFINER
|
|
7248
7308
|
SET search_path TO 'public'
|
|
7249
7309
|
AS $function$
|
|
7310
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_order_refs');
|
|
7250
7311
|
select coalesce(array_agg(distinct o.order_number), '{}'::text[])
|
|
7251
7312
|
from public.orders o
|
|
7252
7313
|
where o.id in (
|
|
@@ -7269,6 +7330,7 @@ DO $fsdo$ BEGIN
|
|
|
7269
7330
|
STABLE SECURITY DEFINER
|
|
7270
7331
|
SET search_path TO 'public'
|
|
7271
7332
|
AS $function$
|
|
7333
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_pick_starts_at');
|
|
7272
7334
|
SELECT min(lt.planned_start) FROM public.logistics_tasks lt
|
|
7273
7335
|
WHERE lt.order_ref = ANY(public.logistics_cart_order_refs(p_cart_id))
|
|
7274
7336
|
AND lt.task_type = 'pick.execute' AND lt.status NOT IN ('done','cancelled','superseded','skipped')
|
|
@@ -7290,6 +7352,7 @@ DECLARE
|
|
|
7290
7352
|
r record;
|
|
7291
7353
|
v_status jsonb;
|
|
7292
7354
|
BEGIN
|
|
7355
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_plan_overview');
|
|
7293
7356
|
FOR r IN
|
|
7294
7357
|
SELECT o.order_number, NULLIF(o.delivery_date, '')::date AS ddate
|
|
7295
7358
|
FROM public.orders o
|
|
@@ -7346,6 +7409,7 @@ DO $fsdo$ BEGIN
|
|
|
7346
7409
|
AS $function$
|
|
7347
7410
|
DECLARE r jsonb; v_start timestamptz; v_code text; v_ref text;
|
|
7348
7411
|
BEGIN
|
|
7412
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_plan_status_core');
|
|
7349
7413
|
r := public.logistics_cart_plan_status_core_v152(p_ref);
|
|
7350
7414
|
v_ref := coalesce(r->>'orderRef', p_ref);
|
|
7351
7415
|
SELECT min(lt.planned_start) INTO v_start FROM public.logistics_tasks lt
|
|
@@ -7377,6 +7441,7 @@ declare
|
|
|
7377
7441
|
v_cart jsonb; v_cart_id uuid; v_busy boolean := false; v_blocked text;
|
|
7378
7442
|
v_uuid uuid; v_ref_type text; v_q_order uuid; v_t jsonb;
|
|
7379
7443
|
begin
|
|
7444
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_cart_plan_status_core_v152');
|
|
7380
7445
|
if p_ref is null or btrim(p_ref) = '' then
|
|
7381
7446
|
return jsonb_build_object('ready', false, 'released', false,
|
|
7382
7447
|
'reason', 'Geen order- of documentnummer meegegeven.');
|
|
@@ -7525,6 +7590,7 @@ DO $fsdo$ BEGIN
|
|
|
7525
7590
|
AS $function$
|
|
7526
7591
|
DECLARE v_refs text[]; v_ref text; v_released boolean := false; v_until timestamptz;
|
|
7527
7592
|
BEGIN
|
|
7593
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_release_reason');
|
|
7528
7594
|
v_refs := public.logistics_cart_order_refs(p_cart_id);
|
|
7529
7595
|
IF v_refs IS NULL OR cardinality(v_refs) = 0 THEN RETURN 'Deze kar hoort bij geen enkele actieve order.'; END IF;
|
|
7530
7596
|
FOREACH v_ref IN ARRAY v_refs LOOP
|
|
@@ -7549,7 +7615,8 @@ DO $fsdo$ BEGIN
|
|
|
7549
7615
|
LANGUAGE sql
|
|
7550
7616
|
STABLE SECURITY DEFINER
|
|
7551
7617
|
SET search_path TO 'public'
|
|
7552
|
-
AS $function$
|
|
7618
|
+
AS $function$
|
|
7619
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_released'); select public.logistics_cart_release_reason(p_cart_id) is null; $function$
|
|
7553
7620
|
$fsdef$;
|
|
7554
7621
|
EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR invalid_schema_name THEN
|
|
7555
7622
|
RAISE NOTICE 'logistiek-engine: functie public.logistics_cart_released overgeslagen (onderdeel van andere module ontbreekt): %', SQLERRM;
|
|
@@ -7561,7 +7628,8 @@ DO $fsdo$ BEGIN
|
|
|
7561
7628
|
LANGUAGE sql
|
|
7562
7629
|
STABLE SECURITY DEFINER
|
|
7563
7630
|
SET search_path TO 'public'
|
|
7564
|
-
AS $function$
|
|
7631
|
+
AS $function$
|
|
7632
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_scanned'); SELECT EXISTS (SELECT 1 FROM public.logistics_control_scan s
|
|
7565
7633
|
WHERE s.cart_id = p_cart_id AND s.approved_at IS NOT NULL AND s.status <> 'geannuleerd') $function$
|
|
7566
7634
|
$fsdef$;
|
|
7567
7635
|
EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR invalid_schema_name THEN
|
|
@@ -7715,6 +7783,7 @@ DO $fsdo$ BEGIN
|
|
|
7715
7783
|
STABLE SECURITY DEFINER
|
|
7716
7784
|
SET search_path TO 'public'
|
|
7717
7785
|
AS $function$
|
|
7786
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_slip_queued');
|
|
7718
7787
|
SELECT p_cart IS NOT NULL AND EXISTS (
|
|
7719
7788
|
SELECT 1 FROM public.print_jobs pj
|
|
7720
7789
|
WHERE pj.payload->>'cart_id' = p_cart::text AND pj.documenttype = 'pakbon'
|
|
@@ -7760,6 +7829,7 @@ DO $fsdo$ BEGIN
|
|
|
7760
7829
|
AS $function$
|
|
7761
7830
|
DECLARE r record; v_res jsonb := '[]'::jsonb; v_why text;
|
|
7762
7831
|
BEGIN
|
|
7832
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_unarchive');
|
|
7763
7833
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
7764
7834
|
RAISE EXCEPTION 'Alleen beheer mag karren terugzetten.';
|
|
7765
7835
|
END IF;
|
|
@@ -7798,6 +7868,7 @@ DO $fsdo$ BEGIN
|
|
|
7798
7868
|
STABLE SECURITY DEFINER
|
|
7799
7869
|
SET search_path TO 'public'
|
|
7800
7870
|
AS $function$
|
|
7871
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_units');
|
|
7801
7872
|
WITH idx AS (SELECT * FROM public.logistics_cart_index(p_from, p_to)),
|
|
7802
7873
|
u AS (SELECT * FROM public.logistics_pick_units()),
|
|
7803
7874
|
j AS (
|
|
@@ -7836,6 +7907,7 @@ DO $fsdo$ BEGIN
|
|
|
7836
7907
|
STABLE SECURITY DEFINER
|
|
7837
7908
|
SET search_path TO 'public'
|
|
7838
7909
|
AS $function$
|
|
7910
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_cart_wait_until');
|
|
7839
7911
|
SELECT CASE WHEN public.logistics_cart_is_full(p_cart_id) OR public.logistics_pick_partial_mode() = 'also_before' THEN NULL
|
|
7840
7912
|
ELSE coalesce(
|
|
7841
7913
|
(SELECT min(lt.planned_start) FROM public.logistics_tasks lt
|
|
@@ -7860,6 +7932,7 @@ DECLARE
|
|
|
7860
7932
|
s jsonb;
|
|
7861
7933
|
v numeric;
|
|
7862
7934
|
BEGIN
|
|
7935
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_carts_per_print');
|
|
7863
7936
|
SELECT settings INTO s
|
|
7864
7937
|
FROM public.logistics_rule_configs
|
|
7865
7938
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC
|
|
@@ -7889,6 +7962,7 @@ DECLARE
|
|
|
7889
7962
|
v_allow boolean := public.logistics_backorder_allowed(p_strategy_id);
|
|
7890
7963
|
v_shortages jsonb;
|
|
7891
7964
|
BEGIN
|
|
7965
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_check_order_allowed');
|
|
7892
7966
|
IF p_lines IS NULL OR jsonb_typeof(p_lines) <> 'array' THEN
|
|
7893
7967
|
RETURN jsonb_build_object('allowed', true, 'allowBackorder', v_allow, 'shortages', '[]'::jsonb);
|
|
7894
7968
|
END IF;
|
|
@@ -7950,6 +8024,7 @@ DECLARE
|
|
|
7950
8024
|
emails text[]; prio_text text; prio integer;
|
|
7951
8025
|
alert_id uuid; note_id uuid; lines text := '';
|
|
7952
8026
|
BEGIN
|
|
8027
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_check_order_stock');
|
|
7953
8028
|
SELECT * INTO ev FROM public.logistics_events WHERE id = p_event_id;
|
|
7954
8029
|
IF NOT FOUND OR ev.event_type <> 'order.received' OR ev.shadow THEN RETURN NULL; END IF;
|
|
7955
8030
|
|
|
@@ -8062,6 +8137,7 @@ DO $fsdo$ BEGIN
|
|
|
8062
8137
|
AS $function$
|
|
8063
8138
|
DECLARE t public.logistics_tasks%ROWTYPE;
|
|
8064
8139
|
BEGIN
|
|
8140
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_claim_next_task');
|
|
8065
8141
|
SELECT * INTO t FROM public.logistics_tasks
|
|
8066
8142
|
WHERE user_id = auth.uid() AND owner_module = p_owner_module
|
|
8067
8143
|
AND status = 'planned' AND shadow = false
|
|
@@ -8090,6 +8166,7 @@ DO $fsdo$ BEGIN
|
|
|
8090
8166
|
AS $function$
|
|
8091
8167
|
DECLARE t public.logistics_tasks%ROWTYPE;
|
|
8092
8168
|
BEGIN
|
|
8169
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_claim_task');
|
|
8093
8170
|
SELECT * INTO t FROM public.logistics_tasks
|
|
8094
8171
|
WHERE id = p_task_id AND user_id = auth.uid() AND status = 'planned'
|
|
8095
8172
|
FOR UPDATE SKIP LOCKED;
|
|
@@ -8121,6 +8198,7 @@ DECLARE
|
|
|
8121
8198
|
v_after bigint;
|
|
8122
8199
|
v_limit integer := greatest(1, least(coalesce(p_limit, 20000), 100000));
|
|
8123
8200
|
BEGIN
|
|
8201
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cleanup_duplicate_order_lines');
|
|
8124
8202
|
IF p_order_id IS NULL THEN
|
|
8125
8203
|
RETURN jsonb_build_object('ok', false, 'reden', 'geen_order');
|
|
8126
8204
|
END IF;
|
|
@@ -8219,6 +8297,7 @@ DECLARE
|
|
|
8219
8297
|
v_limit integer := GREATEST(100, LEAST(COALESCE(p_limit, 20000), 200000));
|
|
8220
8298
|
v_trace int := 0; v_arch int := 0; v_pick int := 0; v_barcode int := 0; v_autolink int := 0; n int; i int; r int;
|
|
8221
8299
|
BEGIN
|
|
8300
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cleanup_history');
|
|
8222
8301
|
FOR i IN 1..4 LOOP
|
|
8223
8302
|
n := 0;
|
|
8224
8303
|
IF v_trace_days IS NOT NULL AND v_trace_days >= 1 THEN
|
|
@@ -8283,6 +8362,7 @@ DECLARE
|
|
|
8283
8362
|
v_zonder_kar int := 0;
|
|
8284
8363
|
v_verdwenen_kar int := 0;
|
|
8285
8364
|
BEGIN
|
|
8365
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cleanup_orphan_print_jobs');
|
|
8286
8366
|
UPDATE public.print_jobs j
|
|
8287
8367
|
SET status = 'geannuleerd'::print_job_status,
|
|
8288
8368
|
foutmelding = 'Vervallen: deze pakbon hoorde bij een order in plaats van bij een kar. Er staan nieuwe pakbonnen per kar klaar.',
|
|
@@ -8325,6 +8405,7 @@ DECLARE
|
|
|
8325
8405
|
v_days integer := public.logistics_task_retention_days();
|
|
8326
8406
|
v_deleted integer := 0;
|
|
8327
8407
|
BEGIN
|
|
8408
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cleanup_tasks');
|
|
8328
8409
|
-- Geen ingestelde bewaartermijn: niets opruimen en dat duidelijk melden.
|
|
8329
8410
|
IF v_days IS NULL OR v_days < 1 THEN
|
|
8330
8411
|
RETURN jsonb_build_object(
|
|
@@ -8469,6 +8550,7 @@ DO $fsdo$ BEGIN
|
|
|
8469
8550
|
STABLE SECURITY DEFINER
|
|
8470
8551
|
SET search_path TO 'public'
|
|
8471
8552
|
AS $function$
|
|
8553
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_consistency_check');
|
|
8472
8554
|
WITH vandaag AS (SELECT (now() AT TIME ZONE public.logistics_tz())::date AS d),
|
|
8473
8555
|
idx AS (SELECT * FROM public.logistics_cart_index((SELECT d FROM vandaag), (SELECT d FROM vandaag))),
|
|
8474
8556
|
agenda AS (SELECT a.cart_count FROM public.logistics_pick_agenda((SELECT d FROM vandaag), (SELECT d FROM vandaag)) a),
|
|
@@ -8545,6 +8627,7 @@ declare
|
|
|
8545
8627
|
v_source text;
|
|
8546
8628
|
v_count integer;
|
|
8547
8629
|
begin
|
|
8630
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_complete_cart');
|
|
8548
8631
|
select c.order_id, c.cart_number into v_order, v_index
|
|
8549
8632
|
from logistics_active.order_carts c where c.id = p_cart_id;
|
|
8550
8633
|
if v_order is null or v_index is null then
|
|
@@ -8594,6 +8677,7 @@ declare
|
|
|
8594
8677
|
v_is_flo boolean; v_scanner uuid; v_printer uuid; v_scan public.logistics_control_scan%rowtype;
|
|
8595
8678
|
v_res jsonb; v_ok boolean; v_scan_only boolean; v_marked integer;
|
|
8596
8679
|
begin
|
|
8680
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_approve');
|
|
8597
8681
|
v_look := public.logistics_control_scan_lookup(p_barcode);
|
|
8598
8682
|
if not coalesce((v_look->>'ok')::boolean, false) then
|
|
8599
8683
|
return v_look;
|
|
@@ -8678,6 +8762,7 @@ DO $fsdo$ BEGIN
|
|
|
8678
8762
|
SET search_path TO 'public'
|
|
8679
8763
|
AS $function$
|
|
8680
8764
|
begin
|
|
8765
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_claim');
|
|
8681
8766
|
update public.logistics_control_scan s
|
|
8682
8767
|
set status = 'mislukt',
|
|
8683
8768
|
error_code = 'wachtlimiet',
|
|
@@ -8722,6 +8807,7 @@ DO $fsdo$ BEGIN
|
|
|
8722
8807
|
AS $function$
|
|
8723
8808
|
declare r public.logistics_control_scan%rowtype; v_status text;
|
|
8724
8809
|
begin
|
|
8810
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_finish');
|
|
8725
8811
|
v_status := coalesce(_status, case when _ok then 'in_printwachtrij' else 'mislukt' end);
|
|
8726
8812
|
if v_status = 'geprint' then v_status := 'in_printwachtrij'; end if;
|
|
8727
8813
|
update public.logistics_control_scan
|
|
@@ -8755,6 +8841,7 @@ declare
|
|
|
8755
8841
|
v_look jsonb; v_cart_id uuid; v_order_id uuid; v_sales text;
|
|
8756
8842
|
v_scan public.logistics_control_scan%rowtype; v_seq record;
|
|
8757
8843
|
begin
|
|
8844
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_lookup');
|
|
8758
8845
|
v_look := public.logistics_barcode_lookup(p_barcode);
|
|
8759
8846
|
if not coalesce((v_look->>'ok')::boolean, false) then return v_look; end if;
|
|
8760
8847
|
v_cart_id := nullif(v_look->'cart'->>'cartId','')::uuid;
|
|
@@ -8793,6 +8880,7 @@ DO $fsdo$ BEGIN
|
|
|
8793
8880
|
STABLE SECURITY DEFINER
|
|
8794
8881
|
SET search_path TO 'public'
|
|
8795
8882
|
AS $function$
|
|
8883
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_control_scan_overview');
|
|
8796
8884
|
select coalesce(jsonb_agg(x order by x->>'updatedAt' desc), '[]'::jsonb)
|
|
8797
8885
|
from (
|
|
8798
8886
|
select jsonb_build_object(
|
|
@@ -8830,6 +8918,7 @@ DECLARE
|
|
|
8830
8918
|
s public.logistics_control_scan%rowtype;
|
|
8831
8919
|
v_look jsonb; v_cart jsonb; v_layout jsonb; v_layout_id uuid; v_doc_type text; v_res jsonb;
|
|
8832
8920
|
BEGIN
|
|
8921
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_print_own');
|
|
8833
8922
|
SELECT * INTO s FROM public.logistics_control_scan WHERE id = p_scan_id;
|
|
8834
8923
|
IF s.id IS NULL THEN
|
|
8835
8924
|
RETURN jsonb_build_object('ok', false, 'error', 'Deze controle bestaat niet meer.');
|
|
@@ -8886,6 +8975,7 @@ DO $fsdo$ BEGIN
|
|
|
8886
8975
|
AS $function$
|
|
8887
8976
|
DECLARE v_n integer := 0; v_c uuid;
|
|
8888
8977
|
BEGIN
|
|
8978
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_record_afmelding');
|
|
8889
8979
|
IF p_order_id IS NULL THEN RETURN 0; END IF;
|
|
8890
8980
|
FOR v_c IN SELECT oc.id FROM logistics_active.order_carts oc WHERE oc.order_id = p_order_id LOOP
|
|
8891
8981
|
v_n := v_n + public.logistics_control_scan_record_afmelding_cart(v_c, p_bron);
|
|
@@ -8907,6 +8997,7 @@ AS $function$
|
|
|
8907
8997
|
DECLARE v_bron text := CASE WHEN p_bron IN ('scanner','bulk','controlepost') THEN p_bron ELSE 'onbekend' END;
|
|
8908
8998
|
v_n integer := 0; v_order uuid; v_number text; v_flo boolean;
|
|
8909
8999
|
BEGIN
|
|
9000
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_record_afmelding_cart');
|
|
8910
9001
|
IF p_cart_id IS NULL THEN RETURN 0; END IF;
|
|
8911
9002
|
SELECT (public.logistics_cart_order_ids(p_cart_id))[1] INTO v_order;
|
|
8912
9003
|
SELECT o.order_number, nullif(btrim(coalesce(o.floriday_sales_order_id::text,'')),'') IS NOT NULL
|
|
@@ -8935,6 +9026,7 @@ DO $fsdo$ BEGIN
|
|
|
8935
9026
|
AS $function$
|
|
8936
9027
|
declare r public.logistics_control_scan%rowtype; v_res jsonb;
|
|
8937
9028
|
begin
|
|
9029
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_scan_retry');
|
|
8938
9030
|
update public.logistics_control_scan
|
|
8939
9031
|
set status = case when is_floriday then 'afleverbrief_aangevraagd' else 'goedgekeurd' end,
|
|
8940
9032
|
attempts = 0, locked_until = null, error = null, error_code = null, updated_at = now()
|
|
@@ -8972,6 +9064,7 @@ declare
|
|
|
8972
9064
|
f jsonb;
|
|
8973
9065
|
v_mode text;
|
|
8974
9066
|
begin
|
|
9067
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_control_settings');
|
|
8975
9068
|
select settings->'controle'->'fields' into f
|
|
8976
9069
|
from public.logistics_rule_configs
|
|
8977
9070
|
order by is_active desc, (status = 'actief') desc, updated_at desc
|
|
@@ -9006,6 +9099,7 @@ AS $function$
|
|
|
9006
9099
|
DECLARE
|
|
9007
9100
|
v jsonb;
|
|
9008
9101
|
BEGIN
|
|
9102
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cron_health');
|
|
9009
9103
|
IF auth.uid() IS NULL THEN
|
|
9010
9104
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
9011
9105
|
END IF;
|
|
@@ -9051,6 +9145,7 @@ DECLARE
|
|
|
9051
9145
|
v_tz text := public.logistics_opening_timezone();
|
|
9052
9146
|
v_has_exception boolean;
|
|
9053
9147
|
BEGIN
|
|
9148
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_day_windows');
|
|
9054
9149
|
IF v_tz IS NULL THEN
|
|
9055
9150
|
RAISE EXCEPTION 'Tijdzone van de vestiging ontbreekt in logistics_time_settings; werkuren kunnen niet berekend worden.';
|
|
9056
9151
|
END IF;
|
|
@@ -9136,6 +9231,7 @@ DO $fsdo$ BEGIN
|
|
|
9136
9231
|
STABLE SECURITY DEFINER
|
|
9137
9232
|
SET search_path TO 'public'
|
|
9138
9233
|
AS $function$
|
|
9234
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_delivery_agenda');
|
|
9139
9235
|
WITH idx AS (SELECT * FROM public.logistics_cart_units('1900-01-01'::date, '2999-12-31'::date)),
|
|
9140
9236
|
scope AS (
|
|
9141
9237
|
SELECT * FROM idx
|
|
@@ -9182,6 +9278,7 @@ DO $fsdo$ BEGIN
|
|
|
9182
9278
|
AS $function$
|
|
9183
9279
|
DECLARE v_tz text := public.logistics_tz(); v_moments jsonb; v_best record; v_list jsonb; v_rows jsonb;
|
|
9184
9280
|
BEGIN
|
|
9281
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_departure_calc');
|
|
9185
9282
|
IF v_tz IS NULL THEN
|
|
9186
9283
|
RETURN jsonb_build_object('ok', false, 'reason', 'De tijdzone van de vestiging ontbreekt. Stel die in bij Werktijden.');
|
|
9187
9284
|
END IF;
|
|
@@ -9250,6 +9347,7 @@ DECLARE v_tz text := public.logistics_tz(); v_carrier uuid := p_carrier_id; v_no
|
|
|
9250
9347
|
v jsonb; v_feasible boolean; v_first date; v_first_dl timestamptz; d date; t jsonb; v_reason text;
|
|
9251
9348
|
v_next jsonb; m jsonb; v_own jsonb;
|
|
9252
9349
|
BEGIN
|
|
9350
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_departure_preview');
|
|
9253
9351
|
IF v_tz IS NULL THEN
|
|
9254
9352
|
RETURN jsonb_build_object('ok', false, 'reason', 'De tijdzone van de vestiging ontbreekt. Stel die in bij Werktijden.');
|
|
9255
9353
|
END IF;
|
|
@@ -9334,6 +9432,7 @@ DO $fsdo$ BEGIN
|
|
|
9334
9432
|
STABLE SECURITY DEFINER
|
|
9335
9433
|
SET search_path TO 'public'
|
|
9336
9434
|
AS $function$
|
|
9435
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_document_layout');
|
|
9337
9436
|
SELECT public.logistics_document_layout_v2(_document_code, false);
|
|
9338
9437
|
$function$
|
|
9339
9438
|
$fsdef$;
|
|
@@ -9354,6 +9453,7 @@ DECLARE
|
|
|
9354
9453
|
k text;
|
|
9355
9454
|
v text;
|
|
9356
9455
|
BEGIN
|
|
9456
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_document_station');
|
|
9357
9457
|
SELECT settings->'pickstations'->'fields' INTO f
|
|
9358
9458
|
FROM public.logistics_rule_configs
|
|
9359
9459
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC
|
|
@@ -9445,6 +9545,7 @@ DO $fsdo$ BEGIN
|
|
|
9445
9545
|
STABLE SECURITY DEFINER
|
|
9446
9546
|
SET search_path TO 'public'
|
|
9447
9547
|
AS $function$
|
|
9548
|
+
SELECT public.logistics_acc_guard('server', 'logistics_double_group_lines');
|
|
9448
9549
|
WITH g AS (
|
|
9449
9550
|
SELECT oi.id, oi.order_id,
|
|
9450
9551
|
(SELECT pg.id FROM public.product_groups pg
|
|
@@ -9480,6 +9581,7 @@ DECLARE
|
|
|
9480
9581
|
ev public.logistics_events%ROWTYPE;
|
|
9481
9582
|
new_id uuid;
|
|
9482
9583
|
BEGIN
|
|
9584
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_emit_event');
|
|
9483
9585
|
IF uid IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
9484
9586
|
|
|
9485
9587
|
IF p_idempotency_key IS NOT NULL THEN
|
|
@@ -9525,6 +9627,7 @@ DO $fsdo$ BEGIN
|
|
|
9525
9627
|
SET search_path TO 'public'
|
|
9526
9628
|
AS $function$
|
|
9527
9629
|
BEGIN
|
|
9630
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_enqueue_shipping_note_with_slip');
|
|
9528
9631
|
-- Bewust leeg. Zie trg_logistics_shipping_note_after_slip op public.print_jobs.
|
|
9529
9632
|
RETURN NULL;
|
|
9530
9633
|
END;
|
|
@@ -9545,6 +9648,7 @@ DECLARE
|
|
|
9545
9648
|
item public.pick_queue; dt public.pick_document_types; doc_code text; slip public.print_jobs;
|
|
9546
9649
|
layout_meta jsonb; v_layout uuid; v_doc_type text := 'sticker'; v_layout_type text; v_plek uuid; v_cart text; v_res jsonb;
|
|
9547
9650
|
BEGIN
|
|
9651
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_enqueue_sticker_with_slip');
|
|
9548
9652
|
IF NOT public.logistics_sticker_follows_slip() THEN RETURN NULL; END IF;
|
|
9549
9653
|
IF coalesce(_is_herprint, false) THEN RETURN NULL; END IF;
|
|
9550
9654
|
SELECT * INTO item FROM public.pick_queue WHERE id = _queue_item_id;
|
|
@@ -9638,6 +9742,7 @@ AS $function$
|
|
|
9638
9742
|
DECLARE
|
|
9639
9743
|
v_code text;
|
|
9640
9744
|
BEGIN
|
|
9745
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_ensure_cart_barcode');
|
|
9641
9746
|
IF _cart_id IS NULL THEN RETURN NULL; END IF;
|
|
9642
9747
|
v_code := public.logistics_cart_barcode_value(_cart_id);
|
|
9643
9748
|
|
|
@@ -9664,6 +9769,7 @@ declare
|
|
|
9664
9769
|
v_log_id uuid; v_order_id uuid; v_order_ref text; v_unit_ref text;
|
|
9665
9770
|
v_actions jsonb := '[]'::jsonb; v_status jsonb; v_cart record; v_rows integer := 0;
|
|
9666
9771
|
begin
|
|
9772
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_ensure_pick_data');
|
|
9667
9773
|
insert into public.logistics_pick_data_requests(event_id, order_ref, missing, status)
|
|
9668
9774
|
values (p_event_id, coalesce(btrim(p_ref), ''), coalesce(p_missing, '[]'::jsonb), 'processing')
|
|
9669
9775
|
returning id into v_log_id;
|
|
@@ -9730,6 +9836,7 @@ DO $fsdo$ BEGIN
|
|
|
9730
9836
|
SECURITY DEFINER
|
|
9731
9837
|
SET search_path TO 'public'
|
|
9732
9838
|
AS $function$
|
|
9839
|
+
SELECT public.logistics_acc_guard('server', 'logistics_ensure_runtime_defaults');
|
|
9733
9840
|
INSERT INTO public.module_runtime_config (key, value, updated_at)
|
|
9734
9841
|
VALUES ('belading_verstuurder', 'engine', now())
|
|
9735
9842
|
ON CONFLICT (key) DO NOTHING;
|
|
@@ -9750,6 +9857,7 @@ DECLARE
|
|
|
9750
9857
|
slip record; v_order public.orders; v_order_number text; v_cart uuid; v_bron boolean;
|
|
9751
9858
|
v_fo integer := 0; v_bvo integer := 0; v_onbekend integer := 0; v_bekeken integer := 0;
|
|
9752
9859
|
BEGIN
|
|
9860
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_ensure_shipping_notes');
|
|
9753
9861
|
IF NOT public.logistics_shipping_note_follows_slip() THEN
|
|
9754
9862
|
RETURN jsonb_build_object('actief', false, 'bekeken', 0, 'floriday', 0, 'eigen', 0);
|
|
9755
9863
|
END IF;
|
|
@@ -9852,6 +9960,7 @@ DECLARE
|
|
|
9852
9960
|
r record;
|
|
9853
9961
|
v_key text;
|
|
9854
9962
|
BEGIN
|
|
9963
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_expand_line');
|
|
9855
9964
|
IF p_product_id IS NULL OR COALESCE(p_qty, 0) <= 0 THEN RETURN; END IF;
|
|
9856
9965
|
|
|
9857
9966
|
IF p_product_id = ANY(p_path) THEN
|
|
@@ -9911,6 +10020,7 @@ DO $fsdo$ BEGIN
|
|
|
9911
10020
|
STABLE SECURITY DEFINER
|
|
9912
10021
|
SET search_path TO 'public'
|
|
9913
10022
|
AS $function$
|
|
10023
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_external_fulfillment_key_report');
|
|
9914
10024
|
SELECT o.id, o.order_number, o.floriday_sales_order_id, count(*)::int,
|
|
9915
10025
|
count(*) FILTER (WHERE nullif(btrim(coalesce(oi.source_line_key,'')),'') IS NULL)::int,
|
|
9916
10026
|
count(*) FILTER (WHERE nullif(btrim(coalesce(oi.source_line_key,'')),'') IS NOT NULL
|
|
@@ -9935,6 +10045,7 @@ DO $fsdo$ BEGIN
|
|
|
9935
10045
|
AS $function$
|
|
9936
10046
|
DECLARE t public.logistics_tasks%ROWTYPE;
|
|
9937
10047
|
BEGIN
|
|
10048
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_fail_task');
|
|
9938
10049
|
UPDATE public.logistics_tasks
|
|
9939
10050
|
SET status = 'failed', error = p_error, claimed_by = NULL, claimed_at = NULL, updated_at = now()
|
|
9940
10051
|
WHERE id = p_task_id AND user_id = auth.uid()
|
|
@@ -9958,6 +10069,7 @@ DECLARE
|
|
|
9958
10069
|
v_since timestamptz := (SELECT departure_rule_since FROM public.logistics_time_settings ORDER BY updated_at DESC NULLS LAST LIMIT 1);
|
|
9959
10070
|
v_n integer := 0;
|
|
9960
10071
|
BEGIN
|
|
10072
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_fill_cart_departure');
|
|
9961
10073
|
IF v_since IS NULL THEN RETURN 0; END IF;
|
|
9962
10074
|
WITH carts AS (
|
|
9963
10075
|
SELECT c.id FROM public.order_carts c
|
|
@@ -10005,6 +10117,7 @@ DECLARE
|
|
|
10005
10117
|
v_nr text;
|
|
10006
10118
|
v_order_id uuid;
|
|
10007
10119
|
BEGIN
|
|
10120
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_fix_wrong_shipping_notes');
|
|
10008
10121
|
FOR r IN
|
|
10009
10122
|
SELECT j.id,
|
|
10010
10123
|
nullif(replace(j.idempotentie_sleutel, 'verzendbrief-bij-pakbon:', ''), '') AS slip_txt,
|
|
@@ -10055,6 +10168,7 @@ DO $fsdo$ BEGIN
|
|
|
10055
10168
|
STABLE SECURITY DEFINER
|
|
10056
10169
|
SET search_path TO 'public'
|
|
10057
10170
|
AS $function$
|
|
10171
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_cart_plan');
|
|
10058
10172
|
WITH so AS (
|
|
10059
10173
|
SELECT o.floriday_sales_order_id::text AS sid FROM public.orders o WHERE o.id = p_order_id
|
|
10060
10174
|
), lc AS (
|
|
@@ -10086,6 +10200,7 @@ DO $fsdo$ BEGIN
|
|
|
10086
10200
|
SET search_path TO 'public'
|
|
10087
10201
|
AS $function$
|
|
10088
10202
|
BEGIN
|
|
10203
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_floriday_claim_pushes');
|
|
10089
10204
|
RETURN QUERY
|
|
10090
10205
|
WITH due AS (
|
|
10091
10206
|
SELECT p.id
|
|
@@ -10141,6 +10256,7 @@ DO $fsdo$ BEGIN
|
|
|
10141
10256
|
SECURITY DEFINER
|
|
10142
10257
|
SET search_path TO 'public'
|
|
10143
10258
|
AS $function$
|
|
10259
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_finish_push');
|
|
10144
10260
|
SELECT public.logistics_floriday_finish_push_v2(
|
|
10145
10261
|
_id, _revision, _ok, _error, _fulfillment_order_id, _sent_hash,
|
|
10146
10262
|
_permanent, _max_attempts, _max_age_hours, NULL, NULL, NULL
|
|
@@ -10158,6 +10274,7 @@ DO $fsdo$ BEGIN
|
|
|
10158
10274
|
SECURITY DEFINER
|
|
10159
10275
|
SET search_path TO 'public'
|
|
10160
10276
|
AS $function$
|
|
10277
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_finish_push_v2');
|
|
10161
10278
|
SELECT public.logistics_floriday_finish_push_v3(
|
|
10162
10279
|
_id, _revision,
|
|
10163
10280
|
CASE WHEN _ok THEN 'ok' ELSE 'error' END,
|
|
@@ -10189,6 +10306,7 @@ DECLARE
|
|
|
10189
10306
|
_age_limit integer;
|
|
10190
10307
|
_is_wait boolean;
|
|
10191
10308
|
BEGIN
|
|
10309
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_floriday_finish_push_v3');
|
|
10192
10310
|
SELECT * INTO _row FROM public.logistics_floriday_pushes WHERE id = _id FOR UPDATE;
|
|
10193
10311
|
IF NOT FOUND THEN
|
|
10194
10312
|
RETURN 'missing';
|
|
@@ -10398,6 +10516,7 @@ DO $fsdo$ BEGIN
|
|
|
10398
10516
|
AS $function$
|
|
10399
10517
|
DECLARE v jsonb;
|
|
10400
10518
|
BEGIN
|
|
10519
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_floriday_is_read_only');
|
|
10401
10520
|
BEGIN
|
|
10402
10521
|
v := public.floriday_write_mode();
|
|
10403
10522
|
EXCEPTION WHEN OTHERS THEN
|
|
@@ -10420,6 +10539,7 @@ DO $fsdo$ BEGIN
|
|
|
10420
10539
|
AS $function$
|
|
10421
10540
|
DECLARE v_count int; v_std int; v_id uuid;
|
|
10422
10541
|
BEGIN
|
|
10542
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_floriday_layout_id');
|
|
10423
10543
|
SELECT count(*), count(*) FILTER (WHERE is_standaard IS TRUE)
|
|
10424
10544
|
INTO v_count, v_std
|
|
10425
10545
|
FROM public.document_layouts
|
|
@@ -10453,6 +10573,7 @@ DO $fsdo$ BEGIN
|
|
|
10453
10573
|
SECURITY DEFINER
|
|
10454
10574
|
SET search_path TO 'public'
|
|
10455
10575
|
AS $function$
|
|
10576
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_log_refusal');
|
|
10456
10577
|
INSERT INTO public.logistics_floriday_push_refusals (order_ref, reason, source_module, source_shell, action)
|
|
10457
10578
|
VALUES (COALESCE(NULLIF(btrim(_order_ref), ''), 'onbekend'), _reason, _module, _shell, _action)
|
|
10458
10579
|
$function$
|
|
@@ -10468,6 +10589,7 @@ DO $fsdo$ BEGIN
|
|
|
10468
10589
|
SECURITY DEFINER
|
|
10469
10590
|
SET search_path TO 'public'
|
|
10470
10591
|
AS $function$
|
|
10592
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_log_send');
|
|
10471
10593
|
INSERT INTO public.logistics_floriday_status_sends (order_ref, action, ok, http_status, detail, source_module, source_shell)
|
|
10472
10594
|
VALUES (COALESCE(NULLIF(btrim(_order_ref), ''), 'onbekend'), _action, COALESCE(_ok,false), _http_status, _detail, _module, _shell)
|
|
10473
10595
|
$function$
|
|
@@ -10540,6 +10662,7 @@ DO $fsdo$ BEGIN
|
|
|
10540
10662
|
STABLE SECURITY DEFINER
|
|
10541
10663
|
SET search_path TO 'public'
|
|
10542
10664
|
AS $function$
|
|
10665
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_floriday_order_approved');
|
|
10543
10666
|
SELECT EXISTS (SELECT 1 FROM public.logistics_control_scan s WHERE s.approved_at IS NOT NULL AND s.order_number = _order_ref)
|
|
10544
10667
|
OR EXISTS (SELECT 1 FROM public.orders o
|
|
10545
10668
|
JOIN public.order_items oi ON oi.order_id = o.id
|
|
@@ -10562,6 +10685,7 @@ AS $function$
|
|
|
10562
10685
|
DECLARE
|
|
10563
10686
|
_n integer;
|
|
10564
10687
|
BEGIN
|
|
10688
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_floriday_prune_pushes');
|
|
10565
10689
|
DELETE FROM public.logistics_floriday_pushes
|
|
10566
10690
|
WHERE (
|
|
10567
10691
|
(status = 'sent' AND sent_at IS NOT NULL AND sent_at < now() - make_interval(days => GREATEST(_days, 1)))
|
|
@@ -10585,6 +10709,7 @@ DO $fsdo$ BEGIN
|
|
|
10585
10709
|
SET search_path TO 'public'
|
|
10586
10710
|
AS $function$
|
|
10587
10711
|
BEGIN
|
|
10712
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_floriday_push_hold_read_only');
|
|
10588
10713
|
UPDATE public.logistics_floriday_pushes
|
|
10589
10714
|
SET status = 'pending', locked_until = NULL, locked_by = NULL,
|
|
10590
10715
|
last_error = 'Tegengehouden: alleen lezen', last_error_code = 'alleen_lezen',
|
|
@@ -10608,6 +10733,7 @@ DECLARE
|
|
|
10608
10733
|
_id uuid;
|
|
10609
10734
|
_reason text;
|
|
10610
10735
|
BEGIN
|
|
10736
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_floriday_queue_push');
|
|
10611
10737
|
IF _order_ref IS NULL OR btrim(_order_ref) = '' THEN RETURN NULL; END IF;
|
|
10612
10738
|
|
|
10613
10739
|
IF NOT public.logistics_floriday_status_updates_enabled() THEN
|
|
@@ -10648,6 +10774,7 @@ DO $fsdo$ BEGIN
|
|
|
10648
10774
|
AS $function$
|
|
10649
10775
|
DECLARE v_p int := 0; v_s int := 0;
|
|
10650
10776
|
BEGIN
|
|
10777
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_floriday_release_read_only');
|
|
10651
10778
|
IF public.logistics_floriday_is_read_only() THEN
|
|
10652
10779
|
RETURN jsonb_build_object('readOnly', true, 'pushes', 0, 'shippingNotes', 0);
|
|
10653
10780
|
END IF;
|
|
@@ -10733,6 +10860,7 @@ DO $fsdo$ BEGIN
|
|
|
10733
10860
|
STABLE SECURITY DEFINER
|
|
10734
10861
|
SET search_path TO 'public'
|
|
10735
10862
|
AS $function$
|
|
10863
|
+
SELECT public.logistics_acc_guard('server', 'logistics_frozen_allocation_scaled');
|
|
10736
10864
|
WITH a AS (
|
|
10737
10865
|
SELECT a.trade_item_key, a.source, a.group_id, a.qty AS old_qty,
|
|
10738
10866
|
CASE WHEN COALESCE(a.line_qty, 0) > 0 THEN a.qty * GREATEST(COALESCE(p_new_qty, 0), 0) / a.line_qty ELSE a.qty END AS raw
|
|
@@ -10766,6 +10894,7 @@ DECLARE
|
|
|
10766
10894
|
v_reason text; v_hard boolean; v_delivered integer := 0; v_cancelled integer := 0;
|
|
10767
10895
|
v_open integer := 0; v_reasons jsonb := '[]'::jsonb;
|
|
10768
10896
|
BEGIN
|
|
10897
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_fulfill_barcode_requests');
|
|
10769
10898
|
FOR r IN
|
|
10770
10899
|
SELECT v.print_job_id, v.cart_id::text AS cart_id, v.cart_index, v.order_ref, v.order_nummer,
|
|
10771
10900
|
j.id AS job_id, j.payload
|
|
@@ -10881,6 +11010,7 @@ DO $fsdo$ BEGIN
|
|
|
10881
11010
|
STABLE SECURITY DEFINER
|
|
10882
11011
|
SET search_path TO 'public'
|
|
10883
11012
|
AS $function$
|
|
11013
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_full_cart_min_layers');
|
|
10884
11014
|
SELECT NULLIF(GREATEST(0, COALESCE(
|
|
10885
11015
|
(SELECT public.logistics_rule_num(settings, 'karrenindeling', 'full_cart_min_layers', NULL)
|
|
10886
11016
|
FROM public.logistics_rule_configs
|
|
@@ -10899,6 +11029,7 @@ DO $fsdo$ BEGIN
|
|
|
10899
11029
|
STABLE SECURITY DEFINER
|
|
10900
11030
|
SET search_path TO 'public'
|
|
10901
11031
|
AS $function$
|
|
11032
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_full_cart_min_percentage');
|
|
10902
11033
|
SELECT NULLIF(GREATEST(0, COALESCE(
|
|
10903
11034
|
(SELECT public.logistics_rule_num(settings, 'karrenindeling', 'full_cart_min_percentage', NULL)
|
|
10904
11035
|
FROM public.logistics_rule_configs
|
|
@@ -11020,6 +11151,7 @@ DO $fsdo$ BEGIN
|
|
|
11020
11151
|
STABLE SECURITY DEFINER
|
|
11021
11152
|
SET search_path TO 'public'
|
|
11022
11153
|
AS $function$
|
|
11154
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_is_beheer');
|
|
11023
11155
|
SELECT auth.uid() IS NOT NULL AND (
|
|
11024
11156
|
public.has_role(auth.uid(), 'admin') OR public.has_role(auth.uid(), 'superadmin')
|
|
11025
11157
|
OR public.has_role(auth.uid(), 'developer'))
|
|
@@ -11059,6 +11191,7 @@ DO $fsdo$ BEGIN
|
|
|
11059
11191
|
AS $function$
|
|
11060
11192
|
DECLARE v text := btrim(COALESCE(p_label, '')); j jsonb;
|
|
11061
11193
|
BEGIN
|
|
11194
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_is_group_label');
|
|
11062
11195
|
IF left(v, 1) = '{' THEN
|
|
11063
11196
|
BEGIN j := v::jsonb; v := COALESCE(j->>'nl', j->>'en', j->>'value', v);
|
|
11064
11197
|
EXCEPTION WHEN others THEN NULL; END;
|
|
@@ -11113,6 +11246,7 @@ DO $fsdo$ BEGIN
|
|
|
11113
11246
|
STABLE SECURITY DEFINER
|
|
11114
11247
|
SET search_path TO 'public'
|
|
11115
11248
|
AS $function$
|
|
11249
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_item_external_fulfilled');
|
|
11116
11250
|
SELECT EXISTS (SELECT 1 FROM public.logistics_external_fulfillment x
|
|
11117
11251
|
WHERE x.order_id = p_order_id
|
|
11118
11252
|
AND (x.full_fulfilled OR lower(btrim(coalesce(p_source_line_key,''))) = ANY (x.sales_order_ids)));
|
|
@@ -11149,6 +11283,7 @@ DO $fsdo$ BEGIN
|
|
|
11149
11283
|
STABLE SECURITY DEFINER
|
|
11150
11284
|
SET search_path TO 'public'
|
|
11151
11285
|
AS $function$
|
|
11286
|
+
SELECT public.logistics_acc_guard('server', 'logistics_key_product');
|
|
11152
11287
|
SELECT p.id FROM public.products p
|
|
11153
11288
|
WHERE p.floriday_trade_item_id::text = p_key OR p.id::text = p_key
|
|
11154
11289
|
OR p.trade_item_key = p_key OR ('product:' || p.id::text) = p_key
|
|
@@ -11167,6 +11302,7 @@ DO $fsdo$ BEGIN
|
|
|
11167
11302
|
STABLE SECURITY DEFINER
|
|
11168
11303
|
SET search_path TO 'public'
|
|
11169
11304
|
AS $function$
|
|
11305
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_layout_method_status');
|
|
11170
11306
|
SELECT jsonb_build_object(
|
|
11171
11307
|
'methode', public.logistics_active_layout_method(),
|
|
11172
11308
|
'actieveWerkwijze', (SELECT name FROM public.logistics_rule_configs WHERE is_active ORDER BY updated_at DESC LIMIT 1),
|
|
@@ -11190,6 +11326,7 @@ DO $fsdo$ BEGIN
|
|
|
11190
11326
|
AS $function$
|
|
11191
11327
|
DECLARE v_linked int := 0; v_orders int := 0; r record;
|
|
11192
11328
|
BEGIN
|
|
11329
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_link_order_items');
|
|
11193
11330
|
WITH kandidaten AS (
|
|
11194
11331
|
SELECT oi.id, oi.order_id, public.logistics_resolve_product_id(oi.product_name::text) AS pid
|
|
11195
11332
|
FROM logistics_active.order_items oi
|
|
@@ -11269,6 +11406,7 @@ DO $fsdo$ BEGIN
|
|
|
11269
11406
|
STABLE SECURITY DEFINER
|
|
11270
11407
|
SET search_path TO 'public'
|
|
11271
11408
|
AS $function$
|
|
11409
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_local_hhmi');
|
|
11272
11410
|
SELECT CASE WHEN p_ts IS NULL THEN NULL
|
|
11273
11411
|
WHEN public.logistics_tz() IS NULL THEN to_char(p_ts AT TIME ZONE 'UTC', 'HH24:MI') || ' UTC (tijdzone ontbreekt bij Werktijden)'
|
|
11274
11412
|
ELSE to_char(p_ts AT TIME ZONE public.logistics_tz(), 'HH24:MI') END
|
|
@@ -11287,6 +11425,7 @@ DO $fsdo$ BEGIN
|
|
|
11287
11425
|
AS $function$
|
|
11288
11426
|
DECLARE v_tz text := public.logistics_tz();
|
|
11289
11427
|
BEGIN
|
|
11428
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_local_today');
|
|
11290
11429
|
IF v_tz IS NULL THEN
|
|
11291
11430
|
RAISE EXCEPTION 'De tijdzone van de vestiging ontbreekt. Stel die in bij Werktijden.' USING ERRCODE = 'P0001';
|
|
11292
11431
|
END IF;
|
|
@@ -11308,6 +11447,7 @@ DECLARE v_cart public.order_carts; v_src text; v_orders uuid[]; v_o uuid; v_k uu
|
|
|
11308
11447
|
v_was boolean; v_klaar jsonb := '[]'::jsonb; v_wacht jsonb := '[]'::jsonb; v_seq int; v_num text;
|
|
11309
11448
|
v_huidig int[]; v_ordnr text; r record;
|
|
11310
11449
|
BEGIN
|
|
11450
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_mark_cart_delivered_core');
|
|
11311
11451
|
IF p_cart_id IS NULL THEN RETURN jsonb_build_object('ok', false, 'reden', 'geen_kar'); END IF;
|
|
11312
11452
|
PERFORM pg_advisory_xact_lock(hashtextextended('afmelden:' || p_cart_id::text, 0));
|
|
11313
11453
|
SELECT * INTO v_cart FROM logistics_active.order_carts WHERE id = p_cart_id;
|
|
@@ -11400,6 +11540,7 @@ DECLARE
|
|
|
11400
11540
|
v_reason text;
|
|
11401
11541
|
i int := 0;
|
|
11402
11542
|
BEGIN
|
|
11543
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_merge_decision');
|
|
11403
11544
|
IF jsonb_typeof(v_lines) <> 'array' THEN
|
|
11404
11545
|
RAISE EXCEPTION 'p_lines moet een JSON-array zijn';
|
|
11405
11546
|
END IF;
|
|
@@ -11503,6 +11644,7 @@ DECLARE
|
|
|
11503
11644
|
v_moved int; v_logged int; v_total int := 0; v_count int := 0;
|
|
11504
11645
|
v_lines text[] := ARRAY[]::text[];
|
|
11505
11646
|
BEGIN
|
|
11647
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_merge_floriday_lines');
|
|
11506
11648
|
IF p_order_id IS NULL THEN RETURN p_order_id; END IF;
|
|
11507
11649
|
IF NOT public.logistics_merge_lines_enabled() THEN RETURN p_order_id; END IF;
|
|
11508
11650
|
IF NOT public.logistics_order_mergeable(p_order_id) THEN RETURN p_order_id; END IF;
|
|
@@ -11593,6 +11735,7 @@ DO $fsdo$ BEGIN
|
|
|
11593
11735
|
AS $function$
|
|
11594
11736
|
DECLARE v jsonb;
|
|
11595
11737
|
BEGIN
|
|
11738
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_merge_lines_enabled');
|
|
11596
11739
|
SELECT c.settings->'order_verwerking'->'fields'->'floriday_merge_lines' INTO v
|
|
11597
11740
|
FROM public.logistics_rule_configs c WHERE c.is_active ORDER BY c.updated_at DESC LIMIT 1;
|
|
11598
11741
|
RETURN v IS NOT NULL AND jsonb_typeof(v) = 'boolean' AND v = 'true'::jsonb;
|
|
@@ -11613,6 +11756,7 @@ DO $fsdo$ BEGIN
|
|
|
11613
11756
|
AS $function$
|
|
11614
11757
|
declare r record; v_count integer := 0;
|
|
11615
11758
|
begin
|
|
11759
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_merge_partial_carts');
|
|
11616
11760
|
if coalesce(public.logistics_pick_mode()->>'pickMode','') <> 'cart' then
|
|
11617
11761
|
return jsonb_build_object('overgeslagen', 'pickmethode is niet per kar');
|
|
11618
11762
|
end if;
|
|
@@ -11741,6 +11885,7 @@ DO $fsdo$ BEGIN
|
|
|
11741
11885
|
AS $function$
|
|
11742
11886
|
DECLARE v text; v_json jsonb;
|
|
11743
11887
|
BEGIN
|
|
11888
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_normalize_product_label');
|
|
11744
11889
|
v := btrim(COALESCE(p_label, ''));
|
|
11745
11890
|
IF v = '' THEN RETURN NULL; END IF;
|
|
11746
11891
|
IF left(v, 1) = '{' THEN
|
|
@@ -11779,7 +11924,8 @@ DO $fsdo$ BEGIN
|
|
|
11779
11924
|
LANGUAGE sql
|
|
11780
11925
|
STABLE SECURITY DEFINER
|
|
11781
11926
|
SET search_path TO 'public'
|
|
11782
|
-
AS $function$
|
|
11927
|
+
AS $function$
|
|
11928
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_opening_timezone'); SELECT NULLIF(btrim(timezone), '') FROM public.logistics_time_settings WHERE id LIMIT 1; $function$
|
|
11783
11929
|
$fsdef$;
|
|
11784
11930
|
EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR invalid_schema_name THEN
|
|
11785
11931
|
RAISE NOTICE 'logistiek-engine: functie public.logistics_opening_timezone overgeslagen (onderdeel van andere module ontbreekt): %', SQLERRM;
|
|
@@ -11792,6 +11938,7 @@ DO $fsdo$ BEGIN
|
|
|
11792
11938
|
STABLE SECURITY DEFINER
|
|
11793
11939
|
SET search_path TO 'public'
|
|
11794
11940
|
AS $function$
|
|
11941
|
+
SELECT public.logistics_acc_guard('server', 'logistics_order_afgemeld');
|
|
11795
11942
|
SELECT p_order_id IS NOT NULL AND (
|
|
11796
11943
|
EXISTS (SELECT 1 FROM public.orders o WHERE o.id = p_order_id
|
|
11797
11944
|
AND lower(btrim(coalesce(o.status, ''))) IN ('verzonden','gereed voor facturatie','afgerond','klaar voor verzending'))
|
|
@@ -11815,6 +11962,7 @@ DO $fsdo$ BEGIN
|
|
|
11815
11962
|
STABLE SECURITY DEFINER
|
|
11816
11963
|
SET search_path TO 'public'
|
|
11817
11964
|
AS $function$
|
|
11965
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_all_carts_scanned');
|
|
11818
11966
|
SELECT cardinality(k) > 0 AND NOT EXISTS (SELECT 1 FROM unnest(k) cid WHERE NOT public.logistics_cart_scanned(cid))
|
|
11819
11967
|
FROM (SELECT public.logistics_order_cart_ids(p_order_id) AS k) s
|
|
11820
11968
|
$function$
|
|
@@ -11830,6 +11978,7 @@ DO $fsdo$ BEGIN
|
|
|
11830
11978
|
STABLE SECURITY DEFINER
|
|
11831
11979
|
SET search_path TO 'public'
|
|
11832
11980
|
AS $function$
|
|
11981
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_backlog_info');
|
|
11833
11982
|
SELECT jsonb_build_object('achterstand', true, 'leverdatum', (o.delivery_date::text)::date,
|
|
11834
11983
|
'dagen', (now() AT TIME ZONE public.logistics_tz())::date - (o.delivery_date::text)::date)
|
|
11835
11984
|
FROM public.orders o
|
|
@@ -11854,6 +12003,7 @@ DO $fsdo$ BEGIN
|
|
|
11854
12003
|
STABLE SECURITY DEFINER
|
|
11855
12004
|
SET search_path TO 'public'
|
|
11856
12005
|
AS $function$
|
|
12006
|
+
SELECT public.logistics_acc_guard('server', 'logistics_order_buffer_excluded');
|
|
11857
12007
|
SELECT EXISTS (SELECT 1 FROM public.logistics_order_plan_exclusion x WHERE x.order_id = p_order_id)
|
|
11858
12008
|
OR public.logistics_order_afgemeld(p_order_id)
|
|
11859
12009
|
$function$
|
|
@@ -11870,6 +12020,7 @@ DO $fsdo$ BEGIN
|
|
|
11870
12020
|
STABLE SECURITY DEFINER
|
|
11871
12021
|
SET search_path TO 'public'
|
|
11872
12022
|
AS $function$
|
|
12023
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_cart_approval');
|
|
11873
12024
|
WITH o AS (
|
|
11874
12025
|
SELECT id FROM public.orders
|
|
11875
12026
|
WHERE order_number = _order_ref AND deleted_at IS NULL
|
|
@@ -11935,6 +12086,7 @@ DO $fsdo$ BEGIN
|
|
|
11935
12086
|
STABLE SECURITY DEFINER
|
|
11936
12087
|
SET search_path TO 'public'
|
|
11937
12088
|
AS $function$
|
|
12089
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_cart_ids');
|
|
11938
12090
|
SELECT coalesce(array_agg(DISTINCT k.cid) FILTER (WHERE k.cid IS NOT NULL), '{}') FROM (
|
|
11939
12091
|
SELECT c.id AS cid FROM logistics_active.order_carts c WHERE c.order_id = p_order_id
|
|
11940
12092
|
UNION SELECT ci.cart_id FROM logistics_active.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
@@ -11956,6 +12108,7 @@ AS $function$
|
|
|
11956
12108
|
DECLARE v_number text; v_ok boolean; v_wacht jsonb; v_fp text;
|
|
11957
12109
|
v_reason text := COALESCE(NULLIF(btrim(p_reason), ''), 'wijziging');
|
|
11958
12110
|
BEGIN
|
|
12111
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_changed');
|
|
11959
12112
|
IF p_order_id IS NULL THEN RETURN; END IF;
|
|
11960
12113
|
IF COALESCE(current_setting('logistics.replanning', true), '') = '1' THEN RETURN; END IF;
|
|
11961
12114
|
v_fp := public.logistics_order_fp(p_order_id);
|
|
@@ -12021,6 +12174,7 @@ DECLARE
|
|
|
12021
12174
|
v_out text[] := '{}';
|
|
12022
12175
|
v_num text;
|
|
12023
12176
|
BEGIN
|
|
12177
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_order_current_warnings');
|
|
12024
12178
|
IF p_order_id IS NULL THEN RETURN v_out; END IF;
|
|
12025
12179
|
|
|
12026
12180
|
IF public.logistics_allocation_frozen(p_order_id) THEN
|
|
@@ -12062,6 +12216,7 @@ DO $fsdo$ BEGIN
|
|
|
12062
12216
|
AS $function$
|
|
12063
12217
|
DECLARE r record; v_max int := COALESCE(public.logistics_plan_setting('max_attempts', 5)::int, 5);
|
|
12064
12218
|
BEGIN
|
|
12219
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_definitively_blocked');
|
|
12065
12220
|
IF auth.uid() IS NULL AND auth.role() <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
12066
12221
|
SELECT q.status, q.attempts, q.reason_code, q.reason, q.error INTO r
|
|
12067
12222
|
FROM public.logistics_plan_queue q WHERE q.order_id = p_order_id
|
|
@@ -12086,6 +12241,7 @@ DO $fsdo$ BEGIN
|
|
|
12086
12241
|
AS $function$
|
|
12087
12242
|
DECLARE v_id uuid; d jsonb;
|
|
12088
12243
|
BEGIN
|
|
12244
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_departure_list');
|
|
12089
12245
|
IF p_order_ids IS NULL THEN RETURN; END IF;
|
|
12090
12246
|
IF array_length(p_order_ids, 1) > 1000 THEN
|
|
12091
12247
|
RAISE EXCEPTION 'Maximaal 1000 orders per aanvraag.';
|
|
@@ -12129,6 +12285,7 @@ DECLARE
|
|
|
12129
12285
|
v_stickers_zonder_pdf integer := 0;
|
|
12130
12286
|
v_note_ok boolean := false;
|
|
12131
12287
|
BEGIN
|
|
12288
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_documents_ready');
|
|
12132
12289
|
IF coalesce(btrim(p_order_ref), '') = '' THEN
|
|
12133
12290
|
RETURN jsonb_build_object('klaar', false, 'reden', 'Geen ordernummer opgegeven.');
|
|
12134
12291
|
END IF;
|
|
@@ -12230,6 +12387,7 @@ DO $fsdo$ BEGIN
|
|
|
12230
12387
|
STABLE SECURITY DEFINER
|
|
12231
12388
|
SET search_path TO 'public'
|
|
12232
12389
|
AS $function$
|
|
12390
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_documents_ready_bool');
|
|
12233
12391
|
SELECT coalesce((public.logistics_order_documents_ready(p_order_ref) ->> 'klaar')::boolean, false);
|
|
12234
12392
|
$function$
|
|
12235
12393
|
$fsdef$;
|
|
@@ -12244,6 +12402,7 @@ DO $fsdo$ BEGIN
|
|
|
12244
12402
|
STABLE SECURITY DEFINER
|
|
12245
12403
|
SET search_path TO 'public'
|
|
12246
12404
|
AS $function$
|
|
12405
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_external_state');
|
|
12247
12406
|
SELECT jsonb_build_object('full', x.full_fulfilled, 'salesOrderIds', to_jsonb(x.sales_order_ids),
|
|
12248
12407
|
'reason', x.reason, 'appliedAt', x.applied_at, 'eventId', x.event_id)
|
|
12249
12408
|
FROM public.logistics_external_fulfillment x WHERE x.order_id = p_order_id;
|
|
@@ -12261,6 +12420,7 @@ DO $fsdo$ BEGIN
|
|
|
12261
12420
|
SET search_path TO 'public'
|
|
12262
12421
|
AS $function$
|
|
12263
12422
|
BEGIN
|
|
12423
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_enqueue');
|
|
12264
12424
|
IF p_order_id IS NULL THEN
|
|
12265
12425
|
RETURN;
|
|
12266
12426
|
END IF;
|
|
@@ -12296,6 +12456,7 @@ DO $fsdo$ BEGIN
|
|
|
12296
12456
|
STABLE SECURITY DEFINER
|
|
12297
12457
|
SET search_path TO 'public'
|
|
12298
12458
|
AS $function$
|
|
12459
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_overview');
|
|
12299
12460
|
SELECT
|
|
12300
12461
|
count(*) FILTER (WHERE status = 'pending')::int,
|
|
12301
12462
|
count(*) FILTER (WHERE status = 'running')::int,
|
|
@@ -12326,6 +12487,7 @@ AS $function$
|
|
|
12326
12487
|
DECLARE
|
|
12327
12488
|
v_count integer := 0;
|
|
12328
12489
|
BEGIN
|
|
12490
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_prune');
|
|
12329
12491
|
WITH weg AS (
|
|
12330
12492
|
DELETE FROM public.logistics_order_finalize_queue q
|
|
12331
12493
|
WHERE (q.status = 'done'
|
|
@@ -12354,6 +12516,7 @@ DECLARE
|
|
|
12354
12516
|
r record;
|
|
12355
12517
|
v_count integer := 0;
|
|
12356
12518
|
BEGIN
|
|
12519
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_reconcile');
|
|
12357
12520
|
FOR r IN
|
|
12358
12521
|
WITH kandidaat AS (
|
|
12359
12522
|
SELECT o.id,
|
|
@@ -12400,6 +12563,7 @@ DO $fsdo$ BEGIN
|
|
|
12400
12563
|
SET search_path TO 'public'
|
|
12401
12564
|
AS $function$
|
|
12402
12565
|
BEGIN
|
|
12566
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_retry');
|
|
12403
12567
|
IF auth.uid() IS NULL THEN
|
|
12404
12568
|
RAISE EXCEPTION 'niet ingelogd';
|
|
12405
12569
|
END IF;
|
|
@@ -12431,6 +12595,7 @@ DO $fsdo$ BEGIN
|
|
|
12431
12595
|
AS $function$
|
|
12432
12596
|
DECLARE r record; v_done integer := 0;
|
|
12433
12597
|
BEGIN
|
|
12598
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_finalize_run');
|
|
12434
12599
|
IF NOT EXISTS (SELECT 1 FROM public.logistics_order_finalize_queue q WHERE q.status IN ('pending', 'running')) THEN RETURN 0; END IF;
|
|
12435
12600
|
FOR r IN
|
|
12436
12601
|
WITH kandidaat AS (
|
|
@@ -12483,6 +12648,7 @@ DO $fsdo$ BEGIN
|
|
|
12483
12648
|
STABLE SECURITY DEFINER
|
|
12484
12649
|
SET search_path TO 'public'
|
|
12485
12650
|
AS $function$
|
|
12651
|
+
SELECT public.logistics_acc_guard('server', 'logistics_order_fp');
|
|
12486
12652
|
SELECT md5(concat_ws('|', o.status, o.delivery_date, o.customer_id, o.buffer_id, o.deleted_at, o.is_reservation,
|
|
12487
12653
|
o.plan_locked_at, o.custom_fields::text))
|
|
12488
12654
|
FROM public.orders o WHERE o.id = p_order_id
|
|
@@ -12501,6 +12667,7 @@ DO $fsdo$ BEGIN
|
|
|
12501
12667
|
AS $function$
|
|
12502
12668
|
DECLARE v_number text;
|
|
12503
12669
|
BEGIN
|
|
12670
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_frozen');
|
|
12504
12671
|
SELECT o.order_number INTO v_number FROM public.orders o WHERE o.id = p_order_id;
|
|
12505
12672
|
IF v_number IS NULL THEN RETURN false; END IF;
|
|
12506
12673
|
IF EXISTS (SELECT 1 FROM public.logistics_order_plan_exclusion x WHERE x.order_id = p_order_id) THEN RETURN true; END IF;
|
|
@@ -12523,6 +12690,7 @@ DO $fsdo$ BEGIN
|
|
|
12523
12690
|
STABLE SECURITY DEFINER
|
|
12524
12691
|
SET search_path TO 'public'
|
|
12525
12692
|
AS $function$
|
|
12693
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_handled');
|
|
12526
12694
|
WITH karren AS (SELECT DISTINCT oc.cart_number AS cart_index FROM logistics_active.order_carts oc WHERE oc.order_id = p_order_uuid),
|
|
12527
12695
|
gedeeld AS (
|
|
12528
12696
|
SELECT DISTINCT ci.cart_id FROM logistics_active.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
@@ -12556,6 +12724,7 @@ DO $fsdo$ BEGIN
|
|
|
12556
12724
|
AS $function$
|
|
12557
12725
|
DECLARE r record;
|
|
12558
12726
|
BEGIN
|
|
12727
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_is_archived');
|
|
12559
12728
|
IF auth.uid() IS NULL AND auth.role() <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
12560
12729
|
SELECT q.status, q.updated_at, COALESCE(q.error, q.reason) AS reden INTO r
|
|
12561
12730
|
FROM public.logistics_plan_queue q WHERE q.order_id = p_order_id ORDER BY q.updated_at DESC LIMIT 1;
|
|
@@ -12578,6 +12747,7 @@ DO $fsdo$ BEGIN
|
|
|
12578
12747
|
AS $function$
|
|
12579
12748
|
DECLARE v_max integer := public.logistics_pick_backlog_max_days(); v_info jsonb; v_ref text;
|
|
12580
12749
|
BEGIN
|
|
12750
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_is_backlog');
|
|
12581
12751
|
IF v_max IS NULL THEN RETURN false; END IF;
|
|
12582
12752
|
v_info := public.logistics_order_backlog_info(p_order_id);
|
|
12583
12753
|
IF v_info IS NULL OR (v_info->>'dagen')::int > v_max THEN RETURN false; END IF;
|
|
@@ -12597,6 +12767,7 @@ DO $fsdo$ BEGIN
|
|
|
12597
12767
|
STABLE SECURITY DEFINER
|
|
12598
12768
|
SET search_path TO 'public'
|
|
12599
12769
|
AS $function$
|
|
12770
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_is_frozen');
|
|
12600
12771
|
SELECT EXISTS (
|
|
12601
12772
|
SELECT 1 FROM public.pick_queue p
|
|
12602
12773
|
WHERE p.cancelled_at IS NULL
|
|
@@ -12644,6 +12815,7 @@ DO $fsdo$ BEGIN
|
|
|
12644
12815
|
STABLE SECURITY DEFINER
|
|
12645
12816
|
SET search_path TO 'public'
|
|
12646
12817
|
AS $function$
|
|
12818
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_is_topick');
|
|
12647
12819
|
SELECT EXISTS (
|
|
12648
12820
|
SELECT 1
|
|
12649
12821
|
FROM public.orders o
|
|
@@ -12711,6 +12883,7 @@ DECLARE
|
|
|
12711
12883
|
v_oi record; part record; member_rec record;
|
|
12712
12884
|
v_key text; v_last text; v_rem numeric; v_av numeric; v_take numeric; v_err text;
|
|
12713
12885
|
BEGIN
|
|
12886
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_order_line_allocation');
|
|
12714
12887
|
IF p_order_item_id IS NULL THEN RETURN; END IF;
|
|
12715
12888
|
|
|
12716
12889
|
IF EXISTS (SELECT 1 FROM public.logistics_double_group_lines(
|
|
@@ -12796,6 +12969,7 @@ DO $fsdo$ BEGIN
|
|
|
12796
12969
|
STABLE SECURITY DEFINER
|
|
12797
12970
|
SET search_path TO 'public'
|
|
12798
12971
|
AS $function$
|
|
12972
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_line_duplicates');
|
|
12799
12973
|
WITH groepen AS (
|
|
12800
12974
|
SELECT
|
|
12801
12975
|
count(*) AS aantal
|
|
@@ -12856,6 +13030,7 @@ AS $function$
|
|
|
12856
13030
|
DECLARE
|
|
12857
13031
|
v_ok boolean;
|
|
12858
13032
|
BEGIN
|
|
13033
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_mergeable');
|
|
12859
13034
|
SELECT (o.deleted_at IS NULL
|
|
12860
13035
|
AND o.cancelled_at IS NULL
|
|
12861
13036
|
AND o.plan_locked_at IS NULL
|
|
@@ -12888,6 +13063,7 @@ DO $fsdo$ BEGIN
|
|
|
12888
13063
|
STABLE SECURITY DEFINER
|
|
12889
13064
|
SET search_path TO 'public'
|
|
12890
13065
|
AS $function$
|
|
13066
|
+
SELECT public.logistics_acc_guard('server', 'logistics_order_on_frozen_shared_cart');
|
|
12891
13067
|
SELECT EXISTS (
|
|
12892
13068
|
SELECT 1 FROM public.logistics_shared_cart_peers(p_order_id) p
|
|
12893
13069
|
JOIN logistics_active.order_carts c ON c.id = p.cart_id
|
|
@@ -12912,6 +13088,7 @@ DO $fsdo$ BEGIN
|
|
|
12912
13088
|
STABLE SECURITY DEFINER
|
|
12913
13089
|
SET search_path TO 'public'
|
|
12914
13090
|
AS $function$
|
|
13091
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_overview');
|
|
12915
13092
|
WITH idx AS (
|
|
12916
13093
|
SELECT * FROM public.logistics_cart_index(
|
|
12917
13094
|
COALESCE(p_from, '1900-01-01'::date),
|
|
@@ -12956,6 +13133,7 @@ DO $fsdo$ BEGIN
|
|
|
12956
13133
|
STABLE SECURITY DEFINER
|
|
12957
13134
|
SET search_path TO 'public'
|
|
12958
13135
|
AS $function$
|
|
13136
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_pick_day');
|
|
12959
13137
|
SELECT COALESCE(
|
|
12960
13138
|
NULLIF(o.custom_fields ->> 'manual_pick_day', '')::date,
|
|
12961
13139
|
(SELECT min((lt.planned_start AT TIME ZONE public.logistics_tz())::date)
|
|
@@ -12983,6 +13161,7 @@ DO $fsdo$ BEGIN
|
|
|
12983
13161
|
AS $function$
|
|
12984
13162
|
DECLARE b jsonb := public.logistics_order_plan_coverage_v165(p_order_id); x jsonb := public.logistics_order_external_state(p_order_id);
|
|
12985
13163
|
BEGIN
|
|
13164
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_plan_coverage');
|
|
12986
13165
|
IF x IS NULL THEN RETURN b || jsonb_build_object('externalFulfilled', NULL); END IF;
|
|
12987
13166
|
IF (x->>'full')::boolean THEN
|
|
12988
13167
|
b := b || jsonb_build_object('state', 'afgehandeld_extern', 'label', 'Afgehandeld in Floriday',
|
|
@@ -13002,6 +13181,7 @@ DO $fsdo$ BEGIN
|
|
|
13002
13181
|
STABLE SECURITY DEFINER
|
|
13003
13182
|
SET search_path TO 'public'
|
|
13004
13183
|
AS $function$
|
|
13184
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_plan_coverage_list');
|
|
13005
13185
|
WITH b AS (SELECT * FROM public.logistics_order_plan_coverage_list_v152(p_order_ids)),
|
|
13006
13186
|
mem AS (
|
|
13007
13187
|
SELECT DISTINCT b.buffer_id AS buf, o.id AS oid FROM b
|
|
@@ -13038,6 +13218,7 @@ DO $fsdo$ BEGIN
|
|
|
13038
13218
|
SET search_path TO 'public'
|
|
13039
13219
|
AS $function$
|
|
13040
13220
|
BEGIN
|
|
13221
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_order_plan_coverage_list_v152');
|
|
13041
13222
|
IF p_order_ids IS NULL THEN RETURN; END IF;
|
|
13042
13223
|
IF cardinality(p_order_ids) > 1000 THEN
|
|
13043
13224
|
RAISE EXCEPTION 'Te veel orders in één aanroep (%); maximaal 1000.', cardinality(p_order_ids);
|
|
@@ -13108,6 +13289,7 @@ DECLARE
|
|
|
13108
13289
|
v_pick text; v_picked_at timestamptz; v_total int; v_done int; v_printed int;
|
|
13109
13290
|
v_ncarts int; v_nscanned int; v_scan_at timestamptz;
|
|
13110
13291
|
BEGIN
|
|
13292
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_order_plan_coverage_v165');
|
|
13111
13293
|
SELECT o.id, o.order_number, o.buffer_id INTO v_order FROM public.orders o WHERE o.id = p_order_id;
|
|
13112
13294
|
IF NOT FOUND THEN
|
|
13113
13295
|
RETURN jsonb_build_object('orderId', p_order_id, 'state', 'onbekend', 'reason', 'Order niet gevonden.');
|
|
@@ -13257,6 +13439,7 @@ DO $fsdo$ BEGIN
|
|
|
13257
13439
|
SET search_path TO 'public'
|
|
13258
13440
|
AS $function$
|
|
13259
13441
|
BEGIN
|
|
13442
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_orphan_carts_list');
|
|
13260
13443
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
13261
13444
|
RAISE EXCEPTION 'Alleen beheer mag de opruimlijst bekijken.';
|
|
13262
13445
|
END IF;
|
|
@@ -13290,6 +13473,7 @@ DO $fsdo$ BEGIN
|
|
|
13290
13473
|
STABLE SECURITY DEFINER
|
|
13291
13474
|
SET search_path TO 'public'
|
|
13292
13475
|
AS $function$
|
|
13476
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_orphan_carts_summary');
|
|
13293
13477
|
SELECT COALESCE(jsonb_agg(jsonb_build_object('reden', x.reden, 'aantal', x.n, 'oudste', x.oudste, 'nieuwste', x.nieuwste) ORDER BY x.n DESC), '[]'::jsonb)
|
|
13294
13478
|
FROM (
|
|
13295
13479
|
SELECT CASE
|
|
@@ -13318,6 +13502,7 @@ DO $fsdo$ BEGIN
|
|
|
13318
13502
|
AS $function$
|
|
13319
13503
|
DECLARE v_tz text := public.logistics_tz(); v_open time; v_closed boolean; v_at timestamptz;
|
|
13320
13504
|
BEGIN
|
|
13505
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_own_transport_departure');
|
|
13321
13506
|
IF v_tz IS NULL THEN
|
|
13322
13507
|
RETURN jsonb_build_object('ok', false, 'ownTransport', true, 'reason', 'De tijdzone van de vestiging ontbreekt. Stel die in bij Werktijden.');
|
|
13323
13508
|
END IF;
|
|
@@ -13364,6 +13549,7 @@ DECLARE
|
|
|
13364
13549
|
v_order record;
|
|
13365
13550
|
v_locked timestamptz;
|
|
13366
13551
|
BEGIN
|
|
13552
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_block_reason');
|
|
13367
13553
|
SELECT o.status, o.plan_locked_at, o.deleted_at, o.is_reservation
|
|
13368
13554
|
INTO v_order
|
|
13369
13555
|
FROM public.orders o
|
|
@@ -13442,6 +13628,7 @@ DO $fsdo$ BEGIN
|
|
|
13442
13628
|
SET search_path TO 'public'
|
|
13443
13629
|
AS $function$
|
|
13444
13630
|
BEGIN
|
|
13631
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_dismiss');
|
|
13445
13632
|
IF auth.uid() IS NULL THEN
|
|
13446
13633
|
RAISE EXCEPTION 'niet ingelogd';
|
|
13447
13634
|
END IF;
|
|
@@ -13467,6 +13654,7 @@ DO $fsdo$ BEGIN
|
|
|
13467
13654
|
STABLE SECURITY DEFINER
|
|
13468
13655
|
SET search_path TO 'public'
|
|
13469
13656
|
AS $function$
|
|
13657
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_packing_overview');
|
|
13470
13658
|
SELECT
|
|
13471
13659
|
count(*) FILTER (WHERE resolved_at IS NULL)::int,
|
|
13472
13660
|
count(*) FILTER (WHERE resolved_at IS NULL AND needs_human)::int,
|
|
@@ -13496,6 +13684,7 @@ DECLARE
|
|
|
13496
13684
|
v_open integer;
|
|
13497
13685
|
v_fix integer;
|
|
13498
13686
|
BEGIN
|
|
13687
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_reconcile');
|
|
13499
13688
|
v_open := public.logistics_packing_scan(p_scan_limit);
|
|
13500
13689
|
v_fix := public.logistics_packing_autofix(p_fix_limit);
|
|
13501
13690
|
|
|
@@ -13522,6 +13711,7 @@ AS $function$
|
|
|
13522
13711
|
DECLARE
|
|
13523
13712
|
v_open integer := 0;
|
|
13524
13713
|
BEGIN
|
|
13714
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_scan');
|
|
13525
13715
|
CREATE TEMP TABLE _pack_diff ON COMMIT DROP AS
|
|
13526
13716
|
SELECT * FROM public.logistics_packing_diff
|
|
13527
13717
|
LIMIT GREATEST(1, LEAST(p_limit, 5000));
|
|
@@ -13589,6 +13779,7 @@ DO $fsdo$ BEGIN
|
|
|
13589
13779
|
SET search_path TO 'public'
|
|
13590
13780
|
AS $function$
|
|
13591
13781
|
BEGIN
|
|
13782
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_set_manual');
|
|
13592
13783
|
IF auth.uid() IS NULL THEN
|
|
13593
13784
|
RAISE EXCEPTION 'niet ingelogd';
|
|
13594
13785
|
END IF;
|
|
@@ -13613,6 +13804,7 @@ DO $fsdo$ BEGIN
|
|
|
13613
13804
|
STABLE SECURITY DEFINER
|
|
13614
13805
|
SET search_path TO 'public'
|
|
13615
13806
|
AS $function$
|
|
13807
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_pakbon_old_order_row');
|
|
13616
13808
|
SELECT p_ids IS NOT NULL AND cardinality(p_ids) > 0 AND EXISTS (
|
|
13617
13809
|
SELECT 1 FROM public.pick_queue q
|
|
13618
13810
|
JOIN public.pick_document_types t ON t.id = q.document_type_id AND t.code = 'pakbon'
|
|
@@ -13635,6 +13827,7 @@ DO $fsdo$ BEGIN
|
|
|
13635
13827
|
STABLE SECURITY DEFINER
|
|
13636
13828
|
SET search_path TO 'public'
|
|
13637
13829
|
AS $function$
|
|
13830
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_pakbon_oude_orderregels');
|
|
13638
13831
|
WITH oud AS (
|
|
13639
13832
|
SELECT q.id, q.document_number, (q.printed_at IS NOT NULL OR q.completed_at IS NOT NULL) AS afgehandeld,
|
|
13640
13833
|
array_agg(DISTINCT o.id) AS ids
|
|
@@ -13684,6 +13877,7 @@ DECLARE
|
|
|
13684
13877
|
v_date date;
|
|
13685
13878
|
v_time time;
|
|
13686
13879
|
BEGIN
|
|
13880
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_parse_pickup');
|
|
13687
13881
|
IF p_value IS NULL OR btrim(p_value) = '' THEN RETURN NULL; END IF;
|
|
13688
13882
|
v_parts := string_to_array(p_value, '|');
|
|
13689
13883
|
BEGIN
|
|
@@ -13715,6 +13909,7 @@ DO $fsdo$ BEGIN
|
|
|
13715
13909
|
AS $function$
|
|
13716
13910
|
DECLARE s jsonb; v text;
|
|
13717
13911
|
BEGIN
|
|
13912
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_partial_wait_minutes');
|
|
13718
13913
|
SELECT settings INTO s FROM public.logistics_rule_configs ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC LIMIT 1;
|
|
13719
13914
|
v := CASE WHEN s IS NULL THEN NULL ELSE public.logistics_rule_text(s, 'order_picken', 'deelkar_wacht_minuten', '15') END;
|
|
13720
13915
|
RETURN greatest(0, least(coalesce(nullif(v, '')::int, 15), 1440));
|
|
@@ -13737,6 +13932,7 @@ DECLARE
|
|
|
13737
13932
|
v_order_id_txt text;
|
|
13738
13933
|
v_order public.orders;
|
|
13739
13934
|
BEGIN
|
|
13935
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_payload_is_floriday');
|
|
13740
13936
|
IF _payload IS NULL THEN RETURN NULL; END IF;
|
|
13741
13937
|
IF nullif(_payload->>'floriday_sales_order_id', '') IS NOT NULL
|
|
13742
13938
|
OR nullif(_payload->'data'->>'floridaySalesOrderId', '') IS NOT NULL THEN
|
|
@@ -13782,6 +13978,7 @@ DO $fsdo$ BEGIN
|
|
|
13782
13978
|
STABLE SECURITY DEFINER
|
|
13783
13979
|
SET search_path TO 'public'
|
|
13784
13980
|
AS $function$
|
|
13981
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_pick_agenda');
|
|
13785
13982
|
WITH idx AS (SELECT * FROM public.logistics_cart_units(p_from, p_to)),
|
|
13786
13983
|
per_unit AS (
|
|
13787
13984
|
SELECT i.pick_date, i.unit_ref, bool_or(i.is_buffer) AS is_buffer,
|
|
@@ -13826,6 +14023,7 @@ DO $fsdo$ BEGIN
|
|
|
13826
14023
|
AS $function$
|
|
13827
14024
|
DECLARE v_on text; v_days text; n integer;
|
|
13828
14025
|
BEGIN
|
|
14026
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_backlog_max_days');
|
|
13829
14027
|
BEGIN
|
|
13830
14028
|
SELECT lower(btrim(value)) INTO v_on FROM public.module_runtime_config WHERE key = 'logistics_pick_backlog_enabled' LIMIT 1;
|
|
13831
14029
|
SELECT btrim(value) INTO v_days FROM public.module_runtime_config WHERE key = 'logistics_pick_backlog_max_days' LIMIT 1;
|
|
@@ -13852,6 +14050,7 @@ AS $function$
|
|
|
13852
14050
|
DECLARE
|
|
13853
14051
|
s jsonb;
|
|
13854
14052
|
BEGIN
|
|
14053
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_barcode_enabled');
|
|
13855
14054
|
SELECT settings INTO s
|
|
13856
14055
|
FROM public.logistics_rule_configs
|
|
13857
14056
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC
|
|
@@ -13877,6 +14076,7 @@ AS $function$
|
|
|
13877
14076
|
DECLARE
|
|
13878
14077
|
p text;
|
|
13879
14078
|
BEGIN
|
|
14079
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_email_purpose');
|
|
13880
14080
|
FOREACH p IN ARRAY ARRAY['orders','customer','klant','internal','marketing'] LOOP
|
|
13881
14081
|
IF EXISTS (
|
|
13882
14082
|
SELECT 1 FROM public.email_auth_connections c
|
|
@@ -13933,6 +14133,7 @@ DO $fsdo$ BEGIN
|
|
|
13933
14133
|
AS $function$
|
|
13934
14134
|
declare s jsonb; v text;
|
|
13935
14135
|
begin
|
|
14136
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_partial_mode');
|
|
13936
14137
|
select settings into s from public.logistics_rule_configs
|
|
13937
14138
|
order by is_active desc, (status = 'actief') desc, updated_at desc limit 1;
|
|
13938
14139
|
if s is null then return 'after_checkin'; end if;
|
|
@@ -13953,6 +14154,7 @@ DO $fsdo$ BEGIN
|
|
|
13953
14154
|
AS $function$
|
|
13954
14155
|
DECLARE v_n integer := 0; r record;
|
|
13955
14156
|
BEGIN
|
|
14157
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_queue_close');
|
|
13956
14158
|
IF p_ids IS NULL OR cardinality(p_ids) = 0 THEN RETURN 0; END IF;
|
|
13957
14159
|
FOR r IN
|
|
13958
14160
|
UPDATE public.pick_queue q
|
|
@@ -14052,6 +14254,7 @@ DECLARE
|
|
|
14052
14254
|
pick_start timestamptz;
|
|
14053
14255
|
default_minutes numeric;
|
|
14054
14256
|
BEGIN
|
|
14257
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_pick_start_estimate');
|
|
14055
14258
|
BEGIN
|
|
14056
14259
|
checkin_at := NULLIF(p_order ->> 'checkinAt', '')::timestamptz;
|
|
14057
14260
|
EXCEPTION WHEN others THEN checkin_at := NULL; END;
|
|
@@ -14113,6 +14316,7 @@ DO $fsdo$ BEGIN
|
|
|
14113
14316
|
STABLE SECURITY DEFINER
|
|
14114
14317
|
SET search_path TO 'public'
|
|
14115
14318
|
AS $function$
|
|
14319
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_pick_units');
|
|
14116
14320
|
WITH leden AS (
|
|
14117
14321
|
SELECT o.id, o.order_number, o.buffer_id
|
|
14118
14322
|
FROM public.orders o
|
|
@@ -14139,6 +14343,7 @@ DO $fsdo$ BEGIN
|
|
|
14139
14343
|
STABLE SECURITY DEFINER
|
|
14140
14344
|
SET search_path TO 'public'
|
|
14141
14345
|
AS $function$
|
|
14346
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_pickup_moments_today');
|
|
14142
14347
|
WITH ids AS MATERIALIZED (SELECT unnest(public.logistics_today_cart_ids()) AS id),
|
|
14143
14348
|
scanned AS MATERIALIZED (
|
|
14144
14349
|
SELECT DISTINCT s.cart_id FROM public.logistics_control_scan s
|
|
@@ -14227,6 +14432,7 @@ DECLARE
|
|
|
14227
14432
|
v_pickup timestamptz;
|
|
14228
14433
|
v_indeling jsonb;
|
|
14229
14434
|
BEGIN
|
|
14435
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_all');
|
|
14230
14436
|
IF p_user_id IS NULL THEN RAISE EXCEPTION 'user_id ontbreekt'; END IF;
|
|
14231
14437
|
|
|
14232
14438
|
BEGIN
|
|
@@ -14342,6 +14548,7 @@ DECLARE
|
|
|
14342
14548
|
v_last jsonb;
|
|
14343
14549
|
v_members text[];
|
|
14344
14550
|
BEGIN
|
|
14551
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_block');
|
|
14345
14552
|
IF p_order_ids IS NULL OR array_length(p_order_ids, 1) IS NULL THEN
|
|
14346
14553
|
RETURN 0;
|
|
14347
14554
|
END IF;
|
|
@@ -14465,6 +14672,7 @@ DECLARE
|
|
|
14465
14672
|
v_fl uuid[] := ARRAY[]::uuid[];
|
|
14466
14673
|
o record;
|
|
14467
14674
|
BEGIN
|
|
14675
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_buffer_sql');
|
|
14468
14676
|
IF (public.logistics_cart_layout_method() ->> 'layoutMethod') = 'afmetingen' THEN
|
|
14469
14677
|
RETURN 0;
|
|
14470
14678
|
END IF;
|
|
@@ -14632,6 +14840,7 @@ DO $fsdo$ BEGIN
|
|
|
14632
14840
|
AS $function$
|
|
14633
14841
|
DECLARE v_limit int := COALESCE(p_limit, public.logistics_plan_setting('batch_size', 10)::int);
|
|
14634
14842
|
BEGIN
|
|
14843
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_claim');
|
|
14635
14844
|
PERFORM public.logistics_plan_release_stale();
|
|
14636
14845
|
RETURN QUERY
|
|
14637
14846
|
WITH pick AS (
|
|
@@ -14663,6 +14872,7 @@ DO $fsdo$ BEGIN
|
|
|
14663
14872
|
AS $function$
|
|
14664
14873
|
DECLARE v_n int;
|
|
14665
14874
|
BEGIN
|
|
14875
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_close_claim');
|
|
14666
14876
|
UPDATE public.logistics_plan_queue q
|
|
14667
14877
|
SET status='geblokkeerd', reason=COALESCE(p_reason, q.reason), error=p_reason,
|
|
14668
14878
|
reason_code=COALESCE(p_reason_code, public.logistics_block_reason_code(p_reason, '{}'::jsonb)),
|
|
@@ -14687,6 +14897,7 @@ DECLARE
|
|
|
14687
14897
|
v_max int := public.logistics_plan_setting('coverage_max_attempts', 3)::int;
|
|
14688
14898
|
r record; v_pct int; v_att int; v_queued int := 0; v_gaveup int := 0; v_fixed int := 0;
|
|
14689
14899
|
BEGIN
|
|
14900
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_coverage_check');
|
|
14690
14901
|
-- Hersteld: pogingenregel opruimen.
|
|
14691
14902
|
DELETE FROM public.logistics_plan_coverage_retries c
|
|
14692
14903
|
WHERE c.order_id IN (
|
|
@@ -14752,6 +14963,7 @@ DO $fsdo$ BEGIN
|
|
|
14752
14963
|
AS $function$
|
|
14753
14964
|
DECLARE v_order uuid;
|
|
14754
14965
|
BEGIN
|
|
14966
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_defer');
|
|
14755
14967
|
SELECT order_id INTO v_order FROM public.logistics_plan_queue WHERE id = p_id;
|
|
14756
14968
|
|
|
14757
14969
|
UPDATE public.logistics_plan_queue
|
|
@@ -14782,6 +14994,7 @@ DO $fsdo$ BEGIN
|
|
|
14782
14994
|
STABLE SECURITY DEFINER
|
|
14783
14995
|
SET search_path TO 'public'
|
|
14784
14996
|
AS $function$
|
|
14997
|
+
SELECT public.logistics_acc_guard('server', 'logistics_plan_due_count');
|
|
14785
14998
|
SELECT count(*)::int FROM public.logistics_plan_queue WHERE status = 'pending' AND next_attempt_at <= now()
|
|
14786
14999
|
$function$
|
|
14787
15000
|
$fsdef$;
|
|
@@ -14804,6 +15017,7 @@ DECLARE
|
|
|
14804
15017
|
v_target uuid := p_order_id;
|
|
14805
15018
|
v_wacht jsonb;
|
|
14806
15019
|
BEGIN
|
|
15020
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_enqueue');
|
|
14807
15021
|
IF COALESCE(current_setting('logistics.merging', true), '') <> '1' THEN
|
|
14808
15022
|
BEGIN
|
|
14809
15023
|
PERFORM set_config('logistics.merging', '1', true);
|
|
@@ -14882,6 +15096,7 @@ DECLARE
|
|
|
14882
15096
|
v_user uuid;
|
|
14883
15097
|
v_pickup timestamptz;
|
|
14884
15098
|
BEGIN
|
|
15099
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_ensure_event');
|
|
14885
15100
|
SELECT id, order_number, delivery_date, custom_fields, buffer_id
|
|
14886
15101
|
INTO o
|
|
14887
15102
|
FROM public.orders
|
|
@@ -15000,6 +15215,7 @@ DECLARE
|
|
|
15000
15215
|
v_next timestamptz;
|
|
15001
15216
|
v_min numeric;
|
|
15002
15217
|
BEGIN
|
|
15218
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_finish');
|
|
15003
15219
|
SELECT order_id, attempts INTO v_order, v_attempts
|
|
15004
15220
|
FROM public.logistics_plan_queue WHERE id = p_id;
|
|
15005
15221
|
|
|
@@ -15074,6 +15290,7 @@ DECLARE
|
|
|
15074
15290
|
v_share numeric;
|
|
15075
15291
|
v_crates integer;
|
|
15076
15292
|
BEGIN
|
|
15293
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_floriday_order');
|
|
15077
15294
|
-- Werkwijze "Indelen op basis van afmetingen": de SQL-belading mag dan niets
|
|
15078
15295
|
-- indelen. Alleen de afmetingenplanner van de engine schrijft dan karren.
|
|
15079
15296
|
IF (public.logistics_cart_layout_method() ->> 'layoutMethod') = 'afmetingen' THEN
|
|
@@ -15155,6 +15372,7 @@ DO $fsdo$ BEGIN
|
|
|
15155
15372
|
AS $function$
|
|
15156
15373
|
DECLARE v_resolved int := 0; v_archived int := 0; v_alerts int := 0; v_gone int := 0; v_refs text;
|
|
15157
15374
|
BEGIN
|
|
15375
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_housekeeping');
|
|
15158
15376
|
UPDATE public.logistics_plan_queue q SET status='opgelost', error='opgelost: order is al verzonden',
|
|
15159
15377
|
claimed_at=NULL, updated_at=now()
|
|
15160
15378
|
FROM public.orders o
|
|
@@ -15212,6 +15430,7 @@ DO $fsdo$ BEGIN
|
|
|
15212
15430
|
STABLE SECURITY DEFINER
|
|
15213
15431
|
SET search_path TO 'public'
|
|
15214
15432
|
AS $function$
|
|
15433
|
+
SELECT public.logistics_acc_guard('server', 'logistics_plan_impact_orders');
|
|
15215
15434
|
WITH src AS (SELECT id, buffer_id, delivery_date FROM public.orders WHERE id = p_order_id)
|
|
15216
15435
|
SELECT o.id, o.buffer_id, o.delivery_date
|
|
15217
15436
|
FROM public.orders o, src
|
|
@@ -15236,6 +15455,7 @@ DECLARE
|
|
|
15236
15455
|
v_debounce int := public.logistics_plan_setting('kick_debounce_seconds', 5)::int;
|
|
15237
15456
|
v_running boolean;
|
|
15238
15457
|
BEGIN
|
|
15458
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_kick');
|
|
15239
15459
|
-- Loopt er al een tick-ronde (slot 'tick:ronde')? Dan geen tweede ronde wekken.
|
|
15240
15460
|
-- Fail-closed: kan dit niet worden vastgesteld, dan valt de EXCEPTION-tak
|
|
15241
15461
|
-- hieronder en wordt de wek-aanroep overgeslagen; de minuut-cron is het vangnet.
|
|
@@ -15283,6 +15503,7 @@ AS $function$
|
|
|
15283
15503
|
DECLARE
|
|
15284
15504
|
_got boolean := false;
|
|
15285
15505
|
BEGIN
|
|
15506
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_lock_acquire');
|
|
15286
15507
|
IF _key IS NULL OR btrim(_key) = '' THEN
|
|
15287
15508
|
RETURN false;
|
|
15288
15509
|
END IF;
|
|
@@ -15316,6 +15537,7 @@ DO $fsdo$ BEGIN
|
|
|
15316
15537
|
SECURITY DEFINER
|
|
15317
15538
|
SET search_path TO 'public'
|
|
15318
15539
|
AS $function$
|
|
15540
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_plan_lock_release');
|
|
15319
15541
|
DELETE FROM public.logistics_plan_locks
|
|
15320
15542
|
WHERE lock_key = _key
|
|
15321
15543
|
AND (_owner IS NULL OR owner IS NOT DISTINCT FROM _owner);
|
|
@@ -15337,6 +15559,7 @@ BEGIN
|
|
|
15337
15559
|
PERFORM public.logistics_order_changed(COALESCE(NEW.order_id, OLD.order_id), 'orderregels gewijzigd');
|
|
15338
15560
|
EXCEPTION WHEN OTHERS THEN
|
|
15339
15561
|
RAISE WARNING 'logistiek-engine: aanmelden voor indeling mislukt voor order %: %', COALESCE(NEW.order_id, OLD.order_id), SQLERRM;
|
|
15562
|
+
PERFORM public.logistics_plan_fail_log('trg_logistics_plan_order_items', COALESCE(NEW.order_id, OLD.order_id), SQLSTATE, SQLERRM);
|
|
15340
15563
|
END;
|
|
15341
15564
|
RETURN COALESCE(NEW, OLD);
|
|
15342
15565
|
END;
|
|
@@ -15379,6 +15602,7 @@ BEGIN
|
|
|
15379
15602
|
PERFORM public.logistics_order_changed(NEW.id, v_reason);
|
|
15380
15603
|
EXCEPTION WHEN OTHERS THEN
|
|
15381
15604
|
RAISE WARNING 'logistiek-engine: aanmelden voor indeling mislukt voor order %: %', NEW.id, SQLERRM;
|
|
15605
|
+
PERFORM public.logistics_plan_fail_log('trg_logistics_plan_orders', NEW.id, SQLSTATE, SQLERRM);
|
|
15382
15606
|
END;
|
|
15383
15607
|
RETURN NEW;
|
|
15384
15608
|
END;
|
|
@@ -15436,6 +15660,7 @@ DO $fsdo$ BEGIN
|
|
|
15436
15660
|
AS $function$
|
|
15437
15661
|
declare r text; v jsonb;
|
|
15438
15662
|
begin
|
|
15663
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_progress');
|
|
15439
15664
|
if p_refs is null then return; end if;
|
|
15440
15665
|
foreach r in array p_refs loop
|
|
15441
15666
|
if r is null or btrim(r) = '' then continue; end if;
|
|
@@ -15463,6 +15688,7 @@ DO $fsdo$ BEGIN
|
|
|
15463
15688
|
STABLE SECURITY DEFINER
|
|
15464
15689
|
SET search_path TO 'public'
|
|
15465
15690
|
AS $function$
|
|
15691
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_plan_progress_pct');
|
|
15466
15692
|
SELECT CASE WHEN t.totaal = 0 THEN NULL
|
|
15467
15693
|
ELSE LEAST(100, GREATEST(0, ROUND(100.0 * t.gedaan / t.totaal)))::int END
|
|
15468
15694
|
FROM (
|
|
@@ -15487,6 +15713,7 @@ DO $fsdo$ BEGIN
|
|
|
15487
15713
|
AS $function$
|
|
15488
15714
|
DECLARE v_n int; v_days int := public.logistics_plan_setting('retention_days', 7)::int;
|
|
15489
15715
|
BEGIN
|
|
15716
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_prune');
|
|
15490
15717
|
DELETE FROM public.logistics_plan_queue
|
|
15491
15718
|
WHERE status IN ('done','failed') AND updated_at < now() - make_interval(days => v_days);
|
|
15492
15719
|
GET DIAGNOSTICS v_n = ROW_COUNT;
|
|
@@ -15506,6 +15733,7 @@ DO $fsdo$ BEGIN
|
|
|
15506
15733
|
STABLE SECURITY DEFINER
|
|
15507
15734
|
SET search_path TO 'public'
|
|
15508
15735
|
AS $function$
|
|
15736
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_plan_queue_list');
|
|
15509
15737
|
WITH b AS (
|
|
15510
15738
|
SELECT q.*, o.order_number AS o_number, o.customer_name AS o_customer, o.created_at AS o_created,
|
|
15511
15739
|
public.logistics_plan_progress_pct(q.order_id) AS pct
|
|
@@ -15560,6 +15788,7 @@ DECLARE
|
|
|
15560
15788
|
v_txt text;
|
|
15561
15789
|
r record;
|
|
15562
15790
|
BEGIN
|
|
15791
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_release_stale');
|
|
15563
15792
|
v_txt := 'de ronde heeft deze indeling na ' || v_min || ' minuten niet afgesloten (claim niet afgerond)';
|
|
15564
15793
|
FOR r IN
|
|
15565
15794
|
UPDATE public.logistics_plan_queue q
|
|
@@ -15608,6 +15837,7 @@ DECLARE
|
|
|
15608
15837
|
v_scope text := lower(COALESCE(p_scope, 'failed'));
|
|
15609
15838
|
r record;
|
|
15610
15839
|
BEGIN
|
|
15840
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_reset_queue');
|
|
15611
15841
|
IF auth.uid() IS NULL THEN
|
|
15612
15842
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
15613
15843
|
END IF;
|
|
@@ -15667,6 +15897,7 @@ DECLARE
|
|
|
15667
15897
|
v_n integer := 0;
|
|
15668
15898
|
v_id uuid;
|
|
15669
15899
|
BEGIN
|
|
15900
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_retry');
|
|
15670
15901
|
IF auth.uid() IS NULL THEN
|
|
15671
15902
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
15672
15903
|
END IF;
|
|
@@ -15712,6 +15943,7 @@ DO $fsdo$ BEGIN
|
|
|
15712
15943
|
STABLE SECURITY DEFINER
|
|
15713
15944
|
SET search_path TO 'public'
|
|
15714
15945
|
AS $function$
|
|
15946
|
+
SELECT public.logistics_acc_guard('server', 'logistics_plan_setting');
|
|
15715
15947
|
SELECT COALESCE((SELECT NULLIF(value,'')::numeric FROM public.logistics_plan_settings WHERE key = p_key), p_default);
|
|
15716
15948
|
$function$
|
|
15717
15949
|
$fsdef$;
|
|
@@ -15731,6 +15963,7 @@ declare
|
|
|
15731
15963
|
v_plan_state text; v_progress integer; v_since timestamptz;
|
|
15732
15964
|
v_order_id uuid; v_order_ref text; v_cart_id uuid; v_ref text;
|
|
15733
15965
|
begin
|
|
15966
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_state_for');
|
|
15734
15967
|
v_ref := btrim(coalesce(p_ref, ''));
|
|
15735
15968
|
if v_ref = '' then
|
|
15736
15969
|
return jsonb_build_object('ref', p_ref, 'planState', 'blocked', 'planProgress', null,
|
|
@@ -15803,6 +16036,7 @@ DO $fsdo$ BEGIN
|
|
|
15803
16036
|
SET search_path TO 'public'
|
|
15804
16037
|
AS $function$
|
|
15805
16038
|
BEGIN
|
|
16039
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_timeout_running');
|
|
15806
16040
|
IF auth.uid() IS NULL THEN
|
|
15807
16041
|
RETURN 0;
|
|
15808
16042
|
END IF;
|
|
@@ -15822,6 +16056,7 @@ DO $fsdo$ BEGIN
|
|
|
15822
16056
|
AS $function$
|
|
15823
16057
|
DECLARE v_n int := 0;
|
|
15824
16058
|
BEGIN
|
|
16059
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_plan_unarchive');
|
|
15825
16060
|
IF auth.uid() IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
15826
16061
|
IF p_order_ids IS NULL OR array_length(p_order_ids,1) IS NULL THEN RETURN 0; END IF;
|
|
15827
16062
|
UPDATE public.logistics_plan_queue q SET status='pending', attempts=0, reason='opnieuw aangeboden na archief',
|
|
@@ -15846,6 +16081,7 @@ DECLARE
|
|
|
15846
16081
|
v_reason text := lower(btrim(COALESCE(p_reason, '')));
|
|
15847
16082
|
v_q record;
|
|
15848
16083
|
BEGIN
|
|
16084
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_wachttijd');
|
|
15849
16085
|
IF p_order_id IS NULL OR auth.uid() IS NOT NULL
|
|
15850
16086
|
OR v_reason NOT IN ('order_gewijzigd', 'nieuwe of gewijzigde floriday-order', 'wijziging', 'change', 'verdeling gewijzigd', '') THEN
|
|
15851
16087
|
RETURN jsonb_build_object('wacht', false);
|
|
@@ -15879,6 +16115,7 @@ DO $fsdo$ BEGIN
|
|
|
15879
16115
|
SET search_path TO 'public'
|
|
15880
16116
|
AS $function$
|
|
15881
16117
|
BEGIN
|
|
16118
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_wachttijd_melden');
|
|
15882
16119
|
PERFORM public.logistics_trace_order_step(
|
|
15883
16120
|
p_order_id, 'stap:beladingindeling', 'wachttijd na mislukte indeling', 'wachtend',
|
|
15884
16121
|
CASE WHEN p_wacht->>'status' = 'failed' THEN 'niet opnieuw ingedeeld (gestopt na mislukte pogingen)'
|
|
@@ -15903,6 +16140,7 @@ DO $fsdo$ BEGIN
|
|
|
15903
16140
|
STABLE SECURITY DEFINER
|
|
15904
16141
|
SET search_path TO 'public'
|
|
15905
16142
|
AS $function$
|
|
16143
|
+
SELECT public.logistics_acc_guard('server', 'logistics_planner_cart_snapshot');
|
|
15906
16144
|
SELECT COALESCE(jsonb_agg(jsonb_build_object(
|
|
15907
16145
|
'cartId', c.id, 'cartNumber', c.cart_number, 'bufferId', c.buffer_id, 'orderId', c.order_id,
|
|
15908
16146
|
'items', COALESCE((SELECT jsonb_agg(jsonb_build_object('orderItemId', i.order_item_id, 'crates', i.crates)
|
|
@@ -15926,6 +16164,7 @@ DO $fsdo$ BEGIN
|
|
|
15926
16164
|
AS $function$
|
|
15927
16165
|
DECLARE v text;
|
|
15928
16166
|
BEGIN
|
|
16167
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_planner_diff_mode');
|
|
15929
16168
|
BEGIN
|
|
15930
16169
|
SELECT lower(btrim(value)) INTO v FROM public.module_runtime_config WHERE key = 'logistics_planner_diff_mode' LIMIT 1;
|
|
15931
16170
|
EXCEPTION WHEN others THEN RETURN 'off';
|
|
@@ -15947,6 +16186,7 @@ DO $fsdo$ BEGIN
|
|
|
15947
16186
|
AS $function$
|
|
15948
16187
|
DECLARE n int;
|
|
15949
16188
|
BEGIN
|
|
16189
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_planner_diff_prune');
|
|
15950
16190
|
DELETE FROM public.logistics_planner_diff_runs WHERE created_at < now() - interval '30 days';
|
|
15951
16191
|
GET DIAGNOSTICS n = ROW_COUNT; RETURN n;
|
|
15952
16192
|
END $function$
|
|
@@ -15970,6 +16210,7 @@ DECLARE
|
|
|
15970
16210
|
v_err text;
|
|
15971
16211
|
v_comp jsonb;
|
|
15972
16212
|
BEGIN
|
|
16213
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_planner_lines');
|
|
15973
16214
|
IF p_order_id IS NULL THEN RETURN; END IF;
|
|
15974
16215
|
v_frozen := public.logistics_allocation_frozen(p_order_id);
|
|
15975
16216
|
SELECT COALESCE(array_agg(d.order_item_id), '{}') INTO v_double FROM public.logistics_double_group_lines(p_order_id) d;
|
|
@@ -16050,6 +16291,7 @@ declare
|
|
|
16050
16291
|
v_open integer := 0;
|
|
16051
16292
|
v_totaal integer := 0;
|
|
16052
16293
|
begin
|
|
16294
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_prepare_pick_documents');
|
|
16053
16295
|
for r in
|
|
16054
16296
|
select distinct q.order_number
|
|
16055
16297
|
from public.pick_queue q
|
|
@@ -16090,6 +16332,7 @@ DO $fsdo$ BEGIN
|
|
|
16090
16332
|
STABLE SECURITY DEFINER
|
|
16091
16333
|
SET search_path TO 'public'
|
|
16092
16334
|
AS $function$
|
|
16335
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_print_job_state');
|
|
16093
16336
|
SELECT status::text FROM public.print_jobs WHERE id = p_job_id;
|
|
16094
16337
|
$function$
|
|
16095
16338
|
$fsdef$;
|
|
@@ -16109,6 +16352,7 @@ DECLARE
|
|
|
16109
16352
|
v_code text;
|
|
16110
16353
|
v_msg text;
|
|
16111
16354
|
BEGIN
|
|
16355
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_print_via_layout');
|
|
16112
16356
|
SELECT * INTO r FROM public.layout_print_document(
|
|
16113
16357
|
_documenttype, _documentnaam, _pdf_base64, _pdf_url, _layout_id,
|
|
16114
16358
|
_print_plek_id, NULL, 1, _herkomst, coalesce(_is_herprint, false),
|
|
@@ -16135,6 +16379,7 @@ DO $fsdo$ BEGIN
|
|
|
16135
16379
|
SET search_path TO 'public'
|
|
16136
16380
|
AS $function$
|
|
16137
16381
|
BEGIN
|
|
16382
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_prune_buffer_member_queue');
|
|
16138
16383
|
RETURN public.logistics_pick_queue_close(ARRAY(
|
|
16139
16384
|
SELECT q.id FROM public.pick_queue q
|
|
16140
16385
|
WHERE q.cancelled_at IS NULL AND q.completed_at IS NULL
|
|
@@ -16157,6 +16402,7 @@ DO $fsdo$ BEGIN
|
|
|
16157
16402
|
AS $function$
|
|
16158
16403
|
DECLARE v_count bigint;
|
|
16159
16404
|
BEGIN
|
|
16405
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_prune_cron_history');
|
|
16160
16406
|
DELETE FROM cron.job_run_details WHERE start_time < now() - make_interval(days => GREATEST(COALESCE(p_days, 7), 1));
|
|
16161
16407
|
GET DIAGNOSTICS v_count = ROW_COUNT;
|
|
16162
16408
|
RETURN v_count;
|
|
@@ -16175,6 +16421,7 @@ DO $fsdo$ BEGIN
|
|
|
16175
16421
|
AS $function$
|
|
16176
16422
|
DECLARE v_n integer := 0;
|
|
16177
16423
|
BEGIN
|
|
16424
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_prune_handled_pick_queue');
|
|
16178
16425
|
-- Kar gescand/afgemeld: regel afronden. Karregel kijkt naar de eigen kar.
|
|
16179
16426
|
v_n := public.logistics_pick_queue_close(ARRAY(
|
|
16180
16427
|
SELECT q.id FROM public.pick_queue q
|
|
@@ -16210,6 +16457,7 @@ DECLARE
|
|
|
16210
16457
|
outbox_id uuid;
|
|
16211
16458
|
body_txt text;
|
|
16212
16459
|
BEGIN
|
|
16460
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_queue_capacity_email');
|
|
16213
16461
|
SELECT * INTO a FROM public.logistics_capacity_alerts WHERE id = p_alert_id;
|
|
16214
16462
|
IF NOT FOUND OR NOT COALESCE(a.email_enabled, false) THEN RETURN NULL; END IF;
|
|
16215
16463
|
|
|
@@ -16266,6 +16514,7 @@ DO $fsdo$ BEGIN
|
|
|
16266
16514
|
STABLE SECURITY DEFINER
|
|
16267
16515
|
SET search_path TO 'public'
|
|
16268
16516
|
AS $function$
|
|
16517
|
+
SELECT public.logistics_acc_guard('server', 'logistics_queue_row_has_open_peer');
|
|
16269
16518
|
SELECT EXISTS (
|
|
16270
16519
|
SELECT 1
|
|
16271
16520
|
FROM jsonb_array_elements_text(
|
|
@@ -16301,6 +16550,7 @@ DECLARE
|
|
|
16301
16550
|
conn_id uuid; lines_txt text := ''; lines_html text := ''; rec jsonb; outbox_id uuid;
|
|
16302
16551
|
v_link text; v_datum text; v_code text;
|
|
16303
16552
|
BEGIN
|
|
16553
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_queue_stock_email');
|
|
16304
16554
|
SELECT * INTO a FROM public.logistics_stock_alerts WHERE id = p_alert_id;
|
|
16305
16555
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
16306
16556
|
IF NOT COALESCE(a.email_enabled, false) THEN RETURN NULL; END IF;
|
|
@@ -16366,6 +16616,7 @@ DECLARE
|
|
|
16366
16616
|
r record;
|
|
16367
16617
|
n int := 0;
|
|
16368
16618
|
BEGIN
|
|
16619
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_reapply_buffer_decisions');
|
|
16369
16620
|
FOR r IN
|
|
16370
16621
|
SELECT id FROM public.orders
|
|
16371
16622
|
WHERE deleted_at IS NULL
|
|
@@ -16395,6 +16646,7 @@ DO $fsdo$ BEGIN
|
|
|
16395
16646
|
AS $function$
|
|
16396
16647
|
DECLARE v_today date := public.logistics_local_today(); -- fail closed zonder tijdzone
|
|
16397
16648
|
BEGIN
|
|
16649
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_rebuffer_candidates');
|
|
16398
16650
|
RETURN QUERY
|
|
16399
16651
|
WITH base AS MATERIALIZED (
|
|
16400
16652
|
SELECT o.id FROM public.orders o
|
|
@@ -16435,6 +16687,7 @@ DECLARE
|
|
|
16435
16687
|
changed int := 0;
|
|
16436
16688
|
checked int := 0;
|
|
16437
16689
|
BEGIN
|
|
16690
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_rebuffer_open_orders');
|
|
16438
16691
|
FOR r IN
|
|
16439
16692
|
SELECT order_ref,
|
|
16440
16693
|
(array_agg(payload ORDER BY sequence))[1] AS payload,
|
|
@@ -16495,6 +16748,7 @@ DECLARE
|
|
|
16495
16748
|
v_mode text; v_checked int := 0; v_updated int := 0; v_would int := 0;
|
|
16496
16749
|
v_start timestamptz := clock_timestamp(); v_ms int; r record; v_after uuid; v_report jsonb;
|
|
16497
16750
|
BEGIN
|
|
16751
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_rebuffer_orders');
|
|
16498
16752
|
SELECT CASE WHEN lower(btrim(value)) = 'apply' THEN 'apply' ELSE 'report' END
|
|
16499
16753
|
INTO v_mode FROM public.module_runtime_config WHERE key = 'logistics_rebuffer_mode';
|
|
16500
16754
|
v_mode := coalesce(v_mode, 'report');
|
|
@@ -16540,6 +16794,7 @@ AS $function$
|
|
|
16540
16794
|
DECLARE
|
|
16541
16795
|
v_pending boolean;
|
|
16542
16796
|
BEGIN
|
|
16797
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_rebuffer_pending');
|
|
16543
16798
|
SELECT pending INTO v_pending FROM public.logistics_rebuffer_state WHERE id;
|
|
16544
16799
|
IF NOT COALESCE(v_pending, false) THEN
|
|
16545
16800
|
RETURN jsonb_build_object('skipped', true);
|
|
@@ -16561,6 +16816,7 @@ DO $fsdo$ BEGIN
|
|
|
16561
16816
|
AS $function$
|
|
16562
16817
|
DECLARE v jsonb; s record;
|
|
16563
16818
|
BEGIN
|
|
16819
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_rebuffer_report');
|
|
16564
16820
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
16565
16821
|
RAISE EXCEPTION 'Alleen beheer mag de herindeellijst bekijken.';
|
|
16566
16822
|
END IF;
|
|
@@ -16590,6 +16846,7 @@ DO $fsdo$ BEGIN
|
|
|
16590
16846
|
SET search_path TO 'public'
|
|
16591
16847
|
AS $function$
|
|
16592
16848
|
BEGIN
|
|
16849
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_rebuffer_simulate_open');
|
|
16593
16850
|
RETURN QUERY
|
|
16594
16851
|
WITH c AS MATERIALIZED (
|
|
16595
16852
|
SELECT o.id, o.order_number, o.delivery_date, o.buffer_id, public.logistics_buffer_target(o.id) AS t
|
|
@@ -16631,6 +16888,7 @@ AS $function$
|
|
|
16631
16888
|
DECLARE
|
|
16632
16889
|
v_base text; v_key text; v_path text; v_req bigint; v_host text;
|
|
16633
16890
|
BEGIN
|
|
16891
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_recalc_tick_kick');
|
|
16634
16892
|
BEGIN PERFORM public.logistics_tick_calls_resolve(); EXCEPTION WHEN others THEN NULL; END;
|
|
16635
16893
|
|
|
16636
16894
|
SELECT NULLIF(btrim(value),'') INTO v_base FROM public.module_runtime_config WHERE key = 'logistics_tick_base_url';
|
|
@@ -16674,6 +16932,7 @@ DO $fsdo$ BEGIN
|
|
|
16674
16932
|
AS $function$
|
|
16675
16933
|
declare v_status jsonb; v_ref text; v_updated integer := 0;
|
|
16676
16934
|
begin
|
|
16935
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_refresh_pick_queue_status');
|
|
16677
16936
|
v_ref := btrim(coalesce(p_ref, ''));
|
|
16678
16937
|
if v_ref = '' then return 0; end if;
|
|
16679
16938
|
v_status := public.logistics_cart_plan_status(v_ref);
|
|
@@ -16714,6 +16973,7 @@ declare
|
|
|
16714
16973
|
v_updated integer := 0;
|
|
16715
16974
|
v_removed integer := 0;
|
|
16716
16975
|
begin
|
|
16976
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_refresh_pickup_moments');
|
|
16717
16977
|
-- Bron: uitsluitend de vervoerdersinstellingen van de klant (public.carriers).
|
|
16718
16978
|
-- Geen omgevingswaarden of standaardtijden in code: is er niets ingesteld,
|
|
16719
16979
|
-- dan gebeurt er niets en blijft de tabel leeg (fail closed).
|
|
@@ -16815,6 +17075,7 @@ DO $fsdo$ BEGIN
|
|
|
16815
17075
|
AS $function$
|
|
16816
17076
|
declare rec record; v jsonb; v_ref text; v_updated integer := 0;
|
|
16817
17077
|
begin
|
|
17078
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_refresh_plan_state');
|
|
16818
17079
|
for rec in
|
|
16819
17080
|
select q.id, q.payload, q.order_number, q.document_number
|
|
16820
17081
|
from public.pick_queue q
|
|
@@ -16854,6 +17115,7 @@ DO $fsdo$ BEGIN
|
|
|
16854
17115
|
AS $function$
|
|
16855
17116
|
DECLARE v_count int := 0; r record;
|
|
16856
17117
|
BEGIN
|
|
17118
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_all');
|
|
16857
17119
|
IF auth.uid() IS NOT NULL AND pg_trigger_depth() = 0 AND NOT public.logistics_is_beheer() THEN
|
|
16858
17120
|
RAISE EXCEPTION 'Alleen beheer (admin, superadmin of developer) mag orders opnieuw indelen.' USING ERRCODE = '42501';
|
|
16859
17121
|
END IF;
|
|
@@ -16896,6 +17158,7 @@ DECLARE
|
|
|
16896
17158
|
v_cleanup jsonb;
|
|
16897
17159
|
r record;
|
|
16898
17160
|
BEGIN
|
|
17161
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_all_force');
|
|
16899
17162
|
IF auth.uid() IS NOT NULL AND pg_trigger_depth() = 0 AND NOT public.logistics_is_beheer() THEN
|
|
16900
17163
|
RAISE EXCEPTION 'Alleen beheer (admin, superadmin of developer) mag orders opnieuw indelen.' USING ERRCODE = '42501';
|
|
16901
17164
|
END IF;
|
|
@@ -16995,6 +17258,7 @@ DO $fsdo$ BEGIN
|
|
|
16995
17258
|
STABLE SECURITY DEFINER
|
|
16996
17259
|
SET search_path TO 'public'
|
|
16997
17260
|
AS $function$
|
|
17261
|
+
SELECT public.logistics_acc_guard('server', 'logistics_replan_candidates');
|
|
16998
17262
|
SELECT o.id, public.logistics_order_is_frozen(o.id)
|
|
16999
17263
|
FROM public.orders o
|
|
17000
17264
|
WHERE o.deleted_at IS NULL AND o.cancelled_at IS NULL
|
|
@@ -17018,6 +17282,7 @@ AS $function$
|
|
|
17018
17282
|
DECLARE v_number text; v_buffer uuid; v_items int := 0; v_carts int := 0; v_skipped int := 0;
|
|
17019
17283
|
v_cart_ids uuid[]; v_empty uuid[];
|
|
17020
17284
|
BEGIN
|
|
17285
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_replan_clear_foreign_cart_items');
|
|
17021
17286
|
SELECT order_number, buffer_id INTO v_number, v_buffer FROM orders WHERE id = p_order_id;
|
|
17022
17287
|
IF v_number IS NULL THEN RETURN jsonb_build_object('regels',0,'karren',0); END IF;
|
|
17023
17288
|
|
|
@@ -17082,6 +17347,7 @@ DECLARE
|
|
|
17082
17347
|
v_events int := 0; v_runs int := 0;
|
|
17083
17348
|
v_target uuid; v_foreign jsonb; v_mode text := public.logistics_planner_diff_mode();
|
|
17084
17349
|
BEGIN
|
|
17350
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_order_journey');
|
|
17085
17351
|
SELECT o.id, o.order_number, o.buffer_id INTO v_order_id, v_number, v_buffer
|
|
17086
17352
|
FROM public.orders o WHERE o.order_number = p_order_ref
|
|
17087
17353
|
LIMIT 1;
|
|
@@ -17141,6 +17407,7 @@ DO $fsdo$ BEGIN
|
|
|
17141
17407
|
AS $function$
|
|
17142
17408
|
DECLARE r jsonb;
|
|
17143
17409
|
BEGIN
|
|
17410
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_order_journey');
|
|
17144
17411
|
PERFORM set_config('logistics.replan_reason', COALESCE(NULLIF(btrim(p_reason),''),'handmatige_herberekening'), true);
|
|
17145
17412
|
r := public.logistics_replan_order_journey(p_order_ref);
|
|
17146
17413
|
PERFORM set_config('logistics.replan_reason', '', true);
|
|
@@ -17161,6 +17428,7 @@ DO $fsdo$ BEGIN
|
|
|
17161
17428
|
AS $function$
|
|
17162
17429
|
DECLARE v_total int; v_frozen int;
|
|
17163
17430
|
BEGIN
|
|
17431
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_preview');
|
|
17164
17432
|
IF NOT public.logistics_is_beheer() THEN
|
|
17165
17433
|
RAISE EXCEPTION 'Alleen beheer (admin, superadmin of developer) mag orders opnieuw indelen.' USING ERRCODE = '42501';
|
|
17166
17434
|
END IF;
|
|
@@ -17185,6 +17453,7 @@ DO $fsdo$ BEGIN
|
|
|
17185
17453
|
AS $function$
|
|
17186
17454
|
DECLARE v_ids uuid[]; v_n int; v_id uuid; v_ok int := 0;
|
|
17187
17455
|
BEGIN
|
|
17456
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_replan_selected');
|
|
17188
17457
|
IF NOT public.logistics_is_beheer() THEN
|
|
17189
17458
|
RAISE EXCEPTION 'Alleen beheer (admin, superadmin of developer) mag orders opnieuw indelen.' USING ERRCODE = '42501';
|
|
17190
17459
|
END IF;
|
|
@@ -17219,6 +17488,7 @@ DO $fsdo$ BEGIN
|
|
|
17219
17488
|
AS $function$
|
|
17220
17489
|
DECLARE v_id uuid; v_out jsonb := '[]'::jsonb; v_before jsonb;
|
|
17221
17490
|
BEGIN
|
|
17491
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_replan_selected_orders');
|
|
17222
17492
|
IF p_order_ids IS NULL OR cardinality(p_order_ids) = 0 THEN RAISE EXCEPTION 'Geen orders opgegeven.'; END IF;
|
|
17223
17493
|
IF cardinality(p_order_ids) > 100 THEN RAISE EXCEPTION 'Hooguit 100 orders per keer.'; END IF;
|
|
17224
17494
|
FOREACH v_id IN ARRAY p_order_ids LOOP
|
|
@@ -17263,6 +17533,7 @@ DECLARE
|
|
|
17263
17533
|
cust_email text; cust_lang text; cust_name text;
|
|
17264
17534
|
mail record;
|
|
17265
17535
|
BEGIN
|
|
17536
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_report_delay');
|
|
17266
17537
|
SELECT * INTO ord FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
17267
17538
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
17268
17539
|
|
|
@@ -17446,6 +17717,7 @@ DECLARE
|
|
|
17446
17717
|
mail record;
|
|
17447
17718
|
v_purpose text;
|
|
17448
17719
|
BEGIN
|
|
17720
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_report_delay');
|
|
17449
17721
|
SELECT * INTO ord FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
17450
17722
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
17451
17723
|
|
|
@@ -17613,6 +17885,7 @@ DO $fsdo$ BEGIN
|
|
|
17613
17885
|
AS $function$
|
|
17614
17886
|
DECLARE r record; v_reason text; v_last text;
|
|
17615
17887
|
BEGIN
|
|
17888
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_report_frozen_shortage');
|
|
17616
17889
|
IF p_order_item_ids IS NULL OR cardinality(p_order_item_ids) = 0 THEN RETURN; END IF;
|
|
17617
17890
|
FOR r IN
|
|
17618
17891
|
SELECT DISTINCT oi.order_id, o.order_number, COALESCE(p.product, a.trade_item_key) AS lid
|
|
@@ -17754,6 +18027,7 @@ DO $fsdo$ BEGIN
|
|
|
17754
18027
|
AS $function$
|
|
17755
18028
|
DECLARE r record; n integer := 0;
|
|
17756
18029
|
BEGIN
|
|
18030
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_rescan_orders');
|
|
17757
18031
|
FOR r IN SELECT id FROM public.orders
|
|
17758
18032
|
WHERE deleted_at IS NULL
|
|
17759
18033
|
AND created_at > now() - make_interval(days => GREATEST(p_days, 0))
|
|
@@ -17792,6 +18066,7 @@ DECLARE
|
|
|
17792
18066
|
v_new_buffer uuid;
|
|
17793
18067
|
v_mail_error text;
|
|
17794
18068
|
BEGIN
|
|
18069
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_reschedule_order');
|
|
17795
18070
|
prev := public.logistics_reschedule_preview(p_order_ref, p_pickup_date, p_pickup_from, p_pickup_to);
|
|
17796
18071
|
IF NOT COALESCE((prev->>'ok')::boolean, false) THEN RETURN prev; END IF;
|
|
17797
18072
|
|
|
@@ -17919,6 +18194,7 @@ DECLARE
|
|
|
17919
18194
|
v_direction text;
|
|
17920
18195
|
v_tasks integer;
|
|
17921
18196
|
BEGIN
|
|
18197
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_reschedule_preview');
|
|
17922
18198
|
SELECT * INTO ord FROM public.orders
|
|
17923
18199
|
WHERE order_number = p_order_ref AND deleted_at IS NULL
|
|
17924
18200
|
ORDER BY created_at DESC LIMIT 1;
|
|
@@ -17990,6 +18266,7 @@ DECLARE
|
|
|
17990
18266
|
v_s text;
|
|
17991
18267
|
v_u uuid;
|
|
17992
18268
|
BEGIN
|
|
18269
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_reserved_fast_skip');
|
|
17993
18270
|
IF p_key IS NULL OR v_raw = '' OR p_key LIKE 'group:%' OR p_key LIKE 'draft:%' THEN RETURN false; END IF;
|
|
17994
18271
|
|
|
17995
18272
|
-- Reservering staat al op 0 (of er is geen rij)? Anders altijd volledig rekenen.
|
|
@@ -18056,6 +18333,7 @@ DECLARE
|
|
|
18056
18333
|
v_key text;
|
|
18057
18334
|
v_pid uuid;
|
|
18058
18335
|
BEGIN
|
|
18336
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_reserved_key');
|
|
18059
18337
|
IF p_key IS NULL OR btrim(p_key) = '' THEN RETURN NULL; END IF;
|
|
18060
18338
|
v_raw := btrim(p_key);
|
|
18061
18339
|
|
|
@@ -18100,6 +18378,7 @@ DO $fsdo$ BEGIN
|
|
|
18100
18378
|
AS $function$
|
|
18101
18379
|
DECLARE r record; a jsonb;
|
|
18102
18380
|
BEGIN
|
|
18381
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_reserved_order_excluded');
|
|
18103
18382
|
SELECT o.deleted_at, o.cancelled_at, o.status INTO r FROM public.orders o WHERE o.id = p_order_id;
|
|
18104
18383
|
IF NOT FOUND THEN RETURN false; END IF;
|
|
18105
18384
|
IF r.deleted_at IS NOT NULL OR r.cancelled_at IS NOT NULL
|
|
@@ -18126,6 +18405,7 @@ DO $fsdo$ BEGIN
|
|
|
18126
18405
|
SET search_path TO 'public'
|
|
18127
18406
|
AS $function$
|
|
18128
18407
|
BEGIN
|
|
18408
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_reserved_stock_nightly');
|
|
18129
18409
|
PERFORM set_config('statement_timeout', '600000', true);
|
|
18130
18410
|
PERFORM public.recompute_all_reserved_stock();
|
|
18131
18411
|
END
|
|
@@ -18189,6 +18469,7 @@ DO $fsdo$ BEGIN
|
|
|
18189
18469
|
AS $function$
|
|
18190
18470
|
DECLARE v jsonb;
|
|
18191
18471
|
BEGIN
|
|
18472
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_resolve_settings');
|
|
18192
18473
|
IF p_config_id IS NULL THEN RETURN '{}'::jsonb; END IF;
|
|
18193
18474
|
IF p_version IS NOT NULL THEN
|
|
18194
18475
|
SELECT settings INTO v FROM public.logistics_rule_versions
|
|
@@ -18411,6 +18692,7 @@ DO $fsdo$ BEGIN
|
|
|
18411
18692
|
STABLE SECURITY DEFINER
|
|
18412
18693
|
SET search_path TO 'public'
|
|
18413
18694
|
AS $function$
|
|
18695
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sales_order_external_fulfilled');
|
|
18414
18696
|
SELECT public.logistics_item_external_fulfilled(p_order_id, p_sales_order_id);
|
|
18415
18697
|
$function$
|
|
18416
18698
|
$fsdef$;
|
|
@@ -18429,6 +18711,7 @@ DECLARE
|
|
|
18429
18711
|
rec record;
|
|
18430
18712
|
cnt integer := 0;
|
|
18431
18713
|
BEGIN
|
|
18714
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_scan_delays');
|
|
18432
18715
|
FOR rec IN
|
|
18433
18716
|
SELECT o.id
|
|
18434
18717
|
FROM public.orders o
|
|
@@ -18471,6 +18754,7 @@ DECLARE
|
|
|
18471
18754
|
alert_id uuid; note_id uuid; lines text := '';
|
|
18472
18755
|
existing_id uuid;
|
|
18473
18756
|
BEGIN
|
|
18757
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_scan_order_stock');
|
|
18474
18758
|
SELECT * INTO ord FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
18475
18759
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
18476
18760
|
|
|
@@ -18656,6 +18940,7 @@ DO $fsdo$ BEGIN
|
|
|
18656
18940
|
SECURITY DEFINER
|
|
18657
18941
|
SET search_path TO 'public'
|
|
18658
18942
|
AS $function$
|
|
18943
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_schedule_tasks');
|
|
18659
18944
|
SELECT public.logistics_schedule_tasks(NULL::text)
|
|
18660
18945
|
$function$
|
|
18661
18946
|
$fsdef$;
|
|
@@ -18677,6 +18962,7 @@ DECLARE
|
|
|
18677
18962
|
v_since timestamptz := (SELECT departure_rule_since FROM public.logistics_time_settings ORDER BY updated_at DESC NULLS LAST LIMIT 1);
|
|
18678
18963
|
v_160 timestamptz := (SELECT rule_160_since FROM public.logistics_time_settings ORDER BY updated_at DESC NULLS LAST LIMIT 1);
|
|
18679
18964
|
BEGIN
|
|
18965
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_schedule_tasks');
|
|
18680
18966
|
CREATE TEMP TABLE IF NOT EXISTS tmp_logistics_dep (order_id uuid PRIMARY KEY, ref text, dep jsonb) ON COMMIT DROP;
|
|
18681
18967
|
TRUNCATE tmp_logistics_dep;
|
|
18682
18968
|
INSERT INTO tmp_logistics_dep(order_id, ref, dep)
|
|
@@ -18815,6 +19101,7 @@ DO $fsdo$ BEGIN
|
|
|
18815
19101
|
STABLE SECURITY DEFINER
|
|
18816
19102
|
SET search_path TO 'public'
|
|
18817
19103
|
AS $function$
|
|
19104
|
+
SELECT public.logistics_acc_guard('server', 'logistics_set_components_scaled');
|
|
18818
19105
|
WITH oi AS (
|
|
18819
19106
|
SELECT o.id, o.product_id, COALESCE(o.quantity, 0)::numeric AS q
|
|
18820
19107
|
FROM public.order_items o
|
|
@@ -18859,6 +19146,7 @@ DO $fsdo$ BEGIN
|
|
|
18859
19146
|
AS $function$
|
|
18860
19147
|
DECLARE uid uuid := COALESCE(p_user_id, auth.uid()); n integer;
|
|
18861
19148
|
BEGIN
|
|
19149
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_set_order_priority');
|
|
18862
19150
|
IF uid IS NULL THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
18863
19151
|
|
|
18864
19152
|
UPDATE public.logistics_tasks
|
|
@@ -18884,6 +19172,7 @@ DECLARE
|
|
|
18884
19172
|
v_order_id uuid;
|
|
18885
19173
|
v_updated integer := 0;
|
|
18886
19174
|
BEGIN
|
|
19175
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_set_pick_day');
|
|
18887
19176
|
IF auth.uid() IS NULL THEN
|
|
18888
19177
|
RAISE EXCEPTION 'Niet ingelogd';
|
|
18889
19178
|
END IF;
|
|
@@ -18957,6 +19246,7 @@ DO $fsdo$ BEGIN
|
|
|
18957
19246
|
STABLE SECURITY DEFINER
|
|
18958
19247
|
SET search_path TO 'public'
|
|
18959
19248
|
AS $function$
|
|
19249
|
+
SELECT public.logistics_acc_guard('server', 'logistics_shared_cart_peers');
|
|
18960
19250
|
SELECT DISTINCT oi2.order_id, c.id, c.cart_number, c.buffer_id
|
|
18961
19251
|
FROM public.order_items oi
|
|
18962
19252
|
JOIN logistics_active.order_cart_items ci ON ci.order_item_id = oi.id
|
|
@@ -18977,6 +19267,7 @@ DO $fsdo$ BEGIN
|
|
|
18977
19267
|
STABLE SECURITY DEFINER
|
|
18978
19268
|
SET search_path TO 'public'
|
|
18979
19269
|
AS $function$
|
|
19270
|
+
SELECT public.logistics_acc_guard('server', 'logistics_shell_base_url');
|
|
18980
19271
|
SELECT CASE WHEN v ~* '^https?://[^/\s]+' THEN rtrim(v, '/') END
|
|
18981
19272
|
FROM (SELECT nullif(btrim(value::text), '') v FROM public.module_runtime_config
|
|
18982
19273
|
WHERE key = 'shell_base_url' LIMIT 1) s
|
|
@@ -19091,6 +19382,7 @@ DECLARE
|
|
|
19091
19382
|
v_reden text;
|
|
19092
19383
|
v_actie text;
|
|
19093
19384
|
BEGIN
|
|
19385
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_diagnose');
|
|
19094
19386
|
IF coalesce(btrim(p_order_number), '') = '' THEN
|
|
19095
19387
|
RETURN jsonb_build_object('gevonden', false);
|
|
19096
19388
|
END IF;
|
|
@@ -19162,6 +19454,7 @@ DO $fsdo$ BEGIN
|
|
|
19162
19454
|
AS $function$
|
|
19163
19455
|
DECLARE r record; v_cart uuid; v_n int := 0;
|
|
19164
19456
|
BEGIN
|
|
19457
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_ensure_accepted');
|
|
19165
19458
|
FOR r IN
|
|
19166
19459
|
SELECT o.id, o.order_number FROM public.orders o
|
|
19167
19460
|
WHERE o.deleted_at IS NULL
|
|
@@ -19231,6 +19524,7 @@ DECLARE
|
|
|
19231
19524
|
v_slip_station uuid;
|
|
19232
19525
|
v_note_station uuid;
|
|
19233
19526
|
BEGIN
|
|
19527
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_follows_slip');
|
|
19234
19528
|
SELECT settings INTO s
|
|
19235
19529
|
FROM public.logistics_rule_configs
|
|
19236
19530
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC
|
|
@@ -19376,6 +19670,7 @@ DECLARE
|
|
|
19376
19670
|
v_order text;
|
|
19377
19671
|
v_res jsonb;
|
|
19378
19672
|
BEGIN
|
|
19673
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_job_for_slip');
|
|
19379
19674
|
SELECT * INTO slip FROM public.print_jobs WHERE id = _slip_job_id;
|
|
19380
19675
|
IF NOT FOUND THEN RETURN NULL; END IF;
|
|
19381
19676
|
v_order := coalesce(slip.payload->>'ordernummer', slip.payload->>'order_number');
|
|
@@ -19452,6 +19747,7 @@ DO $fsdo$ BEGIN
|
|
|
19452
19747
|
STABLE SECURITY DEFINER
|
|
19453
19748
|
SET search_path TO 'public'
|
|
19454
19749
|
AS $function$
|
|
19750
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_max_attempts');
|
|
19455
19751
|
SELECT CASE WHEN btrim(c.value) ~ '^[0-9]{1,3}$' AND btrim(c.value)::int BETWEEN 1 AND 200
|
|
19456
19752
|
THEN btrim(c.value)::int END
|
|
19457
19753
|
FROM public.module_runtime_config c
|
|
@@ -19472,6 +19768,7 @@ AS $function$
|
|
|
19472
19768
|
DECLARE
|
|
19473
19769
|
v_n integer := 0; v_m integer := 0; v_k integer := 0;
|
|
19474
19770
|
BEGIN
|
|
19771
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_release');
|
|
19475
19772
|
IF public.logistics_belading_verstuurder() = 'afhandeling' THEN
|
|
19476
19773
|
UPDATE public.logistics_slip_shipping_note s
|
|
19477
19774
|
SET error_code = 'wacht_op_belading', retry_class = 'wacht_op_belading',
|
|
@@ -19663,6 +19960,7 @@ DO $fsdo$ BEGIN
|
|
|
19663
19960
|
SET search_path TO 'public'
|
|
19664
19961
|
AS $function$
|
|
19665
19962
|
BEGIN
|
|
19963
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_wait_reasons');
|
|
19666
19964
|
IF coalesce(auth.role(),'') <> 'service_role' AND NOT EXISTS (
|
|
19667
19965
|
SELECT 1 FROM public.user_roles r WHERE r.user_id = auth.uid()
|
|
19668
19966
|
AND r.role::text IN ('developer','superadmin','admin')) THEN
|
|
@@ -19696,6 +19994,7 @@ AS $function$
|
|
|
19696
19994
|
DECLARE
|
|
19697
19995
|
v_n integer := 0;
|
|
19698
19996
|
BEGIN
|
|
19997
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_note_wake');
|
|
19699
19998
|
IF _slip_job_id IS NULL THEN RETURN 0; END IF;
|
|
19700
19999
|
UPDATE public.logistics_slip_shipping_note s
|
|
19701
20000
|
SET next_attempt_at = now(),
|
|
@@ -19724,6 +20023,7 @@ DECLARE
|
|
|
19724
20023
|
v_gewekt integer := 0;
|
|
19725
20024
|
v_open integer := 0;
|
|
19726
20025
|
BEGIN
|
|
20026
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_shipping_notes_wake_all');
|
|
19727
20027
|
UPDATE public.logistics_slip_shipping_note s
|
|
19728
20028
|
SET next_attempt_at = now(),
|
|
19729
20029
|
locked_until = NULL,
|
|
@@ -19753,6 +20053,7 @@ AS $function$
|
|
|
19753
20053
|
DECLARE
|
|
19754
20054
|
v_payload jsonb;
|
|
19755
20055
|
BEGIN
|
|
20056
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_is_floriday');
|
|
19756
20057
|
SELECT j.payload INTO v_payload FROM public.print_jobs j WHERE j.id = _slip_job_id;
|
|
19757
20058
|
IF v_payload IS NULL THEN RETURN NULL; END IF;
|
|
19758
20059
|
RETURN public.logistics_payload_is_floriday(v_payload);
|
|
@@ -19770,6 +20071,7 @@ DO $fsdo$ BEGIN
|
|
|
19770
20071
|
STABLE SECURITY DEFINER
|
|
19771
20072
|
SET search_path TO 'public'
|
|
19772
20073
|
AS $function$
|
|
20074
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_slip_is_herprint');
|
|
19773
20075
|
SELECT EXISTS (
|
|
19774
20076
|
SELECT 1 FROM public.print_jobs j
|
|
19775
20077
|
WHERE j.id = p_slip_job_id
|
|
@@ -19811,6 +20113,7 @@ DO $fsdo$ BEGIN
|
|
|
19811
20113
|
SET search_path TO 'public'
|
|
19812
20114
|
AS $function$
|
|
19813
20115
|
BEGIN
|
|
20116
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_claim');
|
|
19814
20117
|
IF public.logistics_shipping_note_max_attempts() IS NULL THEN
|
|
19815
20118
|
RETURN;
|
|
19816
20119
|
END IF;
|
|
@@ -19846,6 +20149,7 @@ DO $fsdo$ BEGIN
|
|
|
19846
20149
|
SET search_path TO 'public'
|
|
19847
20150
|
AS $function$
|
|
19848
20151
|
BEGIN
|
|
20152
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_finish');
|
|
19849
20153
|
UPDATE public.logistics_slip_shipping_note
|
|
19850
20154
|
SET status = COALESCE(_status, CASE WHEN _ok THEN 'geprint' ELSE 'mislukt' END),
|
|
19851
20155
|
attempts = CASE WHEN _status = 'in_printwachtrij' THEN greatest(attempts - 1, 0) ELSE attempts END,
|
|
@@ -19872,6 +20176,7 @@ DO $fsdo$ BEGIN
|
|
|
19872
20176
|
SET search_path TO 'public'
|
|
19873
20177
|
AS $function$
|
|
19874
20178
|
BEGIN
|
|
20179
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_hold');
|
|
19875
20180
|
UPDATE public.logistics_slip_shipping_note
|
|
19876
20181
|
SET status = 'wacht_op_vrijgave',
|
|
19877
20182
|
attempts = greatest(attempts - 1, 0),
|
|
@@ -19897,6 +20202,7 @@ DO $fsdo$ BEGIN
|
|
|
19897
20202
|
SET search_path TO 'public'
|
|
19898
20203
|
AS $function$
|
|
19899
20204
|
BEGIN
|
|
20205
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_hold_belading');
|
|
19900
20206
|
UPDATE public.logistics_slip_shipping_note
|
|
19901
20207
|
SET status = 'wacht_op_vrijgave',
|
|
19902
20208
|
attempts = greatest(attempts - 1, 0),
|
|
@@ -19922,6 +20228,7 @@ DO $fsdo$ BEGIN
|
|
|
19922
20228
|
SET search_path TO 'public'
|
|
19923
20229
|
AS $function$
|
|
19924
20230
|
BEGIN
|
|
20231
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_hold_kenmerk');
|
|
19925
20232
|
UPDATE public.logistics_slip_shipping_note
|
|
19926
20233
|
SET status = 'wacht_op_vrijgave',
|
|
19927
20234
|
attempts = greatest(attempts - 1, 0),
|
|
@@ -19946,6 +20253,7 @@ DO $fsdo$ BEGIN
|
|
|
19946
20253
|
SET search_path TO 'public'
|
|
19947
20254
|
AS $function$
|
|
19948
20255
|
BEGIN
|
|
20256
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_hold_layout');
|
|
19949
20257
|
UPDATE public.logistics_slip_shipping_note
|
|
19950
20258
|
SET status = 'wacht_op_vrijgave',
|
|
19951
20259
|
attempts = greatest(attempts - 1, 0),
|
|
@@ -19970,6 +20278,7 @@ DO $fsdo$ BEGIN
|
|
|
19970
20278
|
SET search_path TO 'public'
|
|
19971
20279
|
AS $function$
|
|
19972
20280
|
BEGIN
|
|
20281
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_hold_read_only');
|
|
19973
20282
|
UPDATE public.logistics_slip_shipping_note
|
|
19974
20283
|
SET status = 'wacht_op_vrijgave', attempts = greatest(attempts - 1, 0),
|
|
19975
20284
|
locked_until = NULL, next_attempt_at = NULL, retry_class = 'alleen_lezen',
|
|
@@ -19993,6 +20302,7 @@ DECLARE
|
|
|
19993
20302
|
v_max integer := public.logistics_shipping_note_max_attempts();
|
|
19994
20303
|
v_delay integer;
|
|
19995
20304
|
BEGIN
|
|
20305
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_keep_waiting');
|
|
19996
20306
|
SELECT attempts INTO v_attempts FROM public.logistics_slip_shipping_note WHERE id = _id;
|
|
19997
20307
|
|
|
19998
20308
|
IF v_max IS NULL OR coalesce(v_attempts, 0) >= v_max THEN
|
|
@@ -20037,6 +20347,7 @@ DO $fsdo$ BEGIN
|
|
|
20037
20347
|
AS $function$
|
|
20038
20348
|
DECLARE v_n int := 0;
|
|
20039
20349
|
BEGIN
|
|
20350
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_release_layout');
|
|
20040
20351
|
IF (public.logistics_floriday_layout_id('afleverbrief')->>'layout_id') IS NULL THEN RETURN 0; END IF;
|
|
20041
20352
|
UPDATE public.logistics_slip_shipping_note
|
|
20042
20353
|
SET status = 'wachtend', next_attempt_at = now(), retry_class = 'tijdelijk',
|
|
@@ -20062,6 +20373,7 @@ DECLARE
|
|
|
20062
20373
|
v_open boolean;
|
|
20063
20374
|
r public.logistics_slip_shipping_note%rowtype;
|
|
20064
20375
|
BEGIN
|
|
20376
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_slip_note_retry');
|
|
20065
20377
|
SELECT * INTO v_note FROM public.logistics_slip_shipping_note WHERE id = _id;
|
|
20066
20378
|
IF v_note.id IS NULL OR v_note.status <> 'mislukt' THEN
|
|
20067
20379
|
RETURN jsonb_build_object('ok', false, 'error', 'Deze verzendbrief bestaat niet (meer) of is niet mislukt.');
|
|
@@ -20100,6 +20412,7 @@ DO $fsdo$ BEGIN
|
|
|
20100
20412
|
SECURITY DEFINER
|
|
20101
20413
|
SET search_path TO 'public'
|
|
20102
20414
|
AS $function$
|
|
20415
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_slip_note_skip_herprint');
|
|
20103
20416
|
UPDATE public.logistics_slip_shipping_note
|
|
20104
20417
|
SET status = 'overgeslagen', error_code = 'herprint',
|
|
20105
20418
|
error = 'Herprint: alleen dit document opnieuw, geen nieuwe verzendbrief.',
|
|
@@ -20134,6 +20447,7 @@ DO $fsdo$ BEGIN
|
|
|
20134
20447
|
SET search_path TO 'public'
|
|
20135
20448
|
AS $function$
|
|
20136
20449
|
BEGIN
|
|
20450
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_blocked_list');
|
|
20137
20451
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
20138
20452
|
RAISE EXCEPTION 'Alleen beheer mag de geblokkeerde stickers bekijken.';
|
|
20139
20453
|
END IF;
|
|
@@ -20157,6 +20471,7 @@ DO $fsdo$ BEGIN
|
|
|
20157
20471
|
STABLE SECURITY DEFINER
|
|
20158
20472
|
SET search_path TO 'public'
|
|
20159
20473
|
AS $function$
|
|
20474
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sticker_cart_plek');
|
|
20160
20475
|
SELECT coalesce(
|
|
20161
20476
|
(SELECT nullif(btrim(pj.payload->>'print_plek_id'),'') FROM public.print_jobs pj
|
|
20162
20477
|
WHERE pj.payload->>'cart_id' = _cart::text AND pj.documenttype = 'pakbon'
|
|
@@ -20176,6 +20491,7 @@ DO $fsdo$ BEGIN
|
|
|
20176
20491
|
STABLE SECURITY DEFINER
|
|
20177
20492
|
SET search_path TO 'public'
|
|
20178
20493
|
AS $function$
|
|
20494
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sticker_distribution');
|
|
20179
20495
|
WITH t AS (SELECT upper(coalesce(p_type,'')) AS ty),
|
|
20180
20496
|
base AS (
|
|
20181
20497
|
SELECT oc.id AS cart, min(oc.cart_number) AS nr, sum(coalesce(ci.crates,0))::int AS crates,
|
|
@@ -20213,6 +20529,7 @@ DO $fsdo$ BEGIN
|
|
|
20213
20529
|
STABLE SECURITY DEFINER
|
|
20214
20530
|
SET search_path TO 'public'
|
|
20215
20531
|
AS $function$
|
|
20532
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sticker_external_fulfilled');
|
|
20216
20533
|
SELECT EXISTS (
|
|
20217
20534
|
SELECT 1 FROM public.logistics_sticker_prints sp
|
|
20218
20535
|
LEFT JOIN public.floriday_customer_stickers_cache c ON c.floriday_id = sp.bron_id AND sp.soort = 'sticker'
|
|
@@ -20234,6 +20551,7 @@ DO $fsdo$ BEGIN
|
|
|
20234
20551
|
AS $function$
|
|
20235
20552
|
DECLARE s jsonb;
|
|
20236
20553
|
BEGIN
|
|
20554
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_follows_slip');
|
|
20237
20555
|
SELECT settings INTO s
|
|
20238
20556
|
FROM public.logistics_rule_configs
|
|
20239
20557
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC
|
|
@@ -20258,6 +20576,7 @@ DO $fsdo$ BEGIN
|
|
|
20258
20576
|
AS $function$
|
|
20259
20577
|
DECLARE v_pick timestamptz;
|
|
20260
20578
|
BEGIN
|
|
20579
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_moment');
|
|
20261
20580
|
IF public.logistics_cart_is_frozen(_cart) THEN RETURN true; END IF;
|
|
20262
20581
|
IF _release = 'with_packing_slip' THEN RETURN false; END IF;
|
|
20263
20582
|
SELECT t.planned_start INTO v_pick FROM public.logistics_tasks t
|
|
@@ -20282,6 +20601,7 @@ DO $fsdo$ BEGIN
|
|
|
20282
20601
|
AS $function$
|
|
20283
20602
|
DECLARE t text; m text[];
|
|
20284
20603
|
BEGIN
|
|
20604
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_parse_size');
|
|
20285
20605
|
IF p IS NULL OR p = 'null'::jsonb THEN RETURN NULL; END IF;
|
|
20286
20606
|
IF jsonb_typeof(p) = 'object' THEN
|
|
20287
20607
|
IF (p->>'width') ~ '^\d+(\.\d+)?$' AND (p->>'height') ~ '^\d+(\.\d+)?$' THEN
|
|
@@ -20321,6 +20641,7 @@ DO $fsdo$ BEGIN
|
|
|
20321
20641
|
SET search_path TO 'public'
|
|
20322
20642
|
AS $function$
|
|
20323
20643
|
BEGIN
|
|
20644
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_upsert');
|
|
20324
20645
|
INSERT INTO public.logistics_sticker_prints AS t
|
|
20325
20646
|
(soort, bron_id, order_id, order_number, cart_id, kopieen, breedte_mm, hoogte_mm, print_plek_id, fulfillment_order_id, status, reden)
|
|
20326
20647
|
VALUES (_soort, _bron, _order, _order_number, _cart, coalesce(_kopieen,0), _size[1], _size[2], _plek, _fo, _status, _reden)
|
|
@@ -20389,6 +20710,7 @@ DO $fsdo$ BEGIN
|
|
|
20389
20710
|
AS $function$
|
|
20390
20711
|
DECLARE d date := p_day; n int := greatest(coalesce(p_days,0),0); guard int := 0;
|
|
20391
20712
|
BEGIN
|
|
20713
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_subtract_pick_workdays');
|
|
20392
20714
|
WHILE n > 0 AND guard < 60 LOOP
|
|
20393
20715
|
d := d - 1; guard := guard + 1;
|
|
20394
20716
|
IF public.logistics_is_pick_workday(d) THEN n := n - 1; END IF;
|
|
@@ -20421,6 +20743,7 @@ DECLARE
|
|
|
20421
20743
|
v_seg_end timestamptz;
|
|
20422
20744
|
v_avail numeric;
|
|
20423
20745
|
BEGIN
|
|
20746
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_subtract_working_minutes');
|
|
20424
20747
|
IF p_deadline IS NULL THEN
|
|
20425
20748
|
RETURN jsonb_build_object('ok', false, 'reason', 'Geen deadline meegegeven.');
|
|
20426
20749
|
END IF;
|
|
@@ -20486,6 +20809,7 @@ DO $fsdo$ BEGIN
|
|
|
20486
20809
|
AS $function$
|
|
20487
20810
|
DECLARE n integer;
|
|
20488
20811
|
BEGIN
|
|
20812
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_supersede_stale_tasks');
|
|
20489
20813
|
UPDATE public.logistics_tasks
|
|
20490
20814
|
SET status = 'superseded', updated_at = now(),
|
|
20491
20815
|
payload = payload || jsonb_build_object('supersededByRun', p_run_id)
|
|
@@ -20508,6 +20832,7 @@ DO $fsdo$ BEGIN
|
|
|
20508
20832
|
AS $function$
|
|
20509
20833
|
DECLARE v_core jsonb; v_back jsonb;
|
|
20510
20834
|
BEGIN
|
|
20835
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sync_pick_queue');
|
|
20511
20836
|
v_core := public.logistics_sync_pick_queue_core();
|
|
20512
20837
|
BEGIN
|
|
20513
20838
|
v_back := public.logistics_sync_pick_queue_backlog();
|
|
@@ -20535,6 +20860,7 @@ DECLARE
|
|
|
20535
20860
|
v_lines integer; v_carts integer; v_payload jsonb; v_breakdown jsonb;
|
|
20536
20861
|
v_ins integer := 0; v_upd integer := 0; v_orders integer := 0;
|
|
20537
20862
|
BEGIN
|
|
20863
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sync_pick_queue_backlog');
|
|
20538
20864
|
IF v_max IS NULL THEN RETURN jsonb_build_object('achterstand', 'uit'); END IF;
|
|
20539
20865
|
v_pickmode := COALESCE(public.logistics_pick_mode()->>'pickMode', '');
|
|
20540
20866
|
IF v_pickmode <> 'cart' THEN
|
|
@@ -20645,6 +20971,7 @@ DECLARE
|
|
|
20645
20971
|
v_cart_lines integer; v_fix jsonb; v_cart_payload jsonb; v_cart_rows integer;
|
|
20646
20972
|
v_wait timestamptz; v_reason text; v_ok boolean;
|
|
20647
20973
|
BEGIN
|
|
20974
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sync_pick_queue_core');
|
|
20648
20975
|
v_today := public.logistics_local_today();
|
|
20649
20976
|
v_forced := NULLIF(current_setting('logistics.forced_pick_day', true), '')::date;
|
|
20650
20977
|
SELECT id INTO v_type_id FROM public.pick_document_types WHERE code = 'pakbon' LIMIT 1;
|
|
@@ -20871,6 +21198,7 @@ DO $fsdo$ BEGIN
|
|
|
20871
21198
|
AS $function$
|
|
20872
21199
|
DECLARE v_sent int := 0; v_failed int := 0;
|
|
20873
21200
|
BEGIN
|
|
21201
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_sync_stock_alert_email_status');
|
|
20874
21202
|
WITH k AS (
|
|
20875
21203
|
SELECT a.id, o.status AS ostatus, o.sent_at, o.last_error
|
|
20876
21204
|
FROM public.logistics_stock_alerts a
|
|
@@ -20912,6 +21240,7 @@ DECLARE
|
|
|
20912
21240
|
v_carriers jsonb;
|
|
20913
21241
|
v_source text;
|
|
20914
21242
|
BEGIN
|
|
21243
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sync_task_carriers');
|
|
20915
21244
|
FOR r IN
|
|
20916
21245
|
SELECT o.order_number,
|
|
20917
21246
|
COALESCE(jsonb_agg(x.entry ORDER BY x.entry ->> 'type') FILTER (WHERE x.entry IS NOT NULL), '[]'::jsonb) AS carriers,
|
|
@@ -20976,6 +21305,7 @@ DO $fsdo$ BEGIN
|
|
|
20976
21305
|
AS $function$
|
|
20977
21306
|
DECLARE v_n integer := 0;
|
|
20978
21307
|
BEGIN
|
|
21308
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_sync_task_status');
|
|
20979
21309
|
WITH refs AS (
|
|
20980
21310
|
SELECT DISTINCT t.order_ref FROM public.logistics_tasks t
|
|
20981
21311
|
WHERE t.status IN ('planned','ready','claimed','in_progress')
|
|
@@ -21028,6 +21358,7 @@ DO $fsdo$ BEGIN
|
|
|
21028
21358
|
STABLE SECURITY DEFINER
|
|
21029
21359
|
SET search_path TO 'public'
|
|
21030
21360
|
AS $function$
|
|
21361
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_task_open_counts');
|
|
21031
21362
|
SELECT t.owner_module::text, count(*)
|
|
21032
21363
|
FROM public.logistics_tasks t
|
|
21033
21364
|
WHERE t.status::text IN ('planned','open','claimed','pending','running')
|
|
@@ -21065,6 +21396,7 @@ DO $fsdo$ BEGIN
|
|
|
21065
21396
|
STABLE
|
|
21066
21397
|
SET search_path TO 'public'
|
|
21067
21398
|
AS $function$
|
|
21399
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_task_pick_minutes');
|
|
21068
21400
|
SELECT COALESCE(
|
|
21069
21401
|
NULLIF((
|
|
21070
21402
|
SELECT SUM(COALESCE((e ->> 'count')::numeric, 1)
|
|
@@ -21145,6 +21477,7 @@ AS $function$
|
|
|
21145
21477
|
DECLARE
|
|
21146
21478
|
v_count integer := 0;
|
|
21147
21479
|
BEGIN
|
|
21480
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_tasks_prune');
|
|
21148
21481
|
WITH weg AS (
|
|
21149
21482
|
DELETE FROM public.logistics_tasks t
|
|
21150
21483
|
WHERE t.status IN ('cancelled', 'superseded')
|
|
@@ -21173,6 +21506,7 @@ DECLARE
|
|
|
21173
21506
|
v_shell text; v_cur text; v_key text; v_path text;
|
|
21174
21507
|
v_host text; v_ping bigint; v_route bigint; v_id bigint; v_open record;
|
|
21175
21508
|
BEGIN
|
|
21509
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_tick_base_url_check');
|
|
21176
21510
|
IF v_uid IS NOT NULL AND NOT (
|
|
21177
21511
|
public.has_role(v_uid, 'admin') OR public.has_role(v_uid, 'superadmin') OR public.has_role(v_uid, 'developer')) THEN
|
|
21178
21512
|
RAISE EXCEPTION 'Geen rechten om het Shell-adres te controleren';
|
|
@@ -21248,6 +21582,7 @@ DO $fsdo$ BEGIN
|
|
|
21248
21582
|
AS $function$
|
|
21249
21583
|
DECLARE n int := 0; r record; v_json jsonb;
|
|
21250
21584
|
BEGIN
|
|
21585
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_tick_calls_resolve');
|
|
21251
21586
|
FOR r IN
|
|
21252
21587
|
SELECT c.id, h.status_code, h.content, h.error_msg, h.timed_out
|
|
21253
21588
|
FROM public.logistics_tick_calls c
|
|
@@ -21295,6 +21630,7 @@ AS $function$
|
|
|
21295
21630
|
DECLARE v_recent jsonb; v_fail int := 0; r record; v_last_ok timestamptz; v_last record; v_status text; v_ok_versie text;
|
|
21296
21631
|
v_shell_fout_24u int; v_db_fout_24u int; v_laatste_fout timestamptz; v_laatste_stapfout jsonb;
|
|
21297
21632
|
BEGIN
|
|
21633
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_tick_health');
|
|
21298
21634
|
SELECT * INTO v_last FROM public.logistics_tick_calls WHERE resolved_at IS NOT NULL ORDER BY called_at DESC LIMIT 1;
|
|
21299
21635
|
FOR r IN SELECT engine_ok, status_code FROM public.logistics_tick_calls WHERE resolved_at IS NOT NULL ORDER BY called_at DESC LIMIT 10 LOOP
|
|
21300
21636
|
EXIT WHEN COALESCE(r.engine_ok, false) AND r.status_code = 200;
|
|
@@ -21341,6 +21677,7 @@ DO $fsdo$ BEGIN
|
|
|
21341
21677
|
AS $function$
|
|
21342
21678
|
DECLARE v_now timestamptz := now();
|
|
21343
21679
|
BEGIN
|
|
21680
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_tick_ping');
|
|
21344
21681
|
INSERT INTO public.logistics_tick_heartbeat (id, last_tick_at)
|
|
21345
21682
|
VALUES (true, v_now)
|
|
21346
21683
|
ON CONFLICT (id) DO UPDATE SET last_tick_at = EXCLUDED.last_tick_at;
|
|
@@ -21361,6 +21698,7 @@ DO $fsdo$ BEGIN
|
|
|
21361
21698
|
AS $function$
|
|
21362
21699
|
DECLARE n int;
|
|
21363
21700
|
BEGIN
|
|
21701
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_tick_runs_prune');
|
|
21364
21702
|
DELETE FROM public.logistics_tick_runs
|
|
21365
21703
|
WHERE (NOT has_error AND started_at < now() - interval '14 days')
|
|
21366
21704
|
OR (has_error AND started_at < now() - interval '90 days');
|
|
@@ -21397,6 +21735,7 @@ DO $fsdo$ BEGIN
|
|
|
21397
21735
|
STABLE SECURITY DEFINER
|
|
21398
21736
|
SET search_path TO 'public'
|
|
21399
21737
|
AS $function$
|
|
21738
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_timezone_options');
|
|
21400
21739
|
SELECT n.name::text
|
|
21401
21740
|
FROM pg_timezone_names n
|
|
21402
21741
|
WHERE n.name LIKE '%/%'
|
|
@@ -21414,6 +21753,7 @@ DO $fsdo$ BEGIN
|
|
|
21414
21753
|
STABLE SECURITY DEFINER
|
|
21415
21754
|
SET search_path TO 'public'
|
|
21416
21755
|
AS $function$
|
|
21756
|
+
SELECT public.logistics_acc_guard('server', 'logistics_today_cart_ids');
|
|
21417
21757
|
WITH k AS MATERIALIZED (SELECT public.logistics_tz() AS tz, public.logistics_local_today() AS d)
|
|
21418
21758
|
SELECT coalesce(array_agg(DISTINCT x), '{}') FROM (
|
|
21419
21759
|
SELECT ci.cart_id AS x FROM k, LATERAL public.logistics_cart_index(k.d, k.d) ci WHERE ci.cart_id IS NOT NULL
|
|
@@ -21451,6 +21791,7 @@ DECLARE
|
|
|
21451
21791
|
v_status text;
|
|
21452
21792
|
v_class text;
|
|
21453
21793
|
BEGIN
|
|
21794
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace');
|
|
21454
21795
|
v_status := CASE WHEN p->>'status' IN ('geslaagd','wachtend','waarschuwing','overgeslagen','mislukt')
|
|
21455
21796
|
THEN p->>'status' ELSE 'geslaagd' END;
|
|
21456
21797
|
v_class := NULLIF(p->>'errorClass','');
|
|
@@ -21508,6 +21849,7 @@ DO $fsdo$ BEGIN
|
|
|
21508
21849
|
STABLE SECURITY DEFINER
|
|
21509
21850
|
SET search_path TO 'public'
|
|
21510
21851
|
AS $function$
|
|
21852
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_trace_all_orders');
|
|
21511
21853
|
WITH selected_orders AS MATERIALIZED (
|
|
21512
21854
|
SELECT o.id, o.order_number, o.order_source, o.status AS order_status, o.delivery_date,
|
|
21513
21855
|
o.customer_name, o.created_at, o.cancelled_at, o.buffer_id
|
|
@@ -21561,6 +21903,7 @@ DECLARE
|
|
|
21561
21903
|
v_cols text;
|
|
21562
21904
|
v_n integer := 0;
|
|
21563
21905
|
BEGIN
|
|
21906
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_archive_order');
|
|
21564
21907
|
SELECT string_agg(quote_ident(column_name), ', ' ORDER BY ordinal_position)
|
|
21565
21908
|
INTO v_cols
|
|
21566
21909
|
FROM information_schema.columns
|
|
@@ -21594,6 +21937,7 @@ DO $fsdo$ BEGIN
|
|
|
21594
21937
|
AS $function$
|
|
21595
21938
|
DECLARE item jsonb; n integer := 0;
|
|
21596
21939
|
BEGIN
|
|
21940
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_batch');
|
|
21597
21941
|
IF p IS NULL OR jsonb_typeof(p) <> 'array' THEN RETURN 0; END IF;
|
|
21598
21942
|
FOR item IN SELECT * FROM jsonb_array_elements(p) LOOP
|
|
21599
21943
|
IF public.logistics_trace(item) IS NOT NULL THEN n := n + 1; END IF;
|
|
@@ -21728,6 +22072,7 @@ DECLARE
|
|
|
21728
22072
|
e jsonb;
|
|
21729
22073
|
n integer := 0;
|
|
21730
22074
|
BEGIN
|
|
22075
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_derive');
|
|
21731
22076
|
IF p IS NULL OR jsonb_typeof(p) <> 'array' THEN RETURN 0; END IF;
|
|
21732
22077
|
|
|
21733
22078
|
FOR e IN SELECT * FROM jsonb_array_elements(p) LOOP
|
|
@@ -21803,6 +22148,7 @@ DECLARE
|
|
|
21803
22148
|
v_target uuid := p_order_id;
|
|
21804
22149
|
v_enabled boolean;
|
|
21805
22150
|
BEGIN
|
|
22151
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_order_journey_start');
|
|
21806
22152
|
SELECT o.order_source, o.order_number INTO v_source, v_number
|
|
21807
22153
|
FROM public.orders o WHERE o.id = p_order_id;
|
|
21808
22154
|
IF v_number IS NULL THEN RETURN p_order_id; END IF;
|
|
@@ -21898,6 +22244,7 @@ DECLARE
|
|
|
21898
22244
|
v_number text;
|
|
21899
22245
|
v_node text;
|
|
21900
22246
|
BEGIN
|
|
22247
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_order_origin');
|
|
21901
22248
|
SELECT o.order_source, o.order_number INTO v_source, v_number
|
|
21902
22249
|
FROM public.orders o WHERE o.id = p_order_id;
|
|
21903
22250
|
IF v_number IS NULL THEN RETURN; END IF;
|
|
@@ -21944,6 +22291,7 @@ DO $fsdo$ BEGIN
|
|
|
21944
22291
|
STABLE SECURITY DEFINER
|
|
21945
22292
|
SET search_path TO 'public'
|
|
21946
22293
|
AS $function$
|
|
22294
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_trace_order_overview');
|
|
21947
22295
|
WITH o AS (
|
|
21948
22296
|
SELECT o.order_number, o.order_source, o.status AS order_status, o.delivery_date,
|
|
21949
22297
|
o.customer_name, o.created_at, o.cancelled_at, o.buffer_id
|
|
@@ -22053,6 +22401,7 @@ DO $fsdo$ BEGIN
|
|
|
22053
22401
|
STABLE SECURITY DEFINER
|
|
22054
22402
|
SET search_path TO 'public'
|
|
22055
22403
|
AS $function$
|
|
22404
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_trace_order_state');
|
|
22056
22405
|
WITH laatste AS (
|
|
22057
22406
|
SELECT * FROM public.logistics_trace_events
|
|
22058
22407
|
WHERE order_ref = p_order_ref
|
|
@@ -22119,6 +22468,7 @@ DECLARE
|
|
|
22119
22468
|
v_number text;
|
|
22120
22469
|
v_source text;
|
|
22121
22470
|
BEGIN
|
|
22471
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_order_step');
|
|
22122
22472
|
SELECT o.order_number, o.order_source INTO v_number, v_source
|
|
22123
22473
|
FROM public.orders o WHERE o.id = p_order_id;
|
|
22124
22474
|
IF v_number IS NULL THEN RETURN; END IF;
|
|
@@ -22157,6 +22507,7 @@ DECLARE
|
|
|
22157
22507
|
v_search text := NULLIF(btrim(COALESCE(p_search,'')), '');
|
|
22158
22508
|
v jsonb;
|
|
22159
22509
|
BEGIN
|
|
22510
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_orders');
|
|
22160
22511
|
EXECUTE $q$
|
|
22161
22512
|
WITH refs AS (
|
|
22162
22513
|
SELECT DISTINCT e.order_ref FROM public.logistics_trace_events e
|
|
@@ -22256,6 +22607,7 @@ DECLARE
|
|
|
22256
22607
|
v_last_dn timestamptz;
|
|
22257
22608
|
v_ready jsonb;
|
|
22258
22609
|
BEGIN
|
|
22610
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_pick_state');
|
|
22259
22611
|
IF p_order_number IS NULL OR btrim(p_order_number) = '' THEN RETURN; END IF;
|
|
22260
22612
|
|
|
22261
22613
|
SELECT o.id INTO v_id
|
|
@@ -22338,6 +22690,7 @@ DECLARE
|
|
|
22338
22690
|
r record;
|
|
22339
22691
|
v_orders integer := 0;
|
|
22340
22692
|
BEGIN
|
|
22693
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_progress');
|
|
22341
22694
|
FOR r IN
|
|
22342
22695
|
SELECT o.order_number
|
|
22343
22696
|
FROM public.orders o
|
|
@@ -22380,6 +22733,7 @@ DECLARE
|
|
|
22380
22733
|
v_pq_done integer;
|
|
22381
22734
|
v_scans integer;
|
|
22382
22735
|
BEGIN
|
|
22736
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_progress_order');
|
|
22383
22737
|
IF p_order_ref IS NULL OR btrim(p_order_ref) = '' THEN
|
|
22384
22738
|
RETURN jsonb_build_object('gevonden', false);
|
|
22385
22739
|
END IF;
|
|
@@ -22609,6 +22963,7 @@ DO $fsdo$ BEGIN
|
|
|
22609
22963
|
AS $function$
|
|
22610
22964
|
DECLARE v_number text;
|
|
22611
22965
|
BEGIN
|
|
22966
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_step_once');
|
|
22612
22967
|
SELECT o.order_number INTO v_number FROM public.orders o WHERE o.id = p_order_id;
|
|
22613
22968
|
IF v_number IS NULL THEN RETURN; END IF;
|
|
22614
22969
|
|
|
@@ -22650,6 +23005,7 @@ DECLARE
|
|
|
22650
23005
|
v_tekst text := '';
|
|
22651
23006
|
v_alert public.logistics_stock_alerts%ROWTYPE;
|
|
22652
23007
|
BEGIN
|
|
23008
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_stock_check');
|
|
22653
23009
|
SELECT * INTO ord FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
22654
23010
|
IF NOT FOUND THEN RETURN; END IF;
|
|
22655
23011
|
|
|
@@ -22769,6 +23125,7 @@ DO $fsdo$ BEGIN
|
|
|
22769
23125
|
STABLE SECURITY DEFINER
|
|
22770
23126
|
SET search_path TO 'public'
|
|
22771
23127
|
AS $function$
|
|
23128
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_trace_timeline');
|
|
22772
23129
|
SELECT COALESCE(jsonb_agg(to_jsonb(t) ORDER BY t.created_at ASC, t.id ASC), '[]'::jsonb)
|
|
22773
23130
|
FROM (SELECT * FROM public.logistics_trace_events WHERE order_ref = p_order_ref
|
|
22774
23131
|
ORDER BY created_at DESC LIMIT GREATEST(COALESCE(p_limit,500),1)) t;
|
|
@@ -22785,6 +23142,7 @@ DO $fsdo$ BEGIN
|
|
|
22785
23142
|
STABLE SECURITY DEFINER
|
|
22786
23143
|
SET search_path TO 'public'
|
|
22787
23144
|
AS $function$
|
|
23145
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_trace_version_events');
|
|
22788
23146
|
SELECT COALESCE(jsonb_agg(to_jsonb(e) ORDER BY e.created_at ASC), '[]'::jsonb)
|
|
22789
23147
|
FROM (
|
|
22790
23148
|
SELECT *
|
|
@@ -22816,6 +23174,7 @@ DECLARE
|
|
|
22816
23174
|
v_carts jsonb;
|
|
22817
23175
|
v_versions jsonb;
|
|
22818
23176
|
BEGIN
|
|
23177
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_trace_versions');
|
|
22819
23178
|
IF p_order_ref IS NULL OR p_order_ref = '' THEN
|
|
22820
23179
|
RETURN jsonb_build_object('order', NULL, 'carts', NULL, 'versions', '[]'::jsonb);
|
|
22821
23180
|
END IF;
|
|
@@ -22985,7 +23344,8 @@ DO $fsdo$ BEGIN
|
|
|
22985
23344
|
LANGUAGE sql
|
|
22986
23345
|
STABLE SECURITY DEFINER
|
|
22987
23346
|
SET search_path TO 'public'
|
|
22988
|
-
AS $function$
|
|
23347
|
+
AS $function$
|
|
23348
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_tz'); SELECT nullif(btrim(t.timezone), '') FROM public.logistics_time_settings t ORDER BY t.updated_at DESC NULLS LAST LIMIT 1 $function$
|
|
22989
23349
|
$fsdef$;
|
|
22990
23350
|
EXCEPTION WHEN undefined_object OR undefined_table OR undefined_function OR invalid_schema_name THEN
|
|
22991
23351
|
RAISE NOTICE 'logistiek-engine: functie public.logistics_tz overgeslagen (onderdeel van andere module ontbreekt): %', SQLERRM;
|
|
@@ -22998,6 +23358,7 @@ DO $fsdo$ BEGIN
|
|
|
22998
23358
|
STABLE SECURITY DEFINER
|
|
22999
23359
|
SET search_path TO 'public'
|
|
23000
23360
|
AS $function$
|
|
23361
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_unit_all_carts_scanned');
|
|
23001
23362
|
SELECT NOT EXISTS (SELECT 1 FROM unnest(public.logistics_unit_order_ids(p_order_id)) m
|
|
23002
23363
|
WHERE NOT public.logistics_order_all_carts_scanned(m))
|
|
23003
23364
|
AND NOT EXISTS (SELECT 1 FROM public.orders o JOIN logistics_active.order_carts c ON c.buffer_id = o.buffer_id AND c.order_id IS NULL
|
|
@@ -23016,6 +23377,7 @@ DO $fsdo$ BEGIN
|
|
|
23016
23377
|
STABLE SECURITY DEFINER
|
|
23017
23378
|
SET search_path TO 'public'
|
|
23018
23379
|
AS $function$
|
|
23380
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_unit_order_ids');
|
|
23019
23381
|
WITH o AS (SELECT id, buffer_id FROM public.orders WHERE id = p_order_id),
|
|
23020
23382
|
m AS (SELECT o2.id, o2.order_number FROM o JOIN public.orders o2 ON o2.buffer_id = o.buffer_id
|
|
23021
23383
|
WHERE o.buffer_id IS NOT NULL AND o2.deleted_at IS NULL AND o2.cancelled_at IS NULL)
|
|
@@ -23036,6 +23398,7 @@ DO $fsdo$ BEGIN
|
|
|
23036
23398
|
AS $function$
|
|
23037
23399
|
DECLARE existing public.logistics_tasks%ROWTYPE;
|
|
23038
23400
|
BEGIN
|
|
23401
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_upsert_task');
|
|
23039
23402
|
SELECT * INTO existing FROM public.logistics_tasks
|
|
23040
23403
|
WHERE user_id = p_user_id AND order_ref = p_order_ref AND task_type = p_task_type
|
|
23041
23404
|
AND status NOT IN ('cancelled','superseded')
|
|
@@ -23076,6 +23439,7 @@ DO $fsdo$ BEGIN
|
|
|
23076
23439
|
STABLE SECURITY DEFINER
|
|
23077
23440
|
SET search_path TO 'public'
|
|
23078
23441
|
AS $function$
|
|
23442
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_valid_timezone');
|
|
23079
23443
|
SELECT EXISTS (SELECT 1 FROM pg_timezone_names n WHERE n.name = _tz)
|
|
23080
23444
|
$function$
|
|
23081
23445
|
$fsdef$;
|
|
@@ -23092,6 +23456,7 @@ DO $fsdo$ BEGIN
|
|
|
23092
23456
|
AS $function$
|
|
23093
23457
|
DECLARE v_base text; v_path text;
|
|
23094
23458
|
BEGIN
|
|
23459
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_verkoop_order_link');
|
|
23095
23460
|
IF p_order_id IS NULL THEN RETURN NULL; END IF;
|
|
23096
23461
|
v_base := public.logistics_shell_base_url();
|
|
23097
23462
|
SELECT nullif(btrim(value), '') INTO v_path FROM public.module_runtime_config WHERE key = 'verkoop_order_path' LIMIT 1;
|
|
@@ -23135,6 +23500,7 @@ DO $fsdo$ BEGIN
|
|
|
23135
23500
|
AS $function$
|
|
23136
23501
|
declare c record; v_total int := 0;
|
|
23137
23502
|
begin
|
|
23503
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_write_buffer_layer_positions');
|
|
23138
23504
|
for c in select id from logistics_active.order_carts where buffer_id = p_buffer_id loop
|
|
23139
23505
|
v_total := v_total + public.logistics_write_cart_layer_positions(c.id);
|
|
23140
23506
|
end loop;
|
|
@@ -23178,6 +23544,7 @@ declare
|
|
|
23178
23544
|
v_k int; v_s int; v_slot jsonb;
|
|
23179
23545
|
v_placed jsonb := '[]'::jsonb;
|
|
23180
23546
|
begin
|
|
23547
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_write_cart_layer_positions');
|
|
23181
23548
|
select * into v_cart from logistics_active.order_carts where id = p_cart_id;
|
|
23182
23549
|
if v_cart.id is null then return 0; end if;
|
|
23183
23550
|
|
|
@@ -23406,6 +23773,7 @@ DECLARE
|
|
|
23406
23773
|
v_total integer := 0; v_full integer := 0; v_partial integer := 0;
|
|
23407
23774
|
v_shared integer := 0; v_crates integer := 0;
|
|
23408
23775
|
BEGIN
|
|
23776
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'pick_cart_breakdown');
|
|
23409
23777
|
v_orders := public.pick_buffer_order_ids(_order_id);
|
|
23410
23778
|
IF v_orders IS NULL OR cardinality(v_orders) = 0 THEN v_orders := ARRAY[_order_id]; END IF;
|
|
23411
23779
|
SELECT o.order_number INTO v_ref FROM public.orders o WHERE o.id = _order_id;
|
|
@@ -23533,6 +23901,9 @@ DECLARE
|
|
|
23533
23901
|
v_key text := NULLIF(btrim(coalesce(p_key, '')), '');
|
|
23534
23902
|
v_cur text;
|
|
23535
23903
|
BEGIN
|
|
23904
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_register_tick_apikey');
|
|
23905
|
+
-- Alleen de server van de Shell (service_role) mag dit; die geeft zijn eigen
|
|
23906
|
+
-- openbare sleutel door, dezelfde waarmee de minuutronde-route controleert.
|
|
23536
23907
|
IF v_key IS NULL THEN
|
|
23537
23908
|
RETURN jsonb_build_object('ok', false, 'status', 'geen_sleutel_op_server');
|
|
23538
23909
|
END IF;
|
|
@@ -26448,13 +26819,12 @@ DECLARE
|
|
|
26448
26819
|
v_types public.doc_layout_type[];
|
|
26449
26820
|
v_layout public.document_layouts%ROWTYPE;
|
|
26450
26821
|
BEGIN
|
|
26822
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_document_layout_v2');
|
|
26451
26823
|
v_types := public.logistics_document_type_map(lower(btrim(coalesce(_document_code, ''))));
|
|
26452
26824
|
IF array_length(v_types, 1) IS NULL THEN RETURN NULL; END IF;
|
|
26453
|
-
SELECT * INTO v_layout
|
|
26454
|
-
FROM public.document_layouts
|
|
26825
|
+
SELECT * INTO v_layout FROM public.document_layouts
|
|
26455
26826
|
WHERE actief IS TRUE AND documenttype = ANY (v_types)
|
|
26456
|
-
ORDER BY array_position(v_types, documenttype),
|
|
26457
|
-
(coalesce(bron, 'eigen') = 'eigen') DESC,
|
|
26827
|
+
ORDER BY array_position(v_types, documenttype), (coalesce(bron, 'eigen') = 'eigen') DESC,
|
|
26458
26828
|
is_standaard DESC NULLS LAST, updated_at DESC
|
|
26459
26829
|
LIMIT 1;
|
|
26460
26830
|
IF v_layout.id IS NULL THEN RETURN NULL; END IF;
|
|
@@ -26486,8 +26856,12 @@ $function$;
|
|
|
26486
26856
|
-- 4. Centrale beslisregel.
|
|
26487
26857
|
-- 5. Eigen stickers (HO/MO/AO): één per klant+product, aantal = planten van regels met needs_sticker.
|
|
26488
26858
|
CREATE OR REPLACE FUNCTION public.logistics_own_sticker_count(p_unit text, p_quantity numeric, p_ppc_regel numeric, p_ppc_product numeric)
|
|
26489
|
-
RETURNS integer
|
|
26490
|
-
|
|
26859
|
+
RETURNS integer
|
|
26860
|
+
LANGUAGE sql
|
|
26861
|
+
IMMUTABLE
|
|
26862
|
+
SET search_path TO 'public'
|
|
26863
|
+
AS $function$
|
|
26864
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_own_sticker_count');
|
|
26491
26865
|
SELECT CASE
|
|
26492
26866
|
WHEN p_quantity IS NULL THEN NULL
|
|
26493
26867
|
WHEN lower(coalesce(p_unit, '')) = 'fust' THEN
|
|
@@ -26495,7 +26869,7 @@ RETURNS integer LANGUAGE sql IMMUTABLE SET search_path = public AS $cnt$
|
|
|
26495
26869
|
ELSE (p_quantity * coalesce(nullif(p_ppc_regel, 0), nullif(p_ppc_product, 0)))::int END
|
|
26496
26870
|
ELSE p_quantity::int
|
|
26497
26871
|
END
|
|
26498
|
-
$
|
|
26872
|
+
$function$;
|
|
26499
26873
|
|
|
26500
26874
|
CREATE OR REPLACE FUNCTION public.logistics_own_sticker_sync(p_limit integer DEFAULT 200)
|
|
26501
26875
|
RETURNS jsonb
|
|
@@ -26514,6 +26888,7 @@ DECLARE
|
|
|
26514
26888
|
v_vrij int := 0;
|
|
26515
26889
|
v_uit int := 0;
|
|
26516
26890
|
BEGIN
|
|
26891
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_own_sticker_sync');
|
|
26517
26892
|
FOR r IN
|
|
26518
26893
|
SELECT o.id AS order_id, o.order_number, o.customer_id, oi.product_id,
|
|
26519
26894
|
sum(public.logistics_own_sticker_count(oi.unit, oi.quantity, oi.plants_per_crate, prd.plants_per_crate))::int AS planten,
|
|
@@ -26566,7 +26941,6 @@ BEGIN
|
|
|
26566
26941
|
v_bijgewerkt := v_bijgewerkt + 1;
|
|
26567
26942
|
END LOOP;
|
|
26568
26943
|
|
|
26569
|
-
-- Vinkje uitgezet (of order vervallen) vóór het printen: niet printen.
|
|
26570
26944
|
UPDATE public.logistics_sticker_prints p
|
|
26571
26945
|
SET status = 'niet_printen', reden = 'Sticker uitgezet op de orderregel of order vervallen.', updated_at = now()
|
|
26572
26946
|
WHERE p.soort = 'eigen_sticker' AND p.status IN ('wacht_op_moment', 'geblokkeerd', 'klaar')
|
|
@@ -26577,7 +26951,6 @@ BEGIN
|
|
|
26577
26951
|
AND o.deleted_at IS NULL AND o.cancelled_at IS NULL AND coalesce(o.status, '') <> 'geannuleerd');
|
|
26578
26952
|
GET DIAGNOSTICS v_uit = ROW_COUNT;
|
|
26579
26953
|
|
|
26580
|
-
-- Vrijgeven met de pakbon: kar en printplek van de geprinte pakbonrij, formaat uit sticker of layout.
|
|
26581
26954
|
WITH vrij AS (
|
|
26582
26955
|
SELECT p.id,
|
|
26583
26956
|
(SELECT public.logistics_try_uuid(q.payload->>'cartId')
|
|
@@ -26646,6 +27019,7 @@ DECLARE
|
|
|
26646
27019
|
v_freeze boolean := public.logistics_plan_setting('verdeling_bevriezen_actief', 0) = 1;
|
|
26647
27020
|
v_frozen_ids uuid[]; v_line_ids uuid[];
|
|
26648
27021
|
BEGIN
|
|
27022
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_recompute_reserved_targeted');
|
|
26649
27023
|
IF p_product_id IS NULL THEN RETURN jsonb_build_object('status', 'geen_product'); END IF;
|
|
26650
27024
|
IF current_setting('app.recomputing_reserved', true) = 'on' THEN RETURN jsonb_build_object('status', 'al_bezig'); END IF;
|
|
26651
27025
|
PERFORM set_config('app.recomputing_reserved', 'on', true);
|
|
@@ -26846,7 +27220,8 @@ BEGIN
|
|
|
26846
27220
|
JOIN public.orders ord ON ord.id = op.order_id
|
|
26847
27221
|
WHERE r.trade_item_key = d.trade_item_key AND r.qty > 0
|
|
26848
27222
|
AND NOT (public.normalize_order_source(ord.order_source) = 'FO'
|
|
26849
|
-
AND COALESCE(public.voorraad_floriday_leads_key(d.trade_item_key), false))), 0)
|
|
27223
|
+
AND COALESCE(public.voorraad_floriday_leads_key(d.trade_item_key), false))), 0)
|
|
27224
|
+
WHERE d.trade_item_key IS NOT NULL; -- safeupdate: sleutel van _rt_demand (altijd gevuld)
|
|
26850
27225
|
ELSE
|
|
26851
27226
|
PERFORM public.logistics_trace(jsonb_build_object(
|
|
26852
27227
|
'phase', 'reservering', 'step', 'reservering herberekenen', 'status', 'waarschuwing',
|
|
@@ -26937,6 +27312,7 @@ DECLARE
|
|
|
26937
27312
|
v_ok boolean := true;
|
|
26938
27313
|
v_reden text;
|
|
26939
27314
|
BEGIN
|
|
27315
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_resolve_pick_document');
|
|
26940
27316
|
SELECT * INTO item FROM public.pick_queue WHERE id = _queue_item_id;
|
|
26941
27317
|
IF NOT FOUND THEN
|
|
26942
27318
|
RAISE EXCEPTION 'Dit document bestaat niet meer.' USING ERRCODE = 'P0002';
|
|
@@ -27106,6 +27482,7 @@ declare
|
|
|
27106
27482
|
doc jsonb; target_printer uuid; job_id uuid; v_cart_id uuid;
|
|
27107
27483
|
v_doc_code text; v_plan jsonb; v_cart jsonb; v_last uuid; v_row_cart text;
|
|
27108
27484
|
begin
|
|
27485
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'pick_enqueue_print_job');
|
|
27109
27486
|
select lower(btrim(coalesce(nullif(q.payload->>'documentType',''), nullif(t.code,''), ''))),
|
|
27110
27487
|
nullif(q.payload->>'cartId','')
|
|
27111
27488
|
into v_doc_code, v_row_cart
|
|
@@ -27198,6 +27575,7 @@ DECLARE
|
|
|
27198
27575
|
v_sleutel text;
|
|
27199
27576
|
v_order uuid;
|
|
27200
27577
|
BEGIN
|
|
27578
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'pick_enqueue_print_job');
|
|
27201
27579
|
SELECT * INTO item FROM public.pick_queue WHERE id = _queue_item_id;
|
|
27202
27580
|
IF NOT FOUND THEN RAISE EXCEPTION 'Dit document bestaat niet meer.'; END IF;
|
|
27203
27581
|
SELECT * INTO dt FROM public.pick_document_types WHERE id = item.document_type_id;
|
|
@@ -27366,7 +27744,6 @@ BEGIN
|
|
|
27366
27744
|
RETURN jsonb_build_object('ok', false, 'layout_id', NULL, 'reden', 'Geen documentsoort opgegeven.');
|
|
27367
27745
|
END IF;
|
|
27368
27746
|
|
|
27369
|
-
-- 1.0.176: 'verzenddocument' wordt hier vertaald naar het echte document van de order.
|
|
27370
27747
|
IF v_soort IN ('verzenddocument', 'verzendbrief') THEN
|
|
27371
27748
|
SELECT o.order_source = 'floriday' INTO v_floriday FROM public.orders o WHERE o.id = p_order_id;
|
|
27372
27749
|
IF NOT FOUND THEN
|
|
@@ -27466,12 +27843,16 @@ RETURNS integer LANGUAGE sql IMMUTABLE SET search_path = public AS $tp$
|
|
|
27466
27843
|
$tp$;
|
|
27467
27844
|
|
|
27468
27845
|
CREATE OR REPLACE FUNCTION public.logistics_own_traysticker_payload(p_id uuid)
|
|
27469
|
-
RETURNS jsonb
|
|
27846
|
+
RETURNS jsonb
|
|
27847
|
+
LANGUAGE plpgsql
|
|
27848
|
+
STABLE SECURITY DEFINER
|
|
27849
|
+
SET search_path TO 'public'
|
|
27470
27850
|
AS $function$
|
|
27471
27851
|
DECLARE
|
|
27472
27852
|
p record; o record; c record; v_ci uuid; v_k int; v_nr int; v_tot int; v_loc text;
|
|
27473
27853
|
v_ppc int; v_regel_tot int; v_item_voor int; v_item_fusten int; v_aantal int; v_prod jsonb;
|
|
27474
27854
|
BEGIN
|
|
27855
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_own_traysticker_payload');
|
|
27475
27856
|
SELECT * INTO p FROM public.logistics_sticker_prints WHERE id = p_id AND soort = 'eigen_traysticker';
|
|
27476
27857
|
IF p.id IS NULL THEN RETURN jsonb_build_object('ok', false, 'reden', 'Traysticker niet gevonden.'); END IF;
|
|
27477
27858
|
v_ci := public.logistics_try_uuid(split_part(p.bron_id, ':', 3));
|
|
@@ -27490,7 +27871,6 @@ BEGIN
|
|
|
27490
27871
|
END IF;
|
|
27491
27872
|
SELECT * INTO o FROM public.orders WHERE id = p.order_id;
|
|
27492
27873
|
|
|
27493
|
-
-- Fustnummer x van y binnen de order (alle karren), volgorde kar, regel, fust.
|
|
27494
27874
|
WITH alle AS (
|
|
27495
27875
|
SELECT ci.id, ci.crates, row_number() OVER (ORDER BY ci.cart_id, ci.created_at, ci.id) AS rn
|
|
27496
27876
|
FROM public.order_cart_items ci JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
@@ -27500,7 +27880,6 @@ BEGIN
|
|
|
27500
27880
|
coalesce(sum(crates) FILTER (WHERE rn < (SELECT rn FROM alle WHERE id = v_ci)), 0)::int + v_k
|
|
27501
27881
|
INTO v_tot, v_nr FROM alle;
|
|
27502
27882
|
|
|
27503
|
-
-- Planten per fust: karregel, dan orderregel, dan product. Laatste fust van de regel: de rest.
|
|
27504
27883
|
v_ppc := coalesce(nullif(c.plants_per_crate, 0), nullif(c.ppc_regel, 0), nullif(c.ppc_product, 0))::int;
|
|
27505
27884
|
IF v_ppc IS NULL THEN
|
|
27506
27885
|
RETURN jsonb_build_object('ok', false, 'reden', 'Planten per fust onbekend (niet op de regel en niet bij het product). Vul planten per fust in.');
|
|
@@ -27557,10 +27936,14 @@ DO $p$ BEGIN
|
|
|
27557
27936
|
END IF;
|
|
27558
27937
|
END $p$;
|
|
27559
27938
|
|
|
27560
|
-
CREATE OR REPLACE FUNCTION public.logistics_belading_bevestig(p_order_id uuid, p_sleutel text, p_redenen text[] DEFAULT '{}')
|
|
27561
|
-
RETURNS jsonb
|
|
27939
|
+
CREATE OR REPLACE FUNCTION public.logistics_belading_bevestig(p_order_id uuid, p_sleutel text, p_redenen text[] DEFAULT '{}'::text[])
|
|
27940
|
+
RETURNS jsonb
|
|
27941
|
+
LANGUAGE plpgsql
|
|
27942
|
+
SECURITY DEFINER
|
|
27943
|
+
SET search_path TO 'public'
|
|
27562
27944
|
AS $function$
|
|
27563
27945
|
BEGIN
|
|
27946
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_belading_bevestig');
|
|
27564
27947
|
IF NOT public.logistics_is_beheer() THEN
|
|
27565
27948
|
RAISE EXCEPTION 'Alleen beheer mag een belading bevestigen.';
|
|
27566
27949
|
END IF;
|
|
@@ -27578,9 +27961,13 @@ GRANT EXECUTE ON FUNCTION public.logistics_belading_bevestig(uuid, text, text[])
|
|
|
27578
27961
|
|
|
27579
27962
|
-- 5. Lease bezet: opdracht blijft open en komt later terug (nooit 'done' zonder indeling).
|
|
27580
27963
|
CREATE OR REPLACE FUNCTION public.logistics_plan_retry_later(p_id uuid, p_seconds integer DEFAULT 30)
|
|
27581
|
-
RETURNS void
|
|
27964
|
+
RETURNS void
|
|
27965
|
+
LANGUAGE plpgsql
|
|
27966
|
+
SECURITY DEFINER
|
|
27967
|
+
SET search_path TO 'public'
|
|
27582
27968
|
AS $function$
|
|
27583
27969
|
BEGIN
|
|
27970
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_retry_later');
|
|
27584
27971
|
UPDATE public.logistics_plan_queue
|
|
27585
27972
|
SET status = 'pending', claimed_at = NULL,
|
|
27586
27973
|
next_attempt_at = now() + make_interval(secs => greatest(5, least(coalesce(p_seconds, 30), 600))),
|
|
@@ -27617,10 +28004,13 @@ DO $c$ BEGIN
|
|
|
27617
28004
|
END $c$;
|
|
27618
28005
|
|
|
27619
28006
|
-- Dubbele kar-indexen per order (twee karren met hetzelfde volgnummer): alleen-lezen lijst.
|
|
27620
|
-
CREATE OR REPLACE FUNCTION public.logistics_cart_seq_dubbel(p_order_uuid uuid DEFAULT NULL)
|
|
28007
|
+
CREATE OR REPLACE FUNCTION public.logistics_cart_seq_dubbel(p_order_uuid uuid DEFAULT NULL::uuid)
|
|
27621
28008
|
RETURNS TABLE(order_uuid uuid, cart_index integer, cart_ids uuid[])
|
|
27622
|
-
LANGUAGE sql
|
|
28009
|
+
LANGUAGE sql
|
|
28010
|
+
STABLE SECURITY DEFINER
|
|
28011
|
+
SET search_path TO 'public'
|
|
27623
28012
|
AS $function$
|
|
28013
|
+
SELECT public.logistics_acc_guard('server', 'logistics_cart_seq_dubbel');
|
|
27624
28014
|
WITH ruw AS (
|
|
27625
28015
|
SELECT oc.id AS cart_id, oc.cart_number AS cart_index, oc.order_id AS order_uuid
|
|
27626
28016
|
FROM logistics_active.order_carts oc
|
|
@@ -27642,10 +28032,13 @@ GRANT EXECUTE ON FUNCTION public.logistics_cart_seq_dubbel(uuid) TO service_role
|
|
|
27642
28032
|
-- Karnummer eerst via kar-id, anders via order + index (bestaande nummers).
|
|
27643
28033
|
CREATE OR REPLACE FUNCTION public.logistics_cart_seq(p_order_uuid uuid DEFAULT NULL::uuid)
|
|
27644
28034
|
RETURNS TABLE(order_uuid uuid, cart_id uuid, cart_index integer, cart_seq integer, cart_number text, cart_total integer)
|
|
27645
|
-
LANGUAGE plpgsql
|
|
28035
|
+
LANGUAGE plpgsql
|
|
28036
|
+
STABLE SECURITY DEFINER
|
|
28037
|
+
SET search_path TO 'public'
|
|
27646
28038
|
AS $function$
|
|
27647
28039
|
DECLARE d record;
|
|
27648
28040
|
BEGIN
|
|
28041
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_cart_seq');
|
|
27649
28042
|
SELECT * INTO d FROM public.logistics_cart_seq_dubbel(p_order_uuid) LIMIT 1;
|
|
27650
28043
|
IF d.order_uuid IS NOT NULL THEN
|
|
27651
28044
|
RAISE EXCEPTION 'Karnummering ongeldig: order % heeft % karren met volgnummer %. Deel de order opnieuw in; er wordt geen kar weggelaten.',
|
|
@@ -27682,13 +28075,17 @@ GRANT EXECUTE ON FUNCTION public.logistics_cart_seq(uuid) TO authenticated, serv
|
|
|
27682
28075
|
|
|
27683
28076
|
-- 8. Kar wisselen: eerst vergrendelen en pickup_locked controleren, dan pas verwijderen; geen stille 1.
|
|
27684
28077
|
CREATE OR REPLACE FUNCTION public.logistics_apply_cart_swap(p_delete_ids uuid[], p_new_carts jsonb)
|
|
27685
|
-
RETURNS jsonb
|
|
28078
|
+
RETURNS jsonb
|
|
28079
|
+
LANGUAGE plpgsql
|
|
28080
|
+
SECURITY DEFINER
|
|
28081
|
+
SET search_path TO 'public'
|
|
27686
28082
|
AS $function$
|
|
27687
28083
|
DECLARE
|
|
27688
28084
|
v_del uuid[] := COALESCE(p_delete_ids, ARRAY[]::uuid[]);
|
|
27689
28085
|
v_cart jsonb; v_row jsonb; v_id uuid; v_map jsonb := '[]'::jsonb;
|
|
27690
28086
|
v_jobs int := 0; v_carts int := 0; v_items int := 0; v_locked int;
|
|
27691
28087
|
BEGIN
|
|
28088
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_apply_cart_swap');
|
|
27692
28089
|
IF jsonb_typeof(COALESCE(p_new_carts, '[]'::jsonb)) <> 'array' THEN
|
|
27693
28090
|
RAISE EXCEPTION 'Nieuwe karren ontbreken of zijn ongeldig.';
|
|
27694
28091
|
END IF;
|
|
@@ -27753,10 +28150,14 @@ GRANT EXECUTE ON FUNCTION public.logistics_apply_cart_swap(uuid[], jsonb) TO ser
|
|
|
27753
28150
|
|
|
27754
28151
|
-- 1. Autofix schrijft alleen een volledige, positieve Floriday-verpakking weg (0 = onbekend).
|
|
27755
28152
|
CREATE OR REPLACE FUNCTION public.logistics_packing_autofix(p_limit integer DEFAULT 100)
|
|
27756
|
-
RETURNS integer
|
|
28153
|
+
RETURNS integer
|
|
28154
|
+
LANGUAGE plpgsql
|
|
28155
|
+
SECURITY DEFINER
|
|
28156
|
+
SET search_path TO 'public'
|
|
27757
28157
|
AS $function$
|
|
27758
28158
|
DECLARE r record; v_reden text; v_aantal integer := 0; v_ppc int; v_cpl int; v_lpc int;
|
|
27759
28159
|
BEGIN
|
|
28160
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_packing_autofix');
|
|
27760
28161
|
FOR r IN
|
|
27761
28162
|
SELECT d.* FROM public.logistics_packing_deviations d
|
|
27762
28163
|
WHERE d.resolved_at IS NULL AND d.scope = 'order_line' AND d.needs_human = false
|
|
@@ -27796,10 +28197,14 @@ $function$;
|
|
|
27796
28197
|
|
|
27797
28198
|
-- 9. Reconcile alleen bij een echte wijziging sinds de laatste afgeronde of geblokkeerde opdracht; kleinere porties.
|
|
27798
28199
|
CREATE OR REPLACE FUNCTION public.logistics_reconcile_missing_plan_queue()
|
|
27799
|
-
RETURNS integer
|
|
28200
|
+
RETURNS integer
|
|
28201
|
+
LANGUAGE plpgsql
|
|
28202
|
+
SECURITY DEFINER
|
|
28203
|
+
SET search_path TO 'public'
|
|
27800
28204
|
AS $function$
|
|
27801
28205
|
DECLARE r record; n integer := 0;
|
|
27802
28206
|
BEGIN
|
|
28207
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_reconcile_missing_plan_queue');
|
|
27803
28208
|
FOR r IN
|
|
27804
28209
|
SELECT o.id FROM public.orders o
|
|
27805
28210
|
WHERE o.deleted_at IS NULL
|
|
@@ -27842,9 +28247,12 @@ END $q$;
|
|
|
27842
28247
|
|
|
27843
28248
|
-- Alleen-lezen lijst: orders met meer dan één open planopdracht.
|
|
27844
28249
|
CREATE OR REPLACE FUNCTION public.logistics_plan_queue_dubbel()
|
|
27845
|
-
RETURNS TABLE(order_id uuid, open_opdrachten bigint, oudste
|
|
27846
|
-
LANGUAGE sql
|
|
28250
|
+
RETURNS TABLE(order_id uuid, open_opdrachten bigint, oudste timestamp with time zone, nieuwste timestamp with time zone)
|
|
28251
|
+
LANGUAGE sql
|
|
28252
|
+
STABLE SECURITY DEFINER
|
|
28253
|
+
SET search_path TO 'public'
|
|
27847
28254
|
AS $function$
|
|
28255
|
+
SELECT public.logistics_acc_guard('server', 'logistics_plan_queue_dubbel');
|
|
27848
28256
|
SELECT q.order_id, count(*), min(q.enqueued_at), max(q.enqueued_at)
|
|
27849
28257
|
FROM public.logistics_plan_queue q
|
|
27850
28258
|
WHERE q.status IN ('pending','running','geblokkeerd')
|
|
@@ -27855,13 +28263,17 @@ GRANT EXECUTE ON FUNCTION public.logistics_plan_queue_dubbel() TO service_role;
|
|
|
27855
28263
|
|
|
27856
28264
|
-- 10. Buffer uit: elke order krijgt een eigen buffer (sleutel solo:<order-id>) en wordt dus per order ingedeeld.
|
|
27857
28265
|
CREATE OR REPLACE FUNCTION public.logistics_apply_buffer_decision(p_order_id uuid)
|
|
27858
|
-
RETURNS uuid
|
|
28266
|
+
RETURNS uuid
|
|
28267
|
+
LANGUAGE plpgsql
|
|
28268
|
+
SECURITY DEFINER
|
|
28269
|
+
SET search_path TO 'public'
|
|
27859
28270
|
AS $function$
|
|
27860
28271
|
DECLARE
|
|
27861
28272
|
o public.orders%ROWTYPE;
|
|
27862
28273
|
cf jsonb; d jsonb; v_ref text; v_close timestamptz; v_key text;
|
|
27863
28274
|
v_buffer uuid; v_closed boolean; v_try int := 0; v_on_cart boolean; v_solo boolean := false;
|
|
27864
28275
|
BEGIN
|
|
28276
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_apply_buffer_decision');
|
|
27865
28277
|
SELECT * INTO o FROM public.orders WHERE id = p_order_id;
|
|
27866
28278
|
IF NOT FOUND OR o.deleted_at IS NOT NULL THEN RETURN NULL; END IF;
|
|
27867
28279
|
cf := COALESCE(o.custom_fields, '{}'::jsonb);
|
|
@@ -27951,13 +28363,17 @@ $function$;
|
|
|
27951
28363
|
-- 13. Eigen traystickers: zolang bij één regel van de order het fustaantal onbekend is, wachten ALLE
|
|
27952
28364
|
-- eigen traystickers van die order ("Fustaantal van regel X onbekend"), zodat x van y klopt.
|
|
27953
28365
|
CREATE OR REPLACE FUNCTION public.logistics_own_traysticker_sync(p_limit integer DEFAULT 200)
|
|
27954
|
-
RETURNS jsonb
|
|
28366
|
+
RETURNS jsonb
|
|
28367
|
+
LANGUAGE plpgsql
|
|
28368
|
+
SECURITY DEFINER
|
|
28369
|
+
SET search_path TO 'public'
|
|
27955
28370
|
AS $function$
|
|
27956
28371
|
DECLARE
|
|
27957
28372
|
s jsonb; v_tray text; v_rel text; v_station text;
|
|
27958
28373
|
r record; v_bron text; v_keep text[] := '{}'; v_wacht_orders uuid[] := '{}';
|
|
27959
28374
|
n int := 0; n_geblokkeerd int := 0; n_vrij int := 0; n_uit int := 0;
|
|
27960
28375
|
BEGIN
|
|
28376
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_own_traysticker_sync');
|
|
27961
28377
|
SELECT settings INTO s FROM public.logistics_rule_configs
|
|
27962
28378
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC LIMIT 1;
|
|
27963
28379
|
v_tray := public.logistics_rule_text(s, 'pickstations', 'traysticker_release', 'uit');
|
|
@@ -28006,7 +28422,6 @@ BEGIN
|
|
|
28006
28422
|
VALUES ('eigen_traysticker', v_bron, r.order_id, r.order_number, r.cart_id, 1,
|
|
28007
28423
|
public.logistics_sticker_cart_plek(r.cart_id, v_station), 'wacht_op_moment', 'Wacht op de pakbon van deze kar.')
|
|
28008
28424
|
ON CONFLICT DO NOTHING;
|
|
28009
|
-
-- Was hij eerder tegengehouden door een onbekend fustaantal: weer laten wachten op het moment.
|
|
28010
28425
|
UPDATE public.logistics_sticker_prints
|
|
28011
28426
|
SET status = 'wacht_op_moment', reden = 'Wacht op de pakbon van deze kar.', updated_at = now()
|
|
28012
28427
|
WHERE soort = 'eigen_traysticker' AND bron_id = v_bron AND status = 'geblokkeerd'
|
|
@@ -28015,7 +28430,6 @@ BEGIN
|
|
|
28015
28430
|
END LOOP;
|
|
28016
28431
|
END LOOP;
|
|
28017
28432
|
|
|
28018
|
-
-- Order met onbekend fustaantal: alle nog niet geprinte stickers wachten (niet vervallen).
|
|
28019
28433
|
UPDATE public.logistics_sticker_prints p
|
|
28020
28434
|
SET status = 'geblokkeerd',
|
|
28021
28435
|
reden = (SELECT b.reden FROM public.logistics_sticker_prints b
|
|
@@ -28061,6 +28475,7 @@ CREATE OR REPLACE FUNCTION public.logistics_sticker_order_counts(p_order uuid, p
|
|
|
28061
28475
|
STABLE SECURITY DEFINER
|
|
28062
28476
|
SET search_path TO 'public'
|
|
28063
28477
|
AS $function$
|
|
28478
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sticker_order_counts');
|
|
28064
28479
|
WITH ci AS (
|
|
28065
28480
|
SELECT ci.* FROM logistics_active.order_cart_items ci
|
|
28066
28481
|
JOIN public.order_items oi ON oi.id = ci.order_item_id
|
|
@@ -28087,6 +28502,7 @@ CREATE OR REPLACE FUNCTION public.logistics_sticker_copies(p_order uuid, p_stick
|
|
|
28087
28502
|
AS $function$
|
|
28088
28503
|
DECLARE v int; c jsonb; t text := upper(coalesce(p_type,''));
|
|
28089
28504
|
BEGIN
|
|
28505
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_copies');
|
|
28090
28506
|
IF (p_fi->>'numberOfCopies') ~ '^\d+$' AND (p_fi->>'numberOfCopies')::int > 0 THEN
|
|
28091
28507
|
RETURN jsonb_build_object('aantal', (p_fi->>'numberOfCopies')::int, 'bron', 'numberOfCopies');
|
|
28092
28508
|
END IF;
|
|
@@ -28123,6 +28539,7 @@ DECLARE
|
|
|
28123
28539
|
v_crates_tot int; v_pieces_tot int; r record; v_rows int; v_cp jsonb; v_bron text; v_ncarts int; sv record;
|
|
28124
28540
|
n_st int := 0; n_tray int := 0;
|
|
28125
28541
|
BEGIN
|
|
28542
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_sticker_sync');
|
|
28126
28543
|
SELECT settings INTO s FROM public.logistics_rule_configs
|
|
28127
28544
|
ORDER BY is_active DESC, (status = 'actief') DESC, updated_at DESC LIMIT 1;
|
|
28128
28545
|
v_rel := public.logistics_rule_text(s, 'pickstations', 'sticker_release', 'with_pick_release');
|
|
@@ -28334,6 +28751,7 @@ CREATE OR REPLACE FUNCTION public.logistics_sticker_etiket_status()
|
|
|
28334
28751
|
STABLE SECURITY DEFINER
|
|
28335
28752
|
SET search_path TO 'public'
|
|
28336
28753
|
AS $function$
|
|
28754
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_sticker_etiket_status');
|
|
28337
28755
|
SELECT jsonb_build_object(
|
|
28338
28756
|
'wachtend', (SELECT count(*) FROM public.logistics_sticker_prints
|
|
28339
28757
|
WHERE status IN ('klaar','geblokkeerd') AND reden LIKE 'Stel bij je labelprinter in welk etiket erin zit%'),
|
|
@@ -28407,10 +28825,14 @@ END $fs$;
|
|
|
28407
28825
|
-- Eén rij per Shell; gegevens gaan niet mee met kloon of schemasync, dus de rij wordt
|
|
28408
28826
|
-- bij gebruik aangemaakt (standaard "uit"). installed_at = moment van eerste gebruik in deze Shell.
|
|
28409
28827
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_settings_ensure()
|
|
28410
|
-
RETURNS
|
|
28828
|
+
RETURNS logistics_carrier_settings
|
|
28829
|
+
LANGUAGE plpgsql
|
|
28830
|
+
SECURITY DEFINER
|
|
28831
|
+
SET search_path TO 'public'
|
|
28411
28832
|
AS $function$
|
|
28412
28833
|
DECLARE r public.logistics_carrier_settings;
|
|
28413
28834
|
BEGIN
|
|
28835
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_settings_ensure');
|
|
28414
28836
|
SELECT * INTO r FROM public.logistics_carrier_settings WHERE id;
|
|
28415
28837
|
IF NOT FOUND THEN
|
|
28416
28838
|
INSERT INTO public.logistics_carrier_settings (id, backfill_existing) VALUES (true, false)
|
|
@@ -28454,10 +28876,14 @@ CREATE INDEX IF NOT EXISTS logistics_carrier_recalc_queue_open_idx
|
|
|
28454
28876
|
|
|
28455
28877
|
-- Waarom een vervoerder niet bruikbaar is (NULL = bruikbaar).
|
|
28456
28878
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_skip_reason(p_carrier_id uuid)
|
|
28457
|
-
RETURNS text
|
|
28879
|
+
RETURNS text
|
|
28880
|
+
LANGUAGE plpgsql
|
|
28881
|
+
STABLE SECURITY DEFINER
|
|
28882
|
+
SET search_path TO 'public'
|
|
28458
28883
|
AS $function$
|
|
28459
28884
|
DECLARE c jsonb;
|
|
28460
28885
|
BEGIN
|
|
28886
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_skip_reason');
|
|
28461
28887
|
IF p_carrier_id IS NULL THEN RETURN 'is leeg'; END IF;
|
|
28462
28888
|
SELECT to_jsonb(ca) INTO c FROM public.carriers ca WHERE ca.id = p_carrier_id;
|
|
28463
28889
|
IF c IS NULL THEN RETURN 'bestaat niet (meer)'; END IF;
|
|
@@ -28476,8 +28902,12 @@ END $function$;
|
|
|
28476
28902
|
|
|
28477
28903
|
-- Heeft de vervoerder een ophaalmoment voor deze leverdag?
|
|
28478
28904
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_picks_up_for(p_carrier_id uuid, p_delivery_date date)
|
|
28479
|
-
RETURNS boolean
|
|
28905
|
+
RETURNS boolean
|
|
28906
|
+
LANGUAGE sql
|
|
28907
|
+
STABLE SECURITY DEFINER
|
|
28908
|
+
SET search_path TO 'public'
|
|
28480
28909
|
AS $function$
|
|
28910
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_carrier_picks_up_for');
|
|
28481
28911
|
SELECT EXISTS (
|
|
28482
28912
|
SELECT 1 FROM public.carriers ca
|
|
28483
28913
|
CROSS JOIN LATERAL jsonb_array_elements(CASE WHEN jsonb_typeof(ca.pickup_moments) = 'array' THEN ca.pickup_moments ELSE '[]'::jsonb END) m
|
|
@@ -28488,10 +28918,14 @@ $function$;
|
|
|
28488
28918
|
|
|
28489
28919
|
-- Opgemaakt resultaat volgens het contract.
|
|
28490
28920
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_result(p_carrier_id uuid, p_bron text, p_reden text, p_skips text[])
|
|
28491
|
-
RETURNS jsonb
|
|
28921
|
+
RETURNS jsonb
|
|
28922
|
+
LANGUAGE plpgsql
|
|
28923
|
+
STABLE SECURITY DEFINER
|
|
28924
|
+
SET search_path TO 'public'
|
|
28492
28925
|
AS $function$
|
|
28493
28926
|
DECLARE c jsonb; v_kind text; v_name text; v_reden text := p_reden;
|
|
28494
28927
|
BEGIN
|
|
28928
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_result');
|
|
28495
28929
|
IF p_carrier_id IS NOT NULL THEN
|
|
28496
28930
|
SELECT to_jsonb(ca) INTO c FROM public.carriers ca WHERE ca.id = p_carrier_id;
|
|
28497
28931
|
v_kind := c->>'carrier_kind';
|
|
@@ -28506,10 +28940,14 @@ END $function$;
|
|
|
28506
28940
|
|
|
28507
28941
|
-- Favoriet van Afhandeling op id (afh_favorite_carrier() geeft een rij met carrier_id).
|
|
28508
28942
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_favorite_id()
|
|
28509
|
-
RETURNS uuid
|
|
28943
|
+
RETURNS uuid
|
|
28944
|
+
LANGUAGE plpgsql
|
|
28945
|
+
STABLE SECURITY DEFINER
|
|
28946
|
+
SET search_path TO 'public'
|
|
28510
28947
|
AS $function$
|
|
28511
28948
|
DECLARE j jsonb;
|
|
28512
28949
|
BEGIN
|
|
28950
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_favorite_id');
|
|
28513
28951
|
IF to_regprocedure('public.afh_favorite_carrier()') IS NULL THEN RETURN NULL; END IF;
|
|
28514
28952
|
EXECUTE 'SELECT to_jsonb(f) FROM public.afh_favorite_carrier() f LIMIT 1' INTO j;
|
|
28515
28953
|
RETURN public.logistics_try_uuid(CASE jsonb_typeof(j) WHEN 'object' THEN coalesce(j->>'carrier_id', j->>'id')
|
|
@@ -28521,7 +28959,10 @@ END $function$;
|
|
|
28521
28959
|
-- -> 3 GLN-lijst per vervoerder -> 4 standaard van de klant -> 5 werkgebied
|
|
28522
28960
|
-- (plaats > provincie > land, ophaalmoment op de leverdag) -> 6 favoriet.
|
|
28523
28961
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier_core(p_order jsonb, p_skip_manual boolean DEFAULT false)
|
|
28524
|
-
RETURNS jsonb
|
|
28962
|
+
RETURNS jsonb
|
|
28963
|
+
LANGUAGE plpgsql
|
|
28964
|
+
STABLE SECURITY DEFINER
|
|
28965
|
+
SET search_path TO 'public'
|
|
28525
28966
|
AS $function$
|
|
28526
28967
|
DECLARE
|
|
28527
28968
|
cf jsonb := CASE WHEN jsonb_typeof(p_order->'custom_fields') = 'object' THEN p_order->'custom_fields' ELSE '{}'::jsonb END;
|
|
@@ -28531,11 +28972,11 @@ DECLARE
|
|
|
28531
28972
|
l jsonb; cu jsonb; v_id uuid; v_skip text; v_skips text[] := '{}'::text[];
|
|
28532
28973
|
v_country text; v_prov text; v_city text; v_lvl int; v_any boolean; r record; v_fav text;
|
|
28533
28974
|
BEGIN
|
|
28975
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_resolve_carrier_core');
|
|
28534
28976
|
IF coalesce(p_order->>'delivery_date', '') ~ '^\d{4}-\d{2}-\d{2}' THEN
|
|
28535
28977
|
v_date := left(p_order->>'delivery_date', 10)::date;
|
|
28536
28978
|
END IF;
|
|
28537
28979
|
|
|
28538
|
-
-- 1. Handmatig gekozen op de order (alleen via logistics_set_order_carrier).
|
|
28539
28980
|
IF NOT p_skip_manual AND p_order->>'carrier_source' = 'handmatig' THEN
|
|
28540
28981
|
v_id := public.logistics_try_uuid(p_order->>'carrier_id');
|
|
28541
28982
|
v_skip := public.logistics_carrier_skip_reason(v_id);
|
|
@@ -28544,7 +28985,6 @@ BEGIN
|
|
|
28544
28985
|
END IF;
|
|
28545
28986
|
v_skips := v_skips || ('handmatige keuze: ' || v_skip);
|
|
28546
28987
|
END IF;
|
|
28547
|
-
-- 1b. Overgenomen uit een bestaande custom_fields.carrier (bron 'oud').
|
|
28548
28988
|
v_id := public.logistics_try_uuid(cf->>'carrier');
|
|
28549
28989
|
IF v_id IS NOT NULL THEN
|
|
28550
28990
|
v_skip := public.logistics_carrier_skip_reason(v_id);
|
|
@@ -28554,7 +28994,6 @@ BEGIN
|
|
|
28554
28994
|
v_skips := v_skips || ('bestaande vervoerder op de order: ' || v_skip);
|
|
28555
28995
|
END IF;
|
|
28556
28996
|
|
|
28557
|
-
-- 2. Afleverlocatie (op id, anders op GLN).
|
|
28558
28997
|
v_loc_raw := coalesce(nullif(btrim(cf->>'delivery_location_id'), ''), nullif(btrim(cf->>'delivery_location'), ''));
|
|
28559
28998
|
v_loc_id := public.logistics_try_uuid(v_loc_raw);
|
|
28560
28999
|
v_gln := coalesce(nullif(btrim(cf->>'delivery_location_gln'), ''), CASE WHEN v_loc_id IS NULL THEN v_loc_raw END);
|
|
@@ -28589,7 +29028,6 @@ BEGIN
|
|
|
28589
29028
|
END IF;
|
|
28590
29029
|
END IF;
|
|
28591
29030
|
|
|
28592
|
-
-- 3. Vervoerder die deze afleverlocatie-GLN bedient (lijst van Afhandeling).
|
|
28593
29031
|
IF v_gln IS NOT NULL THEN
|
|
28594
29032
|
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'carriers' AND column_name = 'delivery_location_glns') THEN
|
|
28595
29033
|
FOR r IN SELECT ca.id FROM public.carriers ca
|
|
@@ -28606,7 +29044,6 @@ BEGIN
|
|
|
28606
29044
|
END IF;
|
|
28607
29045
|
END IF;
|
|
28608
29046
|
|
|
28609
|
-
-- 4. Standaardvervoerder van de klant (veld van Klanten).
|
|
28610
29047
|
IF v_cust IS NOT NULL THEN
|
|
28611
29048
|
SELECT to_jsonb(x) INTO cu FROM public.customers x WHERE x.id = v_cust;
|
|
28612
29049
|
IF cu IS NOT NULL AND NOT (cu ? 'default_carrier_id') THEN
|
|
@@ -28623,7 +29060,6 @@ BEGIN
|
|
|
28623
29060
|
END IF;
|
|
28624
29061
|
END IF;
|
|
28625
29062
|
|
|
28626
|
-
-- 5. Werkgebied: plaats > provincie > land, met een ophaalmoment op de leverdag.
|
|
28627
29063
|
IF v_date IS NULL AND NOT v_zonder_datum THEN
|
|
28628
29064
|
v_skips := v_skips || 'werkgebied: leverdatum onbekend'::text;
|
|
28629
29065
|
ELSE
|
|
@@ -28656,7 +29092,6 @@ BEGIN
|
|
|
28656
29092
|
END LOOP;
|
|
28657
29093
|
END IF;
|
|
28658
29094
|
|
|
28659
|
-
-- 6. Favoriete vervoerder van de Shell (Afhandeling).
|
|
28660
29095
|
IF to_regprocedure('public.afh_favorite_carrier()') IS NULL THEN
|
|
28661
29096
|
v_skips := v_skips || 'favoriete vervoerder bestaat nog niet (Afhandeling)'::text;
|
|
28662
29097
|
ELSE
|
|
@@ -28687,10 +29122,14 @@ END $function$;
|
|
|
28687
29122
|
-- "Aangemeld" = vastlegging van Afhandeling in carrier_signup_dispatches (sent_at gevuld,
|
|
28688
29123
|
-- order_ids bevat de order), gelezen via to_jsonb.
|
|
28689
29124
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_frozen_reason(p_order_id uuid)
|
|
28690
|
-
RETURNS text
|
|
29125
|
+
RETURNS text
|
|
29126
|
+
LANGUAGE plpgsql
|
|
29127
|
+
STABLE SECURITY DEFINER
|
|
29128
|
+
SET search_path TO 'public'
|
|
28691
29129
|
AS $function$
|
|
28692
29130
|
DECLARE v_locked timestamptz; v_hit boolean;
|
|
28693
29131
|
BEGIN
|
|
29132
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_frozen_reason');
|
|
28694
29133
|
SELECT plan_locked_at INTO v_locked FROM public.orders WHERE id = p_order_id;
|
|
28695
29134
|
IF v_locked IS NOT NULL THEN RETURN 'de planning is vastgezet'; END IF;
|
|
28696
29135
|
BEGIN
|
|
@@ -28713,10 +29152,14 @@ END $function$;
|
|
|
28713
29152
|
|
|
28714
29153
|
-- Vervoerder van een order volgens het contract (alleen lezen).
|
|
28715
29154
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier(p_order_id uuid)
|
|
28716
|
-
RETURNS jsonb
|
|
29155
|
+
RETURNS jsonb
|
|
29156
|
+
LANGUAGE plpgsql
|
|
29157
|
+
STABLE SECURITY DEFINER
|
|
29158
|
+
SET search_path TO 'public'
|
|
28717
29159
|
AS $function$
|
|
28718
29160
|
DECLARE o jsonb; r jsonb; v_fr text;
|
|
28719
29161
|
BEGIN
|
|
29162
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_resolve_carrier');
|
|
28720
29163
|
SELECT to_jsonb(x) INTO o FROM public.orders x WHERE x.id = p_order_id;
|
|
28721
29164
|
IF o IS NULL THEN
|
|
28722
29165
|
RETURN jsonb_build_object('carrier_id', NULL, 'carrier_name', NULL, 'carrier_kind', NULL, 'bron', 'geen',
|
|
@@ -28733,15 +29176,23 @@ BEGIN
|
|
|
28733
29176
|
END $function$;
|
|
28734
29177
|
|
|
28735
29178
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier_many(p_order_ids uuid[])
|
|
28736
|
-
RETURNS TABLE(order_id uuid, resultaat jsonb)
|
|
29179
|
+
RETURNS TABLE(order_id uuid, resultaat jsonb)
|
|
29180
|
+
LANGUAGE sql
|
|
29181
|
+
STABLE SECURITY DEFINER
|
|
29182
|
+
SET search_path TO 'public'
|
|
28737
29183
|
AS $function$
|
|
29184
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_resolve_carrier_many');
|
|
28738
29185
|
SELECT x.id, public.logistics_resolve_carrier(x.id) FROM unnest(coalesce(p_order_ids, '{}'::uuid[])) AS x(id)
|
|
28739
29186
|
$function$;
|
|
28740
29187
|
|
|
28741
29188
|
-- Voor Klanten: dezelfde volgorde zonder stap 1 (geen order, dus geen leverdag).
|
|
28742
29189
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier_for_location(p_location_id uuid, p_customer_id uuid)
|
|
28743
|
-
RETURNS jsonb
|
|
29190
|
+
RETURNS jsonb
|
|
29191
|
+
LANGUAGE sql
|
|
29192
|
+
STABLE SECURITY DEFINER
|
|
29193
|
+
SET search_path TO 'public'
|
|
28744
29194
|
AS $function$
|
|
29195
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_resolve_carrier_for_location');
|
|
28745
29196
|
SELECT public.logistics_resolve_carrier_core(jsonb_build_object(
|
|
28746
29197
|
'customer_id', coalesce(p_customer_id, (SELECT l.customer_id FROM public.customer_delivery_locations l WHERE l.id = p_location_id)),
|
|
28747
29198
|
'custom_fields', jsonb_build_object('delivery_location_id', p_location_id),
|
|
@@ -28749,20 +29200,26 @@ AS $function$
|
|
|
28749
29200
|
$function$;
|
|
28750
29201
|
|
|
28751
29202
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier_for_location_many(p_location_ids uuid[], p_customer_id uuid)
|
|
28752
|
-
RETURNS TABLE(location_id uuid, resultaat jsonb)
|
|
29203
|
+
RETURNS TABLE(location_id uuid, resultaat jsonb)
|
|
29204
|
+
LANGUAGE sql
|
|
29205
|
+
STABLE SECURITY DEFINER
|
|
29206
|
+
SET search_path TO 'public'
|
|
28753
29207
|
AS $function$
|
|
29208
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_resolve_carrier_for_location_many');
|
|
28754
29209
|
SELECT x.id, public.logistics_resolve_carrier_for_location(x.id, p_customer_id)
|
|
28755
29210
|
FROM unnest(coalesce(p_location_ids, '{}'::uuid[])) AS x(id)
|
|
28756
29211
|
$function$;
|
|
28757
29212
|
|
|
28758
29213
|
-- Variant voor een hele klantenlijst: [{location_id, customer_id}, ...] (max. 1000 regels).
|
|
28759
29214
|
CREATE OR REPLACE FUNCTION public.logistics_resolve_carrier_for_location_many(p_items jsonb)
|
|
28760
|
-
RETURNS TABLE(location_id uuid, customer_id uuid, carrier_id uuid, carrier_name text, carrier_kind text,
|
|
28761
|
-
|
|
28762
|
-
|
|
29215
|
+
RETURNS TABLE(location_id uuid, customer_id uuid, carrier_id uuid, carrier_name text, carrier_kind text, bron text, reden text, waarschuwing text)
|
|
29216
|
+
LANGUAGE plpgsql
|
|
29217
|
+
STABLE SECURITY DEFINER
|
|
29218
|
+
SET search_path TO 'public'
|
|
28763
29219
|
AS $function$
|
|
28764
29220
|
DECLARE it jsonb; r jsonb; v_loc uuid; v_cust uuid;
|
|
28765
29221
|
BEGIN
|
|
29222
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_resolve_carrier_for_location_many');
|
|
28766
29223
|
IF auth.uid() IS NULL AND coalesce(auth.role(), '') <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
28767
29224
|
IF p_items IS NULL OR jsonb_typeof(p_items) <> 'array' THEN RAISE EXCEPTION 'p_items moet een lijst zijn: [{location_id, customer_id}, ...]'; END IF;
|
|
28768
29225
|
IF jsonb_array_length(p_items) > 1000 THEN RAISE EXCEPTION 'Te veel regels (%); maximaal 1000 per aanroep.', jsonb_array_length(p_items); END IF;
|
|
@@ -28784,10 +29241,14 @@ END $function$;
|
|
|
28784
29241
|
|
|
28785
29242
|
-- Opgeslagen vervoerder (of, zolang nog niet opgeslagen, de regel live; niets schrijven).
|
|
28786
29243
|
CREATE OR REPLACE FUNCTION public.logistics_order_carrier_info(p_order_id uuid)
|
|
28787
|
-
RETURNS jsonb
|
|
29244
|
+
RETURNS jsonb
|
|
29245
|
+
LANGUAGE plpgsql
|
|
29246
|
+
STABLE SECURITY DEFINER
|
|
29247
|
+
SET search_path TO 'public'
|
|
28788
29248
|
AS $function$
|
|
28789
29249
|
DECLARE o jsonb;
|
|
28790
29250
|
BEGIN
|
|
29251
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_order_carrier_info');
|
|
28791
29252
|
SELECT to_jsonb(x) INTO o FROM public.orders x WHERE x.id = p_order_id;
|
|
28792
29253
|
IF o IS NULL THEN RETURN jsonb_build_object('carrier_id', NULL, 'bron', 'geen', 'reden', 'Order niet gevonden.'); END IF;
|
|
28793
29254
|
IF o->>'carrier_source' IS NOT NULL THEN
|
|
@@ -28806,22 +29267,34 @@ BEGIN
|
|
|
28806
29267
|
END $function$;
|
|
28807
29268
|
|
|
28808
29269
|
CREATE OR REPLACE FUNCTION public.logistics_order_carrier_label(p_order_id uuid)
|
|
28809
|
-
RETURNS text
|
|
29270
|
+
RETURNS text
|
|
29271
|
+
LANGUAGE sql
|
|
29272
|
+
STABLE SECURITY DEFINER
|
|
29273
|
+
SET search_path TO 'public'
|
|
28810
29274
|
AS $function$
|
|
29275
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_order_carrier_label');
|
|
28811
29276
|
SELECT public.logistics_order_carrier_info(p_order_id)->>'carrier_name'
|
|
28812
29277
|
$function$;
|
|
28813
29278
|
|
|
28814
29279
|
-- Bestaande functie: nu volgens dezelfde regel.
|
|
28815
29280
|
CREATE OR REPLACE FUNCTION public.logistics_order_carrier_id(p_order_id uuid)
|
|
28816
|
-
RETURNS uuid
|
|
29281
|
+
RETURNS uuid
|
|
29282
|
+
LANGUAGE sql
|
|
29283
|
+
STABLE SECURITY DEFINER
|
|
29284
|
+
SET search_path TO 'public'
|
|
28817
29285
|
AS $function$
|
|
29286
|
+
SELECT public.logistics_acc_guard('server', 'logistics_order_carrier_id');
|
|
28818
29287
|
SELECT public.logistics_try_uuid(public.logistics_order_carrier_info(p_order_id)->>'carrier_id')
|
|
28819
29288
|
$function$;
|
|
28820
29289
|
|
|
28821
29290
|
-- Bestaande functie blijft; dezelfde regel (locatie op id of GLN).
|
|
28822
29291
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_for_location(p_location text, p_customer_id uuid)
|
|
28823
|
-
RETURNS uuid
|
|
29292
|
+
RETURNS uuid
|
|
29293
|
+
LANGUAGE sql
|
|
29294
|
+
STABLE SECURITY DEFINER
|
|
29295
|
+
SET search_path TO 'public'
|
|
28824
29296
|
AS $function$
|
|
29297
|
+
SELECT public.logistics_acc_guard('server', 'logistics_carrier_for_location');
|
|
28825
29298
|
SELECT public.logistics_try_uuid(public.logistics_resolve_carrier_core(jsonb_build_object(
|
|
28826
29299
|
'customer_id', p_customer_id,
|
|
28827
29300
|
'custom_fields', jsonb_build_object('delivery_location', nullif(btrim(coalesce(p_location, '')), '')),
|
|
@@ -28832,7 +29305,10 @@ $function$;
|
|
|
28832
29305
|
-- Geen lus: deze trigger zet nooit iets op de herberekenlijst en schrijft
|
|
28833
29306
|
-- niets anders weg. Engine-schrijvers zetten logistics.carrier_writer = 'engine'.
|
|
28834
29307
|
CREATE OR REPLACE FUNCTION public.logistics_orders_carrier_fill()
|
|
28835
|
-
RETURNS trigger
|
|
29308
|
+
RETURNS trigger
|
|
29309
|
+
LANGUAGE plpgsql
|
|
29310
|
+
SECURITY DEFINER
|
|
29311
|
+
SET search_path TO 'public'
|
|
28836
29312
|
AS $function$
|
|
28837
29313
|
DECLARE r jsonb; s record;
|
|
28838
29314
|
BEGIN
|
|
@@ -28852,10 +29328,10 @@ BEGIN
|
|
|
28852
29328
|
SELECT * INTO s FROM public.logistics_carrier_settings_ensure();
|
|
28853
29329
|
IF OLD.carrier_source IS NULL AND NOT coalesce(s.backfill_existing, false)
|
|
28854
29330
|
AND OLD.created_at < coalesce(s.installed_at, now()) THEN
|
|
28855
|
-
RETURN NEW;
|
|
29331
|
+
RETURN NEW;
|
|
28856
29332
|
END IF;
|
|
28857
29333
|
IF NEW.plan_locked_at IS NOT NULL OR public.logistics_carrier_frozen_reason(NEW.id) IS NOT NULL THEN
|
|
28858
|
-
RETURN NEW;
|
|
29334
|
+
RETURN NEW;
|
|
28859
29335
|
END IF;
|
|
28860
29336
|
END IF;
|
|
28861
29337
|
BEGIN
|
|
@@ -28924,10 +29400,14 @@ CREATE TRIGGER trg_logistics_orders_carrier_changed AFTER UPDATE OF carrier_id O
|
|
|
28924
29400
|
|
|
28925
29401
|
-- Herberekenlijst vullen: alleen open orders, nooit handmatig, bestaande orders pas na de schakelaar.
|
|
28926
29402
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_enqueue(p_order_ids uuid[], p_reden text)
|
|
28927
|
-
RETURNS integer
|
|
29403
|
+
RETURNS integer
|
|
29404
|
+
LANGUAGE plpgsql
|
|
29405
|
+
SECURITY DEFINER
|
|
29406
|
+
SET search_path TO 'public'
|
|
28928
29407
|
AS $function$
|
|
28929
29408
|
DECLARE n int;
|
|
28930
29409
|
BEGIN
|
|
29410
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_enqueue');
|
|
28931
29411
|
PERFORM public.logistics_carrier_settings_ensure();
|
|
28932
29412
|
INSERT INTO public.logistics_carrier_recalc_queue AS q (order_id, reden)
|
|
28933
29413
|
SELECT o.id, p_reden FROM public.orders o
|
|
@@ -28997,11 +29477,15 @@ END $fs$;
|
|
|
28997
29477
|
-- langer dan 24 uur niet gecontroleerd zijn). Hooguit p_limit (200) orders per
|
|
28998
29478
|
-- ronde. Schrijft ALLEEN als carrier_id, bron of reden verschilt.
|
|
28999
29479
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_recalc_run(p_limit integer DEFAULT 200)
|
|
29000
|
-
RETURNS jsonb
|
|
29480
|
+
RETURNS jsonb
|
|
29481
|
+
LANGUAGE plpgsql
|
|
29482
|
+
SECURITY DEFINER
|
|
29483
|
+
SET search_path TO 'public'
|
|
29001
29484
|
AS $function$
|
|
29002
29485
|
DECLARE s record; r record; o jsonb; v jsonb; v_fr text;
|
|
29003
29486
|
n_chk int := 0; n_upd int := 0; n_frozen int := 0; n_hand int := 0; n_err int := 0;
|
|
29004
29487
|
BEGIN
|
|
29488
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_carrier_recalc_run');
|
|
29005
29489
|
SELECT * INTO s FROM public.logistics_carrier_settings_ensure();
|
|
29006
29490
|
IF NOT FOUND THEN RETURN jsonb_build_object('overgeslagen', 'instellingen vervoerder ontbreken'); END IF;
|
|
29007
29491
|
FOR r IN
|
|
@@ -29063,11 +29547,13 @@ END $function$;
|
|
|
29063
29547
|
-- Handmatig kiezen: de enige manier. NULL = terug naar automatisch. Verstuurt nooit een mail.
|
|
29064
29548
|
-- Lijst F: wat de regel per bestaande open order zou opslaan (alleen lezen).
|
|
29065
29549
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_preview_existing(p_limit integer DEFAULT 1000)
|
|
29066
|
-
RETURNS TABLE(order_id uuid, order_number text, order_source text, delivery_date text, huidig_custom_carrier text,
|
|
29067
|
-
|
|
29068
|
-
|
|
29550
|
+
RETURNS TABLE(order_id uuid, order_number text, order_source text, delivery_date text, huidig_custom_carrier text, carrier_id uuid, carrier_name text, carrier_kind text, bron text, reden text, bevroren text)
|
|
29551
|
+
LANGUAGE plpgsql
|
|
29552
|
+
STABLE SECURITY DEFINER
|
|
29553
|
+
SET search_path TO 'public'
|
|
29069
29554
|
AS $function$
|
|
29070
29555
|
BEGIN
|
|
29556
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_carrier_preview_existing');
|
|
29071
29557
|
IF auth.uid() IS NOT NULL AND NOT public.logistics_is_beheer() THEN
|
|
29072
29558
|
RAISE EXCEPTION 'Alleen beheer mag deze lijst bekijken.';
|
|
29073
29559
|
END IF;
|
|
@@ -29085,9 +29571,13 @@ END $function$;
|
|
|
29085
29571
|
|
|
29086
29572
|
-- Schakelaar "Vervoerder berekenen voor bestaande orders" (alleen beheer).
|
|
29087
29573
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_set_backfill(p_on boolean)
|
|
29088
|
-
RETURNS jsonb
|
|
29574
|
+
RETURNS jsonb
|
|
29575
|
+
LANGUAGE plpgsql
|
|
29576
|
+
SECURITY DEFINER
|
|
29577
|
+
SET search_path TO 'public'
|
|
29089
29578
|
AS $function$
|
|
29090
29579
|
BEGIN
|
|
29580
|
+
PERFORM public.logistics_acc_guard('beheer', 'logistics_carrier_set_backfill');
|
|
29091
29581
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
29092
29582
|
RAISE EXCEPTION 'Alleen beheer mag deze schakelaar wijzigen.';
|
|
29093
29583
|
END IF;
|
|
@@ -29100,10 +29590,14 @@ END $function$;
|
|
|
29100
29590
|
|
|
29101
29591
|
-- 'oud' -> 'handmatig', alleen na akkoord en met exact aantal (alleen beheer).
|
|
29102
29592
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_promote_oud(p_order_ids uuid[], p_confirm_count integer)
|
|
29103
|
-
RETURNS integer
|
|
29593
|
+
RETURNS integer
|
|
29594
|
+
LANGUAGE plpgsql
|
|
29595
|
+
SECURITY DEFINER
|
|
29596
|
+
SET search_path TO 'public'
|
|
29104
29597
|
AS $function$
|
|
29105
29598
|
DECLARE n int;
|
|
29106
29599
|
BEGIN
|
|
29600
|
+
PERFORM public.logistics_acc_guard('beheer', 'logistics_carrier_promote_oud');
|
|
29107
29601
|
IF auth.uid() IS NULL OR NOT public.logistics_is_beheer() THEN
|
|
29108
29602
|
RAISE EXCEPTION 'Alleen beheer mag dit doen.';
|
|
29109
29603
|
END IF;
|
|
@@ -29121,10 +29615,14 @@ END $function$;
|
|
|
29121
29615
|
|
|
29122
29616
|
-- Bewaking in Beheer (alleen lezen).
|
|
29123
29617
|
CREATE OR REPLACE FUNCTION public.logistics_carrier_status()
|
|
29124
|
-
RETURNS jsonb
|
|
29618
|
+
RETURNS jsonb
|
|
29619
|
+
LANGUAGE plpgsql
|
|
29620
|
+
SECURITY DEFINER
|
|
29621
|
+
SET search_path TO 'public'
|
|
29125
29622
|
AS $function$
|
|
29126
29623
|
DECLARE s record; v jsonb;
|
|
29127
29624
|
BEGIN
|
|
29625
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_carrier_status');
|
|
29128
29626
|
IF auth.uid() IS NULL AND coalesce(auth.role(), '') <> 'service_role' THEN RAISE EXCEPTION 'Niet ingelogd'; END IF;
|
|
29129
29627
|
SELECT * INTO s FROM public.logistics_carrier_settings_ensure();
|
|
29130
29628
|
WITH open_orders AS (
|
|
@@ -29152,11 +29650,13 @@ END $function$;
|
|
|
29152
29650
|
-- Installatiecontrole voor de vervoerder-onderdelen (alleen lezen).
|
|
29153
29651
|
CREATE OR REPLACE FUNCTION public.logistics_install_check()
|
|
29154
29652
|
RETURNS TABLE(onderdeel text, ok boolean, toelichting text)
|
|
29155
|
-
LANGUAGE plpgsql
|
|
29653
|
+
LANGUAGE plpgsql
|
|
29654
|
+
SECURITY DEFINER
|
|
29655
|
+
SET search_path TO 'public'
|
|
29156
29656
|
AS $function$
|
|
29157
29657
|
DECLARE c text; f text; t text; v_fav text; n bigint; s record;
|
|
29158
29658
|
BEGIN
|
|
29159
|
-
|
|
29659
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_install_check');
|
|
29160
29660
|
FOREACH f IN ARRAY ARRAY[
|
|
29161
29661
|
'f:logistics_try_uuid','f:logistics_tz','f:logistics_is_beheer','f:logistics_buffer_payload','f:logistics_apply_order_buffer',
|
|
29162
29662
|
'f:logistics_apply_buffer_decision','f:logistics_rebuffer_pending','f:logistics_departure_calc','f:logistics_own_transport_departure',
|
|
@@ -29168,7 +29668,8 @@ BEGIN
|
|
|
29168
29668
|
'f:logistics_sticker_copies','f:logistics_sticker_etiket_status','f:logistics_sticker_order_counts','f:logistics_sticker_sync',
|
|
29169
29669
|
'c:logistics_sticker_prints.kopieen_bron',
|
|
29170
29670
|
'f:logistics_carrier_settings_ensure','t:logistics_carrier_settings','t:logistics_carrier_recalc_queue','t:logistics_carrier_events',
|
|
29171
|
-
'f:logistics_carrier_status','f:logistics_carrier_set_backfill','f:logistics_carrier_preview_existing','c:control_get_todays_carts.carrier_name'
|
|
29671
|
+
'f:logistics_carrier_status','f:logistics_carrier_set_backfill','f:logistics_carrier_preview_existing','c:control_get_todays_carts.carrier_name',
|
|
29672
|
+
'f:logistics_plan_fail_log'] LOOP
|
|
29172
29673
|
onderdeel := 'Engine: ' || substr(f, 3);
|
|
29173
29674
|
ok := CASE left(f, 1)
|
|
29174
29675
|
WHEN 'f' THEN EXISTS (SELECT 1 FROM pg_proc p WHERE p.pronamespace = 'public'::regnamespace AND p.proname = substr(f, 3))
|
|
@@ -29178,7 +29679,7 @@ BEGIN
|
|
|
29178
29679
|
ELSE EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public'
|
|
29179
29680
|
AND table_name = split_part(substr(f, 3), '.', 1) AND column_name = split_part(substr(f, 3), '.', 2)) END
|
|
29180
29681
|
END;
|
|
29181
|
-
toelichting := CASE WHEN ok THEN 'aanwezig' ELSE 'ontbreekt: Engine-migratie (1.0.182 t/m 1.0.
|
|
29682
|
+
toelichting := CASE WHEN ok THEN 'aanwezig' ELSE 'ontbreekt: Engine-migratie (1.0.182 t/m 1.0.188) in dev uitvoeren en via schemasync verspreiden' END;
|
|
29182
29683
|
RETURN NEXT;
|
|
29183
29684
|
END LOOP;
|
|
29184
29685
|
FOREACH c IN ARRAY ARRAY['carrier_id','carrier_source','carrier_reason','carrier_resolved_at','carrier_set_by','carrier_set_at'] LOOP
|
|
@@ -29236,6 +29737,16 @@ BEGIN
|
|
|
29236
29737
|
onderdeel := 'Schakelaar bestaande orders'; ok := true;
|
|
29237
29738
|
toelichting := CASE WHEN coalesce(s.backfill_existing, false) THEN 'aan' ELSE 'uit (bestaande orders wachten op akkoord)' END; RETURN NEXT;
|
|
29238
29739
|
END IF;
|
|
29740
|
+
-- 1.0.188: mislukte aanmelding voor (her)planning vanuit de ordertriggers.
|
|
29741
|
+
SELECT count(*) INTO n FROM public.logistics_trace_events e
|
|
29742
|
+
WHERE e.actor IN ('trg_logistics_plan_order_items', 'trg_logistics_plan_orders')
|
|
29743
|
+
AND e.status = 'mislukt' AND e.created_at > now() - interval '24 hours';
|
|
29744
|
+
onderdeel := 'Mislukte herplanning (laatste 24 uur)'; ok := n = 0;
|
|
29745
|
+
toelichting := CASE WHEN n = 0 THEN 'geen' ELSE n || ' keer; laatste: ' || coalesce((SELECT coalesce(e.order_ref, '?') || ': ' || coalesce(e.error, '') FROM public.logistics_trace_events e
|
|
29746
|
+
WHERE e.actor IN ('trg_logistics_plan_order_items', 'trg_logistics_plan_orders') AND e.status = 'mislukt'
|
|
29747
|
+
ORDER BY e.created_at DESC LIMIT 1), '') END;
|
|
29748
|
+
RETURN NEXT;
|
|
29749
|
+
RETURN QUERY SELECT * FROM public.logistics_access_check();
|
|
29239
29750
|
END $function$;
|
|
29240
29751
|
|
|
29241
29752
|
-- Buffergegevens: vervoerder van de order (kolom) gaat voor custom_fields.
|
|
@@ -29245,6 +29756,7 @@ CREATE OR REPLACE FUNCTION public.logistics_buffer_payload(p_order_id uuid)
|
|
|
29245
29756
|
STABLE SECURITY DEFINER
|
|
29246
29757
|
SET search_path TO 'public'
|
|
29247
29758
|
AS $function$
|
|
29759
|
+
SELECT public.logistics_acc_guard('ingelogd', 'logistics_buffer_payload');
|
|
29248
29760
|
SELECT jsonb_build_object(
|
|
29249
29761
|
'orderRef', COALESCE(o.order_number, o.id::text),
|
|
29250
29762
|
'checkinAt', COALESCE(cf ->> 'checkin_at', cf ->> 'checkin_moment', cf ->> 'pickup_moment', cf ->> 'pickup_datetime'),
|
|
@@ -29276,6 +29788,7 @@ CREATE OR REPLACE FUNCTION public.logistics_order_departure(p_order_id uuid)
|
|
|
29276
29788
|
AS $function$
|
|
29277
29789
|
DECLARE o record; v jsonb; v_own jsonb; v_txt text; v_at timestamptz; v_info jsonb;
|
|
29278
29790
|
BEGIN
|
|
29791
|
+
PERFORM public.logistics_acc_guard('ingelogd', 'logistics_order_departure');
|
|
29279
29792
|
IF public.logistics_tz() IS NULL THEN
|
|
29280
29793
|
RETURN jsonb_build_object('ok', false, 'reason', 'De tijdzone van de vestiging ontbreekt. Stel die in bij Werktijden.');
|
|
29281
29794
|
END IF;
|
|
@@ -29329,6 +29842,7 @@ DECLARE
|
|
|
29329
29842
|
v_naam text; v_code text; v_date date; v_time time; n int;
|
|
29330
29843
|
v_wens text; onbekend text[] := '{}'::text[]; uit jsonb := '{}'::jsonb;
|
|
29331
29844
|
BEGIN
|
|
29845
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_brief_transport');
|
|
29332
29846
|
SELECT id, custom_fields, floriday_sales_order_id, delivery_date INTO o FROM public.orders WHERE id = p_order_id AND deleted_at IS NULL;
|
|
29333
29847
|
IF o.id IS NULL THEN
|
|
29334
29848
|
RETURN jsonb_build_object('onbekend', jsonb_build_array('order'));
|
|
@@ -29410,6 +29924,7 @@ CREATE OR REPLACE FUNCTION public.logistics_tick()
|
|
|
29410
29924
|
AS $function$
|
|
29411
29925
|
DECLARE v_result jsonb := '{}'::jsonb; v_start timestamptz := clock_timestamp(); v_t timestamptz; v_err boolean := false;
|
|
29412
29926
|
BEGIN
|
|
29927
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_tick');
|
|
29413
29928
|
v_t := clock_timestamp();
|
|
29414
29929
|
BEGIN
|
|
29415
29930
|
PERFORM set_config('statement_timeout', '10000', true);
|
|
@@ -29498,8 +30013,11 @@ END $m$;
|
|
|
29498
30013
|
|
|
29499
30014
|
CREATE OR REPLACE FUNCTION public.control_get_todays_carts()
|
|
29500
30015
|
RETURNS TABLE(cart_number_id uuid, cart_number text, order_source text, order_id text, cart_index integer, order_number text, pick_date date, status text, printed_at timestamp with time zone, printed_today boolean, crates_on_cart integer, country_code text, carrier_name text)
|
|
29501
|
-
LANGUAGE sql
|
|
30016
|
+
LANGUAGE sql
|
|
30017
|
+
STABLE SECURITY DEFINER
|
|
30018
|
+
SET search_path TO 'public'
|
|
29502
30019
|
AS $function$
|
|
30020
|
+
SELECT public.logistics_acc_guard('ingelogd', 'control_get_todays_carts');
|
|
29503
30021
|
WITH vandaag AS (
|
|
29504
30022
|
SELECT (now() AT TIME ZONE public.logistics_tz())::date AS d
|
|
29505
30023
|
),
|
|
@@ -29607,9 +30125,12 @@ REVOKE ALL ON FUNCTION public.logistics_acc_is_server() FROM PUBLIC, anon;
|
|
|
29607
30125
|
GRANT EXECUTE ON FUNCTION public.logistics_acc_is_server() TO authenticated, service_role;
|
|
29608
30126
|
|
|
29609
30127
|
CREATE OR REPLACE FUNCTION public.logistics_acc_levels()
|
|
29610
|
-
RETURNS TABLE(functie text, niveau text)
|
|
30128
|
+
RETURNS TABLE(functie text, niveau text)
|
|
30129
|
+
LANGUAGE sql
|
|
30130
|
+
IMMUTABLE
|
|
30131
|
+
SET search_path TO 'public'
|
|
29611
30132
|
AS $function$
|
|
29612
|
-
SELECT
|
|
30133
|
+
SELECT v.functie, CASE WHEN v.niveau = 'wacht op pickschermlijst' THEN CASE WHEN v.functie = ANY (ARRAY['logistics_auto_send_status','logistics_barcode_lookup','logistics_cart_plan_status','logistics_cart_slip_plan','logistics_cart_sticker_state','logistics_complete_task','logistics_document_for_order','logistics_is_pick_workday','logistics_order_released','logistics_order_sticker_meldingen','logistics_pick_mode','logistics_scan_resolve','logistics_shipping_note_from_barcode','logistics_shipping_note_status','logistics_working_hours_status','pick_queue_cart_plan']) THEN 'open (pickscherm/scanner zonder inlog)' ELSE 'ingelogd' END ELSE v.niveau END AS niveau FROM (
|
|
29613
30134
|
SELECT unnest(ARRAY['claim_logistics_tasks','control_get_todays_carts','control_mark_carts_delivered','control_mark_carts_delivered_detail','logistics_allowed_load_carriers','logistics_apply_buffer_decision','logistics_apply_document_layouts','logistics_apply_order_buffer','logistics_approve_delay_reschedule','logistics_archived_orders','logistics_backorder_allowed','logistics_belading_bevestig','logistics_belading_verstuurder','logistics_blocked_orders','logistics_blocked_overview','logistics_buffer_decision','logistics_buffer_detach_late_orders','logistics_buffer_frozen_order','logistics_buffer_handled','logistics_buffer_notify','logistics_buffer_open_key','logistics_buffer_payload','logistics_buffer_simulate','logistics_cancel_order','logistics_cancel_orphan_tasks','logistics_capacity_day_check','logistics_carrier_preview_existing','logistics_carrier_status','logistics_cart_archive','logistics_cart_archive_preview','logistics_cart_checkin_at','logistics_cart_fixed_numbering','logistics_cart_handled','logistics_cart_index','logistics_cart_is_archived','logistics_cart_is_full','logistics_cart_json_fixed','logistics_cart_layout_method','logistics_cart_order_ids','logistics_cart_order_refs','logistics_cart_plan_overview','logistics_cart_plan_status_core','logistics_cart_release_reason','logistics_cart_seq','logistics_cart_unarchive','logistics_cart_units','logistics_cart_wait_until','logistics_check_order_allowed','logistics_check_order_stock','logistics_claim_next_task','logistics_cleanup_duplicate_order_lines','logistics_cleanup_history','logistics_cleanup_tasks','logistics_consistency_check','logistics_control_complete_cart','logistics_control_settings','logistics_cron_health','logistics_day_windows','logistics_delivery_agenda','logistics_departure_preview','logistics_document_layout','logistics_document_layout_v2','logistics_emit_event','logistics_external_fulfillment_key_report','logistics_floriday_cart_plan','logistics_floriday_claim_pushes','logistics_floriday_finish_push','logistics_floriday_finish_push_v2','logistics_floriday_finish_push_v3','logistics_floriday_is_read_only','logistics_floriday_log_refusal','logistics_floriday_log_send','logistics_floriday_order_approved','logistics_floriday_prune_pushes','logistics_floriday_queue_push','logistics_full_cart_min_layers','logistics_full_cart_min_percentage','logistics_install_check','logistics_is_beheer','logistics_item_external_fulfilled','logistics_layout_method_status','logistics_link_order_items','logistics_local_hhmi','logistics_local_today','logistics_merge_decision','logistics_merge_floriday_lines','logistics_merge_lines_enabled','logistics_merge_partial_carts','logistics_opening_timezone','logistics_order_backlog_info','logistics_order_cart_approval','logistics_order_cart_ids','logistics_order_changed','logistics_order_definitively_blocked','logistics_order_departure','logistics_order_departure_list','logistics_order_documents_ready','logistics_order_documents_ready_bool','logistics_order_external_state','logistics_order_finalize_enqueue','logistics_order_finalize_overview','logistics_order_finalize_prune','logistics_order_finalize_reconcile','logistics_order_finalize_retry','logistics_order_finalize_run','logistics_order_frozen','logistics_order_handled','logistics_order_is_archived','logistics_order_is_backlog','logistics_order_is_frozen','logistics_order_line_duplicates','logistics_order_mergeable','logistics_order_overview','logistics_order_plan_coverage','logistics_order_plan_coverage_list','logistics_orphan_carts_list','logistics_orphan_carts_summary','logistics_own_transport_departure','logistics_packing_autofix','logistics_packing_block_reason','logistics_packing_dismiss','logistics_packing_overview','logistics_packing_reconcile','logistics_packing_set_manual','logistics_partial_wait_minutes','logistics_payload_is_floriday','logistics_plan_block','logistics_plan_defer','logistics_plan_enqueue','logistics_plan_finish','logistics_plan_floriday_order','logistics_plan_lock_acquire','logistics_plan_lock_release','logistics_plan_progress','logistics_plan_progress_pct','logistics_plan_queue_list','logistics_plan_reset_queue','logistics_plan_retry','logistics_plan_state_for','logistics_plan_timeout_running','logistics_plan_unarchive','logistics_prune_buffer_member_queue','logistics_queue_capacity_email','logistics_queue_stock_email','logistics_reapply_buffer_decisions','logistics_rebuffer_open_orders','logistics_rebuffer_orders','logistics_rebuffer_pending','logistics_rebuffer_report','logistics_refresh_plan_state','logistics_replan_all','logistics_replan_all_force','logistics_replan_order_journey','logistics_replan_preview','logistics_replan_selected','logistics_report_delay','logistics_reschedule_order','logistics_reschedule_preview','logistics_resolve_carrier','logistics_resolve_carrier_for_location','logistics_resolve_carrier_for_location_many','logistics_resolve_carrier_many','logistics_resolve_settings','logistics_sales_order_external_fulfilled','logistics_schedule_tasks','logistics_set_order_priority','logistics_subtract_working_minutes','logistics_supersede_stale_tasks','logistics_sync_task_carriers','logistics_task_open_counts','logistics_tasks_prune','logistics_tick_health','logistics_tick_ping','logistics_timezone_options','logistics_trace','logistics_trace_all_orders','logistics_trace_archive_order','logistics_trace_batch','logistics_trace_derive','logistics_trace_order_journey_start','logistics_trace_order_origin','logistics_trace_order_overview','logistics_trace_order_state','logistics_trace_order_step','logistics_trace_orders','logistics_trace_progress','logistics_trace_progress_order','logistics_trace_step_once','logistics_trace_stock_check','logistics_trace_timeline','logistics_trace_version_events','logistics_trace_versions','logistics_tz','logistics_unit_order_ids','logistics_upsert_task','logistics_valid_timezone','logistics_write_buffer_layer_positions','logistics_write_cart_layer_positions']), 'ingelogd'
|
|
29614
30135
|
UNION ALL
|
|
29615
30136
|
SELECT unnest(ARRAY['logistics_active_layout_method','logistics_address_key','logistics_block_reason_code','logistics_buffer_criteria','logistics_buffer_decision_for_settings','logistics_buffer_value','logistics_capacity_plan_day','logistics_carrier_minutes','logistics_delay_customer_email','logistics_document_selection_status','logistics_document_type_map','logistics_floriday_delivery_note_create_enabled','logistics_floriday_gate_status','logistics_floriday_shipping_document','logistics_floriday_status_updates_enabled','logistics_floriday_stock_updates_enabled','logistics_floriday_write_allowed','logistics_is_engine_response','logistics_live_carriers','logistics_live_cart_count','logistics_next_workday_date','logistics_next_workday_not_past','logistics_nl_date','logistics_nl_moment','logistics_not_past','logistics_order_cart_count','logistics_order_is_shipped_status','logistics_order_merge_key','logistics_plan_error_class','logistics_plan_error_text','logistics_resolve_product_id','logistics_resolve_product_match','logistics_retention_days','logistics_rule_bool','logistics_rule_num','logistics_rule_text','logistics_rule_value','logistics_shift_to_workday','logistics_status_after_shipping','logistics_task_owner','logistics_task_retention_days','logistics_trace_node','logistics_trace_redact','logistics_trace_source_node','logistics_tray_plants','logistics_try_uuid']), 'open (rekenhulp/rechten aanroeper)'
|
|
@@ -29816,3 +30337,30 @@ BEGIN
|
|
|
29816
30337
|
END $acc$;
|
|
29817
30338
|
|
|
29818
30339
|
ALTER FUNCTION public.logistics_cart_barcode_value(uuid) SET search_path TO 'public';
|
|
30340
|
+
|
|
30341
|
+
-- 1.0.188: mislukte aanmelding voor (her)planning zichtbaar maken.
|
|
30342
|
+
CREATE OR REPLACE FUNCTION public.logistics_plan_fail_log(p_actor text, p_order_id uuid, p_state text, p_msg text)
|
|
30343
|
+
RETURNS void LANGUAGE plpgsql SECURITY DEFINER SET search_path TO 'public'
|
|
30344
|
+
AS $function$
|
|
30345
|
+
DECLARE v_num text;
|
|
30346
|
+
BEGIN
|
|
30347
|
+
PERFORM public.logistics_acc_guard('server', 'logistics_plan_fail_log');
|
|
30348
|
+
BEGIN
|
|
30349
|
+
SELECT o.order_number INTO v_num FROM public.orders o WHERE o.id = p_order_id;
|
|
30350
|
+
PERFORM public.logistics_trace(jsonb_build_object(
|
|
30351
|
+
'orderRef', coalesce(v_num, p_order_id::text), 'phase', 'planning', 'step', 'aanmelden voor indeling',
|
|
30352
|
+
'status', 'mislukt', 'actor', p_actor, 'errorClass', 'technisch', 'nodeId', 'stap:orders_combineren',
|
|
30353
|
+
'error', p_state || ': ' || coalesce(p_msg, ''),
|
|
30354
|
+
'reason', 'De wijziging is opgeslagen, maar de order kon niet voor (her)indeling worden aangemeld. De planwachtrij probeert het opnieuw.'));
|
|
30355
|
+
EXCEPTION WHEN OTHERS THEN
|
|
30356
|
+
RAISE WARNING 'logistiek-engine: fout niet vastgelegd voor order %: %', p_order_id, SQLERRM;
|
|
30357
|
+
END;
|
|
30358
|
+
-- Vangnet: alsnog in de planwachtrij, in een eigen subblok.
|
|
30359
|
+
BEGIN
|
|
30360
|
+
PERFORM public.logistics_plan_enqueue(p_order_id, 'herplanning mislukt');
|
|
30361
|
+
EXCEPTION WHEN OTHERS THEN NULL;
|
|
30362
|
+
END;
|
|
30363
|
+
END $function$;
|
|
30364
|
+
REVOKE ALL ON FUNCTION public.logistics_plan_fail_log(text, uuid, text, text) FROM PUBLIC, anon, authenticated;
|
|
30365
|
+
GRANT EXECUTE ON FUNCTION public.logistics_plan_fail_log(text, uuid, text, text) TO service_role;
|
|
30366
|
+
COMMENT ON FUNCTION public.logistics_plan_fail_log(text, uuid, text, text) IS 'Logistiek Engine: legt een mislukte aanmelding voor (her)planning vast in het logboek en zet de order alsnog in de planwachtrij.';
|