@flowselections/floriday-voorraad 1.0.16 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +9 -0
  2. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -0
  3. package/dist-lib/components/voorraad/AdditionalPackagingDialog.js +51 -0
  4. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  5. package/dist-lib/components/voorraad/ArtikelWizard.js +372 -30
  6. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  7. package/dist-lib/components/voorraad/EditArtikelPage.js +78 -4
  8. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +8 -0
  9. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -0
  10. package/dist-lib/components/voorraad/OrderHistoryCard.js +133 -0
  11. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +7 -0
  12. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -0
  13. package/dist-lib/components/voorraad/PriceStatusBadge.js +67 -0
  14. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +2 -1
  15. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  16. package/dist-lib/components/voorraad/VoorraadStockCard.js +5 -4
  17. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  18. package/dist-lib/components/voorraad/VoorraadTable.js +6 -1
  19. package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
  20. package/dist-lib/hooks/useLocalTradeItems.js +4 -0
  21. package/dist-lib/hooks/useTradeItemStock.d.ts +14 -1
  22. package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
  23. package/dist-lib/hooks/useTradeItemStock.js +76 -17
  24. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +21 -0
  25. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -0
  26. package/dist-lib/hooks/useTradeItemSupplyLine.js +49 -0
  27. package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
  28. package/dist-lib/hooks/useVoorraadData.js +35 -3
  29. package/dist-lib/integrations/supabase/auth-middleware.d.ts +473 -3
  30. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  31. package/dist-lib/integrations/supabase/client.d.ts +473 -3
  32. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  33. package/dist-lib/integrations/supabase/client.server.d.ts +473 -3
  34. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  35. package/dist-lib/integrations/supabase/types.d.ts +481 -3
  36. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  37. package/dist-lib/lib/floricode-required-features.functions.d.ts +480 -4
  38. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
  39. package/dist-lib/lib/floricode-required-features.functions.js +20 -2
  40. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +11264 -0
  41. package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -0
  42. package/dist-lib/lib/floriday-customer-offer.functions.js +175 -0
  43. package/dist-lib/lib/floriday-gateway.functions.d.ts +13155 -15
  44. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
  45. package/dist-lib/lib/floriday-gateway.functions.js +150 -0
  46. package/dist-lib/lib/floriday-gateway.server.d.ts +22 -0
  47. package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
  48. package/dist-lib/lib/floriday-gateway.server.js +3 -0
  49. package/dist-lib/lib/floriday-payload.d.ts +60 -6
  50. package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
  51. package/dist-lib/lib/floriday-payload.js +104 -7
  52. package/dist-lib/lib/floriday-supply-line.d.ts +53 -0
  53. package/dist-lib/lib/floriday-supply-line.d.ts.map +1 -0
  54. package/dist-lib/lib/floriday-supply-line.js +109 -0
  55. package/dist-lib/lib/floriday-warehouse.functions.d.ts +1420 -10
  56. package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
  57. package/dist-lib/lib/floriday-writes.functions.d.ts +947 -7
  58. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  59. package/dist-lib/lib/floriday-writes.functions.js +6 -1
  60. package/dist-lib/lib/vrs-catalog.d.ts +27 -0
  61. package/dist-lib/lib/vrs-catalog.d.ts.map +1 -0
  62. package/dist-lib/lib/vrs-catalog.js +98 -0
  63. package/package.json +3 -2
  64. 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
- code: string;
45
- description?: string;
46
- quantity: number;
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
- /** TradeItemUpdate = TradeItemBase minus tradeItemId + supplierArticleCode. */
194
- export type UpdateTradeItemPayload = Omit<AddTradeItemPayload, "tradeItemId" | "supplierArticleCode">;
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":"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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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"}
@@ -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 (/^\d+$/.test(raw))
185
- return Number(raw);
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
- return raw || "NONE";
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 ? [] : weeksToSeasonalPeriods(d.weeks),
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"}