@flowselections/floriday-afhandeling-module 1.0.15 → 1.0.17

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 (91) hide show
  1. package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
  2. package/dist-lib/components/afhandeling/LeveringenPage.js +2 -2
  3. package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
  4. package/dist-lib/components/afhandeling/PickAgendaView.js +2 -3
  5. package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
  6. package/dist-lib/components/afhandeling/WeekAgendaView.js +31 -17
  7. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts +2 -0
  8. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts.map +1 -0
  9. package/dist-lib/components/engine/CapaciteitsmaatregelenPage.js +40 -0
  10. package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts +2 -0
  11. package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts.map +1 -0
  12. package/dist-lib/components/engine/CapaciteitsmonitorPage.js +49 -0
  13. package/dist-lib/components/engine/FormulesPage.d.ts +2 -0
  14. package/dist-lib/components/engine/FormulesPage.d.ts.map +1 -0
  15. package/dist-lib/components/engine/FormulesPage.js +252 -0
  16. package/dist-lib/components/engine/PlaceholderPage.d.ts +6 -0
  17. package/dist-lib/components/engine/PlaceholderPage.d.ts.map +1 -0
  18. package/dist-lib/components/engine/PlaceholderPage.js +6 -0
  19. package/dist-lib/components/engine/StrategieenPage.d.ts +2 -0
  20. package/dist-lib/components/engine/StrategieenPage.d.ts.map +1 -0
  21. package/dist-lib/components/engine/StrategieenPage.js +80 -0
  22. package/dist-lib/components/pickstation/PickstationPage.d.ts.map +1 -1
  23. package/dist-lib/components/pickstation/PickstationPage.js +16 -4
  24. package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
  25. package/dist-lib/hooks/useOrderPlanning.js +37 -3
  26. package/dist-lib/index.d.ts.map +1 -1
  27. package/dist-lib/index.js +2 -1
  28. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1496 -272
  29. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  30. package/dist-lib/integrations/supabase/client.d.ts +1496 -272
  31. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  32. package/dist-lib/integrations/supabase/client.server.d.ts +1496 -272
  33. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  34. package/dist-lib/integrations/supabase/types.d.ts +1523 -266
  35. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  36. package/dist-lib/lib/afhandelingSettings.functions.d.ts +2944 -496
  37. package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
  38. package/dist-lib/lib/ai-gateway.server.d.ts +2 -0
  39. package/dist-lib/lib/ai-gateway.server.d.ts.map +1 -0
  40. package/dist-lib/lib/ai-gateway.server.js +11 -0
  41. package/dist-lib/lib/authGateway.server.d.ts +16 -0
  42. package/dist-lib/lib/authGateway.server.d.ts.map +1 -0
  43. package/dist-lib/lib/authGateway.server.js +200 -0
  44. package/dist-lib/lib/carriers.functions.d.ts +7100 -980
  45. package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
  46. package/dist-lib/lib/cartAssignments.functions.d.ts +7100 -980
  47. package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
  48. package/dist-lib/lib/cartControl.functions.d.ts +14630 -2390
  49. package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
  50. package/dist-lib/lib/floriday.functions.d.ts +1496 -272
  51. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  52. package/dist-lib/lib/floriday.functions.js +41 -8
  53. package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts +50282 -0
  54. package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts.map +1 -0
  55. package/dist-lib/lib/logisticsEngine/capacity.functions.js +90 -0
  56. package/dist-lib/lib/logisticsEngine/config.d.ts +140 -0
  57. package/dist-lib/lib/logisticsEngine/config.d.ts.map +1 -0
  58. package/dist-lib/lib/logisticsEngine/config.js +488 -0
  59. package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts +29 -0
  60. package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts.map +1 -0
  61. package/dist-lib/lib/logisticsEngine/enginePickTime.js +136 -0
  62. package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts +12604 -0
  63. package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts.map +1 -0
  64. package/dist-lib/lib/logisticsEngine/evaluate.functions.js +104 -0
  65. package/dist-lib/lib/logisticsEngine/expression.d.ts +21 -0
  66. package/dist-lib/lib/logisticsEngine/expression.d.ts.map +1 -0
  67. package/dist-lib/lib/logisticsEngine/expression.js +263 -0
  68. package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts +25164 -0
  69. package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts.map +1 -0
  70. package/dist-lib/lib/logisticsEngine/formulas.functions.js +58 -0
  71. package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts +83 -0
  72. package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts.map +1 -0
  73. package/dist-lib/lib/logisticsEngine/safetyLayer.js +182 -0
  74. package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts +100569 -0
  75. package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts.map +1 -0
  76. package/dist-lib/lib/logisticsEngine/strategies.functions.js +176 -0
  77. package/dist-lib/lib/logisticsEngine/variables.d.ts +29 -0
  78. package/dist-lib/lib/logisticsEngine/variables.d.ts.map +1 -0
  79. package/dist-lib/lib/logisticsEngine/variables.js +144 -0
  80. package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts +50288 -0
  81. package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts.map +1 -0
  82. package/dist-lib/lib/logisticsEngine/wizard.functions.js +175 -0
  83. package/dist-lib/lib/pickstationI18n.d.ts +2 -0
  84. package/dist-lib/lib/pickstationI18n.d.ts.map +1 -1
  85. package/dist-lib/lib/pickstationI18n.js +12 -0
  86. package/dist-lib/lib/pickstationOrders.server.d.ts +5 -0
  87. package/dist-lib/lib/pickstationOrders.server.d.ts.map +1 -1
  88. package/dist-lib/lib/pickstationOrders.server.js +29 -0
  89. package/dist-lib/lib/pickstationTypes.d.ts +4 -0
  90. package/dist-lib/lib/pickstationTypes.d.ts.map +1 -1
  91. package/package.json +24 -4
@@ -0,0 +1,175 @@
1
+ import { createServerFn } from "@tanstack/react-start";
2
+ import { generateObject } from "ai";
3
+ import { z } from "zod";
4
+ import { requireSupabaseAuth } from "../../integrations/supabase/auth-middleware";
5
+ import { createLovableAiGatewayProvider } from "../ai-gateway.server";
6
+ import { CONFIG_SLOT, DEFAULT_CONFIG, compileConfig } from "./config";
7
+ /** Bulk-save: compileer wizard-config en sla alle slots + de raw-config zelf op. */
8
+ export const saveWizardConfig = createServerFn({ method: "POST" })
9
+ .middleware([requireSupabaseAuth])
10
+ .inputValidator((d) => ({
11
+ strategy_id: String(d.strategy_id),
12
+ config: d.config,
13
+ }))
14
+ .handler(async ({ data, context }) => {
15
+ const supabase = context.supabase;
16
+ const compiled = compileConfig(data.config);
17
+ const rows = [
18
+ ...compiled.map((f) => ({
19
+ user_id: context.userId,
20
+ strategy_id: data.strategy_id,
21
+ slot: f.slot,
22
+ expression: f.expression,
23
+ notes: null,
24
+ })),
25
+ {
26
+ user_id: context.userId,
27
+ strategy_id: data.strategy_id,
28
+ slot: CONFIG_SLOT,
29
+ expression: JSON.stringify(data.config),
30
+ notes: "wizard-config",
31
+ },
32
+ ];
33
+ const { error } = await supabase
34
+ .from("logistics_formulas")
35
+ .upsert(rows, { onConflict: "strategy_id,slot" });
36
+ if (error)
37
+ throw new Error(error.message);
38
+ return { ok: true, saved: compiled.length };
39
+ });
40
+ /** Laad de opgeslagen wizard-config (of default). */
41
+ export const loadWizardConfig = createServerFn({ method: "GET" })
42
+ .middleware([requireSupabaseAuth])
43
+ .inputValidator((d) => ({ strategy_id: String(d.strategy_id) }))
44
+ .handler(async ({ data, context }) => {
45
+ const supabase = context.supabase;
46
+ const { data: row, error } = await supabase
47
+ .from("logistics_formulas")
48
+ .select("expression")
49
+ .eq("user_id", context.userId)
50
+ .eq("strategy_id", data.strategy_id)
51
+ .eq("slot", CONFIG_SLOT)
52
+ .maybeSingle();
53
+ if (error)
54
+ throw new Error(error.message);
55
+ if (!row?.expression)
56
+ return { config: DEFAULT_CONFIG, existed: false };
57
+ try {
58
+ const parsed = JSON.parse(row.expression);
59
+ return { config: { ...DEFAULT_CONFIG, ...parsed }, existed: true };
60
+ }
61
+ catch {
62
+ return { config: DEFAULT_CONFIG, existed: false };
63
+ }
64
+ });
65
+ /**
66
+ * Laad de wizard-config van de actieve strategie van de gebruiker.
67
+ * Geeft `null` terug als er nog geen (opgeslagen) actieve strategie is.
68
+ */
69
+ export const getActiveWizardConfig = createServerFn({ method: "GET" })
70
+ .middleware([requireSupabaseAuth])
71
+ .handler(async ({ context }) => {
72
+ const supabase = context.supabase;
73
+ const { data: strategy } = await supabase
74
+ .from("logistics_strategies")
75
+ .select("id")
76
+ .eq("user_id", context.userId)
77
+ .eq("is_active", true)
78
+ .maybeSingle();
79
+ if (!strategy)
80
+ return { config: null, strategyId: null };
81
+ const { data: row } = await supabase
82
+ .from("logistics_formulas")
83
+ .select("expression")
84
+ .eq("user_id", context.userId)
85
+ .eq("strategy_id", strategy.id)
86
+ .eq("slot", CONFIG_SLOT)
87
+ .maybeSingle();
88
+ if (!row?.expression)
89
+ return { config: null, strategyId: strategy.id };
90
+ try {
91
+ const parsed = JSON.parse(row.expression);
92
+ return { config: { ...DEFAULT_CONFIG, ...parsed }, strategyId: strategy.id };
93
+ }
94
+ catch {
95
+ return { config: null, strategyId: strategy.id };
96
+ }
97
+ });
98
+ // AI-configurator: neem vrije tekst en stel wizard-config voor.
99
+ const configSchema = z.object({
100
+ orderMode: z.enum(["per-order", "per-customer", "per-location", "per-cart", "custom"]),
101
+ combine: z.object({
102
+ mode: z.enum(["none", "auction", "bvo", "all"]),
103
+ maxLayersOwnCart: z.number().int().min(1).max(20),
104
+ maxCustomersPerCart: z.number().int().min(1).max(20),
105
+ sameCarrier: z.boolean(),
106
+ sameRoute: z.boolean(),
107
+ sameCrateType: z.boolean(),
108
+ sameDeliveryDate: z.boolean(),
109
+ }),
110
+ cartFull: z.object({
111
+ mode: z.enum(["100", "98", "layers", "weight", "custom"]),
112
+ fillPct: z.number().min(1).max(100),
113
+ maxLayers: z.number().int().min(1).max(20),
114
+ maxWeight: z.number().min(1).max(2000),
115
+ customExpression: z.string(),
116
+ }),
117
+ cartClose: z.object({
118
+ whenFull: z.boolean(),
119
+ whenCapacityReached: z.boolean(),
120
+ when30minLeft: z.boolean(),
121
+ onlyManual: z.boolean(),
122
+ }),
123
+ documents: z.object({
124
+ packingSlip: z.enum(["cart-full", "batch-close", "pickstation"]),
125
+ deliveryNote: z.enum(["floriday", "pickstation", "manual"]),
126
+ }),
127
+ pickstationVisibility: z.object({
128
+ batchClosed: z.boolean(),
129
+ packingSlip: z.boolean(),
130
+ plannerApproved: z.boolean(),
131
+ controlDone: z.boolean(),
132
+ manual: z.boolean(),
133
+ }),
134
+ pickPlanningRelease: z.object({
135
+ mode: z.enum(["latest", "hours-before-departure", "between-signup-window", "fixed-time", "days-before-delivery", "manual", "custom"]),
136
+ hoursBeforeDeparture: z.number().min(0).max(72),
137
+ fixedTime: z.string(),
138
+ daysBeforeDelivery: z.number().int().min(0).max(30),
139
+ safetyBufferMinutes: z.number().int().min(0).max(240),
140
+ customExpression: z.string(),
141
+ hoursBeforeSignupWindow: z.number().min(0).max(72).optional().default(4),
142
+ earlyPickHours: z.number().min(0).max(72).optional().default(2),
143
+ incompleteCartsBeforeSignup: z.boolean().optional().default(false),
144
+ safetyBufferMode: z.enum(["minutes", "percent"]).optional().default("minutes"),
145
+ safetyBufferPercent: z.number().min(0).max(100).optional().default(20),
146
+ }),
147
+ startMoment: z.object({
148
+ autoWhenCapacity: z.boolean(),
149
+ safetyBufferMinutes: z.number().int().min(0).max(240),
150
+ capacityMode: z.enum(["carts-per-hour", "minutes-per-cart"]),
151
+ pickCapacityPerHour: z.number().min(1).max(200),
152
+ minutesPerCart: z.number().min(1).max(240),
153
+ }),
154
+ });
155
+ export const aiSuggestConfig = createServerFn({ method: "POST" })
156
+ .middleware([requireSupabaseAuth])
157
+ .inputValidator((d) => ({
158
+ description: String(d.description ?? "").slice(0, 4000),
159
+ current: d.current ?? DEFAULT_CONFIG,
160
+ }))
161
+ .handler(async ({ data }) => {
162
+ const key = process.env.LOVABLE_API_KEY;
163
+ if (!key)
164
+ throw new Error("LOVABLE_API_KEY ontbreekt");
165
+ const gateway = createLovableAiGatewayProvider(key);
166
+ const { object } = await generateObject({
167
+ model: gateway("google/gemini-2.5-flash"),
168
+ schema: configSchema,
169
+ system: "Je bent een logistieke configurator. Vertaal de beschrijving van de gebruiker naar een complete wizard-configuratie. " +
170
+ "Behoud bestaande instellingen wanneer de beschrijving daar niets over zegt. Antwoord uitsluitend met het JSON-schema.",
171
+ prompt: `Huidige configuratie (JSON):\n${JSON.stringify(data.current)}\n\n` +
172
+ `Beschrijving van de gewenste werkwijze:\n${data.description}`,
173
+ });
174
+ return { config: object };
175
+ });
@@ -38,6 +38,8 @@ export interface PickstationDict {
38
38
  resetStatus: string;
39
39
  printChecklist: string;
40
40
  runControl: string;
41
+ deliveryNoteReady: string;
42
+ deliveryNotePending: string;
41
43
  }
42
44
  export declare const PICKSTATION_DICT: Record<PickstationLang, PickstationDict>;
43
45
  /** Locale codes used voor `toLocaleDateString` / `toLocaleString` in geprinte documenten. */
@@ -1 +1 @@
1
- {"version":3,"file":"pickstationI18n.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationI18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtE,eAAO,MAAM,qBAAqB,EAAE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAOzF,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA4ND,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAA8B,CAAC;AAErG,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAO9D,CAAC;AAEF,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IAEnC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAGlB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAsOD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAOhF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAO3F"}
1
+ {"version":3,"file":"pickstationI18n.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationI18n.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,8 @@ const nl = {
40
40
  resetStatus: 'Terug naar geprint',
41
41
  printChecklist: 'Controlelijst afdrukken',
42
42
  runControl: 'Controle uitvoeren',
43
+ deliveryNoteReady: 'Afleverbrief',
44
+ deliveryNotePending: 'Wacht op afleverbrief',
43
45
  };
44
46
  const en = {
45
47
  chooseLanguage: "Choose your language",
@@ -75,6 +77,8 @@ const en = {
75
77
  resetStatus: 'Reset to printed',
76
78
  printChecklist: 'Print checklist',
77
79
  runControl: 'Run inspection',
80
+ deliveryNoteReady: 'Delivery note',
81
+ deliveryNotePending: 'Awaiting delivery note',
78
82
  };
79
83
  const pl = {
80
84
  chooseLanguage: "Wybierz język",
@@ -110,6 +114,8 @@ const pl = {
110
114
  resetStatus: 'Cofnij do wydrukowane',
111
115
  printChecklist: 'Drukuj listę kontrolną',
112
116
  runControl: 'Wykonaj kontrolę',
117
+ deliveryNoteReady: 'List przewozowy',
118
+ deliveryNotePending: 'Oczekiwanie na list przewozowy',
113
119
  };
114
120
  const ro = {
115
121
  chooseLanguage: "Alegeți limba",
@@ -145,6 +151,8 @@ const ro = {
145
151
  resetStatus: 'Înapoi la tipărit',
146
152
  printChecklist: 'Tipărește lista de control',
147
153
  runControl: 'Efectuează controlul',
154
+ deliveryNoteReady: 'Scrisoare de livrare',
155
+ deliveryNotePending: 'Se așteaptă scrisoarea de livrare',
148
156
  };
149
157
  const bg = {
150
158
  chooseLanguage: "Изберете език",
@@ -180,6 +188,8 @@ const bg = {
180
188
  resetStatus: 'Върни към отпечатано',
181
189
  printChecklist: 'Печат на контролен списък',
182
190
  runControl: 'Извърши проверка',
191
+ deliveryNoteReady: 'Товарителница',
192
+ deliveryNotePending: 'Изчаква товарителница',
183
193
  };
184
194
  const uk = {
185
195
  chooseLanguage: "Оберіть мову",
@@ -215,6 +225,8 @@ const uk = {
215
225
  resetStatus: 'Повернути до надруковано',
216
226
  printChecklist: 'Друкувати контрольний список',
217
227
  runControl: 'Виконати перевірку',
228
+ deliveryNoteReady: 'Товарна накладна',
229
+ deliveryNotePending: 'Очікування на накладну',
218
230
  };
219
231
  export const PICKSTATION_DICT = { nl, pl, ro, bg, uk, en };
220
232
  /** Locale codes used voor `toLocaleDateString` / `toLocaleString` in geprinte documenten. */
@@ -5,6 +5,11 @@ export declare function fetchFloridayAuctionLetterPdf(_orderId: string): Promise
5
5
  base64: string;
6
6
  mime: string;
7
7
  } | null>;
8
+ /** Haalt een Floriday-afleverbrief PDF op via de Authenticatie-module gateway. */
9
+ export declare function fetchFloridayDeliveryNotePdf(salesOrderId: string): Promise<{
10
+ base64: string;
11
+ mime: string;
12
+ } | null>;
8
13
  export declare function setCartStatus(orderSource: "floriday" | "manual", orderId: string, cartIndex: number, status: "pending" | "checked" | "ready" | "shipped" | "delivered"): Promise<void>;
9
14
  export declare function logPrint(orderId: string, orderNumber: string | null, customerName: string | null, documents: string[], ipAddress: string | null): Promise<void>;
10
15
  //# sourceMappingURL=pickstationOrders.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pickstationOrders.server.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationOrders.server.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA8P5E,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyU/E;AAED,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,CAER;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,UAAU,GAAG,QAAQ,EAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAChE,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
1
+ {"version":3,"file":"pickstationOrders.server.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationOrders.server.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA8P5E,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwW/E;AAED,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,CAER;AAED,kFAAkF;AAClF,wBAAsB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,CAGR;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,UAAU,GAAG,QAAQ,EAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAChE,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -376,6 +376,28 @@ export async function loadTodaysPickstationOrders() {
376
376
  }
377
377
  }
378
378
  }
379
+ // Batch: welke Floriday-orders hebben al een delivery-order in de cache?
380
+ const floridaySalesOrderIds = distributed
381
+ .filter((it) => it.meta.source === "floriday")
382
+ .map((it) => it.meta.id);
383
+ const deliveryNoteAvailableIds = new Set();
384
+ if (floridaySalesOrderIds.length > 0) {
385
+ const { data: doRows, error: doErr } = await supabase.rpc("pickstation_resolve_delivery_orders", { p_sales_order_ids: floridaySalesOrderIds });
386
+ if (doErr) {
387
+ warn("delivery-order availability lookup failed", { message: doErr.message });
388
+ }
389
+ else {
390
+ for (const row of (doRows ?? [])) {
391
+ if (row.sales_order_id && row.delivery_order_id) {
392
+ deliveryNoteAvailableIds.add(row.sales_order_id);
393
+ }
394
+ }
395
+ }
396
+ debug("delivery-note availability resolved", {
397
+ checked: floridaySalesOrderIds.length,
398
+ available: deliveryNoteAvailableIds.size,
399
+ });
400
+ }
379
401
  const out = [];
380
402
  for (const it of distributed) {
381
403
  if (!it.planning)
@@ -417,6 +439,8 @@ export async function loadTodaysPickstationOrders() {
417
439
  cartNumber: cartNumberMap.get(key) ?? null,
418
440
  status,
419
441
  manualStatus,
442
+ salesOrderId: it.meta.source === "floriday" ? it.meta.id : null,
443
+ deliveryNoteAvailable: it.meta.source === "floriday" && deliveryNoteAvailableIds.has(it.meta.id),
420
444
  });
421
445
  }
422
446
  }
@@ -446,6 +470,11 @@ export async function loadTodaysPickstationOrders() {
446
470
  export async function fetchFloridayAuctionLetterPdf(_orderId) {
447
471
  return null;
448
472
  }
473
+ /** Haalt een Floriday-afleverbrief PDF op via de Authenticatie-module gateway. */
474
+ export async function fetchFloridayDeliveryNotePdf(salesOrderId) {
475
+ const { fetchDeliveryNotePdf } = await import("./authGateway.server");
476
+ return fetchDeliveryNotePdf(salesOrderId);
477
+ }
449
478
  export async function setCartStatus(orderSource, orderId, cartIndex, status) {
450
479
  const supabase = getPublicClient();
451
480
  const { error } = await supabase.rpc("pickstation_set_cart_status", {
@@ -36,5 +36,9 @@ export interface PickstationOrder {
36
36
  status: CartStatus;
37
37
  /** Handmatige status uit cart_numbers.status (null bij nog niet toegewezen). */
38
38
  manualStatus: CartManualStatus | null;
39
+ /** Floriday sales-order-id (alleen voor 'floriday'-orders); nodig om de afleverbrief op te halen. */
40
+ salesOrderId: string | null;
41
+ /** True zodra er een Floriday delivery-order in de cache staat voor deze order. */
42
+ deliveryNoteAvailable: boolean;
39
43
  }
40
44
  //# sourceMappingURL=pickstationTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pickstationTypes.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationTypes.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kFAAkF;IAClF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oFAAoF;IACpF,MAAM,EAAE,UAAU,CAAC;IACnB,gFAAgF;IAChF,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACvC"}
1
+ {"version":3,"file":"pickstationTypes.d.ts","sourceRoot":"","sources":["../../src/lib/pickstationTypes.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kFAAkF;IAClF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oFAAoF;IACpF,MAAM,EAAE,UAAU,CAAC;IACnB,gFAAgF;IAChF,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,qGAAqG;IACrG,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mFAAmF;IACnF,qBAAqB,EAAE,OAAO,CAAC;CAChC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-afhandeling-module",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -35,13 +35,15 @@
35
35
  "react-dom": "^18 || ^19"
36
36
  },
37
37
  "dependencies": {
38
- "@supabase/supabase-js": "^2.106.2"
38
+ "@ai-sdk/openai-compatible": "^3.0.9",
39
+ "@supabase/supabase-js": "^2.106.2",
40
+ "ai": "^7.0.26"
39
41
  },
40
42
  "devDependencies": {
41
43
  "@cloudflare/vite-plugin": "^1.25.5",
42
44
  "@eslint/js": "^9.32.0",
43
- "@flowselections/core": "1.0.12",
44
- "@lovable.dev/vite-tanstack-config": "2.6.4",
45
+ "@flowselections/core": "1.0.16",
46
+ "@lovable.dev/vite-tanstack-config": "2.7.6",
45
47
  "@rsbuild/core": "^1.0.0",
46
48
  "@tailwindcss/vite": "^4.2.1",
47
49
  "@tanstack/react-query": "^5.83.0",
@@ -102,6 +104,24 @@
102
104
  "title": "KioskControle",
103
105
  "nav": false,
104
106
  "public": true
107
+ },
108
+ {
109
+ "export": "VervoerdersPage",
110
+ "route": "afhandeling/vervoerders",
111
+ "title": "Vervoerders",
112
+ "nav": false
113
+ },
114
+ {
115
+ "export": "VervoerderForm",
116
+ "route": "afhandeling/vervoerders/nieuw",
117
+ "title": "Nieuwe vervoerder",
118
+ "nav": false
119
+ },
120
+ {
121
+ "export": "VervoerderForm",
122
+ "route": "afhandeling/vervoerders/$id/bewerken",
123
+ "title": "Vervoerder bewerken",
124
+ "nav": false
105
125
  }
106
126
  ]
107
127
  }