@flowselections/floriday-afhandeling-module 1.0.25 → 1.0.26

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 (123) hide show
  1. package/dist-lib/components/afhandeling/CapacityWarning.d.ts +10 -0
  2. package/dist-lib/components/afhandeling/CapacityWarning.d.ts.map +1 -0
  3. package/dist-lib/components/afhandeling/CapacityWarning.js +12 -0
  4. package/dist-lib/components/afhandeling/ControlePage.d.ts.map +1 -1
  5. package/dist-lib/components/afhandeling/ControlePage.js +7 -2
  6. package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -1
  7. package/dist-lib/components/afhandeling/DagDetailDialog.js +158 -62
  8. package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
  9. package/dist-lib/components/afhandeling/LeveringenPage.js +2 -10
  10. package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
  11. package/dist-lib/components/afhandeling/PickAgendaView.js +4 -11
  12. package/dist-lib/components/afhandeling/VervoerdersPage.d.ts.map +1 -1
  13. package/dist-lib/components/afhandeling/VervoerdersPage.js +2 -5
  14. package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts +14 -0
  15. package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts.map +1 -0
  16. package/dist-lib/components/afhandeling/VerzetOrderDialog.js +203 -0
  17. package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
  18. package/dist-lib/components/afhandeling/WeekAgendaView.js +7 -3
  19. package/dist-lib/components/pickstation/PickstationPage.d.ts.map +1 -1
  20. package/dist-lib/components/pickstation/PickstationPage.js +1 -0
  21. package/dist-lib/components/settings/VervoerdersSettingsCard.d.ts.map +1 -1
  22. package/dist-lib/components/settings/VervoerdersSettingsCard.js +2 -5
  23. package/dist-lib/hooks/useCapacityCheck.d.ts +10 -0
  24. package/dist-lib/hooks/useCapacityCheck.d.ts.map +1 -0
  25. package/dist-lib/hooks/useCapacityCheck.js +22 -0
  26. package/dist-lib/hooks/useEngineTasks.d.ts +14 -0
  27. package/dist-lib/hooks/useEngineTasks.d.ts.map +1 -0
  28. package/dist-lib/hooks/useEngineTasks.js +49 -0
  29. package/dist-lib/hooks/useOrderPlanning.d.ts +8 -2
  30. package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
  31. package/dist-lib/hooks/useOrderPlanning.js +95 -93
  32. package/dist-lib/index.d.ts +0 -3
  33. package/dist-lib/index.d.ts.map +1 -1
  34. package/dist-lib/index.js +1 -5
  35. package/dist-lib/integrations/supabase/auth-middleware.d.ts +9010 -5433
  36. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  37. package/dist-lib/integrations/supabase/client.d.ts +9010 -5433
  38. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  39. package/dist-lib/integrations/supabase/client.server.d.ts +9010 -5433
  40. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  41. package/dist-lib/integrations/supabase/types.d.ts +9184 -5544
  42. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  43. package/dist-lib/lib/afhandelingSettings.functions.d.ts +7186 -32
  44. package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
  45. package/dist-lib/lib/carriers.functions.d.ts +17965 -80
  46. package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
  47. package/dist-lib/lib/cartAssignments.functions.d.ts +17965 -80
  48. package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
  49. package/dist-lib/lib/cartControl.functions.d.ts +35962 -170
  50. package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
  51. package/dist-lib/lib/cartControl.functions.js +103 -13
  52. package/dist-lib/lib/floriday.functions.d.ts +9010 -5433
  53. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  54. package/dist-lib/lib/logisticsEngine/capacity.d.ts +19 -0
  55. package/dist-lib/lib/logisticsEngine/capacity.d.ts.map +1 -0
  56. package/dist-lib/lib/logisticsEngine/capacity.js +91 -0
  57. package/dist-lib/lib/logisticsEngine/engine.d.ts +99 -0
  58. package/dist-lib/lib/logisticsEngine/engine.d.ts.map +1 -0
  59. package/dist-lib/lib/logisticsEngine/engine.js +102 -0
  60. package/dist-lib/lib/logisticsEngine/reschedule.d.ts +65 -0
  61. package/dist-lib/lib/logisticsEngine/reschedule.d.ts.map +1 -0
  62. package/dist-lib/lib/logisticsEngine/reschedule.js +86 -0
  63. package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts +37 -0
  64. package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts.map +1 -0
  65. package/dist-lib/lib/logisticsEngine/staffPlanning.js +100 -0
  66. package/dist-lib/lib/serverFnError.d.ts +10 -0
  67. package/dist-lib/lib/serverFnError.d.ts.map +1 -0
  68. package/dist-lib/lib/serverFnError.js +29 -0
  69. package/dist-lib/lib/serverRoutes/index.d.ts +0 -1
  70. package/dist-lib/lib/serverRoutes/index.d.ts.map +1 -1
  71. package/dist-lib/lib/serverRoutes/index.js +0 -1
  72. package/dist-lib/lib/timezone.d.ts +27 -0
  73. package/dist-lib/lib/timezone.d.ts.map +1 -0
  74. package/dist-lib/lib/timezone.js +68 -0
  75. package/package.json +6 -21
  76. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts +0 -2
  77. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts.map +0 -1
  78. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.js +0 -40
  79. package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts +0 -2
  80. package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts.map +0 -1
  81. package/dist-lib/components/engine/CapaciteitsmonitorPage.js +0 -49
  82. package/dist-lib/components/engine/FormulesPage.d.ts +0 -2
  83. package/dist-lib/components/engine/FormulesPage.d.ts.map +0 -1
  84. package/dist-lib/components/engine/FormulesPage.js +0 -252
  85. package/dist-lib/components/engine/PlaceholderPage.d.ts +0 -6
  86. package/dist-lib/components/engine/PlaceholderPage.d.ts.map +0 -1
  87. package/dist-lib/components/engine/PlaceholderPage.js +0 -6
  88. package/dist-lib/components/engine/StrategieenPage.d.ts +0 -2
  89. package/dist-lib/components/engine/StrategieenPage.d.ts.map +0 -1
  90. package/dist-lib/components/engine/StrategieenPage.js +0 -80
  91. package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts +0 -64978
  92. package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts.map +0 -1
  93. package/dist-lib/lib/logisticsEngine/capacity.functions.js +0 -90
  94. package/dist-lib/lib/logisticsEngine/config.d.ts +0 -140
  95. package/dist-lib/lib/logisticsEngine/config.d.ts.map +0 -1
  96. package/dist-lib/lib/logisticsEngine/config.js +0 -488
  97. package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts +0 -29
  98. package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts.map +0 -1
  99. package/dist-lib/lib/logisticsEngine/enginePickTime.js +0 -136
  100. package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts +0 -16278
  101. package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts.map +0 -1
  102. package/dist-lib/lib/logisticsEngine/evaluate.functions.js +0 -104
  103. package/dist-lib/lib/logisticsEngine/expression.d.ts +0 -21
  104. package/dist-lib/lib/logisticsEngine/expression.d.ts.map +0 -1
  105. package/dist-lib/lib/logisticsEngine/expression.js +0 -263
  106. package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts +0 -32512
  107. package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts.map +0 -1
  108. package/dist-lib/lib/logisticsEngine/formulas.functions.js +0 -58
  109. package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts +0 -83
  110. package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts.map +0 -1
  111. package/dist-lib/lib/logisticsEngine/safetyLayer.js +0 -182
  112. package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts +0 -129961
  113. package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts.map +0 -1
  114. package/dist-lib/lib/logisticsEngine/strategies.functions.js +0 -176
  115. package/dist-lib/lib/logisticsEngine/variables.d.ts +0 -29
  116. package/dist-lib/lib/logisticsEngine/variables.d.ts.map +0 -1
  117. package/dist-lib/lib/logisticsEngine/variables.js +0 -144
  118. package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts +0 -64976
  119. package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts.map +0 -1
  120. package/dist-lib/lib/logisticsEngine/wizard.functions.js +0 -175
  121. package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts +0 -3
  122. package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts.map +0 -1
  123. package/dist-lib/lib/serverRoutes/logisticsTick.handler.js +0 -42
@@ -20,21 +20,115 @@ async function loadControlPlanningSettings(supabase, userId) {
20
20
  const minWorkdays = Math.max(0, Number(settings?.pick_days_before_transport ?? 1));
21
21
  return { pickWeekdays, minWorkdays };
22
22
  }
23
+ /**
24
+ * Karren van vandaag volgens de Logistics Engine.
25
+ *
26
+ * De Engine is leidend: alleen orders met een `load.compose`-taak waarvan
27
+ * `planned_start` vandaag (Europe/Amsterdam) valt, staan op de controlelijst,
28
+ * en het aantal karren komt uit `payload.loadCarriers` — nooit meer uit de
29
+ * eigen stuks/fust-berekening.
30
+ */
31
+ function amsterdamDay(iso) {
32
+ if (!iso)
33
+ return null;
34
+ const d = new Date(iso);
35
+ if (Number.isNaN(d.getTime()))
36
+ return null;
37
+ return new Intl.DateTimeFormat("en-CA", {
38
+ timeZone: "Europe/Amsterdam",
39
+ year: "numeric",
40
+ month: "2-digit",
41
+ day: "2-digit",
42
+ }).format(d);
43
+ }
44
+ async function loadEngineCartsForToday(supabase) {
45
+ const today = amsterdamDay(new Date().toISOString());
46
+ const { data, error } = await supabase
47
+ .from("logistics_tasks")
48
+ .select("order_ref, payload, planned_start, sequence, status")
49
+ .eq("owner_module", "afhandeling")
50
+ .eq("task_type", "load.compose")
51
+ .in("status", ["planned", "ready", "in_progress"])
52
+ .limit(1000);
53
+ if (error)
54
+ throw new Error(error.message);
55
+ const map = new Map();
56
+ for (const row of (data ?? [])) {
57
+ const day = amsterdamDay(row.planned_start);
58
+ if (!day || day !== today)
59
+ continue;
60
+ const carriers = Array.isArray(row.payload?.loadCarriers)
61
+ ? row.payload.loadCarriers
62
+ : [];
63
+ const cartCount = carriers.length;
64
+ const cartOrderRefs = carriers.map((c) => Array.isArray(c?.orderRefs) ? c.orderRefs.filter((r) => typeof r === "string") : []);
65
+ const existing = map.get(row.order_ref);
66
+ if (!existing || cartCount > existing.cartCount) {
67
+ map.set(row.order_ref, {
68
+ cartCount: Math.max(1, cartCount),
69
+ pickDate: day,
70
+ cartOrderRefs,
71
+ });
72
+ }
73
+ }
74
+ return map;
75
+ }
76
+ /** Alle nog niet goedgekeurde karren van vandaag, gefilterd op de Engine. */
77
+ async function loadPendingControlOrders(supabase) {
78
+ const { loadTodaysPickstationOrders } = await import("./pickstationOrders.server");
79
+ const [orders, engine] = await Promise.all([
80
+ loadTodaysPickstationOrders(),
81
+ loadEngineCartsForToday(supabase),
82
+ ]);
83
+ const pending = orders.filter((o) => !APPROVED_STATUSES.has(o.status));
84
+ const result = [];
85
+ const seenSharedCarts = new Set();
86
+ for (const o of pending) {
87
+ const info = (o.orderNumber ? engine.get(o.orderNumber) : undefined) ?? engine.get(o.orderId);
88
+ const refs = info?.cartOrderRefs[o.cartIndex - 1] ?? [];
89
+ const orderNumbers = Array.from(new Set([o.orderNumber, ...refs].filter((v) => Boolean(v))));
90
+ if (orderNumbers.length > 1) {
91
+ // Kar met meerdere orders: maar één regel tonen.
92
+ const key = `${[...orderNumbers].sort().join("|")}#${o.cartIndex}`;
93
+ if (seenSharedCarts.has(key))
94
+ continue;
95
+ seenSharedCarts.add(key);
96
+ }
97
+ result.push({
98
+ orderId: o.orderId,
99
+ orderSource: o.orderSource,
100
+ cartIndex: o.cartIndex,
101
+ cartNumber: o.cartNumber,
102
+ orderNumber: o.orderNumber,
103
+ orderNumbers,
104
+ customerName: o.customerName,
105
+ carrierName: o.carrierName,
106
+ deliveryDate: o.deliveryDate,
107
+ pickupDate: o.pickupDate,
108
+ pickupTime: o.pickupTime,
109
+ country: o.country,
110
+ cratesOnCart: o.cratesOnCart,
111
+ pickDate: info?.pickDate ?? amsterdamDay(new Date().toISOString()),
112
+ printedCount: o.printedCount,
113
+ status: o.status,
114
+ });
115
+ }
116
+ return result;
117
+ }
23
118
  /** Haal alle karren op die vandaag gepickt / klaargezet hadden moeten worden. */
24
119
  export const getTodaysControlCarts = createServerFn({ method: "GET" })
25
120
  .middleware([requireSupabaseAuth])
26
- .handler(async () => {
27
- const { loadTodaysPickstationOrders } = await import("./pickstationOrders.server");
28
- const orders = await loadTodaysPickstationOrders();
29
- const carts = orders
30
- .filter((o) => !APPROVED_STATUSES.has(o.status))
31
- .map((o) => ({
121
+ .handler(async ({ context }) => {
122
+ const supabase = context.supabase;
123
+ const orders = await loadPendingControlOrders(supabase);
124
+ const carts = orders.map((o) => ({
32
125
  cartNumberId: null, // will be resolved below via cart_numbers lookup
33
126
  cartNumber: o.cartNumber,
34
127
  orderId: o.orderId,
35
128
  orderSource: o.orderSource,
36
129
  cartIndex: o.cartIndex - 1, // pickstation uses 1-based, DB is 0-based
37
130
  orderNumber: o.orderNumber,
131
+ orderNumbers: o.orderNumbers,
38
132
  customerName: o.customerName,
39
133
  carrierName: o.carrierName,
40
134
  deliveryDate: o.deliveryDate,
@@ -53,9 +147,7 @@ export const getControlRescheduleProposals = createServerFn({ method: "POST" })
53
147
  .inputValidator((d) => d)
54
148
  .handler(async ({ data, context }) => {
55
149
  const supabase = context.supabase;
56
- const { loadTodaysPickstationOrders } = await import("./pickstationOrders.server");
57
- const orders = await loadTodaysPickstationOrders();
58
- const pendingOrders = orders.filter((o) => !APPROVED_STATUSES.has(o.status));
150
+ const pendingOrders = await loadPendingControlOrders(supabase);
59
151
  const { pickWeekdays, minWorkdays } = await loadControlPlanningSettings(supabase, context.userId);
60
152
  const checkedSet = new Set(data.checkedCartKeys);
61
153
  const proposals = [];
@@ -110,10 +202,8 @@ export const submitControlSession = createServerFn({ method: "POST" })
110
202
  .inputValidator((d) => d)
111
203
  .handler(async ({ data, context }) => {
112
204
  const supabase = context.supabase;
113
- // 1) Laad alle karren van vandaag + instellingen
114
- const { loadTodaysPickstationOrders } = await import("./pickstationOrders.server");
115
- const orders = await loadTodaysPickstationOrders();
116
- const pendingOrders = orders.filter((o) => !APPROVED_STATUSES.has(o.status));
205
+ // 1) Laad alle karren van vandaag (Engine is leidend) + instellingen
206
+ const pendingOrders = await loadPendingControlOrders(supabase);
117
207
  const { pickWeekdays, minWorkdays } = await loadControlPlanningSettings(supabase, context.userId);
118
208
  // 2) Maak sessie aan
119
209
  const { data: session, error: sessErr } = await supabase