@flowselections/logistiek-engine 1.0.26 → 1.0.28

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 (97) hide show
  1. package/README.md +24 -24
  2. package/dist-lib/components/AfmetingenBronnenCard.d.ts +2 -0
  3. package/dist-lib/components/AfmetingenBronnenCard.d.ts.map +1 -0
  4. package/dist-lib/components/AfmetingenBronnenCard.js +46 -0
  5. package/dist-lib/components/BufferDebugCard.d.ts.map +1 -1
  6. package/dist-lib/components/BufferDebugCard.js +6 -1
  7. package/dist-lib/components/ConsistentieCard.d.ts.map +1 -1
  8. package/dist-lib/components/ConsistentieCard.js +1 -1
  9. package/dist-lib/components/KarplanStatusCard.d.ts +2 -0
  10. package/dist-lib/components/KarplanStatusCard.d.ts.map +1 -0
  11. package/dist-lib/components/KarplanStatusCard.js +31 -0
  12. package/dist-lib/components/RegiePage.d.ts.map +1 -1
  13. package/dist-lib/components/RegiePage.js +3 -1
  14. package/dist-lib/components/RuleEnginePage.d.ts.map +1 -1
  15. package/dist-lib/components/RuleEnginePage.js +7 -4
  16. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +2 -0
  17. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +1 -0
  18. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +41 -0
  19. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts.map +1 -1
  20. package/dist-lib/components/rule-engine/RuleFieldInput.js +9 -0
  21. package/dist-lib/hooks/useRecalcJob.d.ts.map +1 -1
  22. package/dist-lib/hooks/useRecalcJob.js +26 -1
  23. package/dist-lib/hooks/useScannersPrinters.d.ts +11 -0
  24. package/dist-lib/hooks/useScannersPrinters.d.ts.map +1 -0
  25. package/dist-lib/hooks/useScannersPrinters.js +65 -0
  26. package/dist-lib/index.d.ts +2 -0
  27. package/dist-lib/index.d.ts.map +1 -1
  28. package/dist-lib/index.js +2 -0
  29. package/dist-lib/integrations/supabase/auth-middleware.d.ts +2063 -78
  30. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  31. package/dist-lib/integrations/supabase/client.d.ts +20293 -0
  32. package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
  33. package/dist-lib/integrations/supabase/client.js +13 -0
  34. package/dist-lib/integrations/supabase/client.server.d.ts +2063 -78
  35. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  36. package/dist-lib/integrations/supabase/client.server.js +1 -1
  37. package/dist-lib/integrations/supabase/moduleClient.d.ts +2063 -78
  38. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  39. package/dist-lib/integrations/supabase/types.d.ts +2097 -68
  40. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  41. package/dist-lib/integrations/supabase/types.js +1 -0
  42. package/dist-lib/lib/attachAuthToken.d.ts +2 -0
  43. package/dist-lib/lib/attachAuthToken.d.ts.map +1 -0
  44. package/dist-lib/lib/attachAuthToken.js +50 -0
  45. package/dist-lib/lib/bufferMatching.d.ts.map +1 -1
  46. package/dist-lib/lib/bufferMatching.js +1 -0
  47. package/dist-lib/lib/cartPlanRequests.server.d.ts +13 -0
  48. package/dist-lib/lib/cartPlanRequests.server.d.ts.map +1 -0
  49. package/dist-lib/lib/cartPlanRequests.server.js +168 -0
  50. package/dist-lib/lib/controlScan.server.d.ts +12 -0
  51. package/dist-lib/lib/controlScan.server.d.ts.map +1 -0
  52. package/dist-lib/lib/controlScan.server.js +197 -0
  53. package/dist-lib/lib/dimensionData.server.d.ts +37 -0
  54. package/dist-lib/lib/dimensionData.server.d.ts.map +1 -0
  55. package/dist-lib/lib/dimensionData.server.js +167 -0
  56. package/dist-lib/lib/dimensionPlanner.d.ts +95 -0
  57. package/dist-lib/lib/dimensionPlanner.d.ts.map +1 -0
  58. package/dist-lib/lib/dimensionPlanner.js +248 -0
  59. package/dist-lib/lib/floridayDocuments.functions.d.ts +6240 -285
  60. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  61. package/dist-lib/lib/floridayDocuments.functions.js +4 -3
  62. package/dist-lib/lib/floridayPush.functions.d.ts +2064 -79
  63. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  64. package/dist-lib/lib/floridayPush.functions.js +2 -1
  65. package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
  66. package/dist-lib/lib/handlers/logistics-tick.server.js +57 -0
  67. package/dist-lib/lib/loadCarrierPlanner.d.ts +3 -0
  68. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
  69. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +10302 -377
  70. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  71. package/dist-lib/lib/loadCarrierPlanning.functions.js +6 -5
  72. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +46 -0
  73. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  74. package/dist-lib/lib/loadCarrierPlanning.server.js +673 -31
  75. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -1
  76. package/dist-lib/lib/logisticsPlanner.js +24 -9
  77. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +4163 -193
  78. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  79. package/dist-lib/lib/logisticsRecalcJob.functions.js +3 -2
  80. package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -1
  81. package/dist-lib/lib/logisticsRecalcJob.server.js +1 -0
  82. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +2064 -79
  83. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  84. package/dist-lib/lib/logisticsRecalculate.functions.js +3 -1
  85. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  86. package/dist-lib/lib/modulePrompts.js +2567 -1563
  87. package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
  88. package/dist-lib/lib/planQueue.server.js +6 -0
  89. package/dist-lib/lib/readableServerErrors.d.ts +2 -0
  90. package/dist-lib/lib/readableServerErrors.d.ts.map +1 -0
  91. package/dist-lib/lib/readableServerErrors.js +36 -0
  92. package/dist-lib/lib/ruleEngineSchema.d.ts +1 -1
  93. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  94. package/dist-lib/lib/ruleEngineSchema.js +83 -51
  95. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  96. package/dist-lib/lib/ruleEngineWizard.js +6 -6
  97. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CAsG1B;AAmCD,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
1
+ {"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CAsG1B;AA0CD,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
@@ -132,6 +132,7 @@ async function runDayLevelSteps(sb, dates, result) {
132
132
  { fn: "logistics_schedule_tasks", args: {} },
133
133
  { fn: "logistics_sync_task_carriers", args: { p_order_ref: null } },
134
134
  { fn: "logistics_sync_pick_queue", args: {} },
135
+ { fn: "logistics_prune_buffer_member_queue", args: {} },
135
136
  { fn: "logistics_apply_document_layouts", args: {} },
136
137
  { fn: "logistics_capacity_day_check", args: { p_from: from, p_to: to >= from ? to : from } },
137
138
  ];
@@ -146,6 +147,11 @@ async function syncPickQueue(sb, result) {
146
147
  const { error } = await sb.rpc("logistics_sync_pick_queue", {});
147
148
  if (error && result.errors.length < 10) {
148
149
  result.errors.push(`logistics_sync_pick_queue: ${error.message}`);
150
+ return;
151
+ }
152
+ const { error: pruneError } = await sb.rpc("logistics_prune_buffer_member_queue", {});
153
+ if (pruneError && result.errors.length < 10) {
154
+ result.errors.push(`logistics_prune_buffer_member_queue: ${pruneError.message}`);
149
155
  }
150
156
  }
151
157
  /** Ruimt afgeronde wachtrijrijen op volgens de ingestelde bewaartermijn. */
@@ -0,0 +1,2 @@
1
+ export declare const readableServerErrors: import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, undefined, undefined, undefined>;
2
+ //# sourceMappingURL=readableServerErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readableServerErrors.d.ts","sourceRoot":"","sources":["../../src/lib/readableServerErrors.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,oBAAoB,yIAWhC,CAAC"}
@@ -0,0 +1,36 @@
1
+ // ============================================================================
2
+ // src/lib/readableServerErrors.ts — foutmeldingen die de browser kan tonen
3
+ // ============================================================================
4
+ // De auth-middleware gooit bij een probleem een Response. Zo'n object kan niet
5
+ // over de serverfunctie-verbinding worden verstuurd; de browser kreeg daardoor
6
+ // "[object Response]" en een leeg scherm. Deze middleware zet elke Response om
7
+ // in een gewone fout met leesbare tekst.
8
+ // ============================================================================
9
+ import { createMiddleware } from "@tanstack/react-start";
10
+ async function describe(e) {
11
+ if (typeof Response !== "undefined" && e instanceof Response) {
12
+ let body = "";
13
+ try {
14
+ body = (await e.clone().text()).slice(0, 300);
15
+ }
16
+ catch {
17
+ /* body niet leesbaar */
18
+ }
19
+ if (e.status === 401) {
20
+ return "Je sessie is verlopen of ontbreekt. Log opnieuw in en probeer het nog een keer.";
21
+ }
22
+ return body || `Serverfout (${e.status})`;
23
+ }
24
+ return String(e?.message ?? e);
25
+ }
26
+ export const readableServerErrors = createMiddleware({ type: "function" }).server(async ({ next }) => {
27
+ try {
28
+ return await next();
29
+ }
30
+ catch (e) {
31
+ if (typeof Response !== "undefined" && e instanceof Response) {
32
+ throw new Error(await describe(e));
33
+ }
34
+ throw e;
35
+ }
36
+ });
@@ -1,4 +1,4 @@
1
- export type FieldType = "toggle" | "select" | "number" | "text" | "textarea" | "time" | "priority" | "radio" | "days" | "layout" | "pickstation" | "guidance";
1
+ export type FieldType = "toggle" | "select" | "number" | "text" | "textarea" | "time" | "priority" | "radio" | "days" | "layout" | "pickstation" | "scanner" | "printer" | "guidance";
2
2
  export interface FieldOption {
3
3
  value: string;
4
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
@@ -66,15 +66,27 @@ export const RULE_STEPS = [
66
66
  { value: "order_type", label: "Zelfde ordertype" },
67
67
  ],
68
68
  },
69
+ {
70
+ key: "buffer_close_reference",
71
+ label: "Buffer sluit ten opzichte van",
72
+ type: "select",
73
+ default: "checkin",
74
+ options: [
75
+ { value: "checkin", label: "De aanmeldtijd" },
76
+ { value: "pick_start", label: "De start van het picken" },
77
+ ],
78
+ description: "Kies waar de sluittijd vanaf wordt teruggerekend. Bij \u201cstart van het picken\u201d is de buffer dicht zodra de order richting het pickstation gaat.",
79
+ dependsOn: { key: "buffer_enabled", in: [true] },
80
+ },
69
81
  {
70
82
  key: "buffer_close_before_minutes",
71
- label: "Buffer sluit ... minuten v\u00f3\u00f3r de aanmeldtijd",
83
+ label: "Buffer sluit ... minuten v\u00f3\u00f3r",
72
84
  type: "number",
73
85
  unit: "minuten",
74
86
  min: 0,
75
87
  max: 1440,
76
88
  default: 60,
77
- description: "De gecombineerde order wordt zoveel minuten v\u00f3\u00f3r de aanmeldtijd gesloten.",
89
+ description: "De gecombineerde order wordt zoveel minuten v\u00f3\u00f3r het gekozen moment gesloten. Daarna kan er geen order meer bij.",
78
90
  dependsOn: { key: "buffer_enabled", in: [true] },
79
91
  },
80
92
  ],
@@ -174,6 +186,17 @@ export const RULE_STEPS = [
174
186
  id: "werkwijze",
175
187
  label: "Werkwijze",
176
188
  fields: [
189
+ {
190
+ key: "cart_layout_method",
191
+ label: "Methode voor karrenindeling",
192
+ type: "select",
193
+ default: "belading",
194
+ description: "Geldt voor alle orders. Bij afmetingen worden fust- en planthoogtes gebruikt; ontbreekt een maat, dan wordt er niets ingedeeld.",
195
+ options: [
196
+ { value: "belading", label: "Indelen op basis van belading" },
197
+ { value: "afmetingen", label: "Indelen op basis van afmetingen" },
198
+ ],
199
+ },
177
200
  {
178
201
  key: "mode",
179
202
  label: "Hoe ontstaat een belading?",
@@ -227,6 +250,27 @@ export const RULE_STEPS = [
227
250
  dependsOn: { key: "mode", in: ["auto"] },
228
251
  },
229
252
  { key: "max_boxes_per_pallet", label: "Maximaal aantal dozen per pallet", type: "number", min: 1, max: 200, default: 40, dependsOn: [{ key: "mode", in: ["auto"] }, { key: "fill_boxes_as_much_as_fits", in: [false] }] },
253
+ {
254
+ key: "full_cart_min_layers",
255
+ label: "Vanaf hoeveel lagen telt een kar als volle kar",
256
+ type: "number",
257
+ min: 1,
258
+ max: 20,
259
+ default: 5,
260
+ description: "Een kar met dit aantal gevulde lagen of meer geldt als volle kar; daaronder als deelkar. Dat bepaalt welke pakbon-variant wordt meegestuurd.",
261
+ dependsOn: { key: "mode", in: ["auto"] },
262
+ },
263
+ {
264
+ key: "full_cart_min_percentage",
265
+ label: "Of vanaf hoeveel beladingspercentage telt een kar als volle kar",
266
+ type: "number",
267
+ min: 1,
268
+ max: 100,
269
+ default: 80,
270
+ unit: "%",
271
+ description: "Een kar met dit beladingspercentage of meer geldt óók als volle kar, ook als het aantal lagen onder de drempel blijft. Handig als je met verschillende fusthoogtes werkt.",
272
+ dependsOn: { key: "mode", in: ["auto"] },
273
+ },
230
274
  { key: "optimal_fill", label: "Optimale vulling berekenen", type: "toggle", default: true, dependsOn: { key: "mode", in: ["auto"] } },
231
275
  ],
232
276
  },
@@ -630,14 +674,6 @@ export const RULE_STEPS = [
630
674
  unit: "uur",
631
675
  dependsOn: { key: "packing_slip_release", in: ["hours_before_pick"] },
632
676
  },
633
- {
634
- key: "packing_slip_group_identical_carts",
635
- label: "Gelijke karren op één pakbon",
636
- type: "toggle",
637
- default: true,
638
- description: "Bij picken per kar: karren met dezelfde inhoud komen op één pakbon, met bovenaan hoe vaak die kar gemaakt moet worden.",
639
- dependsOn: { step: "order_picken", key: "pick_mode", in: ["cart", "smallest"] },
640
- },
641
677
  {
642
678
  key: "packing_slip_carts_per_print",
643
679
  label: "Aantal karren dat je in één keer uitprint",
@@ -649,32 +685,15 @@ export const RULE_STEPS = [
649
685
  description: "Hoeveel karren je tegelijk uitprint. Elke afwijkende karindeling levert een eigen pakbon op: 3 karren met 3 verschillende indelingen worden dus 3 pakbonnen. Hoeveel karindelingen op één vel passen bepaalt de pakbon-layout.",
650
686
  dependsOn: [
651
687
  { step: "order_picken", key: "pick_mode", in: ["cart", "smallest"] },
652
- { key: "packing_slip_group_identical_carts", in: [true] },
653
688
  ],
654
689
  },
655
690
  { key: "packing_slip_station", label: "Pickstation", type: "pickstation" },
656
- {
657
- key: "packing_slip_barcode",
658
- label: "Barcode op de pakbon",
659
- type: "toggle",
660
- default: true,
661
- description: "Elke kar krijgt een eigen barcode op de pakbon. Die barcode scan je later om de juiste verzendbrief te maken. Waar de barcode staat, bepaal je in de Layout maker.",
662
- },
663
691
  {
664
692
  key: "packing_slip_layout",
665
- label: "Pakbon volledige kar",
693
+ label: "Pakbon layout",
666
694
  type: "layout",
667
695
  layoutTypes: ["pakbon"],
668
- description: "De pakbon voor een volledig gevulde kar. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare pakbon als PDF, dan wordt die altijd gebruikt.",
669
- },
670
- {
671
- key: "packing_slip_partial_layout",
672
- label: "Pakbon resterende order / deelkar",
673
- type: "layout",
674
- layoutTypes: ["pakbon"],
675
- fallbackKey: "packing_slip_layout",
676
- description: "De pakbon voor de laatste kar die niet helemaal vol is, of voor een order die binnen \u00e9\u00e9n kar past. Leeg laten betekent: dezelfde layout als de volle kar.",
677
- dependsOn: { step: "order_picken", key: "pick_mode", in: ["order", "cart", "smallest"] },
696
+ description: "De pakbon-layout voor dit soort orders. Of gelijke karren gebundeld worden, of er een barcode op staat en hoe een volle kar en een deelkar eruitzien, stel je in de Layout maker in. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare pakbon als PDF, dan wordt die altijd gebruikt.",
678
697
  },
679
698
  {
680
699
  key: "packing_slip_help",
@@ -703,6 +722,11 @@ export const RULE_STEPS = [
703
722
  label: "Zodra de order wordt vrijgegeven",
704
723
  description: "Volgt exact de instellingen bij \u201c3. Order picken\u201d.",
705
724
  },
725
+ {
726
+ value: "with_packing_slip",
727
+ label: "Gelijk met de bijbehorende pakbon",
728
+ description: "De sticker komt op hetzelfde moment vrij als de pakbon van die order of kar.",
729
+ },
706
730
  {
707
731
  value: "hours_before_pick",
708
732
  label: "X uur v\u00f3\u00f3r het geplande pickmoment",
@@ -720,7 +744,13 @@ export const RULE_STEPS = [
720
744
  unit: "uur",
721
745
  dependsOn: { key: "sticker_release", in: ["hours_before_pick"] },
722
746
  },
723
- { key: "sticker_station", label: "Pickstation", type: "pickstation" },
747
+ {
748
+ key: "sticker_station",
749
+ label: "Pickstation",
750
+ type: "pickstation",
751
+ dependsOn: { key: "sticker_release", in: ["with_pick_release", "hours_before_pick"] },
752
+ description: "Bij \u201cgelijk met de bijbehorende pakbon\u201d volgt de sticker automatisch het pickstation waar de pakbon geprint wordt; dat geldt dan voor alle pickstations gelijk.",
753
+ },
724
754
  {
725
755
  key: "sticker_layout",
726
756
  label: "Welke layout voor dit soort orders?",
@@ -759,28 +789,16 @@ export const RULE_STEPS = [
759
789
  { key: "shipping_note_station", label: "Pickstation", type: "pickstation" },
760
790
  {
761
791
  key: "shipping_note_layout",
762
- label: "Layout voor de verzendbrief",
763
- type: "layout",
764
- layoutTypes: ["verzendlabel", "transportdocument"],
765
- description: "Geldt voor verzendbrieven, transportbrieven en verzendlabels. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare brief als PDF, dan wordt die altijd gebruikt.",
766
- },
767
- {
768
- key: "delivery_note_layout",
769
- label: "Layout voor de afleverbrief",
770
- type: "layout",
771
- layoutTypes: ["afleverbrief", "transportdocument", "verzendlabel"],
772
- fallbackKey: "shipping_note_layout",
773
- fallbackLabel: "verzendbrieven",
774
- description: "Geldt alleen voor afleverbrieven en afleverbonnen. Laat je dit leeg, dan volgt de afleverbrief de instelling voor verzendbrieven.",
775
- },
776
- {
777
- key: "auction_note_layout",
778
- label: "Layout voor de veilingbrief",
792
+ label: "Verzendbrief voor BVO orders",
779
793
  type: "layout",
780
- layoutTypes: ["veilingbrief", "veilingbon", "transportdocument"],
781
- fallbackKey: "shipping_note_layout",
782
- fallbackLabel: "verzendbrieven",
783
- description: "Geldt alleen voor veilingbrieven en veilingbonnen. Laat je dit leeg, dan volgt de veilingbrief de instelling voor verzendbrieven.",
794
+ layoutTypes: [
795
+ "verzendlabel",
796
+ "transportdocument",
797
+ "afleverbrief",
798
+ "veilingbrief",
799
+ "veilingbon",
800
+ ],
801
+ description: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare brief als PDF, dan wordt die altijd gebruikt.",
784
802
  },
785
803
  {
786
804
  key: "shipping_note_help",
@@ -870,6 +888,20 @@ export const RULE_STEPS = [
870
888
  { value: "skip", label: "Controle overslaan" },
871
889
  ],
872
890
  },
891
+ {
892
+ key: "control_scanner_id",
893
+ label: "Scanner",
894
+ type: "scanner",
895
+ dependsOn: [{ key: "control_mode", in: ["scanner"] }],
896
+ description: "De scanner die bij deze controlepost hoort. Alle pakbonnen die gecontroleerd moeten worden, komen bij deze scanner binnen.",
897
+ },
898
+ {
899
+ key: "control_printer_id",
900
+ label: "Printer voor de afleverbrief",
901
+ type: "printer",
902
+ dependsOn: [{ key: "control_mode", in: ["scanner"] }],
903
+ description: "De printer waarop de afleverbrief automatisch wordt uitgeprint zodra een pakbon is goedgekeurd. Bij een Floriday-order is dat de officiële afleverbrief van Floriday.",
904
+ },
873
905
  {
874
906
  key: "control_print_items",
875
907
  label: "Wat wordt er uitgeprint?",
@@ -1 +1 @@
1
- {"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AA8DD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
1
+ {"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAkED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
@@ -106,8 +106,10 @@ export function isAdvancedField(field) {
106
106
  // ── Extra uitleg ────────────────────────────────────────────────────────────
107
107
  // Aanvullende tooltipteksten voor velden die nog geen uitleg hadden.
108
108
  const EXTRA_HELP = {
109
+ buffer_close_reference: "Aanmeldtijd: de buffer sluit vóór het moment dat de order wordt aangemeld. Start van het picken: de buffer sluit vóór het moment dat het picken begint, zodat er niets meer bij kan zodra de order naar het pickstation gaat.",
109
110
  load_carrier_types: "Zet alleen de ladingdragers aan die je in de praktijk gebruikt.",
110
111
  mix_carrier_types: "Aan: één order mag over verschillende soorten dragers verdeeld worden.",
112
+ cart_layout_method: "Belading: het systeem rekent met het aantal planten per fust, fusten per laag en lagen per kar. Afmetingen: het systeem legt de fusten fysiek in op lengte, breedte en hoogte en draait ze waar nodig. Deze keuze geldt voor alle orders.",
111
113
  mode: "Automatisch: het systeem maakt de indeling. Scannen: een medewerker bepaalt het zelf.",
112
114
  multi_order: "Aan: orders van meerdere bestellingen mogen op dezelfde drager staan.",
113
115
  max_orders: "Meer orders op één drager betekent minder karren, maar wel meer sorteerwerk.",
@@ -116,6 +118,7 @@ const EXTRA_HELP = {
116
118
  max_boxes_per_pallet: "Het aantal dozen dat je fysiek op één pallet kwijt kunt.",
117
119
  optimal_fill: "Aan: het systeem zoekt de indeling waarbij de minste dragers nodig zijn.",
118
120
  pick_mode: "Bepaalt waar een pickopdracht over gaat: één order, één kar, een hele buffer, of \u201ckleinste telt\u201d — dan pick je per order zolang de order binnen één kar past en per kar zodra hij over meerdere karren gaat.",
121
+ full_cart_min_percentage: "Een kar geldt als vol zodra het beladingspercentage dit percentage bereikt, ook als het aantal gevulde lagen onder de lagen-drempel blijft.",
119
122
  scanner: "Met scanner werk je foutlozer; zonder scanner werk je op papier.",
120
123
  capacity_alert_email: "Stuurt naast de melding ook een e-mail naar de opgegeven adressen.",
121
124
  internal_alert_enabled: "Je eigen team krijgt bericht zodra een levering vertraagd raakt.",
@@ -132,16 +135,13 @@ const EXTRA_HELP = {
132
135
  packing_slip_release: "Bepaalt op welk moment de pakbon bij het pickstation verschijnt.",
133
136
  packing_slip_hours_before: "Zoveel uur vóór het picken staat de pakbon klaar.",
134
137
  packing_slip_station: "Het pickstation waar de pakbon uitgeprint wordt.",
135
- packing_slip_barcode: "Zet op elke pakbon een barcode die hoort bij die ene kar van die ene order. Scan je die barcode later bij het verzenden, dan rolt automatisch de juiste verzendbrief eruit.",
136
- packing_slip_partial_layout: "Alleen voor de laatste kar die niet helemaal vol is, of voor een order die binnen \u00e9\u00e9n kar past. Leeg laten betekent: dezelfde layout als de volle kar.",
137
- sticker_release: "Bepaalt op welk moment de stickers bij het pickstation verschijnen.",
138
+ packing_slip_layout: "De layout die de Engine bij elke pakbon meestuurt. Bundelen van gelijke karren, de barcode en het verschil tussen een volle kar en een deelkar stel je in de Layout maker in.",
139
+ sticker_release: "Bepaalt op welk moment de stickers bij het pickstation verschijnen. Kies \u201cgelijk met de bijbehorende pakbon\u201d als sticker en pakbon altijd samen uit de printer moeten komen.",
138
140
  sticker_hours_before: "Zoveel uur vóór het picken staan de stickers klaar.",
139
141
  sticker_station: "Het pickstation waar de stickers uitgeprint worden.",
140
142
  shipping_note_release: "Bepaalt op welk moment de verzendbrief beschikbaar komt.",
141
143
  shipping_note_station: "Het pickstation waar de verzendbrief uitgeprint wordt.",
142
- shipping_note_layout: "Geldt voor verzendbrieven, transportbrieven en verzendlabels — en zolang de velden hieronder leeg zijn ook voor afleverbrieven en veilingbrieven.",
143
- delivery_note_layout: "Alleen voor afleverbrieven en afleverbonnen. Leeg laten betekent: dezelfde layout als de verzendbrief.",
144
- auction_note_layout: "Alleen voor veilingbrieven en veilingbonnen. Leeg laten betekent: dezelfde layout als de verzendbrief.",
144
+ shipping_note_layout: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders.",
145
145
  production_note_release: "Bepaalt op welk moment de productiebon beschikbaar komt.",
146
146
  production_note_station: "Het pickstation waar de productiebon uitgeprint wordt.",
147
147
  control_mode: "Hoe je controleert of de kar klopt voordat hij weggaat.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/logistiek-engine",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "flowselections": {
5
5
  "moduleId": "logistiek-engine",
6
6
  "pages": [