@flowselections/logistiek-engine 1.0.94 → 1.0.98

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 (45) hide show
  1. package/dist-lib/components/MisluktVerzendbrievenCard.d.ts +2 -0
  2. package/dist-lib/components/MisluktVerzendbrievenCard.d.ts.map +1 -0
  3. package/dist-lib/components/MisluktVerzendbrievenCard.js +50 -0
  4. package/dist-lib/components/RegiePage.d.ts.map +1 -1
  5. package/dist-lib/components/RegiePage.js +2 -1
  6. package/dist-lib/components/RuleEnginePage.d.ts.map +1 -1
  7. package/dist-lib/components/RuleEnginePage.js +3 -1
  8. package/dist-lib/integrations/supabase/auth-middleware.d.ts +59 -0
  9. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  10. package/dist-lib/integrations/supabase/client.server.d.ts +59 -0
  11. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  12. package/dist-lib/integrations/supabase/moduleClient.d.ts +59 -0
  13. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  14. package/dist-lib/integrations/supabase/types.d.ts +59 -0
  15. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  16. package/dist-lib/lib/cartCoverage.functions.d.ts +59 -0
  17. package/dist-lib/lib/cartCoverage.functions.d.ts.map +1 -1
  18. package/dist-lib/lib/controlScan.server.d.ts +2 -0
  19. package/dist-lib/lib/controlScan.server.d.ts.map +1 -1
  20. package/dist-lib/lib/controlScan.server.js +59 -53
  21. package/dist-lib/lib/floridayDocuments.functions.d.ts +177 -0
  22. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  23. package/dist-lib/lib/floridayPush.functions.d.ts +59 -0
  24. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  25. package/dist-lib/lib/layoutPrint.server.d.ts +27 -0
  26. package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -0
  27. package/dist-lib/lib/layoutPrint.server.js +48 -0
  28. package/dist-lib/lib/layoutPrint.test.d.ts +2 -0
  29. package/dist-lib/lib/layoutPrint.test.d.ts.map +1 -0
  30. package/dist-lib/lib/layoutPrint.test.js +47 -0
  31. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +295 -0
  32. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  33. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  34. package/dist-lib/lib/loadCarrierPlanning.server.js +52 -8
  35. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +118 -0
  36. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  37. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +59 -0
  38. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  39. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  40. package/dist-lib/lib/modulePrompts.js +54 -0
  41. package/dist-lib/lib/plannerDiff.functions.d.ts +59 -0
  42. package/dist-lib/lib/plannerDiff.functions.d.ts.map +1 -1
  43. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
  44. package/dist-lib/lib/shippingNoteQueue.server.js +40 -49
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
@@ -146,6 +146,8 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
146
146
  let groupSet = new Set();
147
147
  // Groepsregels dragen niet altijd een product_id. Zonder koppeling wordt de
148
148
  // groep op naam opgezocht, zodat de leden en hun afmetingen alsnog meetellen.
149
+ // Een regel die aan een echt artikel gekoppeld is, blijft altijd dat artikel,
150
+ // ook als er toevallig een productgroep met dezelfde naam bestaat.
149
151
  const groupByName = new Map();
150
152
  {
151
153
  const { data: allGroups } = await sb.from("product_groups").select("id, name");
@@ -154,9 +156,12 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
154
156
  groupByName.set(String(g.name).trim().toLowerCase(), String(g.id));
155
157
  }
156
158
  }
159
+ let realProductIds = new Set();
157
160
  if (groupIds.length > 0) {
158
161
  const { data: groups } = await sb.from("product_groups").select("id").in("id", groupIds);
159
162
  groupSet = new Set((groups ?? []).map((g) => g.id));
163
+ const { data: realProds } = await sb.from("products").select("id").in("id", groupIds);
164
+ realProductIds = new Set((Array.isArray(realProds) ? realProds : []).map((p) => String(p.id)));
160
165
  }
161
166
  for (const row of rows) {
162
167
  const orderKey = row.order_id ? String(row.order_id) : null;
@@ -169,14 +174,18 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
169
174
  : null;
170
175
  const { belading: base, source } = resolveBelading(row, packing, linePacking);
171
176
  const plants = Math.max(0, Number(row.quantity ?? 0));
177
+ const explicitGroupPrefix = /^\[Groep\]/i.test(String(row.product_name ?? ""));
172
178
  const groupNameKey = String(row.product_name ?? "")
173
179
  .replace(/^\[Groep\]\s*/i, "")
174
180
  .trim()
175
181
  .toLowerCase();
182
+ const linkedToRealProduct = typeof row.product_id === "string" && realProductIds.has(row.product_id) && !groupSet.has(row.product_id);
176
183
  const groupId = row.product_id && groupSet.has(row.product_id)
177
184
  ? String(row.product_id)
178
- : groupByName.get(groupNameKey) ?? null;
179
- const isGroup = groupId != null || String(row.product_name ?? "").startsWith("[Groep]");
185
+ : !linkedToRealProduct || explicitGroupPrefix
186
+ ? groupByName.get(groupNameKey) ?? null
187
+ : null;
188
+ const isGroup = groupId != null || (explicitGroupPrefix && !linkedToRealProduct);
180
189
  if (!isGroup) {
181
190
  options.sources?.set(String(row.id), source);
182
191
  out.push({
@@ -219,7 +228,9 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
219
228
  const { data: prods } = await sb
220
229
  .from("products")
221
230
  .select("id, product, plants_per_crate, crates_per_layer, layers_per_cart, weight, floriday_trade_item_id")
222
- .or(tradeIds.map((t) => `floriday_trade_item_id.eq.${t}`).join(","));
231
+ .or(tradeIds
232
+ .flatMap((t) => UUID_RE.test(t) ? [`floriday_trade_item_id.eq.${t}`, `id.eq.${t}`] : [`floriday_trade_item_id.eq.${t}`])
233
+ .join(","));
223
234
  const prodByTrade = new Map();
224
235
  for (const p of prods ?? []) {
225
236
  if (p.floriday_trade_item_id)
@@ -228,6 +239,9 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
228
239
  }
229
240
  const resolved = memberList.map((m) => {
230
241
  const p = prodByTrade.get(String(m.trade_item_id));
242
+ // Onbekend groepslid: niet gokken en geen kale id als artikelnaam.
243
+ if (!p)
244
+ return { m, p, belading: { ...base }, source: "geen" };
231
245
  // Een handmatig vastgezette regel blijft leidend voor de hele groep.
232
246
  if (source === "handmatig") {
233
247
  return { m, p, belading: { ...base }, source };
@@ -283,7 +297,7 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
283
297
  order_id: row.order_id ?? null,
284
298
  customer_id: row.customer_id ?? null,
285
299
  product_id: r.p?.id ?? null,
286
- product_name: `${row.product_name ?? "Groep"} — ${r.p?.product ?? r.m.trade_item_id}`,
300
+ product_name: `${row.product_name ?? "Groep"} — ${r.p?.product ?? "onbekend groepslid"}`,
287
301
  plants: shares[idx],
288
302
  ...r.belading,
289
303
  packing_authoritative: isAuthoritative(r.source),
@@ -551,8 +565,12 @@ export function dimensionCartsToPlannedUnits(carts) {
551
565
  // ---------------------------------------------------------------------------
552
566
  // Herplannen van een buffer
553
567
  // ---------------------------------------------------------------------------
554
- /** Maximaal aantal ladingdragers dat één orderbuffer mag opleveren. */
555
- const MAX_CARTS_PER_BUFFER = 500;
568
+ /**
569
+ * Maximaal aantal ladingdragers dat één orderbuffer mag opleveren. De grootste
570
+ * echte buffers kwamen op 725–867 karren; 1.000 houdt een vangnet tegen
571
+ * opgeblazen aantallen zonder echte grote orders te blokkeren.
572
+ */
573
+ const MAX_CARTS_PER_BUFFER = 1000;
556
574
  /** Statussen waarbij een order niet meer ingedeeld hoeft te worden. */
557
575
  const TERMINALE_STATUSSEN = new Set([
558
576
  "verzonden",
@@ -1217,9 +1235,11 @@ async function replanBufferUnlocked(sb, bufferId, options = {}) {
1217
1235
  // omzeild kan worden.
1218
1236
  const totalCartsAfterPlan = plannedCarts.length + frozenCartCount;
1219
1237
  if (totalCartsAfterPlan > MAX_CARTS_PER_BUFFER) {
1220
- const reason = `Deze orderbuffer komt uit op ${totalCartsAfterPlan} ladingdragers ` +
1238
+ const reason = `Orderbuffer met order(s) ${orderRefs.join(", ")} komt uit op ${totalCartsAfterPlan} ladingdragers ` +
1221
1239
  `(${frozenCartCount} al vastgelegd + ${plannedCarts.length} nieuw), meer dan de grens van ` +
1222
- `${MAX_CARTS_PER_BUFFER}. Er is niets ingedeeld; controleer de aantallen of de belading van de producten.`;
1240
+ `${MAX_CARTS_PER_BUFFER}. Alleen deze buffer is niet ingedeeld. Wat te doen: controleer de ` +
1241
+ `aantallen in de order (dubbele regels?) en de belading per ladingdrager van de producten; ` +
1242
+ `daarna opnieuw berekenen.`;
1223
1243
  console.error(`[logistiek-engine] buffer ${bufferId} geblokkeerd: ${reason}`);
1224
1244
  if (!options.dryRun) {
1225
1245
  const { error: blockError } = await sb.rpc("logistics_plan_block", {
@@ -1264,6 +1284,30 @@ async function replanBufferUnlocked(sb, bufferId, options = {}) {
1264
1284
  carts: plannedCarts,
1265
1285
  };
1266
1286
  }
1287
+ // Tussen lezen en schrijven kan de buffer zijn afgesloten (bijv. door het
1288
+ // losmaken van late orders). Dan niets meer schrijven.
1289
+ {
1290
+ const { data: bufRow, error: bufError } = await sb
1291
+ .from("order_buffers")
1292
+ .select("closed_at")
1293
+ .eq("id", bufferId)
1294
+ .maybeSingle();
1295
+ if (bufError || bufRow?.closed_at) {
1296
+ const reason = bufError
1297
+ ? `Status van de buffer kon niet worden gelezen: ${bufError.message}`
1298
+ : "De buffer is inmiddels afgesloten; er is niets weggeschreven.";
1299
+ return {
1300
+ ok: true,
1301
+ bufferId,
1302
+ orderIds,
1303
+ cartsCreated: 0,
1304
+ replacedManualCount,
1305
+ usedFloridayPacking,
1306
+ warnings: [...warnings, reason],
1307
+ skipped: "locked",
1308
+ };
1309
+ }
1310
+ }
1267
1311
  const persistentIdentities = assignPersistentCartIdentities(plannedCarts, itemToOrder, {
1268
1312
  shared: isBufferOrder || isSupplement,
1269
1313
  startNumber: cartNumberStart,
@@ -16106,18 +16106,24 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
16106
16106
  Row: {
16107
16107
  id: boolean;
16108
16108
  last_cleanup_at: string | null;
16109
+ last_error: string | null;
16110
+ last_error_at: string | null;
16109
16111
  last_sync_at: string | null;
16110
16112
  updated_at: string;
16111
16113
  };
16112
16114
  Insert: {
16113
16115
  id?: boolean;
16114
16116
  last_cleanup_at?: string | null;
16117
+ last_error?: string | null;
16118
+ last_error_at?: string | null;
16115
16119
  last_sync_at?: string | null;
16116
16120
  updated_at?: string;
16117
16121
  };
16118
16122
  Update: {
16119
16123
  id?: boolean;
16120
16124
  last_cleanup_at?: string | null;
16125
+ last_error?: string | null;
16126
+ last_error_at?: string | null;
16121
16127
  last_sync_at?: string | null;
16122
16128
  updated_at?: string;
16123
16129
  };
@@ -26391,6 +26397,27 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
26391
26397
  };
26392
26398
  Returns: boolean;
26393
26399
  };
26400
+ layout_print_document: {
26401
+ Args: {
26402
+ _documentnaam: string;
26403
+ _documenttype: string;
26404
+ _herkomst?: string;
26405
+ _idempotentie_sleutel?: string;
26406
+ _is_herprint?: boolean;
26407
+ _kopieen?: number;
26408
+ _layout_id?: string;
26409
+ _payload?: import("../integrations/supabase/types").Json;
26410
+ _pdf_base64?: string;
26411
+ _pdf_url?: string;
26412
+ _print_plek_id?: string;
26413
+ _werkplek?: string;
26414
+ };
26415
+ Returns: {
26416
+ bestaand: boolean;
26417
+ job_id: string;
26418
+ printer_id: string;
26419
+ }[];
26420
+ };
26394
26421
  list_medewerkers: {
26395
26422
  Args: never;
26396
26423
  Returns: {
@@ -27093,6 +27120,13 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
27093
27120
  };
27094
27121
  Returns: import("../integrations/supabase/types").Json;
27095
27122
  };
27123
+ logistics_control_scan_print_own: {
27124
+ Args: {
27125
+ p_is_herprint?: boolean;
27126
+ p_scan_id: string;
27127
+ };
27128
+ Returns: import("../integrations/supabase/types").Json;
27129
+ };
27096
27130
  logistics_control_scan_retry: {
27097
27131
  Args: {
27098
27132
  _id: string;
@@ -27997,6 +28031,21 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
27997
28031
  };
27998
28032
  Returns: import("../integrations/supabase/types").Json;
27999
28033
  };
28034
+ logistics_print_via_layout: {
28035
+ Args: {
28036
+ _documentnaam: string;
28037
+ _documenttype: string;
28038
+ _herkomst: string;
28039
+ _idempotentie_sleutel: string;
28040
+ _is_herprint: boolean;
28041
+ _layout_id: string;
28042
+ _payload: import("../integrations/supabase/types").Json;
28043
+ _pdf_base64: string;
28044
+ _pdf_url: string;
28045
+ _print_plek_id: string;
28046
+ };
28047
+ Returns: import("../integrations/supabase/types").Json;
28048
+ };
28000
28049
  logistics_prune_buffer_member_queue: {
28001
28050
  Args: never;
28002
28051
  Returns: number;
@@ -28352,6 +28401,12 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
28352
28401
  };
28353
28402
  Returns: undefined;
28354
28403
  };
28404
+ logistics_slip_note_retry: {
28405
+ Args: {
28406
+ _id: string;
28407
+ };
28408
+ Returns: import("../integrations/supabase/types").Json;
28409
+ };
28355
28410
  logistics_sticker_follows_slip: {
28356
28411
  Args: never;
28357
28412
  Returns: boolean;
@@ -29096,6 +29151,10 @@ export declare const startRecalcJob: import("@tanstack/start-client-core").Optio
29096
29151
  };
29097
29152
  Returns: string;
29098
29153
  };
29154
+ pick_is_reference_admin: {
29155
+ Args: never;
29156
+ Returns: boolean;
29157
+ };
29099
29158
  pick_mark_printed: {
29100
29159
  Args: {
29101
29160
  _queue_item_id: string;
@@ -47270,18 +47329,24 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
47270
47329
  Row: {
47271
47330
  id: boolean;
47272
47331
  last_cleanup_at: string | null;
47332
+ last_error: string | null;
47333
+ last_error_at: string | null;
47273
47334
  last_sync_at: string | null;
47274
47335
  updated_at: string;
47275
47336
  };
47276
47337
  Insert: {
47277
47338
  id?: boolean;
47278
47339
  last_cleanup_at?: string | null;
47340
+ last_error?: string | null;
47341
+ last_error_at?: string | null;
47279
47342
  last_sync_at?: string | null;
47280
47343
  updated_at?: string;
47281
47344
  };
47282
47345
  Update: {
47283
47346
  id?: boolean;
47284
47347
  last_cleanup_at?: string | null;
47348
+ last_error?: string | null;
47349
+ last_error_at?: string | null;
47285
47350
  last_sync_at?: string | null;
47286
47351
  updated_at?: string;
47287
47352
  };
@@ -57555,6 +57620,27 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
57555
57620
  };
57556
57621
  Returns: boolean;
57557
57622
  };
57623
+ layout_print_document: {
57624
+ Args: {
57625
+ _documentnaam: string;
57626
+ _documenttype: string;
57627
+ _herkomst?: string;
57628
+ _idempotentie_sleutel?: string;
57629
+ _is_herprint?: boolean;
57630
+ _kopieen?: number;
57631
+ _layout_id?: string;
57632
+ _payload?: import("../integrations/supabase/types").Json;
57633
+ _pdf_base64?: string;
57634
+ _pdf_url?: string;
57635
+ _print_plek_id?: string;
57636
+ _werkplek?: string;
57637
+ };
57638
+ Returns: {
57639
+ bestaand: boolean;
57640
+ job_id: string;
57641
+ printer_id: string;
57642
+ }[];
57643
+ };
57558
57644
  list_medewerkers: {
57559
57645
  Args: never;
57560
57646
  Returns: {
@@ -58257,6 +58343,13 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
58257
58343
  };
58258
58344
  Returns: import("../integrations/supabase/types").Json;
58259
58345
  };
58346
+ logistics_control_scan_print_own: {
58347
+ Args: {
58348
+ p_is_herprint?: boolean;
58349
+ p_scan_id: string;
58350
+ };
58351
+ Returns: import("../integrations/supabase/types").Json;
58352
+ };
58260
58353
  logistics_control_scan_retry: {
58261
58354
  Args: {
58262
58355
  _id: string;
@@ -59161,6 +59254,21 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
59161
59254
  };
59162
59255
  Returns: import("../integrations/supabase/types").Json;
59163
59256
  };
59257
+ logistics_print_via_layout: {
59258
+ Args: {
59259
+ _documentnaam: string;
59260
+ _documenttype: string;
59261
+ _herkomst: string;
59262
+ _idempotentie_sleutel: string;
59263
+ _is_herprint: boolean;
59264
+ _layout_id: string;
59265
+ _payload: import("../integrations/supabase/types").Json;
59266
+ _pdf_base64: string;
59267
+ _pdf_url: string;
59268
+ _print_plek_id: string;
59269
+ };
59270
+ Returns: import("../integrations/supabase/types").Json;
59271
+ };
59164
59272
  logistics_prune_buffer_member_queue: {
59165
59273
  Args: never;
59166
59274
  Returns: number;
@@ -59516,6 +59624,12 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
59516
59624
  };
59517
59625
  Returns: undefined;
59518
59626
  };
59627
+ logistics_slip_note_retry: {
59628
+ Args: {
59629
+ _id: string;
59630
+ };
59631
+ Returns: import("../integrations/supabase/types").Json;
59632
+ };
59519
59633
  logistics_sticker_follows_slip: {
59520
59634
  Args: never;
59521
59635
  Returns: boolean;
@@ -60260,6 +60374,10 @@ export declare const tickRecalcJob: import("@tanstack/start-client-core").Option
60260
60374
  };
60261
60375
  Returns: string;
60262
60376
  };
60377
+ pick_is_reference_admin: {
60378
+ Args: never;
60379
+ Returns: boolean;
60380
+ };
60263
60381
  pick_mark_printed: {
60264
60382
  Args: {
60265
60383
  _queue_item_id: string;