@flowselections/floriday-voorraad 1.0.16 → 1.0.18
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 +9 -0
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -0
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.js +51 -0
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +372 -30
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.js +78 -4
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +8 -0
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/OrderHistoryCard.js +133 -0
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +7 -0
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/PriceStatusBadge.js +67 -0
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +2 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.js +5 -4
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.js +6 -1
- package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
- package/dist-lib/hooks/useLocalTradeItems.js +4 -0
- package/dist-lib/hooks/useTradeItemStock.d.ts +14 -1
- package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemStock.js +76 -17
- package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +21 -0
- package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -0
- package/dist-lib/hooks/useTradeItemSupplyLine.js +49 -0
- package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
- package/dist-lib/hooks/useVoorraadData.js +35 -3
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +490 -3
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +490 -3
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +490 -3
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +498 -3
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.d.ts +497 -4
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.js +20 -2
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +11281 -0
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-customer-offer.functions.js +175 -0
- package/dist-lib/lib/floriday-gateway.functions.d.ts +13240 -15
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.js +150 -0
- package/dist-lib/lib/floriday-gateway.server.d.ts +22 -0
- package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.server.js +3 -0
- package/dist-lib/lib/floriday-payload.d.ts +60 -6
- package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
- package/dist-lib/lib/floriday-payload.js +104 -7
- package/dist-lib/lib/floriday-supply-line.d.ts +53 -0
- package/dist-lib/lib/floriday-supply-line.d.ts.map +1 -0
- package/dist-lib/lib/floriday-supply-line.js +109 -0
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +1509 -48
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +983 -9
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.js +6 -1
- package/dist-lib/lib/vrs-catalog.d.ts +27 -0
- package/dist-lib/lib/vrs-catalog.d.ts.map +1 -0
- package/dist-lib/lib/vrs-catalog.js +98 -0
- package/package.json +3 -2
- package/public/flowselections-assets/Voorraad/floriday-logo.png +0 -0
|
@@ -64,5 +64,155 @@ export const gatewayWriteFn = createServerFn({ method: "POST" })
|
|
|
64
64
|
const environment = await resolveFloridayEnvironment(context.supabase);
|
|
65
65
|
return (await gatewayWrite({ ...data, environment }));
|
|
66
66
|
}));
|
|
67
|
+
function isoWeekParts(input) {
|
|
68
|
+
const parsed = input ? new Date(input) : new Date();
|
|
69
|
+
const source = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
|
|
70
|
+
const date = new Date(Date.UTC(source.getUTCFullYear(), source.getUTCMonth(), source.getUTCDate()));
|
|
71
|
+
const day = date.getUTCDay() || 7;
|
|
72
|
+
date.setUTCDate(date.getUTCDate() + 4 - day);
|
|
73
|
+
const year = date.getUTCFullYear();
|
|
74
|
+
const yearStart = new Date(Date.UTC(year, 0, 1));
|
|
75
|
+
const week = Math.ceil(((date.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
76
|
+
return { year, week };
|
|
77
|
+
}
|
|
78
|
+
function price(currency, value) {
|
|
79
|
+
return { currency: currency ?? "EUR", value: Number(value) };
|
|
80
|
+
}
|
|
81
|
+
export const gatewaySupplyLineFn = createServerFn({ method: "POST" })
|
|
82
|
+
.middleware([normalizeErrors, requireSupabaseAuth])
|
|
83
|
+
.inputValidator((d) => d)
|
|
84
|
+
.handler(async ({ data, context }) => safe("gateway.supplyLine", async () => {
|
|
85
|
+
const { resolveFloridayEnvironment } = await import("./floriday-env.server");
|
|
86
|
+
const { gatewayWrite } = await import("./floriday-gateway.server");
|
|
87
|
+
const environment = await resolveFloridayEnvironment(context.supabase);
|
|
88
|
+
const { year, week } = isoWeekParts(data.periodStart);
|
|
89
|
+
const quantity = Math.max(0, Number(data.availableQuantity) || 0);
|
|
90
|
+
const supplyType = data.supplyType ?? "CATALOG_PRICE";
|
|
91
|
+
if (supplyType === "BATCH_PRICE") {
|
|
92
|
+
throw new Error("BATCH_PRICE wordt niet via de catalogus-flow ondersteund; gebruik Catalog / Weekly Supply.");
|
|
93
|
+
}
|
|
94
|
+
if (supplyType === "WEEKLY_SUPPLY_LINE") {
|
|
95
|
+
const allowed = data.customerOrganizationIds ?? [];
|
|
96
|
+
if (allowed.length === 0) {
|
|
97
|
+
throw new Error("Weekly supply-lines vereisen minimaal één klantorganisatie.");
|
|
98
|
+
}
|
|
99
|
+
const supplyLineId = data.supplyLineId ?? crypto.randomUUID();
|
|
100
|
+
const body = data.supplyLineId
|
|
101
|
+
? {
|
|
102
|
+
pricePerPiece: price(data.currency, data.pricePerPiece),
|
|
103
|
+
numberOfPieces: quantity,
|
|
104
|
+
allowedCustomerOrganizationIds: allowed,
|
|
105
|
+
salesUnit: data.salesUnit ?? "PIECE",
|
|
106
|
+
isPromo: true,
|
|
107
|
+
}
|
|
108
|
+
: {
|
|
109
|
+
supplyLineId,
|
|
110
|
+
tradeItemId: data.tradeItemId,
|
|
111
|
+
pricePerPiece: price(data.currency, data.pricePerPiece),
|
|
112
|
+
numberOfPieces: Math.max(1, quantity),
|
|
113
|
+
tradePeriod: { year, week },
|
|
114
|
+
allowedCustomerOrganizationIds: allowed,
|
|
115
|
+
salesUnit: data.salesUnit ?? "PIECE",
|
|
116
|
+
isPromo: true,
|
|
117
|
+
};
|
|
118
|
+
const writeWeekly = (id, method, writeBody) => gatewayWrite({
|
|
119
|
+
environment,
|
|
120
|
+
module: "inventory",
|
|
121
|
+
action: method === "POST" ? "create-weekly-supply-line" : "update-weekly-supply-line",
|
|
122
|
+
method,
|
|
123
|
+
path: method === "POST"
|
|
124
|
+
? "/suppliers-api-2026v1/weekly-supply-lines"
|
|
125
|
+
: `/suppliers-api-2026v1/weekly-supply-lines/${id}`,
|
|
126
|
+
referenceId: data.tradeItemId,
|
|
127
|
+
idempotencyKey: `inventory:weekly-supply-line:${data.tradeItemId}:${year}:${week}:${id}:${data.pricePerPiece}:${quantity}`,
|
|
128
|
+
body: writeBody,
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
const res = await writeWeekly(supplyLineId, data.supplyLineId ? "PUT" : "POST", body);
|
|
132
|
+
return {
|
|
133
|
+
ok: true,
|
|
134
|
+
supplyLineId,
|
|
135
|
+
endpointFamily: "WEEKLY_SUPPLY_LINE",
|
|
136
|
+
year,
|
|
137
|
+
week,
|
|
138
|
+
environment,
|
|
139
|
+
status: res.status,
|
|
140
|
+
steps: [{ name: data.supplyLineId ? "EditWeeklySupplyLine" : "AddWeeklySupplyLine", ok: true }],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
const msg = String(e?.message ?? e);
|
|
145
|
+
if (!data.supplyLineId || !/(?:403|Forbidden)/i.test(msg))
|
|
146
|
+
throw e;
|
|
147
|
+
await context.supabase
|
|
148
|
+
.from("trade_item_supply_lines")
|
|
149
|
+
.delete()
|
|
150
|
+
.eq("user_id", context.userId)
|
|
151
|
+
.eq("trade_item_id", data.tradeItemId)
|
|
152
|
+
.then(() => undefined, () => undefined);
|
|
153
|
+
const freshId = crypto.randomUUID();
|
|
154
|
+
const retryBody = {
|
|
155
|
+
supplyLineId: freshId,
|
|
156
|
+
tradeItemId: data.tradeItemId,
|
|
157
|
+
pricePerPiece: price(data.currency, data.pricePerPiece),
|
|
158
|
+
numberOfPieces: Math.max(1, quantity),
|
|
159
|
+
tradePeriod: { year, week },
|
|
160
|
+
allowedCustomerOrganizationIds: allowed,
|
|
161
|
+
salesUnit: data.salesUnit ?? "PIECE",
|
|
162
|
+
isPromo: true,
|
|
163
|
+
};
|
|
164
|
+
const res = await writeWeekly(freshId, "POST", retryBody);
|
|
165
|
+
return {
|
|
166
|
+
ok: true,
|
|
167
|
+
supplyLineId: freshId,
|
|
168
|
+
endpointFamily: "WEEKLY_SUPPLY_LINE",
|
|
169
|
+
year,
|
|
170
|
+
week,
|
|
171
|
+
environment,
|
|
172
|
+
status: res.status,
|
|
173
|
+
steps: [
|
|
174
|
+
{ name: "EditWeeklySupplyLine", ok: false, error: "Stale supplyLineId; opnieuw aangemaakt" },
|
|
175
|
+
{ name: "AddWeeklySupplyLine", ok: true },
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const baseSupply = await gatewayWrite({
|
|
181
|
+
environment,
|
|
182
|
+
module: "inventory",
|
|
183
|
+
action: "edit-weekly-base-supply",
|
|
184
|
+
method: "PUT",
|
|
185
|
+
path: `/suppliers-api-2026v1/trade-items/${data.tradeItemId}/base-supply/${year}/${week}`,
|
|
186
|
+
referenceId: data.tradeItemId,
|
|
187
|
+
idempotencyKey: `inventory:weekly-base-supply:${data.tradeItemId}:${year}:${week}:${data.pricePerPiece}:${quantity}`,
|
|
188
|
+
body: {
|
|
189
|
+
basePricePerPiece: price(data.currency, data.pricePerPiece),
|
|
190
|
+
numberOfPieces: quantity,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
const availability = await gatewayWrite({
|
|
194
|
+
environment,
|
|
195
|
+
module: "inventory",
|
|
196
|
+
action: "edit-continuous-stock",
|
|
197
|
+
method: "PUT",
|
|
198
|
+
path: `/suppliers-api-2026v1/trade-items/${data.tradeItemId}/continuous-stock`,
|
|
199
|
+
referenceId: data.tradeItemId,
|
|
200
|
+
idempotencyKey: `inventory:continuous-stock:${data.tradeItemId}:${quantity}:${quantity > 0}`,
|
|
201
|
+
body: { available: quantity > 0 },
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
ok: true,
|
|
205
|
+
supplyLineId: undefined,
|
|
206
|
+
endpointFamily: "WEEKLY_BASE",
|
|
207
|
+
year,
|
|
208
|
+
week,
|
|
209
|
+
environment,
|
|
210
|
+
status: availability.status ?? baseSupply.status,
|
|
211
|
+
steps: [
|
|
212
|
+
{ name: "EditWeeklyBaseSupply", ok: true },
|
|
213
|
+
{ name: "EditContinuousStock", ok: true },
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
}));
|
|
67
217
|
// gatewayMediaFn (base64 → /api/public/gateway/media) is verwijderd.
|
|
68
218
|
// Foto-upload loopt nu via /api/trade-item-photo → gatewayMediaUpload (§14.11).
|
|
@@ -65,6 +65,28 @@ export interface GatewayWriteResult {
|
|
|
65
65
|
status: number;
|
|
66
66
|
}
|
|
67
67
|
export declare function gatewayWrite(input: GatewayWriteInput): Promise<GatewayWriteResult>;
|
|
68
|
+
export interface GatewaySupplyLineInput {
|
|
69
|
+
environment: "staging" | "live";
|
|
70
|
+
tradeItemId: string;
|
|
71
|
+
pricePerPiece: number;
|
|
72
|
+
packingConfigurationId: string;
|
|
73
|
+
availableQuantity: number;
|
|
74
|
+
supplyType?: "CATALOG_PRICE" | "BATCH_PRICE";
|
|
75
|
+
currency?: string;
|
|
76
|
+
salesUnit?: string;
|
|
77
|
+
periodStart?: string;
|
|
78
|
+
periodEnd?: string;
|
|
79
|
+
supplyLineId?: string;
|
|
80
|
+
customerOrganizationIds?: string[];
|
|
81
|
+
}
|
|
82
|
+
export interface GatewaySupplyLineResult {
|
|
83
|
+
ok: boolean;
|
|
84
|
+
supplyLineId?: string;
|
|
85
|
+
environment?: string;
|
|
86
|
+
status?: number;
|
|
87
|
+
error?: string;
|
|
88
|
+
}
|
|
89
|
+
export declare function gatewaySupplyLine(input: GatewaySupplyLineInput): Promise<GatewaySupplyLineResult>;
|
|
68
90
|
export interface GatewayMediaUploadInput {
|
|
69
91
|
caller?: string;
|
|
70
92
|
environment: "staging" | "live";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-gateway.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"floriday-gateway.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -133,6 +133,9 @@ export function gatewayCachedList(input) {
|
|
|
133
133
|
export function gatewayWrite(input) {
|
|
134
134
|
return gatewayPost(WRITE_PATH, input);
|
|
135
135
|
}
|
|
136
|
+
export function gatewaySupplyLine(input) {
|
|
137
|
+
return gatewayPost("/api/public/gateway/supply-line", input);
|
|
138
|
+
}
|
|
136
139
|
function toHex(buf) {
|
|
137
140
|
const a = new Uint8Array(buf);
|
|
138
141
|
let s = "";
|
|
@@ -39,11 +39,25 @@ export declare const PACKAGING_SUPPLIERS: {
|
|
|
39
39
|
id: string;
|
|
40
40
|
name: string;
|
|
41
41
|
}[];
|
|
42
|
+
/**
|
|
43
|
+
* Aanvullende verpakkingsmateriaal-koppeling zoals Floriday deze in de
|
|
44
|
+
* TradeItem-wizard aanbiedt: een verwijzing naar de VRS-catalogus van een
|
|
45
|
+
* aangesloten verpakkingsleverancier (hoes, steker, label, potfolie, …).
|
|
46
|
+
*
|
|
47
|
+
* Alleen `packagingMaterialId` gaat mee in de TradeItem-payload naar
|
|
48
|
+
* Floriday (veld `additionalPackagingMaterialIds`). De overige velden zijn
|
|
49
|
+
* lokale UI-cache zodat we in de wizard leverancier + type + materiaal
|
|
50
|
+
* kunnen tonen zonder extra fetches.
|
|
51
|
+
*/
|
|
42
52
|
export interface AdditionalPackagingInput {
|
|
43
53
|
id: string;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
packagingSupplierId: string;
|
|
55
|
+
packagingSupplierName: string;
|
|
56
|
+
materialTypeCode: string;
|
|
57
|
+
materialTypeName: string;
|
|
58
|
+
/** VRS-materiaal referentie. Wordt alleen naar Floriday gestuurd als het een echte uuid is. */
|
|
59
|
+
packagingMaterialId: string;
|
|
60
|
+
packagingMaterialName: string;
|
|
47
61
|
}
|
|
48
62
|
export interface PhotoInput {
|
|
49
63
|
url: string;
|
|
@@ -78,6 +92,15 @@ export interface WizardData {
|
|
|
78
92
|
additionalPackaging: AdditionalPackagingInput[];
|
|
79
93
|
yearRound: boolean;
|
|
80
94
|
weeks: number[];
|
|
95
|
+
offerForSale: boolean;
|
|
96
|
+
/** Verkoopprijs per stuk (EUR). */
|
|
97
|
+
salePricePerPiece: number;
|
|
98
|
+
/** Voorraad in stuks die direct beschikbaar wordt gesteld. */
|
|
99
|
+
saleStockPieces: number;
|
|
100
|
+
/** ISO date (YYYY-MM-DD); default vandaag. */
|
|
101
|
+
offerStartDate: string;
|
|
102
|
+
/** Lokaal ERP-product waar dit concept uit is ontstaan; geen Floriday-koppeling. */
|
|
103
|
+
linkedProductId?: string;
|
|
81
104
|
}
|
|
82
105
|
export declare function isValidGtin13(gtin: string): boolean;
|
|
83
106
|
export declare const stepSchemas: {
|
|
@@ -134,14 +157,35 @@ export declare const stepSchemas: {
|
|
|
134
157
|
yearRound: z.ZodBoolean;
|
|
135
158
|
weeks: z.ZodArray<z.ZodNumber>;
|
|
136
159
|
}, z.core.$strip>;
|
|
160
|
+
aanbieden: z.ZodObject<{
|
|
161
|
+
offerForSale: z.ZodBoolean;
|
|
162
|
+
salePricePerPiece: z.ZodNumber;
|
|
163
|
+
saleStockPieces: z.ZodNumber;
|
|
164
|
+
offerStartDate: z.ZodString;
|
|
165
|
+
}, z.core.$strip>;
|
|
137
166
|
};
|
|
138
|
-
export type StepKey = "vbn" | "artikel" | "paspoort" | "eigenschappen" | "klanten" | "fotos" | "warehouse" | "beladingen" | "verpakking" | "samenstelling" | "beschikbaarheid";
|
|
167
|
+
export type StepKey = "vbn" | "artikel" | "paspoort" | "eigenschappen" | "klanten" | "fotos" | "warehouse" | "beladingen" | "verpakking" | "samenstelling" | "beschikbaarheid" | "aanbieden";
|
|
139
168
|
export declare function validateStep(key: StepKey, data: WizardData): {
|
|
140
169
|
ok: true;
|
|
141
170
|
} | {
|
|
142
171
|
ok: false;
|
|
143
172
|
errors: string[];
|
|
144
173
|
};
|
|
174
|
+
/**
|
|
175
|
+
* Bouwt de PackingConfigurationBase voor `AddCustomerOfferLine` op basis van
|
|
176
|
+
* de primaire packing uit de wizard. Gooit een leesbare fout wanneer de
|
|
177
|
+
* primaire packing ontbreekt of geen geldige VBN-fust heeft — een
|
|
178
|
+
* `POST /customer-offers` zonder dit veld levert een 400 op.
|
|
179
|
+
*/
|
|
180
|
+
export declare function buildPrimaryPackingBase(d: WizardData): {
|
|
181
|
+
piecesPerPackage: number;
|
|
182
|
+
vbnPackageCode: number;
|
|
183
|
+
customPackageId?: string;
|
|
184
|
+
packagesPerLayer: number;
|
|
185
|
+
layersPerLoadCarrier: number;
|
|
186
|
+
loadCarrier: LoadCarrierPayload;
|
|
187
|
+
photoUrl?: string;
|
|
188
|
+
};
|
|
145
189
|
export type LoadCarrierEnum = "NONE" | "AUCTION_TROLLEY" | "DANISH_TROLLEY" | "EURO_TROLLEY" | "PALLET" | "EURO_PALLET";
|
|
146
190
|
export type LoadCarrierPayload = LoadCarrierEnum | number | string;
|
|
147
191
|
export type PhotoTypeEnum = "UNKNOWN" | "PIECE" | "TRAY" | "DETAIL" | "RULER" | "WEBSHOPFRIENDLY" | "SCENE" | "SEASON" | "STEM" | "BUNCH" | "CONTAINER" | "CLOCK";
|
|
@@ -184,14 +228,24 @@ export interface AddTradeItemPayload {
|
|
|
184
228
|
type: PhotoTypeEnum;
|
|
185
229
|
sortIndex: number;
|
|
186
230
|
}[];
|
|
231
|
+
/**
|
|
232
|
+
* Lokale keuze voor de voorraadlocatie. Floriday TradeItemBase kent geen
|
|
233
|
+
* warehouseId-veld; deze waarde wordt alleen in onze cache/draft bewaard en
|
|
234
|
+
* later gebruikt voor continuous-stock en customer-offers.
|
|
235
|
+
*/
|
|
187
236
|
warehouseId: string;
|
|
188
237
|
packingConfigurations: AddPackingConfigPayload[];
|
|
189
238
|
botanicalNames?: string[];
|
|
190
239
|
countryOfOriginIsoCodes?: string[];
|
|
240
|
+
/** Floriday VRS-materiaal UUIDs — koppeling naar aanvullende verpakking. */
|
|
241
|
+
additionalPackagingMaterialIds?: string[];
|
|
191
242
|
isHiddenInCatalog: boolean;
|
|
192
243
|
}
|
|
193
|
-
/**
|
|
194
|
-
|
|
244
|
+
/**
|
|
245
|
+
* TradeItemUpdate = TradeItemBase minus tradeItemId + supplierArticleCode.
|
|
246
|
+
* warehouseId is bewust géén onderdeel van de Floriday TradeItemUpdate-body.
|
|
247
|
+
*/
|
|
248
|
+
export type UpdateTradeItemPayload = Omit<AddTradeItemPayload, "tradeItemId" | "supplierArticleCode" | "warehouseId">;
|
|
195
249
|
export declare function buildAddTradeItemPayload(d: WizardData): AddTradeItemPayload;
|
|
196
250
|
/**
|
|
197
251
|
* Bouwt de TradeItemUpdate-payload (PUT /trade-items/{id}) door
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAE/C,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,MAAM,EAAE,aAAa,CAAC;IACtB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAgB7D,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -114,6 +114,25 @@ export const stepSchemas = {
|
|
|
114
114
|
message: "Kies jaarrond of selecteer minstens één week",
|
|
115
115
|
path: ["weeks"],
|
|
116
116
|
}),
|
|
117
|
+
aanbieden: z
|
|
118
|
+
.object({
|
|
119
|
+
offerForSale: z.boolean(),
|
|
120
|
+
salePricePerPiece: z
|
|
121
|
+
.number()
|
|
122
|
+
.refine((n) => Number.isFinite(n), { message: "Prijs moet een getal zijn" }),
|
|
123
|
+
saleStockPieces: z
|
|
124
|
+
.number()
|
|
125
|
+
.int("Voorraad moet een geheel getal zijn")
|
|
126
|
+
.min(0, "Voorraad kan niet negatief zijn"),
|
|
127
|
+
offerStartDate: z
|
|
128
|
+
.string()
|
|
129
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Ongeldige startdatum"),
|
|
130
|
+
})
|
|
131
|
+
.refine((v) => !v.offerForSale || v.salePricePerPiece > 0, {
|
|
132
|
+
message: "Vul een verkoopprijs > 0 in",
|
|
133
|
+
path: ["salePricePerPiece"],
|
|
134
|
+
})
|
|
135
|
+
.refine((v) => !v.offerForSale || Math.round(v.salePricePerPiece * 1e5) === v.salePricePerPiece * 1e5, { message: "Prijs mag maximaal 5 decimalen hebben", path: ["salePricePerPiece"] }),
|
|
117
136
|
};
|
|
118
137
|
export function validateStep(key, data) {
|
|
119
138
|
switch (key) {
|
|
@@ -169,25 +188,61 @@ export function validateStep(key, data) {
|
|
|
169
188
|
? { ok: true }
|
|
170
189
|
: { ok: false, errors: r.error.issues.map((i) => i.message) };
|
|
171
190
|
}
|
|
191
|
+
case "aanbieden": {
|
|
192
|
+
const r = stepSchemas.aanbieden.safeParse(data);
|
|
193
|
+
return r.success
|
|
194
|
+
? { ok: true }
|
|
195
|
+
: { ok: false, errors: r.error.issues.map((i) => i.message) };
|
|
196
|
+
}
|
|
172
197
|
case "eigenschappen":
|
|
173
198
|
case "verpakking":
|
|
174
199
|
case "samenstelling":
|
|
175
200
|
return { ok: true };
|
|
176
201
|
}
|
|
177
202
|
}
|
|
203
|
+
// -------- CustomerOffer helper (direct-sale via /customer-offers) ---------
|
|
204
|
+
/**
|
|
205
|
+
* Bouwt de PackingConfigurationBase voor `AddCustomerOfferLine` op basis van
|
|
206
|
+
* de primaire packing uit de wizard. Gooit een leesbare fout wanneer de
|
|
207
|
+
* primaire packing ontbreekt of geen geldige VBN-fust heeft — een
|
|
208
|
+
* `POST /customer-offers` zonder dit veld levert een 400 op.
|
|
209
|
+
*/
|
|
210
|
+
export function buildPrimaryPackingBase(d) {
|
|
211
|
+
const primary = d.packingConfigurations.find((p) => p.isPrimary) ??
|
|
212
|
+
d.packingConfigurations[0];
|
|
213
|
+
if (!primary) {
|
|
214
|
+
throw new Error("Primaire beladingsconfiguratie ontbreekt — voeg minstens één belading toe.");
|
|
215
|
+
}
|
|
216
|
+
const vbnPackageCode = toIntOrUndefined(primary.packagingType);
|
|
217
|
+
const customPackageId = isUuid(primary.packagingMaterialId)
|
|
218
|
+
? primary.packagingMaterialId
|
|
219
|
+
: undefined;
|
|
220
|
+
if (!vbnPackageCode && !customPackageId) {
|
|
221
|
+
throw new Error("Primaire belading heeft geen geldige VBN-fust of custom package — kan aanbod niet aanmaken.");
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
piecesPerPackage: Math.max(1, Math.min(9999, Number(primary.unitsPerPackage) || 1)),
|
|
225
|
+
vbnPackageCode: vbnPackageCode ?? 1,
|
|
226
|
+
customPackageId,
|
|
227
|
+
packagesPerLayer: Math.max(1, Math.min(9999, Number(primary.packagesPerLayer) || 1)),
|
|
228
|
+
layersPerLoadCarrier: Math.max(1, Math.min(9999, Number(primary.layersPerLoadCarrier) || 1)),
|
|
229
|
+
loadCarrier: normaliseLoadCarrier(primary.loadCarrier),
|
|
230
|
+
photoUrl: primary.photoUrl,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
178
233
|
const LOAD_CARRIER_VALUES = [
|
|
179
234
|
"NONE", "AUCTION_TROLLEY", "DANISH_TROLLEY",
|
|
180
235
|
"EURO_TROLLEY", "PALLET", "EURO_PALLET",
|
|
181
236
|
];
|
|
182
237
|
function normaliseLoadCarrier(input) {
|
|
183
238
|
const raw = (input ?? "").trim();
|
|
184
|
-
if (
|
|
185
|
-
return
|
|
239
|
+
if (!raw)
|
|
240
|
+
return "NONE";
|
|
186
241
|
const v = raw.toUpperCase().replace(/[\s-]+/g, "_");
|
|
187
242
|
if (LOAD_CARRIER_VALUES.includes(v)) {
|
|
188
243
|
return v;
|
|
189
244
|
}
|
|
190
|
-
|
|
245
|
+
throw new Error(`Ladingdrager "${raw}" is geen geldige Floriday-waarde. Kies opnieuw in de beladingdialoog (Stapelwagen, Deense container, Euro-rolcontainer, Pallet, Euro-pallet of Geen ladingdrager).`);
|
|
191
246
|
}
|
|
192
247
|
function toIntOrUndefined(v) {
|
|
193
248
|
if (v === undefined || v === null || v === "")
|
|
@@ -285,13 +340,35 @@ export function buildAddTradeItemPayload(d) {
|
|
|
285
340
|
}
|
|
286
341
|
const botanicalNames = (d.botanicalName || "")
|
|
287
342
|
.split(/[;,\n]/).map((s) => s.trim()).filter(Boolean);
|
|
343
|
+
// Land-van-herkomst: combineer de multi-select uit Plantenpaspoort met
|
|
344
|
+
// karakteristiek S62 (Land van herkomst) die Floriday altijd verplicht
|
|
345
|
+
// stelt. S62 wordt bovenaan geplaatst zodat Floriday hem als primair
|
|
346
|
+
// herkomstland registreert.
|
|
288
347
|
const rawCountries = (d.countryOfOrigin || "")
|
|
289
348
|
.split(/[,;\s]+/).map((s) => s.trim().toUpperCase()).filter(Boolean);
|
|
349
|
+
const s62 = String(d.features?.["S62"] ?? "").trim().toUpperCase();
|
|
350
|
+
if (s62) {
|
|
351
|
+
if (!/^[A-Z]{2}$/.test(s62)) {
|
|
352
|
+
throw new Error(`Karakteristiek S62 (Land van herkomst): "${s62}" is geen geldige ISO 3166-1 alpha-2 code.`);
|
|
353
|
+
}
|
|
354
|
+
const idx = rawCountries.indexOf(s62);
|
|
355
|
+
if (idx > 0)
|
|
356
|
+
rawCountries.splice(idx, 1);
|
|
357
|
+
if (rawCountries[0] !== s62)
|
|
358
|
+
rawCountries.unshift(s62);
|
|
359
|
+
}
|
|
290
360
|
const invalidCountries = rawCountries.filter((c) => !/^[A-Z]{2}$/.test(c));
|
|
291
361
|
if (invalidCountries.length > 0) {
|
|
292
362
|
throw new Error(`Ongeldige landcode(s): ${invalidCountries.join(", ")} — gebruik ISO 3166-1 alpha-2 (2 letters).`);
|
|
293
363
|
}
|
|
294
364
|
const countryOfOriginIsoCodes = rawCountries;
|
|
365
|
+
// S98 (Kwaliteitsgroep) wordt door Floriday server-side altijd verplicht
|
|
366
|
+
// gesteld. Voorkom een 400 door dit vooraf te valideren met een duidelijke
|
|
367
|
+
// Nederlandstalige foutmelding.
|
|
368
|
+
const s98 = String(d.features?.["S98"] ?? "").trim();
|
|
369
|
+
if (!s98) {
|
|
370
|
+
throw new Error("Karakteristiek S98 (Kwaliteitsgroep) is verplicht — kies een waarde in stap Eigenschappen.");
|
|
371
|
+
}
|
|
295
372
|
const photos = d.images.map((img, i) => ({
|
|
296
373
|
primary: i === 0,
|
|
297
374
|
url: img.url,
|
|
@@ -310,6 +387,11 @@ export function buildAddTradeItemPayload(d) {
|
|
|
310
387
|
if (!isUuid(warehouseId)) {
|
|
311
388
|
throw new Error("warehouseId is verplicht — kies een warehouse.");
|
|
312
389
|
}
|
|
390
|
+
// Alleen echte VRS-materiaal UUIDs meesturen; onze curated fallback-catalogus
|
|
391
|
+
// heeft ID's als "koen-pack:sleeve-50" die Floriday afwijst → filter eruit.
|
|
392
|
+
const additionalPackagingMaterialIds = (d.additionalPackaging ?? [])
|
|
393
|
+
.map((p) => (p.packagingMaterialId ?? "").trim())
|
|
394
|
+
.filter(isUuid);
|
|
313
395
|
return {
|
|
314
396
|
tradeItemId: crypto.randomUUID(),
|
|
315
397
|
supplierArticleCode,
|
|
@@ -318,12 +400,17 @@ export function buildAddTradeItemPayload(d) {
|
|
|
318
400
|
tradeItemName: { nl: tradeItemNameNl },
|
|
319
401
|
characteristics,
|
|
320
402
|
customerOrganizationIds: isCustomerSpecific ? d.customerOrganizationIds : [],
|
|
321
|
-
seasonalPeriods: d.yearRound
|
|
403
|
+
seasonalPeriods: d.yearRound
|
|
404
|
+
? [{ startWeek: 1, endWeek: 53 }]
|
|
405
|
+
: weeksToSeasonalPeriods(d.weeks),
|
|
322
406
|
photos,
|
|
323
407
|
warehouseId,
|
|
324
408
|
packingConfigurations,
|
|
325
409
|
botanicalNames: botanicalNames.length ? botanicalNames : undefined,
|
|
326
410
|
countryOfOriginIsoCodes: countryOfOriginIsoCodes.length ? countryOfOriginIsoCodes : undefined,
|
|
411
|
+
additionalPackagingMaterialIds: additionalPackagingMaterialIds.length
|
|
412
|
+
? additionalPackagingMaterialIds
|
|
413
|
+
: undefined,
|
|
327
414
|
isHiddenInCatalog: isCustomerSpecific ? true : !d.visibleInExplorer,
|
|
328
415
|
};
|
|
329
416
|
}
|
|
@@ -334,7 +421,7 @@ export function buildAddTradeItemPayload(d) {
|
|
|
334
421
|
*/
|
|
335
422
|
export function buildUpdateTradeItemPayload(d) {
|
|
336
423
|
const full = buildAddTradeItemPayload(d);
|
|
337
|
-
const { tradeItemId: _id, supplierArticleCode: _code, ...rest } = full;
|
|
424
|
+
const { tradeItemId: _id, supplierArticleCode: _code, warehouseId: _warehouseId, ...rest } = full;
|
|
338
425
|
return rest;
|
|
339
426
|
}
|
|
340
427
|
export const emptyWizardData = {
|
|
@@ -360,6 +447,10 @@ export const emptyWizardData = {
|
|
|
360
447
|
additionalPackaging: [],
|
|
361
448
|
yearRound: true,
|
|
362
449
|
weeks: [],
|
|
450
|
+
offerForSale: true,
|
|
451
|
+
salePricePerPiece: 0,
|
|
452
|
+
saleStockPieces: 0,
|
|
453
|
+
offerStartDate: new Date().toISOString().slice(0, 10),
|
|
363
454
|
};
|
|
364
455
|
// -------- Reverse mapper: Floriday cache row -> WizardData ----------------
|
|
365
456
|
// Used by the detail/edit page to hydrate the wizard from an existing
|
|
@@ -489,7 +580,13 @@ export function floridayCacheToWizardData(raw) {
|
|
|
489
580
|
warehouseId: String(raw.warehouseId ?? raw.warehouse?.warehouseId ?? ""),
|
|
490
581
|
packingConfigurations,
|
|
491
582
|
additionalPackaging: [],
|
|
492
|
-
yearRound: weeks.length === 0,
|
|
493
|
-
weeks,
|
|
583
|
+
yearRound: weeks.length === 0 || weeks.length >= 52,
|
|
584
|
+
weeks: weeks.length >= 52 ? [] : weeks,
|
|
585
|
+
// Reeds gepubliceerd via de wizard — commerciële velden staan uit voor edit,
|
|
586
|
+
// want een bestaand CustomerOffer wordt hier niet opnieuw aangemaakt.
|
|
587
|
+
offerForSale: false,
|
|
588
|
+
salePricePerPiece: 0,
|
|
589
|
+
saleStockPieces: 0,
|
|
590
|
+
offerStartDate: new Date().toISOString().slice(0, 10),
|
|
494
591
|
};
|
|
495
592
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type SupplyType = "CATALOG_PRICE" | "BATCH_PRICE" | "WEEKLY_SUPPLY_LINE";
|
|
2
|
+
export interface PostSupplyLineInput {
|
|
3
|
+
tradeItemId: string;
|
|
4
|
+
pricePerPiece: number;
|
|
5
|
+
availableQuantity: number;
|
|
6
|
+
packingConfigurationId?: string;
|
|
7
|
+
supplyType?: SupplyType;
|
|
8
|
+
currency?: string;
|
|
9
|
+
salesUnit?: string;
|
|
10
|
+
periodStart?: string;
|
|
11
|
+
periodEnd?: string;
|
|
12
|
+
supplyLineId?: string;
|
|
13
|
+
customerOrganizationIds?: string[];
|
|
14
|
+
environment?: "staging" | "live";
|
|
15
|
+
}
|
|
16
|
+
export interface PostSupplyLineResult {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
/** Alleen bij WEEKLY_SUPPLY_LINE / BATCH_PRICE. */
|
|
19
|
+
supplyLineId?: string;
|
|
20
|
+
/** Nieuwe gateway: "WEEKLY_BASE" | "WEEKLY_SUPPLY_LINE" | "BATCH". */
|
|
21
|
+
endpointFamily?: string;
|
|
22
|
+
/** Alleen bij WEEKLY_BASE. */
|
|
23
|
+
year?: number;
|
|
24
|
+
week?: number;
|
|
25
|
+
steps?: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
ok: boolean;
|
|
28
|
+
error?: string;
|
|
29
|
+
}>;
|
|
30
|
+
environment?: string;
|
|
31
|
+
status?: number;
|
|
32
|
+
error?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function postSupplyLine(input: PostSupplyLineInput): Promise<PostSupplyLineResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Push naar Floriday en persisteer resultaat lokaal. Voor WEEKLY_BASE
|
|
37
|
+
* wordt geen supply_line_id opgeslagen (bestaat niet in Floriday), voor
|
|
38
|
+
* WEEKLY_SUPPLY_LINE / BATCH wél zodat toekomstige updates herprijzen
|
|
39
|
+
* i.p.v. duplicaten aanmaken.
|
|
40
|
+
*/
|
|
41
|
+
export declare function upsertSupplyLineForTradeItem(params: {
|
|
42
|
+
connectionId: string;
|
|
43
|
+
tradeItemId: string;
|
|
44
|
+
pricePerPiece: number;
|
|
45
|
+
availableQuantity: number;
|
|
46
|
+
packingConfigurationId?: string;
|
|
47
|
+
customerOrganizationIds?: string[];
|
|
48
|
+
supplyType?: SupplyType;
|
|
49
|
+
currency?: string;
|
|
50
|
+
periodStart?: string;
|
|
51
|
+
periodEnd?: string;
|
|
52
|
+
}): Promise<PostSupplyLineResult>;
|
|
53
|
+
//# sourceMappingURL=floriday-supply-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floriday-supply-line.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-supply-line.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAEhF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqFhC"}
|