@flowselections/floriday-voorraad 1.0.46 → 1.0.47
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/voorraad/AdditionalPackagingDialog.d.ts +1 -1
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +157 -9
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.js +2 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.js +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts +5 -0
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/TrayStickerCard.js +100 -0
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemSupplyLine.js +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +3255 -199
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +3255 -199
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +3255 -199
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +8 -1
- package/dist-lib/integrations/supabase/types.d.ts +3287 -192
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.d.ts +3267 -217
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.js +1 -1
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +3267 -211
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-env.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.d.ts +18378 -42
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +9189 -21
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/inventory-settings.functions.d.ts +6126 -14
- package/dist-lib/lib/inventory-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/inventory-settings.functions.js +3 -3
- package/dist-lib/lib/logistics-buffer-events.server.js +1 -1
- package/dist-lib/lib/logistics-tasks.server.js +2 -2
- package/dist-lib/lib/module-runtime.server.js +1 -1
- package/dist-lib/lib/product-packing.d.ts +28 -0
- package/dist-lib/lib/product-packing.d.ts.map +1 -0
- package/dist-lib/lib/product-packing.js +90 -0
- package/dist-lib/lib/stock-sync.functions.d.ts +6126 -14
- package/dist-lib/lib/stock-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/stock-sync.functions.js +3 -3
- package/package.json +2 -2
- package/dist-lib/components/TemplatePage.d.ts +0 -2
- package/dist-lib/components/TemplatePage.d.ts.map +0 -1
- package/dist-lib/components/TemplatePage.js +0 -4
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +0 -2
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +0 -1
- package/dist-lib/components/settings/VoorraadSettingsCard.js +0 -39
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts +0 -6
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ConnectionBadge.js +0 -12
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts +0 -8
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ConnectionPicker.js +0 -8
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +0 -4
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +0 -1
- package/dist-lib/components/voorraad/FloridayStatusBadge.js +0 -8
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +0 -2
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ModuleHealthCard.js +0 -40
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +0 -10
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +0 -1
- package/dist-lib/components/voorraad/VoorraadDashboard.js +0 -53
- package/dist-lib/lib/floriday-field-sources.d.ts +0 -18
- package/dist-lib/lib/floriday-field-sources.d.ts.map +0 -1
- package/dist-lib/lib/floriday-field-sources.js +0 -45
- package/dist-lib/lib/floriday-schema-to-zod.d.ts +0 -9
- package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +0 -1
- package/dist-lib/lib/floriday-schema-to-zod.js +0 -53
- package/dist-lib/lib/merge-products.d.ts +0 -8
- package/dist-lib/lib/merge-products.d.ts.map +0 -1
- package/dist-lib/lib/merge-products.js +0 -17
- package/dist-lib/lib/module-health.functions.d.ts +0 -53497
- package/dist-lib/lib/module-health.functions.d.ts.map +0 -1
- package/dist-lib/lib/module-health.functions.js +0 -261
- package/dist-lib/lib/validationSchemas.d.ts +0 -15
- package/dist-lib/lib/validationSchemas.d.ts.map +0 -1
- package/dist-lib/lib/validationSchemas.js +0 -25
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Statusoverzicht van de module: klopt de configuratie, draaien de
|
|
3
|
-
* achtergrondtaken en loopt de voorraadsync?
|
|
4
|
-
*
|
|
5
|
-
* Bewust één server-functie die alles samenvat, zodat de instellingenpagina
|
|
6
|
-
* met één blik laat zien wat er in déze shell nog ontbreekt.
|
|
7
|
-
*/
|
|
8
|
-
import { createServerFn } from "@tanstack/react-start";
|
|
9
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
10
|
-
export const getModuleHealth = createServerFn({ method: "GET" })
|
|
11
|
-
.middleware([requireSupabaseAuth])
|
|
12
|
-
.handler(async () => {
|
|
13
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
14
|
-
const admin = supabaseAdmin;
|
|
15
|
-
const checks = [];
|
|
16
|
-
// --- Configuratie in de database -------------------------------------
|
|
17
|
-
const { data: cfgRows } = await admin
|
|
18
|
-
.from("module_runtime_config")
|
|
19
|
-
.select("key,value,updated_at");
|
|
20
|
-
const cfg = new Map((cfgRows ?? []).map((r) => [r.key, r]));
|
|
21
|
-
const baseUrl = cfg.get("voorraad_base_url")?.value ?? "";
|
|
22
|
-
checks.push({
|
|
23
|
-
id: "base_url",
|
|
24
|
-
label: "Adres van deze module",
|
|
25
|
-
status: baseUrl ? "ok" : "error",
|
|
26
|
-
detail: baseUrl || "Nog niet vastgelegd.",
|
|
27
|
-
hint: baseUrl
|
|
28
|
-
? undefined
|
|
29
|
-
: "Open een pagina van de gepubliceerde module; het adres wordt dan automatisch vastgelegd.",
|
|
30
|
-
});
|
|
31
|
-
const hookKey = cfg.get("voorraad_hook_apikey")?.value ?? "";
|
|
32
|
-
checks.push({
|
|
33
|
-
id: "hook_apikey",
|
|
34
|
-
label: "Sleutel voor achtergrondtaken",
|
|
35
|
-
status: hookKey ? "ok" : "error",
|
|
36
|
-
detail: hookKey ? "Aanwezig" : "Ontbreekt",
|
|
37
|
-
hint: hookKey ? undefined : "Controleer of SUPABASE_PUBLISHABLE_KEY in deze omgeving is ingesteld.",
|
|
38
|
-
});
|
|
39
|
-
const processor = cfg.get("stock_queue_processor_base_url")?.value ?? "";
|
|
40
|
-
checks.push({
|
|
41
|
-
id: "processor",
|
|
42
|
-
label: "Verwerker van de voorraadwachtrij",
|
|
43
|
-
status: processor ? "ok" : "warn",
|
|
44
|
-
detail: processor || "Niet ingesteld; de module verwerkt de wachtrij dan zelf.",
|
|
45
|
-
});
|
|
46
|
-
// --- Koppeling met de Authenticatiemodule ------------------------------
|
|
47
|
-
let activeEnvironment = null;
|
|
48
|
-
try {
|
|
49
|
-
const { describeGatewayResolution } = await import("./floriday-gateway.server");
|
|
50
|
-
const info = await describeGatewayResolution();
|
|
51
|
-
const bron = info.addressSource === "override"
|
|
52
|
-
? "handmatig ingesteld adres"
|
|
53
|
-
: info.addressSource === "central"
|
|
54
|
-
? "automatisch via de centrale authenticatiemodule"
|
|
55
|
-
: "onbekend";
|
|
56
|
-
checks.push({
|
|
57
|
-
id: "gateway",
|
|
58
|
-
label: "Koppeling Authenticatiemodule",
|
|
59
|
-
status: info.addressSource === "onbekend" || info.secretSource === "onbekend"
|
|
60
|
-
? "error"
|
|
61
|
-
: info.mismatch
|
|
62
|
-
? "warn"
|
|
63
|
-
: "ok",
|
|
64
|
-
detail: info.addressSource === "onbekend"
|
|
65
|
-
? "Geen adres gevonden; Floriday-acties zullen mislukken."
|
|
66
|
-
: `${info.address} (${bron})`,
|
|
67
|
-
hint: info.mismatch
|
|
68
|
-
? "Let op: het handmatig ingestelde adres wijkt af van het adres dat de centrale " +
|
|
69
|
-
`module doorgeeft (${info.centralAddress}). Het handmatige adres krijgt voorrang. ` +
|
|
70
|
-
"Verwijder het handmatige adres zodra deze omgeving verhuist."
|
|
71
|
-
: (info.error ?? undefined),
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
checks.push({
|
|
76
|
-
id: "gateway",
|
|
77
|
-
label: "Koppeling Authenticatiemodule",
|
|
78
|
-
status: "error",
|
|
79
|
-
detail: e?.message ?? "Kan de koppeling niet vaststellen.",
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// --- Floriday-koppeling ----------------------------------------------
|
|
83
|
-
try {
|
|
84
|
-
const { data: conn } = await admin.rpc("get_active_floriday_connection_public");
|
|
85
|
-
const row = Array.isArray(conn) ? conn[0] : conn;
|
|
86
|
-
activeEnvironment = row?.environment ?? null;
|
|
87
|
-
checks.push({
|
|
88
|
-
id: "floriday",
|
|
89
|
-
label: "Floriday-koppeling",
|
|
90
|
-
status: row?.id ? "ok" : "error",
|
|
91
|
-
detail: row?.id
|
|
92
|
-
? `Actief (${row.environment ?? "onbekende omgeving"})`
|
|
93
|
-
: "Geen actieve koppeling gevonden.",
|
|
94
|
-
hint: row?.id ? undefined : "Koppel Floriday in de authenticatiemodule.",
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
catch (e) {
|
|
98
|
-
checks.push({
|
|
99
|
-
id: "floriday",
|
|
100
|
-
label: "Floriday-koppeling",
|
|
101
|
-
status: "error",
|
|
102
|
-
detail: e?.message ?? "Kan de koppeling niet uitlezen.",
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
checks.push({
|
|
106
|
-
id: "environment",
|
|
107
|
-
label: "Actieve omgeving",
|
|
108
|
-
status: activeEnvironment ? "ok" : "warn",
|
|
109
|
-
detail: activeEnvironment
|
|
110
|
-
? activeEnvironment === "live"
|
|
111
|
-
? "Live — wijzigingen komen echt in Floriday."
|
|
112
|
-
: "Proefomgeving (staging)."
|
|
113
|
-
: "Nog geen omgeving gekozen.",
|
|
114
|
-
hint: activeEnvironment
|
|
115
|
-
? "De authenticatiemodule moet voor deze omgeving inloggegevens hebben; anders " +
|
|
116
|
-
"melden voorraadwijzigingen dat er geen koppeling voor deze omgeving is."
|
|
117
|
-
: undefined,
|
|
118
|
-
});
|
|
119
|
-
// --- Voorraadwachtrij --------------------------------------------------
|
|
120
|
-
const { data: queueRows } = await admin
|
|
121
|
-
.from("floriday_continuous_stock_queue")
|
|
122
|
-
.select("status,created_at,last_error")
|
|
123
|
-
.in("status", ["pending", "processing", "failed"])
|
|
124
|
-
.order("created_at", { ascending: true })
|
|
125
|
-
.limit(1000);
|
|
126
|
-
const rows = (queueRows ?? []);
|
|
127
|
-
const failed = rows.filter((r) => r.status === "failed").length;
|
|
128
|
-
const pending = rows.filter((r) => r.status !== "failed").length;
|
|
129
|
-
const oldest = rows[0]?.created_at;
|
|
130
|
-
const stale = oldest && Date.now() - new Date(oldest).getTime() > 30 * 60000;
|
|
131
|
-
checks.push({
|
|
132
|
-
id: "queue",
|
|
133
|
-
label: "Voorraadwachtrij",
|
|
134
|
-
status: failed > 0 || stale ? "warn" : "ok",
|
|
135
|
-
detail: rows.length === 0
|
|
136
|
-
? "Leeg — alles is verstuurd."
|
|
137
|
-
: `${pending} wachtend, ${failed} mislukt${oldest ? `; oudste van ${new Date(oldest).toLocaleString("nl-NL")}` : ""}.`,
|
|
138
|
-
hint: rows.find((r) => r.last_error)?.last_error ?? undefined,
|
|
139
|
-
});
|
|
140
|
-
// --- Geplande taken ----------------------------------------------------
|
|
141
|
-
try {
|
|
142
|
-
const { data: jobs } = await admin.rpc("get_floriday_cron_jobs");
|
|
143
|
-
const list = (jobs ?? []);
|
|
144
|
-
const active = list.filter((j) => j.active !== false).length;
|
|
145
|
-
checks.push({
|
|
146
|
-
id: "cron",
|
|
147
|
-
label: "Geplande achtergrondtaken",
|
|
148
|
-
status: active > 0 ? "ok" : "error",
|
|
149
|
-
detail: active > 0
|
|
150
|
-
? `${active} taken actief.`
|
|
151
|
-
: "Geen actieve taken gevonden in de database.",
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
checks.push({
|
|
156
|
-
id: "cron",
|
|
157
|
-
label: "Geplande achtergrondtaken",
|
|
158
|
-
status: "warn",
|
|
159
|
-
detail: "Status van de geplande taken kon niet worden opgehaald.",
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
// --- Dubbele voorraadregels -------------------------------------------
|
|
163
|
-
try {
|
|
164
|
-
const { data: legacyRows } = await admin
|
|
165
|
-
.from("trade_item_stock")
|
|
166
|
-
.select("trade_item_key")
|
|
167
|
-
.like("trade_item_key", "product:%")
|
|
168
|
-
.limit(500);
|
|
169
|
-
const legacy = (legacyRows ?? []);
|
|
170
|
-
const ids = legacy
|
|
171
|
-
.map((r) => String(r.trade_item_key).slice(8))
|
|
172
|
-
.filter((v) => /^[0-9a-f-]{36}$/i.test(v));
|
|
173
|
-
let doubles = 0;
|
|
174
|
-
if (ids.length) {
|
|
175
|
-
const { data: prods } = await admin
|
|
176
|
-
.from("products")
|
|
177
|
-
.select("id")
|
|
178
|
-
.in("id", ids);
|
|
179
|
-
doubles = (prods ?? []).length;
|
|
180
|
-
}
|
|
181
|
-
checks.push({
|
|
182
|
-
id: "stock_keys",
|
|
183
|
-
label: "Voorraadregels per artikel",
|
|
184
|
-
status: doubles > 0 ? "warn" : "ok",
|
|
185
|
-
detail: doubles > 0
|
|
186
|
-
? `${doubles} artikel(en) hebben nog een oude, tweede voorraadregel.`
|
|
187
|
-
: "Elk artikel heeft precies één voorraadregel.",
|
|
188
|
-
hint: doubles > 0
|
|
189
|
-
? "Sla de voorraad van die artikelen één keer opnieuw op; de regels worden dan automatisch samengevoegd."
|
|
190
|
-
: undefined,
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
// Controle mag de statuskaart nooit blokkeren.
|
|
195
|
-
}
|
|
196
|
-
// --- Aantallen bij producten gelijk aan de voorraad? -------------------
|
|
197
|
-
try {
|
|
198
|
-
const { data: stockRows } = await admin
|
|
199
|
-
.from("trade_item_stock")
|
|
200
|
-
.select("trade_item_key,physical_stock,reserved_stock")
|
|
201
|
-
.limit(2000);
|
|
202
|
-
const rows = (stockRows ?? []);
|
|
203
|
-
const byKey = new Map(rows.map((r) => [String(r.trade_item_key), Number(r.physical_stock ?? 0)]));
|
|
204
|
-
const { data: prodRows } = await admin
|
|
205
|
-
.from("products")
|
|
206
|
-
.select("id,product,quantity,trade_item_key,floriday_trade_item_id")
|
|
207
|
-
.limit(2000);
|
|
208
|
-
let mismatch = 0;
|
|
209
|
-
for (const p of (prodRows ?? [])) {
|
|
210
|
-
const key = (p.floriday_trade_item_id && byKey.has(String(p.floriday_trade_item_id))
|
|
211
|
-
? String(p.floriday_trade_item_id)
|
|
212
|
-
: null) ??
|
|
213
|
-
(p.trade_item_key && byKey.has(String(p.trade_item_key))
|
|
214
|
-
? String(p.trade_item_key)
|
|
215
|
-
: null) ??
|
|
216
|
-
(byKey.has(`product:${p.id}`) ? `product:${p.id}` : null);
|
|
217
|
-
if (!key)
|
|
218
|
-
continue;
|
|
219
|
-
if (Number(p.quantity ?? 0) !== byKey.get(key))
|
|
220
|
-
mismatch += 1;
|
|
221
|
-
}
|
|
222
|
-
checks.push({
|
|
223
|
-
id: "quantity_sync",
|
|
224
|
-
label: "Aantallen bij producten",
|
|
225
|
-
status: mismatch > 0 ? "warn" : "ok",
|
|
226
|
-
detail: mismatch > 0
|
|
227
|
-
? `${mismatch} product(en) tonen een ander aantal dan de voorraad.`
|
|
228
|
-
: "Elk product toont hetzelfde aantal als de voorraad.",
|
|
229
|
-
hint: mismatch > 0
|
|
230
|
-
? "Sla de voorraad van die producten één keer opnieuw op; het aantal loopt daarna weer mee."
|
|
231
|
-
: undefined,
|
|
232
|
-
});
|
|
233
|
-
// --- Reserveringen hoger dan de liggende voorraad --------------------
|
|
234
|
-
const over = rows.filter((r) => Number(r.reserved_stock ?? 0) > Number(r.physical_stock ?? 0)).length;
|
|
235
|
-
checks.push({
|
|
236
|
-
id: "reservations",
|
|
237
|
-
label: "Reserveringen",
|
|
238
|
-
status: over > 0 ? "warn" : "ok",
|
|
239
|
-
detail: over > 0
|
|
240
|
-
? `${over} artikel(en) hebben meer gereserveerd dan er liggend is.`
|
|
241
|
-
: "Geen artikelen met meer reserveringen dan voorraad.",
|
|
242
|
-
hint: over > 0
|
|
243
|
-
? "Dit komt door openstaande orders. Controleer of die orders nog terecht openstaan; afgeronde of geannuleerde orders geven de reservering vrij."
|
|
244
|
-
: undefined,
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
catch {
|
|
248
|
-
// Controle mag de statuskaart nooit blokkeren.
|
|
249
|
-
}
|
|
250
|
-
return { checkedAt: new Date().toISOString(), checks };
|
|
251
|
-
});
|
|
252
|
-
/** Geeft vastgelopen wachtrijregels handmatig vrij. */
|
|
253
|
-
export const recoverStockQueue = createServerFn({ method: "POST" })
|
|
254
|
-
.middleware([requireSupabaseAuth])
|
|
255
|
-
.handler(async () => {
|
|
256
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
257
|
-
const { data, error } = await supabaseAdmin.rpc("reset_stalled_floriday_stock_queue", { p_include_failed: true });
|
|
258
|
-
if (error)
|
|
259
|
-
throw new Error(error.message);
|
|
260
|
-
return { restored: Number(data ?? 0) };
|
|
261
|
-
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const loginSchema: z.ZodObject<{
|
|
3
|
-
email: z.ZodString;
|
|
4
|
-
password: z.ZodString;
|
|
5
|
-
}, z.core.$strip>;
|
|
6
|
-
export declare const bugReportSchema: z.ZodObject<{
|
|
7
|
-
title: z.ZodString;
|
|
8
|
-
description: z.ZodString;
|
|
9
|
-
}, z.core.$strip>;
|
|
10
|
-
export declare const ALLOWED_FILE_TYPES: string[];
|
|
11
|
-
export declare function validateFileUpload(file: File): {
|
|
12
|
-
valid: boolean;
|
|
13
|
-
error?: string;
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=validationSchemas.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validationSchemas.d.ts","sourceRoot":"","sources":["../../src/lib/validationSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW;;;iBAGtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQjF"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export const loginSchema = z.object({
|
|
3
|
-
email: z.string().email("Ongeldig e-mailadres"),
|
|
4
|
-
password: z.string().min(6, "Wachtwoord moet minimaal 6 tekens bevatten"),
|
|
5
|
-
});
|
|
6
|
-
export const bugReportSchema = z.object({
|
|
7
|
-
title: z.string().min(1, "Titel is verplicht").max(200),
|
|
8
|
-
description: z.string().min(1, "Beschrijving is verplicht").max(5000),
|
|
9
|
-
});
|
|
10
|
-
export const ALLOWED_FILE_TYPES = [
|
|
11
|
-
"image/png",
|
|
12
|
-
"image/jpeg",
|
|
13
|
-
"image/gif",
|
|
14
|
-
"application/pdf",
|
|
15
|
-
];
|
|
16
|
-
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
17
|
-
export function validateFileUpload(file) {
|
|
18
|
-
if (!ALLOWED_FILE_TYPES.includes(file.type)) {
|
|
19
|
-
return { valid: false, error: "Bestandstype niet toegestaan" };
|
|
20
|
-
}
|
|
21
|
-
if (file.size > MAX_FILE_SIZE) {
|
|
22
|
-
return { valid: false, error: "Bestand is te groot (max 10MB)" };
|
|
23
|
-
}
|
|
24
|
-
return { valid: true };
|
|
25
|
-
}
|