@flowselections/floriday-verkoop-module 1.0.55 → 1.0.56
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/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.js +2 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +11 -8
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +11 -8
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +11 -8
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +11 -8
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/cart-lock.functions.d.ts +11 -8
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +121 -88
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +33 -24
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.js +38 -31
- package/dist-lib/lib/create-order.functions.d.ts +187 -136
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +33 -24
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +11 -8
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts +11 -8
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-public.functions.d.ts +77 -56
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +55 -40
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.d.ts +44 -32
- package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
- package/dist-lib/lib/load-carriers.functions.d.ts +11 -8
- package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +55 -40
- package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-stock.functions.d.ts +22 -16
- package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.d.ts +11 -8
- package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.d.ts +33 -24
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-carrier.functions.d.ts +22 -16
- package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-pickup.functions.d.ts +22 -16
- package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-shipments.functions.d.ts +44 -32
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/product-name.d.ts +3 -0
- package/dist-lib/lib/product-name.d.ts.map +1 -0
- package/dist-lib/lib/product-name.js +43 -0
- package/dist-lib/lib/salesorders-list.functions.d.ts +11 -8
- package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.d.ts +55 -40
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +22 -16
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +11 -8
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -160,18 +160,14 @@ export async function replanScopeInternal(scope) {
|
|
|
160
160
|
for (const it of items ?? []) {
|
|
161
161
|
itemToOrder.set(it.id, it.order_id);
|
|
162
162
|
}
|
|
163
|
-
// Bestaande karren in de scope tellen (voor waarschuwing) en wissen.
|
|
164
163
|
// Nummering én delete-scope liggen altijd op bufferniveau als de order een
|
|
165
|
-
// buffer heeft; order-scope is uitsluitend terugval.
|
|
164
|
+
// buffer heeft; order-scope is uitsluitend terugval. Wissen én wegschrijven
|
|
165
|
+
// gebeuren verderop in ÉÉN transactie via public.replace_order_carts, zodat
|
|
166
|
+
// een mislukte replan de bestaande indeling laat staan.
|
|
166
167
|
if (!bufferId) {
|
|
167
168
|
console.warn("[cart-replan] geen buffer voor order %s — nummering en delete vallen terug op order-scope", soloOrderId);
|
|
168
169
|
}
|
|
169
|
-
|
|
170
|
-
const { data: existingCarts } = await cartScope(supabaseAdmin.from("order_carts").select("id, source"));
|
|
171
|
-
const replacedManualCount = (existingCarts ?? []).filter((c) => c.source === "manual").length;
|
|
172
|
-
const { error: delErr } = await cartScope(supabaseAdmin.from("order_carts").delete());
|
|
173
|
-
if (delErr)
|
|
174
|
-
throw new Error(delErr.message);
|
|
170
|
+
let replacedManualCount = 0;
|
|
175
171
|
// De karindeling wordt hier altijd zelf gerekend. custom_fields.floriday_packing
|
|
176
172
|
// levert alleen de belading-VELDEN (pieces_per_package / packages_per_layer /
|
|
177
173
|
// layers_per_load_carrier) — de mirror schrijft nooit een voorgekauwde
|
|
@@ -278,8 +274,10 @@ export async function replanScopeInternal(scope) {
|
|
|
278
274
|
}
|
|
279
275
|
}
|
|
280
276
|
}
|
|
281
|
-
|
|
282
|
-
|
|
277
|
+
// Payload voor public.replace_order_carts. LET OP: de sleutels hieronder
|
|
278
|
+
// moeten gelijk lopen met de sleutellijsten in die SQL-functie; ontbreekt er
|
|
279
|
+
// één, dan gooit de database een fout in plaats van stil NULL te schrijven.
|
|
280
|
+
const cartPayload = plannedCarts.map(({ cart, profile }) => {
|
|
283
281
|
// Bepaal cart.order_id: null bij mix van orders, anders die ene order.
|
|
284
282
|
const orderIdsOnCart = new Set();
|
|
285
283
|
for (const i of cart.items) {
|
|
@@ -288,9 +286,7 @@ export async function replanScopeInternal(scope) {
|
|
|
288
286
|
orderIdsOnCart.add(oid);
|
|
289
287
|
}
|
|
290
288
|
const singleOrderId = orderIdsOnCart.size === 1 ? [...orderIdsOnCart][0] : null;
|
|
291
|
-
|
|
292
|
-
.from("order_carts")
|
|
293
|
-
.insert({
|
|
289
|
+
return {
|
|
294
290
|
order_id: singleOrderId,
|
|
295
291
|
buffer_id: bufferId,
|
|
296
292
|
cart_number: cart.cart_number,
|
|
@@ -304,14 +300,7 @@ export async function replanScopeInternal(scope) {
|
|
|
304
300
|
carrier_type_id: profile.id,
|
|
305
301
|
max_layers: profile.layers_per_carrier ?? null,
|
|
306
302
|
algorithm_version: CART_PLANNER_VERSION,
|
|
307
|
-
|
|
308
|
-
.select("id")
|
|
309
|
-
.single();
|
|
310
|
-
if (cErr)
|
|
311
|
-
throw new Error(cErr.message);
|
|
312
|
-
if (cart.items.length > 0) {
|
|
313
|
-
const rows = cart.items.map((i) => ({
|
|
314
|
-
cart_id: inserted.id,
|
|
303
|
+
items: cart.items.map((i) => ({
|
|
315
304
|
order_item_id: i.order_item_id,
|
|
316
305
|
product_id: i.product_id,
|
|
317
306
|
product_name: i.product_name,
|
|
@@ -321,14 +310,28 @@ export async function replanScopeInternal(scope) {
|
|
|
321
310
|
layers_per_cart: i.layers_per_cart,
|
|
322
311
|
layer_fraction: i.layer_fraction,
|
|
323
312
|
layer_share_pct: i.layer_share_pct,
|
|
324
|
-
}))
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
313
|
+
})),
|
|
314
|
+
};
|
|
315
|
+
});
|
|
316
|
+
// Delete + inserts in één transactie: faalt er iets, dan blijft de oude
|
|
317
|
+
// karindeling staan in plaats van een lege buffer achter te laten.
|
|
318
|
+
const { data: replaceRes, error: replaceErr } = await supabaseAdmin.rpc("replace_order_carts", {
|
|
319
|
+
p_buffer_id: bufferId,
|
|
320
|
+
p_order_id: bufferId ? null : soloOrderId,
|
|
321
|
+
p_carts: cartPayload,
|
|
322
|
+
});
|
|
323
|
+
if (replaceErr)
|
|
324
|
+
throw new Error(replaceErr.message);
|
|
325
|
+
const cartsCreated = Number(replaceRes?.carts_written ?? 0);
|
|
326
|
+
const itemsWritten = Number(replaceRes?.items_written ?? 0);
|
|
327
|
+
replacedManualCount = Number(replaceRes?.replaced_manual_count ?? 0);
|
|
328
|
+
// Controleer dat de database daadwerkelijk heeft weggeschreven wat de
|
|
329
|
+
// planner opleverde. Nul karren mag, maar alleen als de planner er ook nul
|
|
330
|
+
// opleverde — niet als gevolg van een fout.
|
|
331
|
+
const expectedItems = cartPayload.reduce((n, c) => n + c.items.length, 0);
|
|
332
|
+
if (cartsCreated !== cartPayload.length || itemsWritten !== expectedItems) {
|
|
333
|
+
throw new Error(`Karindeling niet volledig weggeschreven: ${cartsCreated}/${cartPayload.length} karren, ` +
|
|
334
|
+
`${itemsWritten}/${expectedItems} artikelen.`);
|
|
332
335
|
}
|
|
333
336
|
return {
|
|
334
337
|
ok: true,
|
|
@@ -502,9 +505,13 @@ export const listOrderCarts = createServerFn({ method: "GET" })
|
|
|
502
505
|
fail("planqueue lezen", q.error);
|
|
503
506
|
const r = (q.data ?? [])[0];
|
|
504
507
|
if (r && (r.error || r.reason)) {
|
|
508
|
+
// `reason` in logistics_plan_queue is vaak een sleutel/veldnaam
|
|
509
|
+
// ("items"), geen leesbare reden. De echte fout staat in `error`.
|
|
510
|
+
const err = r.error ?? null;
|
|
511
|
+
const rawReason = r.reason ?? null;
|
|
505
512
|
blocked = {
|
|
506
|
-
reason:
|
|
507
|
-
explanation:
|
|
513
|
+
reason: rawReason,
|
|
514
|
+
explanation: err ?? (rawReason ? `Planning geblokkeerd (${rawReason})` : null),
|
|
508
515
|
at: r.updated_at ?? null,
|
|
509
516
|
};
|
|
510
517
|
}
|