@flowselections/floriday-afhandeling-module 1.0.42 → 1.0.44

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.
Files changed (96) hide show
  1. package/dist-lib/components/afhandeling/AutoProcessStatus.d.ts +3 -1
  2. package/dist-lib/components/afhandeling/AutoProcessStatus.d.ts.map +1 -1
  3. package/dist-lib/components/afhandeling/AutoProcessStatus.js +36 -3
  4. package/dist-lib/components/afhandeling/ControleLijstPrint.js +54 -54
  5. package/dist-lib/components/afhandeling/ControlePage.d.ts.map +1 -1
  6. package/dist-lib/components/afhandeling/ControlePage.js +23 -25
  7. package/dist-lib/components/afhandeling/DagDetailDialog.d.ts +1 -1
  8. package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -1
  9. package/dist-lib/components/afhandeling/DagDetailDialog.js +410 -121
  10. package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
  11. package/dist-lib/components/afhandeling/PickAgendaView.js +4 -4
  12. package/dist-lib/components/afhandeling/PickingPage.d.ts.map +1 -1
  13. package/dist-lib/components/afhandeling/PickingPage.js +1 -1
  14. package/dist-lib/components/afhandeling/ScanControleView.d.ts +2 -0
  15. package/dist-lib/components/afhandeling/ScanControleView.d.ts.map +1 -0
  16. package/dist-lib/components/afhandeling/ScanControleView.js +158 -0
  17. package/dist-lib/components/afhandeling/VervoerdersPage.js +1 -1
  18. package/dist-lib/components/afhandeling/VerzetOrderDialog.js +1 -1
  19. package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
  20. package/dist-lib/components/afhandeling/WeekAgendaView.js +25 -2
  21. package/dist-lib/components/pickstation/PakbonTemplate.js +70 -70
  22. package/dist-lib/hooks/useCartIndex.d.ts.map +1 -1
  23. package/dist-lib/hooks/useCartIndex.js +6 -1
  24. package/dist-lib/hooks/useEngineBufferEvents.d.ts +7 -0
  25. package/dist-lib/hooks/useEngineBufferEvents.d.ts.map +1 -0
  26. package/dist-lib/hooks/useEngineBufferEvents.js +47 -0
  27. package/dist-lib/hooks/useEngineTasks.js +1 -1
  28. package/dist-lib/hooks/useKnownOrders.d.ts +12 -0
  29. package/dist-lib/hooks/useKnownOrders.d.ts.map +1 -0
  30. package/dist-lib/hooks/useKnownOrders.js +79 -0
  31. package/dist-lib/hooks/useOrderBuffers.d.ts +17 -0
  32. package/dist-lib/hooks/useOrderBuffers.d.ts.map +1 -0
  33. package/dist-lib/hooks/useOrderBuffers.js +53 -0
  34. package/dist-lib/hooks/useOrderPickDates.d.ts +10 -0
  35. package/dist-lib/hooks/useOrderPickDates.d.ts.map +1 -0
  36. package/dist-lib/hooks/useOrderPickDates.js +62 -0
  37. package/dist-lib/hooks/useOrderPlanning.d.ts +1 -3
  38. package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
  39. package/dist-lib/hooks/useOrderPlanning.js +9 -13
  40. package/dist-lib/hooks/usePickAgenda.d.ts +4 -5
  41. package/dist-lib/hooks/usePickAgenda.d.ts.map +1 -1
  42. package/dist-lib/hooks/usePickAgenda.js +65 -9
  43. package/dist-lib/hooks/usePickMode.d.ts +10 -0
  44. package/dist-lib/hooks/usePickMode.d.ts.map +1 -0
  45. package/dist-lib/hooks/usePickMode.js +31 -0
  46. package/dist-lib/index.d.ts +2 -0
  47. package/dist-lib/index.d.ts.map +1 -1
  48. package/dist-lib/index.js +19 -6
  49. package/dist-lib/integrations/supabase/auth-middleware.d.ts +2174 -60
  50. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  51. package/dist-lib/integrations/supabase/client.server.d.ts +2174 -60
  52. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  53. package/dist-lib/integrations/supabase/client.server.js +1 -1
  54. package/dist-lib/integrations/supabase/moduleClient.d.ts +2174 -60
  55. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  56. package/dist-lib/integrations/supabase/types.d.ts +2381 -225
  57. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  58. package/dist-lib/integrations/supabase/types.js +1 -0
  59. package/dist-lib/lib/afhandelingSettings.functions.d.ts +4452 -228
  60. package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
  61. package/dist-lib/lib/carrierSignupMail.server.js +26 -26
  62. package/dist-lib/lib/carriers.functions.d.ts +11161 -591
  63. package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
  64. package/dist-lib/lib/cartAssignments.functions.d.ts +11161 -591
  65. package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
  66. package/dist-lib/lib/cartControl.functions.d.ts +48433 -1230
  67. package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
  68. package/dist-lib/lib/cartControl.functions.js +134 -10
  69. package/dist-lib/lib/deliveryNote.functions.d.ts +26064 -0
  70. package/dist-lib/lib/deliveryNote.functions.d.ts.map +1 -0
  71. package/dist-lib/lib/deliveryNote.functions.js +32 -0
  72. package/dist-lib/lib/engineLayouts.functions.d.ts +26062 -0
  73. package/dist-lib/lib/engineLayouts.functions.d.ts.map +1 -0
  74. package/dist-lib/lib/engineLayouts.functions.js +42 -0
  75. package/dist-lib/lib/floriday.functions.d.ts +28367 -186
  76. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  77. package/dist-lib/lib/floriday.functions.js +119 -343
  78. package/dist-lib/lib/logisticsEngine/reschedule.d.ts +17 -0
  79. package/dist-lib/lib/logisticsEngine/reschedule.d.ts.map +1 -1
  80. package/dist-lib/lib/logisticsEngine/reschedule.js +63 -0
  81. package/dist-lib/lib/orderFulfilment.functions.d.ts +26064 -0
  82. package/dist-lib/lib/orderFulfilment.functions.d.ts.map +1 -0
  83. package/dist-lib/lib/orderFulfilment.functions.js +35 -0
  84. package/dist-lib/lib/orderStatus.d.ts +10 -0
  85. package/dist-lib/lib/orderStatus.d.ts.map +1 -0
  86. package/dist-lib/lib/orderStatus.js +81 -0
  87. package/dist-lib/lib/pickDates.functions.d.ts +26069 -0
  88. package/dist-lib/lib/pickDates.functions.d.ts.map +1 -0
  89. package/dist-lib/lib/pickDates.functions.js +56 -0
  90. package/dist-lib/lib/pickMode.d.ts +14 -0
  91. package/dist-lib/lib/pickMode.d.ts.map +1 -0
  92. package/dist-lib/lib/pickMode.js +103 -0
  93. package/dist-lib/lib/printing.d.ts +3 -1
  94. package/dist-lib/lib/printing.d.ts.map +1 -1
  95. package/dist-lib/lib/printing.js +1 -0
  96. package/package.json +1 -1
@@ -26,7 +26,39 @@ async function loadControlCarts(supabase) {
26
26
  const { data, error } = await supabase.rpc("control_get_todays_carts");
27
27
  if (error)
28
28
  throw new Error(error.message);
29
- const rows = (data ?? []);
29
+ const allRows = (data ?? []);
30
+ if (allRows.length === 0)
31
+ return [];
32
+ // Alleen orders die de Verkoop-module kent mogen zichtbaar zijn.
33
+ const candidateIds = Array.from(new Set(allRows.map((r) => r.order_id).filter(Boolean)));
34
+ const candidateNumbers = Array.from(new Set(allRows.map((r) => r.order_number).filter((v) => !!v)));
35
+ const knownIds = new Set();
36
+ const knownNumbers = new Set();
37
+ if (candidateIds.length > 0) {
38
+ const { data: byId } = await supabase
39
+ .from("orders")
40
+ .select("id, order_number")
41
+ .is("deleted_at", null)
42
+ .in("id", candidateIds);
43
+ for (const o of (byId ?? [])) {
44
+ knownIds.add(o.id);
45
+ if (o.order_number)
46
+ knownNumbers.add(o.order_number);
47
+ }
48
+ }
49
+ if (candidateNumbers.length > 0) {
50
+ const { data: byNumber } = await supabase
51
+ .from("orders")
52
+ .select("id, order_number")
53
+ .is("deleted_at", null)
54
+ .in("order_number", candidateNumbers);
55
+ for (const o of (byNumber ?? [])) {
56
+ knownIds.add(o.id);
57
+ if (o.order_number)
58
+ knownNumbers.add(o.order_number);
59
+ }
60
+ }
61
+ const rows = allRows.filter((r) => knownIds.has(r.order_id) || (r.order_number ? knownNumbers.has(r.order_number) : false));
30
62
  if (rows.length === 0)
31
63
  return [];
32
64
  // --- Verrijking 1: ordergegevens ---
@@ -65,6 +97,42 @@ async function loadControlCarts(supabase) {
65
97
  catch {
66
98
  // Verrijking is optioneel: zonder deze gegevens blijft de kar zichtbaar.
67
99
  }
100
+ // --- Verrijking 3: totaal aantal karren per order uit de gedeelde karindex ---
101
+ // De karindex van de Engine is de enige bron voor "hoeveel karren heeft deze
102
+ // order". Lukt dat niet, dan valt het totaal terug op de karren die we hier
103
+ // zien (nooit een verzonnen getal).
104
+ const totalsByOrder = new Map();
105
+ try {
106
+ const pickDates = rows.map((r) => r.pick_date).filter(Boolean).sort();
107
+ if (pickDates.length > 0) {
108
+ const { data: idx } = await supabase.rpc("logistics_cart_index", {
109
+ p_from: pickDates[0],
110
+ p_to: pickDates[pickDates.length - 1],
111
+ });
112
+ const perRef = new Map();
113
+ for (const row of (Array.isArray(idx) ? idx : [])) {
114
+ if (!row.cart_id)
115
+ continue;
116
+ for (const ref of [row.order_uuid, row.order_number]) {
117
+ if (!ref)
118
+ continue;
119
+ const set = perRef.get(ref) ?? new Set();
120
+ set.add(row.cart_id);
121
+ perRef.set(ref, set);
122
+ }
123
+ }
124
+ for (const [ref, set] of perRef)
125
+ totalsByOrder.set(ref, set.size);
126
+ }
127
+ }
128
+ catch {
129
+ // Zonder karindex vallen we terug op de karren in deze lijst.
130
+ }
131
+ const fallbackTotals = new Map();
132
+ for (const r of rows) {
133
+ const cur = fallbackTotals.get(r.order_id) ?? 0;
134
+ fallbackTotals.set(r.order_id, Math.max(cur, r.cart_index));
135
+ }
68
136
  const carts = [];
69
137
  const seen = new Set();
70
138
  for (const r of rows) {
@@ -82,14 +150,20 @@ async function loadControlCarts(supabase) {
82
150
  const order = orderMap.get(r.order_id);
83
151
  const extra = extras.get(`${r.order_id}#${r.cart_index}`) ??
84
152
  extras.get(`${r.order_id}#${r.cart_index - 1}`);
85
- const orderNumber = order?.orderNumber ?? "";
153
+ const orderNumber = r.order_number ?? order?.orderNumber ?? "";
86
154
  const orderNumbers = Array.from(new Set([orderNumber, ...(extra?.orderNumbers ?? [])].filter(Boolean)));
155
+ const cartTotal = totalsByOrder.get(r.order_id) ??
156
+ (orderNumber ? totalsByOrder.get(orderNumber) : undefined) ??
157
+ fallbackTotals.get(r.order_id) ??
158
+ null;
87
159
  carts.push({
88
160
  cartNumberId,
89
161
  cartNumber: r.cart_number ?? extra?.cartNumber ?? null,
90
162
  orderId: r.order_id,
91
163
  orderSource,
92
164
  cartIndex: r.cart_index,
165
+ cartSeq: r.cart_index,
166
+ cartTotal,
93
167
  orderNumber,
94
168
  orderNumbers,
95
169
  customerName: order?.customerName ?? "",
@@ -195,6 +269,7 @@ export const submitControlSession = createServerFn({ method: "POST" })
195
269
  const checkedSet = new Set(data.checkedCartKeys);
196
270
  const confirmedRescheduleSet = new Set(data.confirmedRescheduleCartKeys ?? []);
197
271
  const items = [];
272
+ const deliveredPayload = [];
198
273
  const rescheduled = [];
199
274
  const blocked = [];
200
275
  let checkedCount = 0;
@@ -215,12 +290,14 @@ export const submitControlSession = createServerFn({ method: "POST" })
215
290
  pickup_date: o.pickupDate,
216
291
  };
217
292
  if (checkedSet.has(key)) {
218
- // Aangevinkt → status naar 'ready' (klaar voor transport)
219
- await supabase.rpc("pickstation_set_cart_status", {
220
- p_order_source: o.orderSource,
221
- p_order_id: o.orderId,
222
- p_cart_index: o.cartIndex,
223
- p_status: "ready",
293
+ // De controleregel is leidend voor Engine-karren. Werk daarnaast de
294
+ // verouderde cart_numbers-status bij wanneer die bron dit ondersteunt.
295
+ deliveredPayload.push({
296
+ order_id: o.orderId,
297
+ order_source: o.orderSource,
298
+ cart_index: o.cartIndex,
299
+ cart_number: o.cartNumber,
300
+ pick_date: o.pickDate || toIso(new Date()),
224
301
  });
225
302
  items.push({ ...baseFields, action: "checked" });
226
303
  checkedCount++;
@@ -284,11 +361,22 @@ export const submitControlSession = createServerFn({ method: "POST" })
284
361
  });
285
362
  }
286
363
  }
364
+ // Afgevinkte karren krijgen de status 'afgeleverd' met het moment van controle,
365
+ // zodat andere modules alleen de karren van vandaag als afgeleverd tonen.
366
+ if (deliveredPayload.length > 0) {
367
+ const { error: deliveredError } = await supabase.rpc("control_mark_carts_delivered", {
368
+ p_carts: deliveredPayload,
369
+ });
370
+ if (deliveredError)
371
+ throw new Error(deliveredError.message);
372
+ }
287
373
  if (items.length > 0) {
288
- await supabase.from("cart_control_items").insert(items);
374
+ const { error: itemsError } = await supabase.from("cart_control_items").insert(items);
375
+ if (itemsError)
376
+ throw new Error(itemsError.message);
289
377
  }
290
378
  // Update sessie-aantallen
291
- await supabase
379
+ const { error: sessionUpdateError } = await supabase
292
380
  .from("cart_control_sessions")
293
381
  .update({
294
382
  checked_count: checkedCount,
@@ -296,6 +384,8 @@ export const submitControlSession = createServerFn({ method: "POST" })
296
384
  blocked_count: blocked.length,
297
385
  })
298
386
  .eq("id", session.id);
387
+ if (sessionUpdateError)
388
+ throw new Error(sessionUpdateError.message);
299
389
  // Kritieke melding aanmaken of oplossen
300
390
  const alertKey = `cart_not_rescheduled:${toIso(new Date())}`;
301
391
  if (blocked.length > 0) {
@@ -545,3 +635,37 @@ export const clearControlDraft = createServerFn({ method: "POST" })
545
635
  throw new Error(error.message);
546
636
  return { ok: true };
547
637
  });
638
+ /**
639
+ * Karren die vandaag zijn gecontroleerd en daarmee op 'afgeleverd' staan.
640
+ * Vanaf de volgende dag is deze lijst weer leeg; oudere controles staan in de historie.
641
+ */
642
+ export const listDeliveredToday = createServerFn({ method: "GET" })
643
+ .middleware([requireSupabaseAuth])
644
+ .handler(async ({ context }) => {
645
+ const supabase = context.supabase;
646
+ const today = toIso(new Date());
647
+ const { data: sessions, error: sessErr } = await supabase
648
+ .from("cart_control_sessions")
649
+ .select("id")
650
+ .eq("user_id", context.userId)
651
+ .eq("control_date", today);
652
+ if (sessErr)
653
+ throw new Error(sessErr.message);
654
+ const sessionIds = (sessions ?? []).map((s) => s.id);
655
+ if (sessionIds.length === 0)
656
+ return { carts: [] };
657
+ const { data, error } = await supabase
658
+ .from("cart_control_items")
659
+ .select("cart_number_label, order_number, created_at")
660
+ .in("session_id", sessionIds)
661
+ .eq("action", "checked")
662
+ .order("order_number", { ascending: true });
663
+ if (error)
664
+ throw new Error(error.message);
665
+ const carts = (data ?? []).map((r) => ({
666
+ cartNumberLabel: r.cart_number_label ?? null,
667
+ orderNumber: r.order_number ?? null,
668
+ deliveredAt: r.created_at,
669
+ }));
670
+ return { carts };
671
+ });