@flowselections/floriday-afhandeling-module 1.0.42 → 1.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/afhandeling/AutoProcessStatus.d.ts +3 -1
- package/dist-lib/components/afhandeling/AutoProcessStatus.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/AutoProcessStatus.js +36 -3
- package/dist-lib/components/afhandeling/ControleLijstPrint.js +54 -54
- package/dist-lib/components/afhandeling/ControlePage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/ControlePage.js +23 -25
- package/dist-lib/components/afhandeling/DagDetailDialog.d.ts +1 -1
- package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/DagDetailDialog.js +410 -121
- package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/PickAgendaView.js +4 -4
- package/dist-lib/components/afhandeling/PickingPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/PickingPage.js +1 -1
- package/dist-lib/components/afhandeling/ScanControleView.d.ts +2 -0
- package/dist-lib/components/afhandeling/ScanControleView.d.ts.map +1 -0
- package/dist-lib/components/afhandeling/ScanControleView.js +158 -0
- package/dist-lib/components/afhandeling/VervoerdersPage.js +1 -1
- package/dist-lib/components/afhandeling/VerzetOrderDialog.js +1 -1
- package/dist-lib/components/afhandeling/WeekAgendaView.js +1 -1
- package/dist-lib/components/pickstation/PakbonTemplate.js +70 -70
- package/dist-lib/hooks/useCartIndex.d.ts.map +1 -1
- package/dist-lib/hooks/useCartIndex.js +6 -1
- package/dist-lib/hooks/useEngineTasks.js +1 -1
- package/dist-lib/hooks/useKnownOrders.d.ts +11 -0
- package/dist-lib/hooks/useKnownOrders.d.ts.map +1 -0
- package/dist-lib/hooks/useKnownOrders.js +54 -0
- package/dist-lib/hooks/useOrderBuffers.d.ts +17 -0
- package/dist-lib/hooks/useOrderBuffers.d.ts.map +1 -0
- package/dist-lib/hooks/useOrderBuffers.js +53 -0
- package/dist-lib/hooks/useOrderPickDates.d.ts +10 -0
- package/dist-lib/hooks/useOrderPickDates.d.ts.map +1 -0
- package/dist-lib/hooks/useOrderPickDates.js +62 -0
- package/dist-lib/hooks/useOrderPlanning.d.ts +1 -3
- package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
- package/dist-lib/hooks/useOrderPlanning.js +9 -13
- package/dist-lib/hooks/usePickAgenda.d.ts +0 -5
- package/dist-lib/hooks/usePickAgenda.d.ts.map +1 -1
- package/dist-lib/hooks/usePickAgenda.js +62 -9
- package/dist-lib/hooks/usePickMode.d.ts +10 -0
- package/dist-lib/hooks/usePickMode.d.ts.map +1 -0
- package/dist-lib/hooks/usePickMode.js +31 -0
- package/dist-lib/index.d.ts +2 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +19 -6
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +2027 -86
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +2027 -86
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +2027 -86
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +2097 -114
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/afhandelingSettings.functions.d.ts +4018 -140
- package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
- package/dist-lib/lib/carrierSignupMail.server.js +26 -26
- package/dist-lib/lib/carriers.functions.d.ts +10072 -367
- package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartAssignments.functions.d.ts +10072 -367
- package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.d.ts +45879 -579
- package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.js +134 -10
- package/dist-lib/lib/deliveryNote.functions.d.ts +25891 -0
- package/dist-lib/lib/deliveryNote.functions.d.ts.map +1 -0
- package/dist-lib/lib/deliveryNote.functions.js +32 -0
- package/dist-lib/lib/engineLayouts.functions.d.ts +25889 -0
- package/dist-lib/lib/engineLayouts.functions.d.ts.map +1 -0
- package/dist-lib/lib/engineLayouts.functions.js +42 -0
- package/dist-lib/lib/floriday.functions.d.ts +27885 -52
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.js +118 -343
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts +17 -0
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts.map +1 -1
- package/dist-lib/lib/logisticsEngine/reschedule.js +63 -0
- package/dist-lib/lib/orderFulfilment.functions.d.ts +25891 -0
- package/dist-lib/lib/orderFulfilment.functions.d.ts.map +1 -0
- package/dist-lib/lib/orderFulfilment.functions.js +35 -0
- package/dist-lib/lib/orderStatus.d.ts +10 -0
- package/dist-lib/lib/orderStatus.d.ts.map +1 -0
- package/dist-lib/lib/orderStatus.js +81 -0
- package/dist-lib/lib/pickDates.functions.d.ts +25896 -0
- package/dist-lib/lib/pickDates.functions.d.ts.map +1 -0
- package/dist-lib/lib/pickDates.functions.js +56 -0
- package/dist-lib/lib/pickMode.d.ts +14 -0
- package/dist-lib/lib/pickMode.d.ts.map +1 -0
- package/dist-lib/lib/pickMode.js +103 -0
- package/dist-lib/lib/printing.d.ts +3 -1
- package/dist-lib/lib/printing.d.ts.map +1 -1
- package/dist-lib/lib/printing.js +1 -0
- 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
|
|
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
|
-
//
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
+
});
|