@flowselections/floriday-verkoop-module 1.0.48 → 1.0.50

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 (72) hide show
  1. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
  2. package/dist-lib/components/verkoop/OrderKarindelingCard.js +5 -1
  3. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
  4. package/dist-lib/components/verkoop/SalesOrderDetailView.js +6 -4
  5. package/dist-lib/integrations/supabase/auth-middleware.d.ts +63 -1
  6. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  7. package/dist-lib/integrations/supabase/client.d.ts +63 -1
  8. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  9. package/dist-lib/integrations/supabase/client.server.d.ts +63 -1
  10. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  11. package/dist-lib/integrations/supabase/types.d.ts +66 -1
  12. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  13. package/dist-lib/lib/cart-lock.functions.d.ts +63 -1
  14. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  15. package/dist-lib/lib/cart-planner.d.ts +15 -4
  16. package/dist-lib/lib/cart-planner.d.ts.map +1 -1
  17. package/dist-lib/lib/cart-planner.js +44 -12
  18. package/dist-lib/lib/cart-planning-settings.functions.d.ts +693 -11
  19. package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
  20. package/dist-lib/lib/cart-replan.functions.d.ts +201 -3
  21. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  22. package/dist-lib/lib/cart-replan.functions.js +49 -3
  23. package/dist-lib/lib/create-order.functions.d.ts +1076 -17
  24. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  25. package/dist-lib/lib/create-order.functions.js +48 -4
  26. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +189 -3
  27. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
  28. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +63 -1
  29. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  30. package/dist-lib/lib/floriday-mirror.functions.d.ts +63 -1
  31. package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/floriday-mirror.functions.js +11 -0
  33. package/dist-lib/lib/floriday-public.functions.d.ts +441 -7
  34. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  35. package/dist-lib/lib/floriday-writes.functions.d.ts +315 -5
  36. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  37. package/dist-lib/lib/invoice-timing.functions.d.ts +252 -4
  38. package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
  39. package/dist-lib/lib/load-carrier-labels.d.ts +13 -0
  40. package/dist-lib/lib/load-carrier-labels.d.ts.map +1 -1
  41. package/dist-lib/lib/load-carrier-labels.js +20 -0
  42. package/dist-lib/lib/load-carriers.functions.d.ts +63 -1
  43. package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
  44. package/dist-lib/lib/logistics-engine.functions.d.ts +315 -5
  45. package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
  46. package/dist-lib/lib/logistics-stock.functions.d.ts +126 -2
  47. package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
  48. package/dist-lib/lib/order-addresses.functions.d.ts +63 -1
  49. package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
  50. package/dist-lib/lib/order-buffers.functions.d.ts +189 -3
  51. package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
  52. package/dist-lib/lib/order-carrier.functions.d.ts +126 -2
  53. package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
  54. package/dist-lib/lib/order-pickup.functions.d.ts +126 -2
  55. package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
  56. package/dist-lib/lib/order-shipments.functions.d.ts +252 -4
  57. package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
  58. package/dist-lib/lib/salesorders-list.functions.d.ts +63 -1
  59. package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
  60. package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
  61. package/dist-lib/lib/salesorders-list.server.js +70 -4
  62. package/dist-lib/lib/salesorders-mapping.d.ts +17 -0
  63. package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
  64. package/dist-lib/lib/salesorders-mapping.js +64 -13
  65. package/dist-lib/lib/salesorders.functions.d.ts +315 -5
  66. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  67. package/dist-lib/lib/salesorders.functions.js +19 -3
  68. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +126 -2
  69. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
  70. package/dist-lib/lib/tradeitems.functions.d.ts +63 -1
  71. package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
  72. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { centralOrderNumber, computeTotals, mapJsonbToSalesOrderDTO, } from "./salesorders-mapping";
1
+ import { centralOrderNumber, computeTotals, mapJsonbToSalesOrderDTO, packingConfigFromFloridayPacking, } from "./salesorders-mapping";
2
2
  import { cratePackageName, loadCarrierName, mergeTypeNames } from "./load-carrier-labels";
3
3
  import { normalizeLoadCarrierCode } from "./load-carriers";
4
4
  import { normalizeTime, resolveDeliveryTimeForDate } from "./carrier-availability";
@@ -397,8 +397,16 @@ export async function buildSalesOrdersList(supabase, params) {
397
397
  }
398
398
  // 9) Floriday-orders → DTO (zonder zware raw-payload richting browser).
399
399
  const floridayOrders = foRows.map((r) => {
400
+ const localRowForPacking = localRowByFoId.get(String(r.floriday_id)) ?? null;
401
+ // De order is leidend voor de belading. Heeft de cache-payload geen
402
+ // packingConfiguration, dan geldt de gespiegelde orderbelading uit
403
+ // custom_fields.floriday_packing; pas daarna het trade item (mapping).
404
+ const mirroredPacking = r.data?.packingConfiguration
405
+ ? null
406
+ : packingConfigFromFloridayPacking((localRowForPacking?.custom_fields ?? {})?.floriday_packing);
400
407
  const enriched = {
401
408
  ...r.data,
409
+ ...(mirroredPacking ? { packingConfiguration: mirroredPacking } : {}),
402
410
  ...(orderNumberByFoId.get(String(r.floriday_id))
403
411
  ? { orderNumber: orderNumberByFoId.get(String(r.floriday_id)) }
404
412
  : {}),
@@ -427,15 +435,51 @@ export async function buildSalesOrdersList(supabase, params) {
427
435
  return dto;
428
436
  });
429
437
  // 10) Lokale orders → DTO.
438
+ // Leesvolgorde van de belading van een lokale orderregel:
439
+ // a. order_items.plants_per_crate/crates_per_layer/layers_per_cart → "orderregel"
440
+ // b. groeps-/productrecord (products.*) → "product"
441
+ // c. niets → geen packing (de orderkop toont "—", geen 1×1×1)
442
+ // De orderregel wint van het product, net zoals de order wint van het
443
+ // trade item in de Floriday-tak (resolvePacking, 26-08).
430
444
  const resolveLinePacking = (item) => {
445
+ const ppc = Number(item?.plants_per_crate ?? 0);
446
+ const cpl = Number(item?.crates_per_layer ?? 0);
447
+ const lpc = Number(item?.layers_per_cart ?? 0);
448
+ if (ppc > 0 || cpl > 0 || lpc > 0) {
449
+ return {
450
+ plants_per_crate: ppc || null,
451
+ crates_per_layer: cpl || null,
452
+ layers_per_cart: lpc || null,
453
+ __source: "orderregel",
454
+ };
455
+ }
431
456
  const name = String(item?.product_name ?? "");
432
457
  if (name.startsWith("[Groep] ")) {
433
458
  const gname = name.slice("[Groep] ".length).trim().toLowerCase();
434
459
  const gp = groupPacking.get(gname);
435
460
  if (gp)
436
- return gp;
461
+ return { ...gp, __source: "product" };
437
462
  }
438
- return item?.products ?? null;
463
+ const prod = item?.products ?? null;
464
+ return prod ? { ...prod, __source: "product" } : null;
465
+ };
466
+ /** Floriday-vormige packingConfiguration uit een lokale regel-packing. */
467
+ const localPackingConfiguration = (packing, cfg, loadCarrierCode) => {
468
+ const pieces = Number(packing?.plants_per_crate ?? 0);
469
+ const perLayer = Number(packing?.crates_per_layer ?? 0);
470
+ const layers = Number(packing?.layers_per_cart ?? 0);
471
+ if (pieces <= 0 && perLayer <= 0 && layers <= 0)
472
+ return null;
473
+ const vbn = cfg?.package?.vbnPackageCode ?? null;
474
+ const custom = cfg?.package?.customPackageId ?? null;
475
+ return {
476
+ piecesPerPackage: pieces || null,
477
+ packagesPerLayer: perLayer || null,
478
+ layersPerLoadCarrier: layers || null,
479
+ // Geen fustcode-fallback: ontbreekt de vbn-code, dan blijft package null.
480
+ package: vbn != null || custom != null ? { vbnPackageCode: vbn, customPackageId: custom } : null,
481
+ loadCarrier: loadCarrierCode ?? null,
482
+ };
439
483
  };
440
484
  const localOrders = [];
441
485
  const includedOrderIds = new Set();
@@ -455,6 +499,11 @@ export async function buildSalesOrdersList(supabase, params) {
455
499
  let karTotalRaw = 0;
456
500
  const crateNames = [];
457
501
  const cartNames = [];
502
+ // Belading van de eerste regel: die bepaalt de notatie in de orderkop.
503
+ // Bij gemengde regels tonen we bewust die eerste configuratie; het
504
+ // "Gemengd"-signaal komt uit mergeTypeNames (crate-/cartTypeName).
505
+ let headPacking = null;
506
+ let headCfg = null;
458
507
  for (const item of lineItems) {
459
508
  const pieces = toNumber(item?.quantity) || 0;
460
509
  if (pieces <= 0)
@@ -478,6 +527,10 @@ export async function buildSalesOrdersList(supabase, params) {
478
527
  return Array.isArray(payload) ? payload : [];
479
528
  })();
480
529
  const cfg = pickPackingConfigForLine(configs, packing);
530
+ if (headPacking === null && packing) {
531
+ headPacking = packing;
532
+ headCfg = cfg;
533
+ }
481
534
  crateNames.push(cratePackageName(cfg?.package?.vbnPackageCode ?? cfg?.package?.customPackageId ?? null, crateDescriptions));
482
535
  cartNames.push(loadCarrierName(cfg?.loadCarrier ?? null));
483
536
  }
@@ -502,6 +555,10 @@ export async function buildSalesOrdersList(supabase, params) {
502
555
  const firstProduct = pickString(firstLine?.product_name);
503
556
  const firstPacking = firstLine ? resolveLinePacking(firstLine) : null;
504
557
  const firstPlantsPerCrate = Math.max(1, Number(firstPacking?.plants_per_crate ?? 1));
558
+ const localPacking = localPackingConfiguration(headPacking ?? firstPacking, headCfg, normalizeLoadCarrierCode(cf.load_carrier_type) ?? null);
559
+ const localPackingSource = localPacking
560
+ ? ((headPacking ?? firstPacking)?.__source ?? "product")
561
+ : undefined;
505
562
  localOrders.push({
506
563
  id: `local:${r.id}`,
507
564
  orderNumber: centralOrderNumber(r.order_number),
@@ -548,7 +605,16 @@ export async function buildSalesOrdersList(supabase, params) {
548
605
  ...(r.customer_id || r.customer_name ? [] : ["geen klant gekoppeld"]),
549
606
  ...(r.delivery_date ? [] : ["geen leverdatum"]),
550
607
  ],
551
- raw: { order: { status: r.status ?? null }, customer: null, tradeItem: null },
608
+ packingSource: localPackingSource,
609
+ raw: {
610
+ order: {
611
+ status: r.status ?? null,
612
+ numberOfPieces: totalQuantity,
613
+ ...(localPacking ? { packingConfiguration: localPacking } : {}),
614
+ },
615
+ customer: null,
616
+ tradeItem: null,
617
+ },
552
618
  bufferId: bufferByLocalId.get(String(r.id)) ?? null,
553
619
  });
554
620
  }
@@ -21,6 +21,8 @@ export interface SalesOrderDTO {
21
21
  cartTypeName?: string | null;
22
22
  /** Canonieke Engine-code van de ladingdrager (bijv. "trolley"). */
23
23
  loadCarrierType?: string | null;
24
+ /** Waar de getoonde belading vandaan komt (order | orderregel | product | trade-item). */
25
+ packingSource?: PackingSource;
24
26
  totalPieces: number;
25
27
  isLocal?: boolean;
26
28
  isReservation?: boolean;
@@ -81,6 +83,21 @@ export interface TradeItemLookupEntry {
81
83
  raw?: any;
82
84
  }
83
85
  export type TradeItemLookup = Map<string, TradeItemLookupEntry>;
86
+ /**
87
+ * Waar de belading van een rij vandaan komt. Expliciet, zodat in de code en
88
+ * in de DTO altijd zichtbaar is welke bron een getal heeft geleverd.
89
+ * - "order" : packingConfiguration van de sales order zelf (leidend)
90
+ * - "orderregel" : belading vastgelegd op de orderregel (lokale orders)
91
+ * - "product" : belading van het gekoppelde product (lokale orders)
92
+ * - "trade-item" : terugval op de standaardbelading van het artikel
93
+ */
94
+ export type PackingSource = "order" | "orderregel" | "product" | "trade-item";
95
+ /**
96
+ * Zet `orders.custom_fields.floriday_packing` (de gespiegelde belading van de
97
+ * ORDER) om naar een Floriday-vormige packingConfiguration. Alleen gebruiken
98
+ * als terugval wanneer de cache-payload er zelf geen heeft.
99
+ */
100
+ export declare function packingConfigFromFloridayPacking(fp: any): any | null;
84
101
  export declare function isCentralOrderNumber(value: unknown): value is string;
85
102
  export declare function centralOrderNumber(value: unknown): string;
86
103
  /** Rijtype + kale UUID uit een lijst-ID (`local:…`, `mailbox-proposal:…`, Floriday). */
@@ -1 +1 @@
1
- {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
@@ -16,19 +16,69 @@ function pickPrimaryPacking(raw) {
16
16
  return null;
17
17
  return configs.find((c) => c?.primary === true || String(c?.primary).toLowerCase() === "true") ?? configs[0] ?? null;
18
18
  }
19
- function withLivePacking(order, packing) {
20
- if (!packing)
21
- return order;
19
+ /** Heeft de order zelf een bruikbare beladingconfiguratie? */
20
+ function hasOrderPacking(pc) {
21
+ if (!pc || typeof pc !== "object")
22
+ return false;
23
+ return (toNum(pc.piecesPerPackage, 0) > 0 ||
24
+ toNum(pc.packagesPerLayer, 0) > 0 ||
25
+ toNum(pc.layersPerLoadCarrier, 0) > 0 ||
26
+ pc.package != null ||
27
+ pc.loadCarrier != null);
28
+ }
29
+ /**
30
+ * Bepaalt de leidende beladingbron: de ORDER wint altijd. Het trade item is
31
+ * uitsluitend terugval wanneer de order geen packingConfiguration heeft.
32
+ * Het trade item blijft wél de bron voor naam/foto/sku (zie mapping onder).
33
+ */
34
+ function resolvePacking(order, tradeItemRaw) {
35
+ const orderPacking = order?.packingConfiguration;
36
+ if (hasOrderPacking(orderPacking)) {
37
+ return { order, source: "order" };
38
+ }
39
+ const fallback = pickPrimaryPacking(tradeItemRaw);
40
+ if (!fallback)
41
+ return { order, source: "trade-item" };
22
42
  return {
23
- ...order,
24
- packingConfiguration: {
25
- ...(order?.packingConfiguration ?? {}),
26
- piecesPerPackage: toNum(packing?.piecesPerPackage, toNum(order?.packingConfiguration?.piecesPerPackage, 1)),
27
- packagesPerLayer: toNum(packing?.packagesPerLayer, toNum(order?.packingConfiguration?.packagesPerLayer, 0)),
28
- layersPerLoadCarrier: toNum(packing?.layersPerLoadCarrier, toNum(order?.packingConfiguration?.layersPerLoadCarrier, 0)),
29
- package: packing?.package ?? order?.packingConfiguration?.package,
30
- loadCarrier: packing?.loadCarrier ?? order?.packingConfiguration?.loadCarrier,
43
+ order: {
44
+ ...order,
45
+ packingConfiguration: {
46
+ ...(orderPacking ?? {}),
47
+ piecesPerPackage: toNum(fallback?.piecesPerPackage, 1),
48
+ packagesPerLayer: toNum(fallback?.packagesPerLayer, 0),
49
+ layersPerLoadCarrier: toNum(fallback?.layersPerLoadCarrier, 0),
50
+ package: fallback?.package ?? orderPacking?.package ?? null,
51
+ loadCarrier: fallback?.loadCarrier ?? orderPacking?.loadCarrier ?? null,
52
+ },
31
53
  },
54
+ source: "trade-item",
55
+ };
56
+ }
57
+ /**
58
+ * Zet `orders.custom_fields.floriday_packing` (de gespiegelde belading van de
59
+ * ORDER) om naar een Floriday-vormige packingConfiguration. Alleen gebruiken
60
+ * als terugval wanneer de cache-payload er zelf geen heeft.
61
+ */
62
+ export function packingConfigFromFloridayPacking(fp) {
63
+ if (!fp || typeof fp !== "object")
64
+ return null;
65
+ if (String(fp.source ?? "order") !== "order")
66
+ return null;
67
+ const pieces = toNum(fp.pieces_per_package, 0);
68
+ const perLayer = toNum(fp.packages_per_layer, 0);
69
+ const layers = toNum(fp.layers_per_load_carrier, 0);
70
+ const vbn = fp.vbn_package_code ?? null;
71
+ const custom = fp.custom_package_id ?? null;
72
+ const carrier = fp.load_carrier ?? null;
73
+ if (pieces <= 0 && perLayer <= 0 && layers <= 0 && vbn == null && custom == null && carrier == null) {
74
+ return null;
75
+ }
76
+ return {
77
+ piecesPerPackage: pieces || 1,
78
+ packagesPerLayer: perLayer,
79
+ layersPerLoadCarrier: layers,
80
+ package: vbn != null || custom != null ? { vbnPackageCode: vbn, customPackageId: custom } : null,
81
+ loadCarrier: carrier,
32
82
  };
33
83
  }
34
84
  const CENTRAL_ORDER_NUMBER_RE = /^(FO|MO|AO|HO)-\d{7}$/;
@@ -60,8 +110,8 @@ export function mapJsonbToSalesOrderDTO(o, customerLookup, tradeItemLookup, crat
60
110
  // (geen salesOrderLines-array). Velden staan direct op het object.
61
111
  const tradeItemId = String(o?.tradeItemId ?? "");
62
112
  const tradeItem = tradeItemId ? tradeItemLookup?.get(tradeItemId) : undefined;
63
- const livePacking = pickPrimaryPacking(tradeItem?.raw);
64
- const orderWithLivePacking = withLivePacking(o, livePacking);
113
+ // De ORDER is leidend voor de belading; het trade item is enkel terugval.
114
+ const { order: orderWithLivePacking, source: packingSource } = resolvePacking(o, tradeItem?.raw);
65
115
  const numberOfPieces = toNum(orderWithLivePacking?.numberOfPieces, 0);
66
116
  const piecesPerPackage = Math.max(1, toNum(orderWithLivePacking?.packingConfiguration?.piecesPerPackage, 1));
67
117
  const numberOfPackages = piecesPerPackage > 0 ? Math.ceil(numberOfPieces / piecesPerPackage) : 0;
@@ -101,6 +151,7 @@ export function mapJsonbToSalesOrderDTO(o, customerLookup, tradeItemLookup, crat
101
151
  karCount,
102
152
  crateTypeName,
103
153
  cartTypeName,
154
+ packingSource,
104
155
  totalPieces: numberOfPieces,
105
156
  customer: {
106
157
  name: found?.name ?? "Onbekende klant",