@flowselections/floriday-verkoop-module 1.0.41 → 1.0.43
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/SalesOrdersTable.d.ts +5 -2
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.js +27 -13
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.js +141 -27
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1428 -172
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +1428 -172
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1428 -172
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1453 -170
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +3 -0
- package/dist-lib/lib/cart-lock.functions.d.ts +1428 -172
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +15224 -1408
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +4152 -384
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/create-order.functions.d.ts +65255 -1978
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/create-order.functions.js +48 -1
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +4152 -384
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +1428 -172
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts +1428 -172
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.js +6 -1
- package/dist-lib/lib/floriday-public.functions.d.ts +9688 -896
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +6920 -640
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.d.ts +5536 -512
- package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.server.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.server.js +1 -0
- package/dist-lib/lib/load-carriers.functions.d.ts +1428 -172
- package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +6920 -640
- package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-stock.functions.d.ts +2768 -256
- package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.d.ts +1428 -172
- package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.d.ts +4152 -384
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-cancel.server.d.ts +24 -0
- package/dist-lib/lib/order-cancel.server.d.ts.map +1 -0
- package/dist-lib/lib/order-cancel.server.js +130 -0
- package/dist-lib/lib/order-carrier.functions.d.ts +2768 -256
- package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-pickup.functions.d.ts +2768 -256
- package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-shipments.functions.d.ts +5536 -512
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.functions.d.ts +1428 -172
- package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.js +4 -60
- package/dist-lib/lib/salesorders-mapping.d.ts +6 -0
- package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-mapping.js +17 -0
- package/dist-lib/lib/salesorders.functions.d.ts +6920 -640
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +1428 -172
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const CANCELLED_STATUS = "geannuleerd";
|
|
2
|
+
/**
|
|
3
|
+
* Draait alle voorraadmutaties van een order terug en logt reversal-regels.
|
|
4
|
+
* Retourneert het aantal geraakte voorraadsleutels en logregels.
|
|
5
|
+
*/
|
|
6
|
+
export declare function reverseOrderStockMutations(orderId: string, opts: {
|
|
7
|
+
orderSource?: string | null;
|
|
8
|
+
userId?: string | null;
|
|
9
|
+
reason: string;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
reversedKeys: number;
|
|
12
|
+
reversalEntries: number;
|
|
13
|
+
}>;
|
|
14
|
+
/** Annuleert één lokale order: voorraad terug, uit planning, status geannuleerd. */
|
|
15
|
+
export declare function cancelLocalOrderInternal(input: {
|
|
16
|
+
orderId: string;
|
|
17
|
+
reason?: string | null;
|
|
18
|
+
userId?: string | null;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
ok: true;
|
|
21
|
+
alreadyCancelled: boolean;
|
|
22
|
+
reversedKeys: number;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=order-cancel.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-cancel.server.d.ts","sourceRoot":"","sources":["../../src/lib/order-cancel.server.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5E,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAsE5D;AAED,oFAAoF;AACpF,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDzE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Server-only helpers voor het annuleren van een lokale bestelling.
|
|
2
|
+
//
|
|
3
|
+
// Annuleren = order bewaren, maar uit de afhandeling halen:
|
|
4
|
+
// - alle voorraadmutaties terugdraaien (fysiek + gereserveerd),
|
|
5
|
+
// - status op `geannuleerd` met tijdstip en reden,
|
|
6
|
+
// - los uit de buffer, karplanning en replan-queue,
|
|
7
|
+
// - `invoice_due_at` leegmaken zodat automatische facturatie hem niet oppakt.
|
|
8
|
+
export const CANCELLED_STATUS = "geannuleerd";
|
|
9
|
+
/**
|
|
10
|
+
* Draait alle voorraadmutaties van een order terug en logt reversal-regels.
|
|
11
|
+
* Retourneert het aantal geraakte voorraadsleutels en logregels.
|
|
12
|
+
*/
|
|
13
|
+
export async function reverseOrderStockMutations(orderId, opts) {
|
|
14
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
15
|
+
const { data: mutations, error: mErr } = await supabaseAdmin
|
|
16
|
+
.from("stock_mutation_log")
|
|
17
|
+
.select("trade_item_key, qty_delta, physical_before, physical_after, reserved_before, reserved_after, mutation_type")
|
|
18
|
+
.eq("order_id", orderId);
|
|
19
|
+
if (mErr)
|
|
20
|
+
throw new Error(`Voorraadmutaties ophalen faalde: ${mErr.message}`);
|
|
21
|
+
const perKey = new Map();
|
|
22
|
+
for (const m of mutations ?? []) {
|
|
23
|
+
const key = m.trade_item_key;
|
|
24
|
+
if (!key)
|
|
25
|
+
continue;
|
|
26
|
+
const pd = Number(m.physical_after ?? 0) - Number(m.physical_before ?? 0);
|
|
27
|
+
const rd = Number(m.reserved_after ?? 0) - Number(m.reserved_before ?? 0);
|
|
28
|
+
const qd = Number(m.qty_delta ?? 0);
|
|
29
|
+
const cur = perKey.get(key) ?? { physicalDelta: 0, reservedDelta: 0, qtyDelta: 0 };
|
|
30
|
+
cur.physicalDelta += pd;
|
|
31
|
+
cur.reservedDelta += rd;
|
|
32
|
+
cur.qtyDelta += qd;
|
|
33
|
+
perKey.set(key, cur);
|
|
34
|
+
}
|
|
35
|
+
const reversalRows = [];
|
|
36
|
+
for (const [key, agg] of perKey.entries()) {
|
|
37
|
+
if (agg.physicalDelta === 0 && agg.reservedDelta === 0)
|
|
38
|
+
continue;
|
|
39
|
+
const { data: stockRows } = await supabaseAdmin
|
|
40
|
+
.from("trade_item_stock")
|
|
41
|
+
.select("id, connection_id, physical_stock, reserved_stock")
|
|
42
|
+
.eq("trade_item_key", key);
|
|
43
|
+
for (const s of stockRows ?? []) {
|
|
44
|
+
const physBefore = Number(s.physical_stock ?? 0);
|
|
45
|
+
const resvBefore = Number(s.reserved_stock ?? 0);
|
|
46
|
+
const physAfter = physBefore - agg.physicalDelta;
|
|
47
|
+
const resvAfter = Math.max(0, resvBefore - agg.reservedDelta);
|
|
48
|
+
const { error: uErr } = await supabaseAdmin.from("trade_item_stock")
|
|
49
|
+
.update({
|
|
50
|
+
physical_stock: physAfter,
|
|
51
|
+
reserved_stock: resvAfter,
|
|
52
|
+
updated_at: new Date().toISOString(),
|
|
53
|
+
})
|
|
54
|
+
.eq("id", s.id);
|
|
55
|
+
if (uErr)
|
|
56
|
+
throw new Error(`Voorraad terugdraaien faalde: ${uErr.message}`);
|
|
57
|
+
reversalRows.push({
|
|
58
|
+
trade_item_key: key,
|
|
59
|
+
connection_id: s.connection_id,
|
|
60
|
+
order_id: orderId,
|
|
61
|
+
order_source: opts.orderSource || "manual",
|
|
62
|
+
mutation_type: "reversal",
|
|
63
|
+
qty_delta: -agg.qtyDelta,
|
|
64
|
+
physical_before: physBefore,
|
|
65
|
+
physical_after: physAfter,
|
|
66
|
+
reserved_before: resvBefore,
|
|
67
|
+
reserved_after: resvAfter,
|
|
68
|
+
reason: opts.reason,
|
|
69
|
+
created_by: opts.userId ?? null,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (reversalRows.length > 0) {
|
|
74
|
+
const { error: lErr } = await supabaseAdmin.from("stock_mutation_log").insert(reversalRows);
|
|
75
|
+
if (lErr)
|
|
76
|
+
throw new Error(`Reversal-log schrijven faalde: ${lErr.message}`);
|
|
77
|
+
}
|
|
78
|
+
return { reversedKeys: perKey.size, reversalEntries: reversalRows.length };
|
|
79
|
+
}
|
|
80
|
+
/** Annuleert één lokale order: voorraad terug, uit planning, status geannuleerd. */
|
|
81
|
+
export async function cancelLocalOrderInternal(input) {
|
|
82
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
83
|
+
const { data: order, error: oErr } = await supabaseAdmin
|
|
84
|
+
.from("orders")
|
|
85
|
+
.select("id, status, custom_fields, order_source, floriday_sales_order_id")
|
|
86
|
+
.eq("id", input.orderId)
|
|
87
|
+
.maybeSingle();
|
|
88
|
+
if (oErr)
|
|
89
|
+
throw new Error(oErr.message);
|
|
90
|
+
if (!order)
|
|
91
|
+
throw new Error("Bestelling niet gevonden");
|
|
92
|
+
const o = order;
|
|
93
|
+
const cf = (o.custom_fields ?? {});
|
|
94
|
+
const src = String(cf?.source ?? o.order_source ?? "").toLowerCase();
|
|
95
|
+
if (src === "floriday" || src === "fo" || o.floriday_sales_order_id) {
|
|
96
|
+
throw new Error("FO-orders kunnen hier niet geannuleerd worden. Annuleer deze in Floriday.");
|
|
97
|
+
}
|
|
98
|
+
if (String(o.status ?? "").toLowerCase() === CANCELLED_STATUS) {
|
|
99
|
+
return { ok: true, alreadyCancelled: true, reversedKeys: 0 };
|
|
100
|
+
}
|
|
101
|
+
const reason = (input.reason ?? "").trim();
|
|
102
|
+
const { reversedKeys } = await reverseOrderStockMutations(input.orderId, {
|
|
103
|
+
orderSource: src,
|
|
104
|
+
userId: input.userId ?? null,
|
|
105
|
+
reason: reason ? `Bestelling geannuleerd — ${reason}` : "Bestelling geannuleerd",
|
|
106
|
+
});
|
|
107
|
+
// Uit de planning halen: karren en replan-queue opruimen.
|
|
108
|
+
await supabaseAdmin.from("order_carts").delete().eq("order_id", input.orderId);
|
|
109
|
+
await supabaseAdmin.from("cart_replan_queue").delete().eq("order_id", input.orderId);
|
|
110
|
+
const { error: uErr } = await supabaseAdmin.from("orders")
|
|
111
|
+
.update({
|
|
112
|
+
status: CANCELLED_STATUS,
|
|
113
|
+
cancelled_at: new Date().toISOString(),
|
|
114
|
+
cancel_reason: reason || null,
|
|
115
|
+
invoice_due_at: null,
|
|
116
|
+
buffer_id: null,
|
|
117
|
+
})
|
|
118
|
+
.eq("id", input.orderId);
|
|
119
|
+
if (uErr)
|
|
120
|
+
throw new Error(`Annuleren faalde: ${uErr.message}`);
|
|
121
|
+
// Engine informeren zodat buffering/transport de order laat vallen.
|
|
122
|
+
try {
|
|
123
|
+
const { notifyEngineOrder } = await import("./logistics-engine.server");
|
|
124
|
+
await notifyEngineOrder(input.orderId, "order.changed");
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.warn("[cancelLocalOrder] engine-event faalde:", err);
|
|
128
|
+
}
|
|
129
|
+
return { ok: true, alreadyCancelled: false, reversedKeys };
|
|
130
|
+
}
|