@flowselections/logistiek-engine 1.0.33 → 1.0.53

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 (166) hide show
  1. package/README.md +24 -24
  2. package/dist-lib/components/FloridayPoortCard.d.ts.map +1 -1
  3. package/dist-lib/components/FloridayPoortCard.js +2 -1
  4. package/dist-lib/components/FlowCanvas.d.ts +28 -0
  5. package/dist-lib/components/FlowCanvas.d.ts.map +1 -0
  6. package/dist-lib/components/FlowCanvas.js +429 -0
  7. package/dist-lib/components/FlowOrders.d.ts +8 -0
  8. package/dist-lib/components/FlowOrders.d.ts.map +1 -0
  9. package/dist-lib/components/FlowOrders.js +125 -0
  10. package/dist-lib/components/FlowPage.d.ts +2 -0
  11. package/dist-lib/components/FlowPage.d.ts.map +1 -0
  12. package/dist-lib/components/FlowPage.js +141 -0
  13. package/dist-lib/components/InklapbaarVenster.d.ts +9 -0
  14. package/dist-lib/components/InklapbaarVenster.d.ts.map +1 -0
  15. package/dist-lib/components/InklapbaarVenster.js +10 -0
  16. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -1
  17. package/dist-lib/components/LogistiekEnginePage.js +9 -3
  18. package/dist-lib/components/LogistiekEngineQueuePage.d.ts +2 -0
  19. package/dist-lib/components/LogistiekEngineQueuePage.d.ts.map +1 -0
  20. package/dist-lib/components/LogistiekEngineQueuePage.js +11 -0
  21. package/dist-lib/components/NodeTracePanel.d.ts +11 -0
  22. package/dist-lib/components/NodeTracePanel.d.ts.map +1 -0
  23. package/dist-lib/components/NodeTracePanel.js +40 -0
  24. package/dist-lib/components/OrderJourneyBar.d.ts +9 -0
  25. package/dist-lib/components/OrderJourneyBar.d.ts.map +1 -0
  26. package/dist-lib/components/OrderJourneyBar.js +26 -0
  27. package/dist-lib/components/OrderLogboek.d.ts +10 -0
  28. package/dist-lib/components/OrderLogboek.d.ts.map +1 -0
  29. package/dist-lib/components/OrderLogboek.js +92 -0
  30. package/dist-lib/components/OrderStopBanner.d.ts +5 -0
  31. package/dist-lib/components/OrderStopBanner.d.ts.map +1 -0
  32. package/dist-lib/components/OrderStopBanner.js +22 -0
  33. package/dist-lib/components/OrderTraceDetails.d.ts +22 -0
  34. package/dist-lib/components/OrderTraceDetails.d.ts.map +1 -0
  35. package/dist-lib/components/OrderTraceDetails.js +87 -0
  36. package/dist-lib/components/RegiePage.d.ts.map +1 -1
  37. package/dist-lib/components/RegiePage.js +11 -69
  38. package/dist-lib/components/WerktijdenCard.d.ts +2 -0
  39. package/dist-lib/components/WerktijdenCard.d.ts.map +1 -0
  40. package/dist-lib/components/WerktijdenCard.js +37 -0
  41. package/dist-lib/components/WerkwijzeHerindelingCard.d.ts.map +1 -1
  42. package/dist-lib/components/WerkwijzeHerindelingCard.js +100 -6
  43. package/dist-lib/hooks/useFloridayGate.d.ts +10 -0
  44. package/dist-lib/hooks/useFloridayGate.d.ts.map +1 -1
  45. package/dist-lib/hooks/useFloridayGate.js +4 -0
  46. package/dist-lib/hooks/useLogisticsTrace.d.ts +78 -0
  47. package/dist-lib/hooks/useLogisticsTrace.d.ts.map +1 -0
  48. package/dist-lib/hooks/useLogisticsTrace.js +152 -0
  49. package/dist-lib/hooks/useOrderNodeTrace.d.ts +11 -0
  50. package/dist-lib/hooks/useOrderNodeTrace.d.ts.map +1 -0
  51. package/dist-lib/hooks/useOrderNodeTrace.js +26 -0
  52. package/dist-lib/hooks/useOrderTrace.d.ts +74 -0
  53. package/dist-lib/hooks/useOrderTrace.d.ts.map +1 -0
  54. package/dist-lib/hooks/useOrderTrace.js +134 -0
  55. package/dist-lib/hooks/useOrderVersies.d.ts +47 -0
  56. package/dist-lib/hooks/useOrderVersies.d.ts.map +1 -0
  57. package/dist-lib/hooks/useOrderVersies.js +180 -0
  58. package/dist-lib/hooks/useRuleEngine.d.ts +1 -0
  59. package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -1
  60. package/dist-lib/hooks/useRuleEngine.js +1 -0
  61. package/dist-lib/hooks/useShippingNoteStatus.d.ts +29 -0
  62. package/dist-lib/hooks/useShippingNoteStatus.d.ts.map +1 -0
  63. package/dist-lib/hooks/useShippingNoteStatus.js +107 -0
  64. package/dist-lib/hooks/useWerktijden.d.ts +33 -0
  65. package/dist-lib/hooks/useWerktijden.d.ts.map +1 -0
  66. package/dist-lib/hooks/useWerktijden.js +88 -0
  67. package/dist-lib/hooks/useWerkwijzeStatus.d.ts +12 -1
  68. package/dist-lib/hooks/useWerkwijzeStatus.d.ts.map +1 -1
  69. package/dist-lib/hooks/useWerkwijzeStatus.js +60 -4
  70. package/dist-lib/index.d.ts +13 -0
  71. package/dist-lib/index.d.ts.map +1 -1
  72. package/dist-lib/index.js +13 -0
  73. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1600 -54
  74. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  75. package/dist-lib/integrations/supabase/client.server.d.ts +1600 -54
  76. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  77. package/dist-lib/integrations/supabase/client.server.js +1 -1
  78. package/dist-lib/integrations/supabase/moduleClient.d.ts +1600 -54
  79. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  80. package/dist-lib/integrations/supabase/types.d.ts +1618 -50
  81. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  82. package/dist-lib/lib/cartPlanRequests.server.d.ts +1 -1
  83. package/dist-lib/lib/cartPlanRequests.server.d.ts.map +1 -1
  84. package/dist-lib/lib/cartPlanRequests.server.js +49 -8
  85. package/dist-lib/lib/floridayDocuments.functions.d.ts +4644 -6
  86. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  87. package/dist-lib/lib/floridayDocuments.functions.js +1 -1
  88. package/dist-lib/lib/floridayDocuments.server.d.ts +14 -0
  89. package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -1
  90. package/dist-lib/lib/floridayDocuments.server.js +58 -0
  91. package/dist-lib/lib/floridayGuard.server.d.ts +2 -2
  92. package/dist-lib/lib/floridayGuard.server.d.ts.map +1 -1
  93. package/dist-lib/lib/floridayGuard.server.js +34 -5
  94. package/dist-lib/lib/floridayPush.functions.d.ts +1600 -54
  95. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  96. package/dist-lib/lib/floridayPush.functions.js +1 -1
  97. package/dist-lib/lib/flowGraph.d.ts +43 -0
  98. package/dist-lib/lib/flowGraph.d.ts.map +1 -0
  99. package/dist-lib/lib/flowGraph.js +153 -0
  100. package/dist-lib/lib/flowNodes.d.ts +23 -0
  101. package/dist-lib/lib/flowNodes.d.ts.map +1 -0
  102. package/dist-lib/lib/flowNodes.js +58 -0
  103. package/dist-lib/lib/flowRoute.d.ts +107 -0
  104. package/dist-lib/lib/flowRoute.d.ts.map +1 -0
  105. package/dist-lib/lib/flowRoute.js +280 -0
  106. package/dist-lib/lib/flowTree.d.ts +64 -0
  107. package/dist-lib/lib/flowTree.d.ts.map +1 -0
  108. package/dist-lib/lib/flowTree.js +519 -0
  109. package/dist-lib/lib/handlers/index.d.ts +1 -0
  110. package/dist-lib/lib/handlers/index.d.ts.map +1 -1
  111. package/dist-lib/lib/handlers/index.js +1 -0
  112. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts +3 -0
  113. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.d.ts.map +1 -0
  114. package/dist-lib/lib/handlers/logistics-shipping-note-now.server.js +100 -0
  115. package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
  116. package/dist-lib/lib/handlers/logistics-tick.server.js +97 -2
  117. package/dist-lib/lib/loadCarrierPlanner.d.ts +2 -0
  118. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
  119. package/dist-lib/lib/loadCarrierPlanner.js +18 -0
  120. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +7740 -10
  121. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  122. package/dist-lib/lib/loadCarrierPlanning.functions.js +1 -1
  123. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +9 -0
  124. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  125. package/dist-lib/lib/loadCarrierPlanning.server.js +44 -17
  126. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -1
  127. package/dist-lib/lib/logisticsPlanner.js +14 -2
  128. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +3096 -4
  129. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  130. package/dist-lib/lib/logisticsRecalcJob.functions.js +1 -1
  131. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +1600 -54
  132. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  133. package/dist-lib/lib/logisticsRecalculate.functions.js +1 -1
  134. package/dist-lib/lib/modulePrompts.d.ts +1 -0
  135. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  136. package/dist-lib/lib/modulePrompts.js +3482 -2610
  137. package/dist-lib/lib/nodeTrace.d.ts +61 -0
  138. package/dist-lib/lib/nodeTrace.d.ts.map +1 -0
  139. package/dist-lib/lib/nodeTrace.js +191 -0
  140. package/dist-lib/lib/pickQueueCleanup.server.d.ts +14 -0
  141. package/dist-lib/lib/pickQueueCleanup.server.d.ts.map +1 -0
  142. package/dist-lib/lib/pickQueueCleanup.server.js +80 -0
  143. package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
  144. package/dist-lib/lib/planQueue.server.js +140 -0
  145. package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -1
  146. package/dist-lib/lib/ruleEngineImpact.js +11 -4
  147. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  148. package/dist-lib/lib/ruleEngineSchema.js +57 -6
  149. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  150. package/dist-lib/lib/ruleEngineWizard.js +3 -1
  151. package/dist-lib/lib/shippingNoteQueue.server.d.ts +18 -0
  152. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -0
  153. package/dist-lib/lib/shippingNoteQueue.server.js +304 -0
  154. package/dist-lib/lib/trace.server.d.ts +75 -0
  155. package/dist-lib/lib/trace.server.d.ts.map +1 -0
  156. package/dist-lib/lib/trace.server.js +75 -0
  157. package/dist-lib/lib/vakUitleg.d.ts +19 -0
  158. package/dist-lib/lib/vakUitleg.d.ts.map +1 -0
  159. package/dist-lib/lib/vakUitleg.js +132 -0
  160. package/package.json +26 -2
  161. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +0 -2
  162. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +0 -1
  163. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +0 -41
  164. package/dist-lib/integrations/supabase/client.d.ts +0 -20293
  165. package/dist-lib/integrations/supabase/client.d.ts.map +0 -1
  166. package/dist-lib/integrations/supabase/client.js +0 -13
@@ -3,7 +3,7 @@
3
3
  // ============================================================================
4
4
  import { createServerFn } from "@tanstack/react-start";
5
5
  import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
6
- import { readableServerErrors } from "../lib/readableServerErrors";
6
+ import { readableServerErrors } from "./readableServerErrors";
7
7
  export const replanOrderLoadCarriers = createServerFn({ method: "POST" })
8
8
  .middleware([readableServerErrors, requireSupabaseAuth])
9
9
  .inputValidator((data) => {
@@ -40,12 +40,21 @@ export interface BeladingRules {
40
40
  maxCustomers: number | null;
41
41
  maxLayers: number | null;
42
42
  maxBoxes: number | null;
43
+ maxCustomersPerLayer: number | null;
43
44
  optimalFill: boolean;
44
45
  /** Globale methode voor de karrenindeling. */
45
46
  layoutMethod: "belading" | "afmetingen";
46
47
  }
47
48
  /** Leest de actieve werkwijze en vertaalt "2. Beladingindeling" naar plannergrenzen. */
48
49
  export declare function loadBeladingRules(sb: SupabaseClient): Promise<BeladingRules | null>;
50
+ /**
51
+ * Wanneer ligt de karrenindeling vast?
52
+ * - "per_cart": alleen de geprinte/gescande/gecontroleerde kar zelf.
53
+ * - "first_packing_slip": zodra de eerste pakbon van de order of buffer is
54
+ * geprint, blijft de hele bestaande indeling van die order/buffer staan.
55
+ * Ontbreekt de instelling, dan geldt "per_cart".
56
+ */
57
+ export declare function loadCartPlanFreeze(sb: SupabaseClient): Promise<"per_cart" | "first_packing_slip">;
49
58
  /** Past de grenzen uit de werkwijze toe op het capaciteitsprofiel van een ladingdrager. */
50
59
  export declare function applyRulesToProfile(profile: CarrierProfile, rules: BeladingRules | null): CarrierProfile;
51
60
  /**
@@ -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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"}
@@ -347,10 +347,29 @@ export async function loadBeladingRules(sb) {
347
347
  maxCustomers: k.fill_customers_as_much_as_fits ? null : numOrNull(k.max_customers),
348
348
  maxLayers: k.fill_layers_as_much_as_fits ? null : numOrNull(k.max_layers),
349
349
  maxBoxes: k.fill_boxes_as_much_as_fits ? null : numOrNull(k.max_boxes_per_pallet),
350
+ maxCustomersPerLayer: numOrNull(k.max_customers_per_layer),
350
351
  optimalFill: k.optimal_fill !== false,
351
352
  layoutMethod: k.cart_layout_method === "afmetingen" ? "afmetingen" : "belading",
352
353
  };
353
354
  }
355
+ /**
356
+ * Wanneer ligt de karrenindeling vast?
357
+ * - "per_cart": alleen de geprinte/gescande/gecontroleerde kar zelf.
358
+ * - "first_packing_slip": zodra de eerste pakbon van de order of buffer is
359
+ * geprint, blijft de hele bestaande indeling van die order/buffer staan.
360
+ * Ontbreekt de instelling, dan geldt "per_cart".
361
+ */
362
+ export async function loadCartPlanFreeze(sb) {
363
+ const { data } = await sb
364
+ .from("logistics_rule_configs")
365
+ .select("settings")
366
+ .eq("is_active", true)
367
+ .order("updated_at", { ascending: false })
368
+ .limit(1);
369
+ const settings = Array.isArray(data) && data.length > 0 ? data[0]?.settings : null;
370
+ const k = settings?.karrenindeling?.fields ?? settings?.karrenindeling;
371
+ return k?.cart_plan_freeze === "first_packing_slip" ? "first_packing_slip" : "per_cart";
372
+ }
354
373
  /** Past de grenzen uit de werkwijze toe op het capaciteitsprofiel van een ladingdrager. */
355
374
  export function applyRulesToProfile(profile, rules) {
356
375
  if (!rules)
@@ -688,8 +707,10 @@ export async function replanBufferInternal(sb, bufferId, options = {}) {
688
707
  };
689
708
  }
690
709
  // Een eenmaal geprinte, gescande of gecontroleerde fysieke kar heeft een
691
- // blijvende identiteit. Ook vóór de formele vrijgavetijd mag een replan die
692
- // id, het nummer of total_carts daarom niet meer vervangen.
710
+ // blijvende identiteit. Let op: een klaargezette barcode is nog géén bewijs
711
+ // van printen, en een wachtende, mislukte of geannuleerde printopdracht ook
712
+ // niet. Alleen een voltooide print of een echte scan-/controlehandeling
713
+ // bevriest een kar.
693
714
  if (!isSupplement) {
694
715
  const { data: existingCartRows, error: existingCartError } = await sb
695
716
  .from("order_carts")
@@ -702,12 +723,15 @@ export async function replanBufferInternal(sb, bufferId, options = {}) {
702
723
  .map((cart) => String(cart.id ?? ""))
703
724
  .filter(Boolean);
704
725
  if (existingCartIds.length > 0) {
705
- const [controlResult, barcodeResult, printResult] = await Promise.all([
726
+ const [controlResult, printResult] = await Promise.all([
706
727
  sb.from("cart_control_items").select("cart_number_id").in("cart_number_id", existingCartIds),
707
- sb.from("pakbon_barcode_inhoud").select("cart_id").in("cart_id", existingCartIds),
708
- sb.from("print_jobs").select("id, payload").in("payload->>cart_id", existingCartIds),
728
+ sb
729
+ .from("print_jobs")
730
+ .select("id, payload")
731
+ .eq("status", "voltooid")
732
+ .in("payload->>cart_id", existingCartIds),
709
733
  ]);
710
- const lockCheckError = controlResult.error ?? barcodeResult.error ?? printResult.error;
734
+ const lockCheckError = controlResult.error ?? printResult.error;
711
735
  if (lockCheckError) {
712
736
  throw new Error(`Karvergrendeling kon niet veilig worden gecontroleerd: ${lockCheckError.message}`);
713
737
  }
@@ -717,11 +741,6 @@ export async function replanBufferInternal(sb, bufferId, options = {}) {
717
741
  if (id)
718
742
  frozen.add(String(id));
719
743
  }
720
- for (const r of barcodeResult.data ?? []) {
721
- const id = r?.cart_id;
722
- if (id)
723
- frozen.add(String(id));
724
- }
725
744
  for (const r of printResult.data ?? []) {
726
745
  const id = r?.payload?.cart_id;
727
746
  if (id)
@@ -729,19 +748,26 @@ export async function replanBufferInternal(sb, bufferId, options = {}) {
729
748
  }
730
749
  const frozenIds = existingCartIds.filter((id) => frozen.has(id));
731
750
  if (frozenIds.length > 0) {
732
- // Geprinte, gescande of gecontroleerde karren blijven exact zoals ze zijn.
733
- // Al het overige van de buffer wordt in één ronde samen ingedeeld, zodat
734
- // de resterende fusten van alle orders op dezelfde karren komen.
751
+ // Instelling uit de werkwijze: alleen de geprinte kar vastzetten, of de
752
+ // hele order/buffer zodra de eerste pakbon is geprint.
753
+ const freezeMode = await loadCartPlanFreeze(sb);
754
+ const keep = freezeMode === "first_packing_slip" ? existingCartIds : frozenIds;
755
+ // Bevroren karren blijven exact zoals ze zijn. Al het overige wordt in
756
+ // één ronde samen ingedeeld, zodat de resterende fusten van alle orders
757
+ // op dezelfde karren komen.
735
758
  const supplement = await replanBufferInternal(sb, bufferId, {
736
759
  ...options,
737
- keepCartIds: frozenIds,
760
+ keepCartIds: keep,
738
761
  });
739
762
  return {
740
763
  ...supplement,
741
764
  warnings: [
742
765
  ...(supplement.warnings ?? []),
743
- `${frozenIds.length} reeds geprinte of gecontroleerde kar(ren) zijn ongewijzigd gebleven; ` +
744
- "de overige fusten van de buffer zijn samen opnieuw ingedeeld.",
766
+ freezeMode === "first_packing_slip"
767
+ ? `De eerste pakbon van deze order of buffer is al geprint; alle ${keep.length} bestaande kar(ren) blijven ongewijzigd. ` +
768
+ "Alleen fusten die nog nergens liggen zijn als extra kar toegevoegd."
769
+ : `${keep.length} reeds geprinte of gecontroleerde kar(ren) zijn ongewijzigd gebleven; ` +
770
+ "de overige fusten van de buffer zijn samen opnieuw ingedeeld.",
745
771
  ],
746
772
  };
747
773
  }
@@ -1008,6 +1034,7 @@ export async function replanBufferInternal(sb, bufferId, options = {}) {
1008
1034
  maxOrders: isBufferOrder ? null : rules?.maxOrders ?? null,
1009
1035
  maxCustomers: isBufferOrder ? null : rules?.maxCustomers ?? settings?.max_customers_per_cart ?? null,
1010
1036
  oneCustomerPerLayer: Boolean(settings?.max_one_customer_per_layer),
1037
+ maxCustomersPerLayer: rules?.maxCustomersPerLayer ?? null,
1011
1038
  ownCarrierFromLayers: settings?.own_cart_from_layers ?? null,
1012
1039
  sortOrder: "none",
1013
1040
  });
@@ -1 +1 @@
1
- {"version":3,"file":"logisticsPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsPlanner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAc,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO/F,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,QAAQ,GACR,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAgDD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASpC;AAMD,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAyTf"}
1
+ {"version":3,"file":"logisticsPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsPlanner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAc,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO/F,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,QAAQ,GACR,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAgDD,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASpC;AAMD,wBAAgB,SAAS,CACvB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAuUf"}
@@ -185,9 +185,10 @@ export function planOrder(order, settings, context = {}) {
185
185
  }
186
186
  // --- 6. Controle ---------------------------------------------------------
187
187
  const controlMode = str(controleStep.control_mode, "scanner");
188
+ const scanOnly = controlMode === "scan_only";
188
189
  const controlNoticeAt = controlMode === "skip" ? null : shift(pickupAt, -num(controleStep.control_notice_minutes, 60));
189
190
  if (controlNoticeAt) {
190
- const controlOwner = controlMode === "scanner" ? "scanners" : "afhandeling";
191
+ const controlOwner = controlMode === "scanner" || scanOnly ? "scanners" : "afhandeling";
191
192
  tasks.push({
192
193
  taskType: "control.execute",
193
194
  ownerModule: controlOwner,
@@ -195,7 +196,15 @@ export function planOrder(order, settings, context = {}) {
195
196
  plannedStart: controlNoticeAt,
196
197
  plannedEnd: pickupAt,
197
198
  dueAt: pickupAt,
198
- payload: { ...base, controlMode, noticeAt: controlNoticeAt },
199
+ payload: {
200
+ ...base,
201
+ controlMode,
202
+ noticeAt: controlNoticeAt,
203
+ // Bij "scannen voor afmelden" is één pakbonscan genoeg: de hele kar is
204
+ // daarmee afgemeld en er wordt geen afleverbrief geprint.
205
+ completeOnScan: scanOnly,
206
+ printsShippingNote: controlMode === "scanner",
207
+ },
199
208
  });
200
209
  if (controlMode === "paper") {
201
210
  const printItems = str(controleStep.control_print_items, "control_note");
@@ -205,6 +214,9 @@ export function planOrder(order, settings, context = {}) {
205
214
  else {
206
215
  notes.push("Controle staat uit; er wordt geen controletaak aangemaakt.");
207
216
  }
217
+ if (scanOnly) {
218
+ notes.push("Eén scan van de pakbon meldt de hele kar af; er wordt bij de controle niets geprint.");
219
+ }
208
220
  // --- 7. Verzendbrief -----------------------------------------------------
209
221
  const shippingChoice = str(controleStep.control_print_items, "control_note") === "control_note_and_shipping" && controlMode === "paper"
210
222
  ? "with_control"