@flowselections/floriday-voorraad 1.0.14 → 1.0.16
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/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +48 -7
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +2 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.js +24 -5
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +13 -0
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ProductLinkCard.js +159 -0
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.js +88 -7
- package/dist-lib/hooks/useTradeItemSpec.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemSpec.js +4 -1
- package/dist-lib/hooks/useVoorraadData.d.ts +5 -4
- package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
- package/dist-lib/hooks/useVoorraadData.js +40 -6
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +743 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +743 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +743 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +763 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/ensure-article-codes.d.ts +8 -0
- package/dist-lib/lib/ensure-article-codes.d.ts.map +1 -0
- package/dist-lib/lib/ensure-article-codes.js +78 -0
- package/dist-lib/lib/floricode-required-features.functions.d.ts +743 -0
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-client.d.ts +6 -0
- package/dist-lib/lib/floriday-client.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.d.ts +2972 -0
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-payload.d.ts +19 -5
- package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
- package/dist-lib/lib/floriday-payload.js +106 -33
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +32228 -0
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-warehouse.functions.js +98 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts +1616 -130
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.js +34 -6
- package/package.json +7 -1
|
@@ -73,6 +73,7 @@ export interface WizardData {
|
|
|
73
73
|
features: Record<string, string>;
|
|
74
74
|
customerOrganizationIds: string[];
|
|
75
75
|
images: PhotoInput[];
|
|
76
|
+
warehouseId: string;
|
|
76
77
|
packingConfigurations: PackingConfigurationInput[];
|
|
77
78
|
additionalPackaging: AdditionalPackagingInput[];
|
|
78
79
|
yearRound: boolean;
|
|
@@ -110,6 +111,9 @@ export declare const stepSchemas: {
|
|
|
110
111
|
url: z.ZodString;
|
|
111
112
|
}, z.core.$strip>>;
|
|
112
113
|
}, z.core.$strip>;
|
|
114
|
+
warehouse: z.ZodObject<{
|
|
115
|
+
warehouseId: z.ZodString;
|
|
116
|
+
}, z.core.$strip>;
|
|
113
117
|
beladingen: z.ZodObject<{
|
|
114
118
|
packingConfigurations: z.ZodArray<z.ZodObject<{
|
|
115
119
|
source: z.ZodDefault<z.ZodEnum<{
|
|
@@ -131,7 +135,7 @@ export declare const stepSchemas: {
|
|
|
131
135
|
weeks: z.ZodArray<z.ZodNumber>;
|
|
132
136
|
}, z.core.$strip>;
|
|
133
137
|
};
|
|
134
|
-
export type StepKey = "vbn" | "artikel" | "paspoort" | "eigenschappen" | "klanten" | "fotos" | "beladingen" | "verpakking" | "samenstelling" | "beschikbaarheid";
|
|
138
|
+
export type StepKey = "vbn" | "artikel" | "paspoort" | "eigenschappen" | "klanten" | "fotos" | "warehouse" | "beladingen" | "verpakking" | "samenstelling" | "beschikbaarheid";
|
|
135
139
|
export declare function validateStep(key: StepKey, data: WizardData): {
|
|
136
140
|
ok: true;
|
|
137
141
|
} | {
|
|
@@ -145,15 +149,16 @@ export interface AddPackingConfigPayload {
|
|
|
145
149
|
primary: boolean;
|
|
146
150
|
piecesPerPackage: number;
|
|
147
151
|
package: {
|
|
148
|
-
vbnPackageCode
|
|
152
|
+
vbnPackageCode?: number;
|
|
153
|
+
customPackageId?: string;
|
|
149
154
|
};
|
|
150
155
|
packagesPerLayer: number;
|
|
151
156
|
layersPerLoadCarrier: number;
|
|
152
157
|
loadCarrier: LoadCarrierPayload;
|
|
153
158
|
isHiddenForDirectSales: boolean;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
floricodeVrsPackagingId?: string;
|
|
160
|
+
allowedCustomerOrganizationIds?: string[];
|
|
161
|
+
photoUrl?: string;
|
|
157
162
|
}
|
|
158
163
|
export declare function buildPackingConfigPayload(p: PackingConfigurationInput, primary?: boolean): AddPackingConfigPayload;
|
|
159
164
|
export interface AddTradeItemPayload {
|
|
@@ -179,12 +184,21 @@ export interface AddTradeItemPayload {
|
|
|
179
184
|
type: PhotoTypeEnum;
|
|
180
185
|
sortIndex: number;
|
|
181
186
|
}[];
|
|
187
|
+
warehouseId: string;
|
|
182
188
|
packingConfigurations: AddPackingConfigPayload[];
|
|
183
189
|
botanicalNames?: string[];
|
|
184
190
|
countryOfOriginIsoCodes?: string[];
|
|
185
191
|
isHiddenInCatalog: boolean;
|
|
186
192
|
}
|
|
193
|
+
/** TradeItemUpdate = TradeItemBase minus tradeItemId + supplierArticleCode. */
|
|
194
|
+
export type UpdateTradeItemPayload = Omit<AddTradeItemPayload, "tradeItemId" | "supplierArticleCode">;
|
|
187
195
|
export declare function buildAddTradeItemPayload(d: WizardData): AddTradeItemPayload;
|
|
196
|
+
/**
|
|
197
|
+
* Bouwt de TradeItemUpdate-payload (PUT /trade-items/{id}) door
|
|
198
|
+
* `tradeItemId` en `supplierArticleCode` uit de create-payload te strippen.
|
|
199
|
+
* Alle andere validatie-regels blijven identiek.
|
|
200
|
+
*/
|
|
201
|
+
export declare function buildUpdateTradeItemPayload(d: WizardData): UpdateTradeItemPayload;
|
|
188
202
|
export declare const emptyWizardData: WizardData;
|
|
189
203
|
export declare function floridayCacheToWizardData(raw: any): WizardData;
|
|
190
204
|
//# sourceMappingURL=floriday-payload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,11 @@ export const stepSchemas = {
|
|
|
73
73
|
.array(z.object({ url: z.string().url() }))
|
|
74
74
|
.min(1, "Minstens één foto verplicht voor Floriday"),
|
|
75
75
|
}),
|
|
76
|
+
warehouse: z.object({
|
|
77
|
+
warehouseId: z
|
|
78
|
+
.string()
|
|
79
|
+
.uuid("Kies een warehouse (Floriday-warehouseId, uuid)"),
|
|
80
|
+
}),
|
|
76
81
|
beladingen: z.object({
|
|
77
82
|
packingConfigurations: z
|
|
78
83
|
.array(z
|
|
@@ -146,6 +151,12 @@ export function validateStep(key, data) {
|
|
|
146
151
|
? { ok: true }
|
|
147
152
|
: { ok: false, errors: r.error.issues.map((i) => i.message) };
|
|
148
153
|
}
|
|
154
|
+
case "warehouse": {
|
|
155
|
+
const r = stepSchemas.warehouse.safeParse(data);
|
|
156
|
+
return r.success
|
|
157
|
+
? { ok: true }
|
|
158
|
+
: { ok: false, errors: r.error.issues.map((i) => i.message) };
|
|
159
|
+
}
|
|
149
160
|
case "beladingen": {
|
|
150
161
|
const r = stepSchemas.beladingen.safeParse(data);
|
|
151
162
|
return r.success
|
|
@@ -184,29 +195,45 @@ function toIntOrUndefined(v) {
|
|
|
184
195
|
const n = typeof v === "number" ? v : parseInt(String(v).trim(), 10);
|
|
185
196
|
return Number.isFinite(n) ? n : undefined;
|
|
186
197
|
}
|
|
198
|
+
function isUuid(v) {
|
|
199
|
+
return typeof v === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);
|
|
200
|
+
}
|
|
201
|
+
/** Normaliseer whitespace conform Floriday-eis: trim + collapse dubbele whitespace. */
|
|
202
|
+
function normaliseWs(v) {
|
|
203
|
+
return v.trim().replace(/\s+/g, " ");
|
|
204
|
+
}
|
|
187
205
|
export function buildPackingConfigPayload(p, primary = false) {
|
|
188
206
|
const vbnPackageCode = toIntOrUndefined(p.packagingType);
|
|
189
|
-
|
|
190
|
-
|
|
207
|
+
// customPackageId kan via packagingMaterialId meekomen (wizard sla eerder
|
|
208
|
+
// supplier-material op in dat veld). Alleen accepteren als het een geldig UUID is.
|
|
209
|
+
const customPackageId = isUuid(p.packagingMaterialId) ? p.packagingMaterialId : undefined;
|
|
210
|
+
if (!vbnPackageCode && !customPackageId) {
|
|
211
|
+
throw new Error(`Fusttype ontbreekt voor beladingsconfiguratie "${p.id}" — kies een VBN-fust of een custom package.`);
|
|
191
212
|
}
|
|
213
|
+
const pkg = {};
|
|
214
|
+
if (vbnPackageCode)
|
|
215
|
+
pkg.vbnPackageCode = vbnPackageCode;
|
|
216
|
+
if (customPackageId)
|
|
217
|
+
pkg.customPackageId = customPackageId;
|
|
192
218
|
const payload = {
|
|
193
219
|
primary: primary || Boolean(p.isPrimary),
|
|
194
220
|
piecesPerPackage: Math.max(1, Math.min(9999, Number(p.unitsPerPackage) || 1)),
|
|
195
|
-
package:
|
|
221
|
+
package: pkg,
|
|
196
222
|
packagesPerLayer: Math.max(1, Math.min(9999, Number(p.packagesPerLayer) || 1)),
|
|
197
223
|
layersPerLoadCarrier: Math.max(1, Math.min(9999, Number(p.layersPerLoadCarrier) || 1)),
|
|
198
224
|
loadCarrier: normaliseLoadCarrier(p.loadCarrier),
|
|
199
225
|
isHiddenForDirectSales: false,
|
|
200
226
|
};
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
227
|
+
// Alleen geldige VRS-packaging UUIDs meesturen; supplierId-string uit de
|
|
228
|
+
// hardcoded lijst is GEEN uuid en hoort niet in de Floriday-payload.
|
|
229
|
+
if (p.source === "SUPPLIER" && isUuid(p.packagingSupplierId)) {
|
|
230
|
+
payload.floricodeVrsPackagingId = p.packagingSupplierId;
|
|
206
231
|
}
|
|
207
232
|
if (p.isCustomerSpecific && p.customerOrganizationIds.length > 0) {
|
|
208
|
-
payload.
|
|
233
|
+
payload.allowedCustomerOrganizationIds = p.customerOrganizationIds;
|
|
209
234
|
}
|
|
235
|
+
if (p.photoUrl)
|
|
236
|
+
payload.photoUrl = p.photoUrl;
|
|
210
237
|
return payload;
|
|
211
238
|
}
|
|
212
239
|
function weeksToSeasonalPeriods(weeks) {
|
|
@@ -240,40 +267,76 @@ export function buildAddTradeItemPayload(d) {
|
|
|
240
267
|
if (!vbnProductCode) {
|
|
241
268
|
throw new Error("vbnProductCode moet een geheel getal zijn");
|
|
242
269
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
270
|
+
// Characteristics: spec vereist vbnCode en vbnValueCode lengte 1..3.
|
|
271
|
+
// Stille truncate maskeert data-corruptie → strict valideren.
|
|
272
|
+
const characteristics = [];
|
|
273
|
+
for (const [code, value] of Object.entries(d.features)) {
|
|
274
|
+
const c = String(code ?? "").trim();
|
|
275
|
+
const v = String(value ?? "").trim();
|
|
276
|
+
if (!c || !v)
|
|
277
|
+
continue;
|
|
278
|
+
if (c.length > 3) {
|
|
279
|
+
throw new Error(`Karakteristiek "${c}": vbnCode mag max 3 tekens zijn`);
|
|
280
|
+
}
|
|
281
|
+
if (v.length > 3) {
|
|
282
|
+
throw new Error(`Karakteristiek "${c}": waarde "${v}" mag max 3 tekens zijn`);
|
|
283
|
+
}
|
|
284
|
+
characteristics.push({ vbnCode: c, vbnValueCode: v });
|
|
285
|
+
}
|
|
249
286
|
const botanicalNames = (d.botanicalName || "")
|
|
250
287
|
.split(/[;,\n]/).map((s) => s.trim()).filter(Boolean);
|
|
251
|
-
const
|
|
288
|
+
const rawCountries = (d.countryOfOrigin || "")
|
|
252
289
|
.split(/[,;\s]+/).map((s) => s.trim().toUpperCase()).filter(Boolean);
|
|
290
|
+
const invalidCountries = rawCountries.filter((c) => !/^[A-Z]{2}$/.test(c));
|
|
291
|
+
if (invalidCountries.length > 0) {
|
|
292
|
+
throw new Error(`Ongeldige landcode(s): ${invalidCountries.join(", ")} — gebruik ISO 3166-1 alpha-2 (2 letters).`);
|
|
293
|
+
}
|
|
294
|
+
const countryOfOriginIsoCodes = rawCountries;
|
|
253
295
|
const photos = d.images.map((img, i) => ({
|
|
254
296
|
primary: i === 0,
|
|
255
297
|
url: img.url,
|
|
256
|
-
type: "WEBSHOPFRIENDLY",
|
|
298
|
+
type: img.type ?? "WEBSHOPFRIENDLY",
|
|
257
299
|
sortIndex: i,
|
|
258
300
|
}));
|
|
259
301
|
const packingConfigurations = d.packingConfigurations.map((p, i) => buildPackingConfigPayload(p, i === 0));
|
|
260
302
|
const isCustomerSpecific = d.articleType === "CUSTOMER_SPECIFIC";
|
|
303
|
+
const supplierArticleCode = normaliseWs(d.articleCode).slice(0, 13);
|
|
304
|
+
const tradeItemNameNl = normaliseWs(d.name).slice(0, 120);
|
|
305
|
+
if (!supplierArticleCode)
|
|
306
|
+
throw new Error("supplierArticleCode is verplicht");
|
|
307
|
+
if (!tradeItemNameNl)
|
|
308
|
+
throw new Error("tradeItemName.nl is verplicht");
|
|
309
|
+
const warehouseId = (d.warehouseId ?? "").trim();
|
|
310
|
+
if (!isUuid(warehouseId)) {
|
|
311
|
+
throw new Error("warehouseId is verplicht — kies een warehouse.");
|
|
312
|
+
}
|
|
261
313
|
return {
|
|
262
314
|
tradeItemId: crypto.randomUUID(),
|
|
263
|
-
supplierArticleCode
|
|
315
|
+
supplierArticleCode,
|
|
264
316
|
articleGtin: d.gtin && d.gtin.trim().length === 13 ? d.gtin.trim() : undefined,
|
|
265
317
|
vbnProductCode,
|
|
266
|
-
tradeItemName: { nl:
|
|
318
|
+
tradeItemName: { nl: tradeItemNameNl },
|
|
267
319
|
characteristics,
|
|
268
320
|
customerOrganizationIds: isCustomerSpecific ? d.customerOrganizationIds : [],
|
|
269
321
|
seasonalPeriods: d.yearRound ? [] : weeksToSeasonalPeriods(d.weeks),
|
|
270
322
|
photos,
|
|
323
|
+
warehouseId,
|
|
271
324
|
packingConfigurations,
|
|
272
325
|
botanicalNames: botanicalNames.length ? botanicalNames : undefined,
|
|
273
326
|
countryOfOriginIsoCodes: countryOfOriginIsoCodes.length ? countryOfOriginIsoCodes : undefined,
|
|
274
327
|
isHiddenInCatalog: isCustomerSpecific ? true : !d.visibleInExplorer,
|
|
275
328
|
};
|
|
276
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* Bouwt de TradeItemUpdate-payload (PUT /trade-items/{id}) door
|
|
332
|
+
* `tradeItemId` en `supplierArticleCode` uit de create-payload te strippen.
|
|
333
|
+
* Alle andere validatie-regels blijven identiek.
|
|
334
|
+
*/
|
|
335
|
+
export function buildUpdateTradeItemPayload(d) {
|
|
336
|
+
const full = buildAddTradeItemPayload(d);
|
|
337
|
+
const { tradeItemId: _id, supplierArticleCode: _code, ...rest } = full;
|
|
338
|
+
return rest;
|
|
339
|
+
}
|
|
277
340
|
export const emptyWizardData = {
|
|
278
341
|
productGroup: null,
|
|
279
342
|
vbnCode: "",
|
|
@@ -292,6 +355,7 @@ export const emptyWizardData = {
|
|
|
292
355
|
features: {},
|
|
293
356
|
customerOrganizationIds: [],
|
|
294
357
|
images: [],
|
|
358
|
+
warehouseId: "",
|
|
295
359
|
packingConfigurations: [],
|
|
296
360
|
additionalPackaging: [],
|
|
297
361
|
yearRound: true,
|
|
@@ -369,20 +433,28 @@ export function floridayCacheToWizardData(raw) {
|
|
|
369
433
|
const packings = Array.isArray(raw.packingConfigurations)
|
|
370
434
|
? raw.packingConfigurations
|
|
371
435
|
: [];
|
|
372
|
-
const packingConfigurations = packings.map((p, i) =>
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
436
|
+
const packingConfigurations = packings.map((p, i) => {
|
|
437
|
+
const vrsId = p?.floricodeVrsPackagingId ?? p?.packagingSupplierId ?? undefined;
|
|
438
|
+
const allowed = Array.isArray(p?.allowedCustomerOrganizationIds)
|
|
439
|
+
? p.allowedCustomerOrganizationIds
|
|
440
|
+
: Array.isArray(p?.customerOrganizationIds)
|
|
441
|
+
? p.customerOrganizationIds
|
|
442
|
+
: [];
|
|
443
|
+
return {
|
|
444
|
+
id: `existing-${i}`,
|
|
445
|
+
source: vrsId ? "SUPPLIER" : "VBN",
|
|
446
|
+
packagingType: String(p?.package?.vbnPackageCode ?? ""),
|
|
447
|
+
loadCarrier: String(p?.loadCarrier ?? "NONE"),
|
|
448
|
+
packagingSupplierId: vrsId ?? undefined,
|
|
449
|
+
packagingMaterialId: p?.package?.customPackageId ?? p?.packagingSupplierMaterialId ?? undefined,
|
|
450
|
+
unitsPerPackage: Number(p?.piecesPerPackage ?? 1),
|
|
451
|
+
packagesPerLayer: Number(p?.packagesPerLayer ?? 1),
|
|
452
|
+
layersPerLoadCarrier: Number(p?.layersPerLoadCarrier ?? 1),
|
|
453
|
+
isCustomerSpecific: allowed.length > 0,
|
|
454
|
+
customerOrganizationIds: allowed,
|
|
455
|
+
isPrimary: Boolean(p?.primary) || i === 0,
|
|
456
|
+
};
|
|
457
|
+
});
|
|
386
458
|
const customerOrgIds = Array.isArray(raw.customerOrganizationIds)
|
|
387
459
|
? raw.customerOrganizationIds
|
|
388
460
|
: [];
|
|
@@ -414,6 +486,7 @@ export function floridayCacheToWizardData(raw) {
|
|
|
414
486
|
features,
|
|
415
487
|
customerOrganizationIds: customerOrgIds,
|
|
416
488
|
images,
|
|
489
|
+
warehouseId: String(raw.warehouseId ?? raw.warehouse?.warehouseId ?? ""),
|
|
417
490
|
packingConfigurations,
|
|
418
491
|
additionalPackaging: [],
|
|
419
492
|
yearRound: weeks.length === 0,
|