@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.
- package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/LeveringenPage.js +2 -2
- package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/PickAgendaView.js +2 -3
- package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/WeekAgendaView.js +31 -17
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts +2 -0
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts.map +1 -0
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.js +40 -0
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts +2 -0
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts.map +1 -0
- package/dist-lib/components/engine/CapaciteitsmonitorPage.js +49 -0
- package/dist-lib/components/engine/FormulesPage.d.ts +2 -0
- package/dist-lib/components/engine/FormulesPage.d.ts.map +1 -0
- package/dist-lib/components/engine/FormulesPage.js +252 -0
- package/dist-lib/components/engine/PlaceholderPage.d.ts +6 -0
- package/dist-lib/components/engine/PlaceholderPage.d.ts.map +1 -0
- package/dist-lib/components/engine/PlaceholderPage.js +6 -0
- package/dist-lib/components/engine/StrategieenPage.d.ts +2 -0
- package/dist-lib/components/engine/StrategieenPage.d.ts.map +1 -0
- package/dist-lib/components/engine/StrategieenPage.js +80 -0
- package/dist-lib/components/pickstation/PickstationPage.d.ts.map +1 -1
- package/dist-lib/components/pickstation/PickstationPage.js +16 -4
- package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
- package/dist-lib/hooks/useOrderPlanning.js +37 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1496 -272
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +1496 -272
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1496 -272
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1523 -266
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/afhandelingSettings.functions.d.ts +2944 -496
- package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
- package/dist-lib/lib/ai-gateway.server.d.ts +2 -0
- package/dist-lib/lib/ai-gateway.server.d.ts.map +1 -0
- package/dist-lib/lib/ai-gateway.server.js +11 -0
- package/dist-lib/lib/authGateway.server.d.ts +16 -0
- package/dist-lib/lib/authGateway.server.d.ts.map +1 -0
- package/dist-lib/lib/authGateway.server.js +200 -0
- package/dist-lib/lib/carriers.functions.d.ts +7100 -980
- package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartAssignments.functions.d.ts +7100 -980
- package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.d.ts +14630 -2390
- package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.d.ts +1496 -272
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.js +41 -8
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts +50282 -0
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/capacity.functions.js +90 -0
- package/dist-lib/lib/logisticsEngine/config.d.ts +140 -0
- package/dist-lib/lib/logisticsEngine/config.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/config.js +488 -0
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts +29 -0
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/enginePickTime.js +136 -0
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts +12604 -0
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/evaluate.functions.js +104 -0
- package/dist-lib/lib/logisticsEngine/expression.d.ts +21 -0
- package/dist-lib/lib/logisticsEngine/expression.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/expression.js +263 -0
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts +25164 -0
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/formulas.functions.js +58 -0
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts +83 -0
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/safetyLayer.js +182 -0
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts +100569 -0
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/strategies.functions.js +176 -0
- package/dist-lib/lib/logisticsEngine/variables.d.ts +29 -0
- package/dist-lib/lib/logisticsEngine/variables.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/variables.js +144 -0
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts +50288 -0
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/wizard.functions.js +175 -0
- package/dist-lib/lib/pickstationI18n.d.ts +2 -0
- package/dist-lib/lib/pickstationI18n.d.ts.map +1 -1
- package/dist-lib/lib/pickstationI18n.js +12 -0
- package/dist-lib/lib/pickstationOrders.server.d.ts +5 -0
- package/dist-lib/lib/pickstationOrders.server.d.ts.map +1 -1
- package/dist-lib/lib/pickstationOrders.server.js +29 -0
- package/dist-lib/lib/pickstationTypes.d.ts +4 -0
- package/dist-lib/lib/pickstationTypes.d.ts.map +1 -1
- 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;
|
|
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,
|
|
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;
|
|
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.
|
|
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
|
-
"@
|
|
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.
|
|
44
|
-
"@lovable.dev/vite-tanstack-config": "2.6
|
|
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
|
}
|