@flowselections/floriday-voorraad 1.0.17 → 1.0.19

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.
@@ -118,6 +118,59 @@ export const publishCustomerOfferFn = createServerFn({ method: "POST" })
118
118
  }
119
119
  const orderStart = data.orderStart ?? new Date().toISOString();
120
120
  const orderEnd = data.orderEnd ?? addYears(orderStart, 1);
121
+ // ------------------------------------------------------------------
122
+ // Floriday 2026v1: bij `usesCatalogAvailability=true` haalt Floriday de
123
+ // beschikbaarheid van een aparte bron (zie docs "Availability for
124
+ // Customer Offers"). Als voor dit trade item nog geen availability is
125
+ // geregistreerd, weigert `AddCustomerOffer` met 400:
126
+ // "Customer offer line availability must be specified when using
127
+ // catalog availability."
128
+ // Er hoort dus GEEN `availability`/`catalogAvailability` in de payload;
129
+ // in plaats daarvan zetten we vooraf de beschikbaarheid via
130
+ // EditTradeItemAvailabilityForCustomerOffers (CatalogPrices). Dit is
131
+ // idempotent — herhaald zetten van isAvailable=true is safe.
132
+ // ------------------------------------------------------------------
133
+ const isoWeek = (iso) => {
134
+ const d = new Date(iso);
135
+ // ISO-week berekening (ma = 1)
136
+ const target = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
137
+ const dayNr = (target.getUTCDay() + 6) % 7;
138
+ target.setUTCDate(target.getUTCDate() - dayNr + 3);
139
+ const firstThursday = new Date(Date.UTC(target.getUTCFullYear(), 0, 4));
140
+ const week = 1 +
141
+ Math.round(((target.getTime() - firstThursday.getTime()) / 86400000 -
142
+ 3 +
143
+ ((firstThursday.getUTCDay() + 6) % 7)) /
144
+ 7);
145
+ return { week, year: target.getUTCFullYear() };
146
+ };
147
+ const fromWeek = isoWeek(orderStart);
148
+ const tillWeek = isoWeek(orderEnd);
149
+ try {
150
+ await gatewayWrite({
151
+ environment,
152
+ module: "inventory",
153
+ action: "set-trade-item-availability-for-customer-offers",
154
+ method: "PUT",
155
+ path: "/suppliers-api-2026v1/catalog-prices/trade-item-availability-for-customer-offers",
156
+ referenceId: data.tradeItemId,
157
+ idempotencyKey: `inventory:co-availability:${data.tradeItemId}:${fromWeek.year}-${fromWeek.week}:${tillWeek.year}-${tillWeek.week}`,
158
+ body: {
159
+ tradeItemIds: [data.tradeItemId],
160
+ fromWeek,
161
+ tillWeek,
162
+ isAvailable: true,
163
+ alwaysAvailableForCustomerOrganizationIds: [],
164
+ neverAvailableForCustomerOrganizationIds: [],
165
+ },
166
+ });
167
+ }
168
+ catch (e) {
169
+ // Availability-call faalt niet blokkerend — als de gateway de path
170
+ // niet kent (bv. andere Floriday-versie), gaan we door met AddCustomerOffer
171
+ // en tonen de originele Floriday-fout aan de gebruiker.
172
+ console.warn("[publishCustomerOffer] pre-call availability faalde:", e?.message ?? e);
173
+ }
121
174
  const customerOfferLineId = crypto.randomUUID();
122
175
  const body = {
123
176
  customerOfferId: data.customerOfferId,
@@ -139,14 +192,6 @@ export const publishCustomerOfferFn = createServerFn({ method: "POST" })
139
192
  orderPeriod: { startDateTime: orderStart, endDateTime: orderEnd },
140
193
  deliveryPeriod: { startDateTime: orderStart, endDateTime: orderEnd },
141
194
  usesCatalogAvailability: true,
142
- // Floriday eist ook mét `usesCatalogAvailability=true` een
143
- // expliciet availability-window (anders 400 "Customer offer line
144
- // availability must be specified when using catalog availability").
145
- availability: {
146
- startDateTime: orderStart,
147
- endDateTime: orderEnd,
148
- numberOfPieces: data.numberOfPieces,
149
- },
150
195
  packingConfiguration: data.packingConfiguration,
151
196
  },
152
197
  ],