@flowselections/floriday-verkoop-module 1.0.77 → 1.0.82
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/CreateOrderPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CreateOrderPage.js +33 -8
- package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.js +1 -1
- package/dist-lib/components/verkoop/FloridayStageLine.d.ts +15 -0
- package/dist-lib/components/verkoop/FloridayStageLine.d.ts.map +1 -0
- package/dist-lib/components/verkoop/FloridayStageLine.js +25 -0
- package/dist-lib/components/verkoop/PlanCoverageBadge.d.ts +1 -1
- package/dist-lib/components/verkoop/PlanCoverageBadge.d.ts.map +1 -1
- package/dist-lib/components/verkoop/PlanCoverageBadge.js +5 -2
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.js +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.js +38 -6
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.js +4 -8
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.js +7 -1
- package/dist-lib/integrations/supabase/types.d.ts +1486 -2
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/belading.server.d.ts +0 -11
- package/dist-lib/lib/belading.server.d.ts.map +1 -1
- package/dist-lib/lib/belading.server.js +4 -41
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.js +3 -22
- package/dist-lib/lib/central-secrets.server.d.ts +5 -0
- package/dist-lib/lib/central-secrets.server.d.ts.map +1 -0
- package/dist-lib/lib/central-secrets.server.js +65 -0
- package/dist-lib/lib/create-order.functions.d.ts +15 -0
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/create-order.functions.js +28 -13
- package/dist-lib/lib/customer-name.d.ts +8 -0
- package/dist-lib/lib/customer-name.d.ts.map +1 -0
- package/dist-lib/lib/customer-name.js +9 -0
- package/dist-lib/lib/engine-block-alerts.d.ts +22 -0
- package/dist-lib/lib/engine-block-alerts.d.ts.map +1 -0
- package/dist-lib/lib/engine-block-alerts.js +43 -0
- package/dist-lib/lib/engine-block-alerts.server.d.ts +7 -0
- package/dist-lib/lib/engine-block-alerts.server.d.ts.map +1 -0
- package/dist-lib/lib/engine-block-alerts.server.js +75 -0
- package/dist-lib/lib/floriday-change-diff.check.d.ts +2 -0
- package/dist-lib/lib/floriday-change-diff.check.d.ts.map +1 -0
- package/dist-lib/lib/floriday-change-diff.check.js +27 -0
- package/dist-lib/lib/floriday-change-diff.d.ts +7 -0
- package/dist-lib/lib/floriday-change-diff.d.ts.map +1 -0
- package/dist-lib/lib/floriday-change-diff.js +51 -0
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.js +38 -39
- package/dist-lib/lib/floriday-status.d.ts +48 -0
- package/dist-lib/lib/floriday-status.d.ts.map +1 -0
- package/dist-lib/lib/floriday-status.js +99 -0
- package/dist-lib/lib/floriday-status.server.d.ts +7 -0
- package/dist-lib/lib/floriday-status.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-status.server.js +74 -0
- package/dist-lib/lib/load-carriers.server.d.ts +1 -1
- package/dist-lib/lib/load-carriers.server.d.ts.map +1 -1
- package/dist-lib/lib/load-carriers.server.js +3 -6
- package/dist-lib/lib/logistics-engine.server.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.server.js +2 -22
- package/dist-lib/lib/order-block-mail.server.d.ts.map +1 -1
- package/dist-lib/lib/order-block-mail.server.js +31 -15
- package/dist-lib/lib/order-cancel.server.d.ts +9 -0
- package/dist-lib/lib/order-cancel.server.d.ts.map +1 -1
- package/dist-lib/lib/order-cancel.server.js +90 -0
- package/dist-lib/lib/plan-coverage.check.d.ts +2 -0
- package/dist-lib/lib/plan-coverage.check.d.ts.map +1 -0
- package/dist-lib/lib/plan-coverage.check.js +17 -0
- package/dist-lib/lib/plan-coverage.d.ts +12 -0
- package/dist-lib/lib/plan-coverage.d.ts.map +1 -1
- package/dist-lib/lib/plan-coverage.js +27 -1
- package/dist-lib/lib/plan-coverage.server.d.ts.map +1 -1
- package/dist-lib/lib/plan-coverage.server.js +20 -13
- package/dist-lib/lib/review-dismissals.server.d.ts +3 -0
- package/dist-lib/lib/review-dismissals.server.d.ts.map +1 -0
- package/dist-lib/lib/review-dismissals.server.js +26 -0
- package/dist-lib/lib/salesorders-list.functions.d.ts +1 -1
- package/dist-lib/lib/salesorders-list.functions.js +1 -1
- package/dist-lib/lib/salesorders-list.server.d.ts +1 -1
- package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.js +104 -3
- package/dist-lib/lib/salesorders-mapping.d.ts +17 -0
- package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-mapping.js +1 -0
- package/dist-lib/lib/salesorders.functions.d.ts +1 -5
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.js +32 -2
- package/dist-lib/lib/useSalesOrdersQuery.d.ts +1 -1
- package/dist-lib/lib/useSalesOrdersQuery.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -128,3 +128,93 @@ export async function cancelLocalOrderInternal(input) {
|
|
|
128
128
|
}
|
|
129
129
|
return { ok: true, alreadyCancelled: false, reversedKeys };
|
|
130
130
|
}
|
|
131
|
+
export const FLORIDAY_CANCEL_REASON = "Koper heeft geannuleerd in Floriday";
|
|
132
|
+
export const FLORIDAY_CANCEL_PICKED_MESSAGE = "Koper heeft geannuleerd in Floriday, order is al gepickt";
|
|
133
|
+
/**
|
|
134
|
+
* Annulering uit Floriday (op order-id). Nog niet gepickt/gescand → order
|
|
135
|
+
* annuleren (voorraad terug, uit herplanning en buffer, Engine melden).
|
|
136
|
+
* Al gepickt/gescand, of pickstand onbekend → niet annuleren, wel een duidelijke
|
|
137
|
+
* melding voor handmatige beoordeling. Schrijft nooit order_carts (Engine).
|
|
138
|
+
*/
|
|
139
|
+
export async function handleFloridayCancellation(orderId) {
|
|
140
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
141
|
+
const { data: order, error } = await supabaseAdmin
|
|
142
|
+
.from("orders")
|
|
143
|
+
.select("id, status, plan_locked_at, custom_fields, order_source")
|
|
144
|
+
.eq("id", orderId)
|
|
145
|
+
.maybeSingle();
|
|
146
|
+
if (error)
|
|
147
|
+
throw new Error(error.message);
|
|
148
|
+
if (!order)
|
|
149
|
+
throw new Error("Bestelling niet gevonden");
|
|
150
|
+
const o = order;
|
|
151
|
+
const cf = (o.custom_fields ?? {});
|
|
152
|
+
const status = String(o.status ?? "").toLowerCase();
|
|
153
|
+
if (status === CANCELLED_STATUS)
|
|
154
|
+
return "already_cancelled";
|
|
155
|
+
// Pickstand alleen uit de Engine; fail closed.
|
|
156
|
+
let picked = null;
|
|
157
|
+
try {
|
|
158
|
+
const { loadPlanCoverage } = await import("./plan-coverage.server");
|
|
159
|
+
const cov = (await loadPlanCoverage(supabaseAdmin, [orderId], "detail")).get(orderId);
|
|
160
|
+
if (cov && cov.state !== "onbekend") {
|
|
161
|
+
picked =
|
|
162
|
+
cov.pickStatus === "bezig" ||
|
|
163
|
+
cov.pickStatus === "gepickt" ||
|
|
164
|
+
cov.pickRows.some((r) => !!r.printedAt || !!r.completedAt);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
picked = null;
|
|
169
|
+
}
|
|
170
|
+
const lockedOrShipped = Boolean(o.plan_locked_at) || ["verzonden", "shipped", "geleverd", "delivered"].includes(status);
|
|
171
|
+
if (lockedOrShipped)
|
|
172
|
+
picked = true;
|
|
173
|
+
if (picked !== false) {
|
|
174
|
+
const reason = picked === true
|
|
175
|
+
? FLORIDAY_CANCEL_PICKED_MESSAGE
|
|
176
|
+
: `${FLORIDAY_CANCEL_REASON}; pickstand onbekend bij de Logistiek Engine — niet geannuleerd`;
|
|
177
|
+
await supabaseAdmin.from("orders")
|
|
178
|
+
.update({
|
|
179
|
+
custom_fields: {
|
|
180
|
+
...cf,
|
|
181
|
+
needs_manual_review: true,
|
|
182
|
+
manual_review_source: "floriday_cancel",
|
|
183
|
+
manual_review_reason: reason,
|
|
184
|
+
floriday_change_detected_at: new Date().toISOString(),
|
|
185
|
+
},
|
|
186
|
+
updated_at: new Date().toISOString(),
|
|
187
|
+
})
|
|
188
|
+
.eq("id", orderId);
|
|
189
|
+
return picked === true ? "already_picked" : "pick_unknown";
|
|
190
|
+
}
|
|
191
|
+
const src = String(cf?.source ?? o.order_source ?? "floriday").toLowerCase();
|
|
192
|
+
await reverseOrderStockMutations(orderId, { orderSource: src, reason: `Bestelling geannuleerd — ${FLORIDAY_CANCEL_REASON}` });
|
|
193
|
+
await supabaseAdmin.from("cart_replan_queue").delete().eq("order_id", orderId);
|
|
194
|
+
const { error: uErr } = await supabaseAdmin.from("orders")
|
|
195
|
+
.update({
|
|
196
|
+
status: CANCELLED_STATUS,
|
|
197
|
+
cancelled_at: new Date().toISOString(),
|
|
198
|
+
cancel_reason: FLORIDAY_CANCEL_REASON,
|
|
199
|
+
invoice_due_at: null,
|
|
200
|
+
buffer_id: null,
|
|
201
|
+
status_sync_token: globalThis.crypto.randomUUID(),
|
|
202
|
+
custom_fields: {
|
|
203
|
+
...cf,
|
|
204
|
+
floriday_cancelled_at: new Date().toISOString(),
|
|
205
|
+
floriday_cancel_notice: FLORIDAY_CANCEL_REASON,
|
|
206
|
+
},
|
|
207
|
+
})
|
|
208
|
+
.eq("id", orderId);
|
|
209
|
+
if (uErr)
|
|
210
|
+
throw new Error(`Annuleren faalde: ${uErr.message}`);
|
|
211
|
+
try {
|
|
212
|
+
const { notifyEngineOrder } = await import("./logistics-engine.server");
|
|
213
|
+
await notifyEngineOrder(orderId, "order.changed");
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
console.warn("[floriday-cancel] engine-event faalde:", err);
|
|
217
|
+
}
|
|
218
|
+
console.info(`[floriday-cancel] order ${orderId} geannuleerd: ${FLORIDAY_CANCEL_REASON}`);
|
|
219
|
+
return "cancelled";
|
|
220
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-coverage.check.d.ts","sourceRoot":"","sources":["../../src/lib/plan-coverage.check.ts"],"names":[],"mappings":"AAQA,wBAAgB,qBAAqB,IAAI,MAAM,CAc9C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Test (draait mee in de typecontrole én als script: `bun src/lib/plan-coverage.check.ts`).
|
|
2
|
+
// Ontbrekende tellingen moeten "onbekend" tonen, nooit "0".
|
|
3
|
+
import { coverageDetailText, parsePlanCoverageListRow, summarize } from "./plan-coverage";
|
|
4
|
+
function eq(actual, expected, name) {
|
|
5
|
+
if (actual !== expected)
|
|
6
|
+
throw new Error(`${name}: verwacht "${expected}", kreeg "${actual}"`);
|
|
7
|
+
}
|
|
8
|
+
export function runPlanCoverageChecks() {
|
|
9
|
+
const base = { order_id: "x", state: "ingedeeld", label: "Ingedeeld" };
|
|
10
|
+
eq(coverageDetailText(summarize(parsePlanCoverageListRow(base))), "Karren: onbekend · Pickrijen: onbekend · Pickstand: onbekend", "afwezig");
|
|
11
|
+
eq(coverageDetailText(summarize(parsePlanCoverageListRow({ ...base, cart_count: null, pick_row_count: null, pick_status: null }))), "Karren: onbekend · Pickrijen: onbekend · Pickstand: onbekend", "null");
|
|
12
|
+
eq(coverageDetailText(summarize(parsePlanCoverageListRow({ ...base, cart_count: 0, pick_row_count: 2, pick_status: "open" }))), "Karren: 0 · Pickrijen: 2 · Pickstand: open", "echte waarden");
|
|
13
|
+
return 3;
|
|
14
|
+
}
|
|
15
|
+
if (typeof process !== "undefined" && process.argv?.[1]?.endsWith("plan-coverage.check.ts")) {
|
|
16
|
+
console.log(`plan-coverage: ${runPlanCoverageChecks()} tests geslaagd`);
|
|
17
|
+
}
|
|
@@ -34,6 +34,12 @@ export interface PlanCoverage {
|
|
|
34
34
|
cartCount?: number | null;
|
|
35
35
|
/** Alleen uit de lijstversie: order staat in een buffer (gedeelde kar). */
|
|
36
36
|
shared?: boolean | null;
|
|
37
|
+
/** Alleen uit de lijstversie: aantal pickrijen volgens de Engine (null = onbekend). */
|
|
38
|
+
pickRowCount?: number | null;
|
|
39
|
+
/** Alleen uit de lijstversie: buffer-id van de Engine (ter informatie). */
|
|
40
|
+
bufferId?: string | null;
|
|
41
|
+
/** Alleen uit de lijstversie: ordernummer (ter informatie; match blijft op order_id). */
|
|
42
|
+
orderNumber?: string | null;
|
|
37
43
|
/** Gezet als de Engine-vraag mislukte (fail closed: niets geschreven). */
|
|
38
44
|
error?: string | null;
|
|
39
45
|
}
|
|
@@ -50,7 +56,13 @@ export interface PlanCoverageSummary {
|
|
|
50
56
|
progressPct: number | null;
|
|
51
57
|
reason: string | null;
|
|
52
58
|
shared: boolean;
|
|
59
|
+
/** null = onbekend (nooit als 0 tonen). */
|
|
60
|
+
cartCount?: number | null;
|
|
61
|
+
pickRowCount?: number | null;
|
|
62
|
+
pickStatus?: PlanCoverage["pickStatus"];
|
|
53
63
|
}
|
|
54
64
|
export declare function summarize(c: PlanCoverage): PlanCoverageSummary;
|
|
65
|
+
/** Tooltiptekst voor de badge; ontbrekende waarden worden "onbekend", nooit "0". */
|
|
66
|
+
export declare function coverageDetailText(c: Pick<PlanCoverageSummary, "cartCount" | "pickRowCount" | "pickStatus">): string;
|
|
55
67
|
export declare function mergeSummaries(list: (PlanCoverageSummary | null | undefined)[]): PlanCoverageSummary | null;
|
|
56
68
|
//# sourceMappingURL=plan-coverage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-coverage.d.ts","sourceRoot":"","sources":["../../src/lib/plan-coverage.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,OAAO,GAAG,eAAe,GAAG,aAAa,GAAG,UAAU,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAYD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAa7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAY3D;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAsC5D;AAED,8FAA8F;AAC9F,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"plan-coverage.d.ts","sourceRoot":"","sources":["../../src/lib/plan-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,6 +91,9 @@ export function parsePlanCoverageListRow(r) {
|
|
|
91
91
|
pickStatus: PICK.includes(r.pick_status) ? r.pick_status : null,
|
|
92
92
|
pickedAt: str(r.picked_at),
|
|
93
93
|
cartCount: num(r.cart_count),
|
|
94
|
+
pickRowCount: num(r.pick_row_count),
|
|
95
|
+
bufferId: str(r.buffer_id),
|
|
96
|
+
orderNumber: str(r.order_number),
|
|
94
97
|
shared: str(r.buffer_id) != null,
|
|
95
98
|
error: state === "onbekend" ? "Onbekende indelingsstatus van de Engine" : null,
|
|
96
99
|
};
|
|
@@ -109,12 +112,35 @@ export function summarize(c) {
|
|
|
109
112
|
progressPct: c.progressPct,
|
|
110
113
|
reason: c.reason ?? c.error ?? null,
|
|
111
114
|
shared: Boolean(c.shared) || c.carts.some((k) => k.shared),
|
|
115
|
+
// Lijstversie geeft tellingen; details hebben de volledige karren/pickrijen.
|
|
116
|
+
cartCount: c.cartCount !== undefined ? c.cartCount : c.state === "onbekend" ? null : c.carts.length,
|
|
117
|
+
pickRowCount: c.pickRowCount !== undefined ? c.pickRowCount : c.state === "onbekend" ? null : c.pickRows.length,
|
|
118
|
+
pickStatus: c.pickStatus,
|
|
112
119
|
};
|
|
113
120
|
}
|
|
121
|
+
const PICK_LABEL = {
|
|
122
|
+
geen_pickrij: "geen pickrij",
|
|
123
|
+
open: "open",
|
|
124
|
+
bezig: "bezig",
|
|
125
|
+
gepickt: "gepickt",
|
|
126
|
+
};
|
|
127
|
+
/** Tooltiptekst voor de badge; ontbrekende waarden worden "onbekend", nooit "0". */
|
|
128
|
+
export function coverageDetailText(c) {
|
|
129
|
+
const n = (v) => (typeof v === "number" && Number.isFinite(v) ? String(v) : "onbekend");
|
|
130
|
+
const ps = c.pickStatus ? (PICK_LABEL[c.pickStatus] ?? "onbekend") : "onbekend";
|
|
131
|
+
return `Karren: ${n(c.cartCount)} · Pickrijen: ${n(c.pickRowCount)} · Pickstand: ${ps}`;
|
|
132
|
+
}
|
|
114
133
|
export function mergeSummaries(list) {
|
|
115
134
|
const xs = list.filter((x) => !!x);
|
|
116
135
|
if (!xs.length)
|
|
117
136
|
return null;
|
|
118
137
|
const worst = [...xs].sort((a, b) => RANK[a.state] - RANK[b.state])[0];
|
|
119
|
-
|
|
138
|
+
const sumOrNull = (k) => xs.every((x) => typeof x[k] === "number") ? xs.reduce((a, x) => a + x[k], 0) : null;
|
|
139
|
+
return {
|
|
140
|
+
...worst,
|
|
141
|
+
shared: xs.some((x) => x.shared),
|
|
142
|
+
cartCount: sumOrNull("cartCount"),
|
|
143
|
+
pickRowCount: sumOrNull("pickRowCount"),
|
|
144
|
+
pickStatus: xs.length === 1 ? xs[0].pickStatus : xs.every((x) => x.pickStatus === xs[0].pickStatus) ? xs[0].pickStatus : null,
|
|
145
|
+
};
|
|
120
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-coverage.server.d.ts","sourceRoot":"","sources":["../../src/lib/plan-coverage.server.ts"],"names":[],"mappings":"AASA,OAAO,EAAgE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-coverage.server.d.ts","sourceRoot":"","sources":["../../src/lib/plan-coverage.server.ts"],"names":[],"mappings":"AASA,OAAO,EAAgE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA2ClH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,GAAE,MAAM,GAAG,QAAmB,GACjC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CA6CpC"}
|
|
@@ -12,6 +12,7 @@ const TTL_MS = 30000;
|
|
|
12
12
|
const CONCURRENCY = 12;
|
|
13
13
|
const cache = new Map(); // sleutel: mode:orderId
|
|
14
14
|
let listFnMissingUntil = 0;
|
|
15
|
+
const LIST_CHUNK = 1000;
|
|
15
16
|
const LIST_FN = "logistics_order_plan_coverage_list";
|
|
16
17
|
const SINGLE_FN = "logistics_order_plan_coverage";
|
|
17
18
|
function isMissingFunction(err) {
|
|
@@ -22,21 +23,27 @@ function isMissingFunction(err) {
|
|
|
22
23
|
async function tryListVersion(supabase, ids) {
|
|
23
24
|
if (Date.now() < listFnMissingUntil)
|
|
24
25
|
return null;
|
|
25
|
-
const { data, error } = await supabase.rpc(LIST_FN, { p_order_ids: ids });
|
|
26
|
-
if (error) {
|
|
27
|
-
if (isMissingFunction(error)) {
|
|
28
|
-
listFnMissingUntil = Date.now() + 5 * 60000;
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
throw new Error(error.message);
|
|
32
|
-
}
|
|
33
26
|
const out = new Map();
|
|
34
|
-
|
|
35
|
-
for (
|
|
36
|
-
const
|
|
37
|
-
|
|
27
|
+
// Maximaal LIST_CHUNK id's per aanroep; een mislukte portie raakt alleen die orders.
|
|
28
|
+
for (let i = 0; i < ids.length; i += LIST_CHUNK) {
|
|
29
|
+
const chunk = ids.slice(i, i + LIST_CHUNK);
|
|
30
|
+
const { data, error } = await supabase.rpc(LIST_FN, { p_order_ids: chunk });
|
|
31
|
+
if (error) {
|
|
32
|
+
if (isMissingFunction(error)) {
|
|
33
|
+
listFnMissingUntil = Date.now() + 5 * 60000;
|
|
34
|
+
return out.size ? out : null;
|
|
35
|
+
}
|
|
36
|
+
for (const id of chunk)
|
|
37
|
+
out.set(id, unknownCoverage(`Indeling niet beschikbaar: ${error.message}`));
|
|
38
38
|
continue;
|
|
39
|
-
|
|
39
|
+
}
|
|
40
|
+
const rows = Array.isArray(data) ? data : [];
|
|
41
|
+
for (const r of rows) {
|
|
42
|
+
const oid = r?.order_id ?? null;
|
|
43
|
+
if (!oid)
|
|
44
|
+
continue;
|
|
45
|
+
out.set(String(oid), parsePlanCoverageListRow(r));
|
|
46
|
+
}
|
|
40
47
|
}
|
|
41
48
|
for (const id of ids)
|
|
42
49
|
if (!out.has(id))
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function loadReviewDismissals(supabase: any, orderIds: string[]): Promise<Map<string, Set<string>>>;
|
|
2
|
+
export declare function isReviewDismissed(map: Map<string, Set<string>>, orderId: string, reason: string): boolean;
|
|
3
|
+
//# sourceMappingURL=review-dismissals.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-dismissals.server.d.ts","sourceRoot":"","sources":["../../src/lib/review-dismissals.server.ts"],"names":[],"mappings":"AAKA,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAgBnC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Weggehaalde beoordelingsmeldingen (order_review_dismissals). Alleen lezen.
|
|
2
|
+
// Een melding is alleen weg als de reden exact overeenkomt; een nieuwe, echte
|
|
3
|
+
// wijziging met een andere reden verschijnt dus gewoon weer.
|
|
4
|
+
// Fout bij lezen: melding blijft zichtbaar (fail closed).
|
|
5
|
+
export async function loadReviewDismissals(supabase, orderIds) {
|
|
6
|
+
const out = new Map();
|
|
7
|
+
const ids = Array.from(new Set(orderIds.filter(Boolean)));
|
|
8
|
+
for (let i = 0; i < ids.length; i += 300) {
|
|
9
|
+
const { data, error } = await supabase
|
|
10
|
+
.from("order_review_dismissals")
|
|
11
|
+
.select("order_id, review_reason")
|
|
12
|
+
.in("order_id", ids.slice(i, i + 300));
|
|
13
|
+
if (error || !Array.isArray(data))
|
|
14
|
+
continue;
|
|
15
|
+
for (const r of data) {
|
|
16
|
+
const k = String(r.order_id);
|
|
17
|
+
if (!out.has(k))
|
|
18
|
+
out.set(k, new Set());
|
|
19
|
+
out.get(k).add(String(r.review_reason ?? ""));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
export function isReviewDismissed(map, orderId, reason) {
|
|
25
|
+
return map.get(orderId)?.has(reason) ?? false;
|
|
26
|
+
}
|
|
@@ -4,7 +4,7 @@ export declare const listSalesOrders: import("@tanstack/start-client-core").Opti
|
|
|
4
4
|
claims: import("@supabase/auth-js").User;
|
|
5
5
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
6
6
|
dateField: "ordered" | "delivery";
|
|
7
|
-
tab: "incoming" | "topick" | "picked" | "shipped" | "cancelled" | "backlog" | "all";
|
|
7
|
+
tab: "incoming" | "topick" | "picked" | "shipped" | "cancelled" | "backlog" | "all" | "not_reported";
|
|
8
8
|
page: number;
|
|
9
9
|
pageSize: number;
|
|
10
10
|
since?: string | undefined;
|
|
@@ -11,7 +11,7 @@ const listInput = z.object({
|
|
|
11
11
|
search: z.string().optional(),
|
|
12
12
|
status: z.string().optional(),
|
|
13
13
|
tab: z
|
|
14
|
-
.enum(["all", "incoming", "topick", "backlog", "picked", "shipped", "cancelled"])
|
|
14
|
+
.enum(["all", "incoming", "topick", "backlog", "picked", "shipped", "cancelled", "not_reported"])
|
|
15
15
|
.default("all"),
|
|
16
16
|
page: z.number().int().min(1).default(1),
|
|
17
17
|
pageSize: z.number().int().min(1).max(200).default(20),
|
|
@@ -2,7 +2,7 @@ import type { SupabaseClient } from "@supabase/supabase-js";
|
|
|
2
2
|
import { type SalesOrderDTO, type SalesOrdersTotals } from "./salesorders-mapping";
|
|
3
3
|
import { type OrderStage } from "./order-status";
|
|
4
4
|
/** "backlog" is géén status: het is een aparte weergave van "Te picken". */
|
|
5
|
-
export type StatusTab = "all" | OrderStage | "backlog";
|
|
5
|
+
export type StatusTab = "all" | OrderStage | "backlog" | "not_reported";
|
|
6
6
|
export interface ListParams {
|
|
7
7
|
since?: string;
|
|
8
8
|
until?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salesorders-list.server.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-list.server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"salesorders-list.server.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-list.server.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjF,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AA8ID,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,UAAU,EAClB,kBAAkB,GAAE,cAAyB,GAC5C,OAAO,CAAC,UAAU,CAAC,CA0lCrB"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { loadReviewDismissals, isReviewDismissed } from "./review-dismissals.server";
|
|
2
|
+
import { customerDisplayName } from "./customer-name";
|
|
3
|
+
import { isNotReportedLocally } from "./floriday-status";
|
|
1
4
|
import { unlinkedFloridayProducts } from "./floriday-unlinked-products";
|
|
2
5
|
import { resolveProductName } from "./product-name";
|
|
3
6
|
import { centralOrderNumber, computeTotals, mapJsonbToSalesOrderDTO, packingConfigFromFloridayPacking, } from "./salesorders-mapping";
|
|
@@ -5,6 +8,7 @@ import { cratePackageName, loadCarrierName, mergeTypeNames } from "./load-carrie
|
|
|
5
8
|
import { engineLoadCarrierLabel, normalizeLoadCarrierCode } from "./load-carriers";
|
|
6
9
|
import { normalizeTime, resolveDeliveryTimeForDate } from "./carrier-availability";
|
|
7
10
|
import { loadPlanCoverage } from "./plan-coverage.server";
|
|
11
|
+
import { combineStages } from "./floriday-status";
|
|
8
12
|
import { mergeSummaries, summarize } from "./plan-coverage";
|
|
9
13
|
import { resolveOrderNumbers } from "./order-numbers.server";
|
|
10
14
|
import { mergeStages, resolveOrderStage } from "./order-status";
|
|
@@ -357,15 +361,18 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
357
361
|
const lookup = new Map();
|
|
358
362
|
const localCustomerLookup = new Map();
|
|
359
363
|
for (const c of customerRows) {
|
|
364
|
+
const disp = customerDisplayName(c);
|
|
360
365
|
localCustomerLookup.set(String(c.id), {
|
|
361
|
-
name:
|
|
366
|
+
name: disp.name,
|
|
367
|
+
legalName: disp.legalName,
|
|
362
368
|
city: c.city ?? "",
|
|
363
369
|
});
|
|
364
370
|
const orgId = c.floriday_organization_id;
|
|
365
371
|
if (!orgId)
|
|
366
372
|
continue;
|
|
367
373
|
lookup.set(String(orgId), {
|
|
368
|
-
name:
|
|
374
|
+
name: disp.name,
|
|
375
|
+
legalName: disp.legalName,
|
|
369
376
|
postalCode: c.postal_code ?? "",
|
|
370
377
|
city: c.city ?? "",
|
|
371
378
|
logoUrl: c.logo_url ?? null,
|
|
@@ -512,6 +519,7 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
512
519
|
isReservation: localRow ? !!localRow.is_reservation : false,
|
|
513
520
|
});
|
|
514
521
|
dto.floridayFulfilled = Boolean((localRow?.custom_fields ?? {})?.floriday_fulfilled);
|
|
522
|
+
dto.notReportedToFloriday = isNotReportedLocally(dto.stage, dto.floridayFulfilled);
|
|
515
523
|
const reviewCf = (localRow?.custom_fields ?? {});
|
|
516
524
|
dto.needsManualReview = reviewCf?.needs_manual_review
|
|
517
525
|
? {
|
|
@@ -695,7 +703,9 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
695
703
|
isLocal: true,
|
|
696
704
|
isReservation: !!r.is_reservation,
|
|
697
705
|
customer: {
|
|
698
|
-
|
|
706
|
+
// Gekoppelde klant (op id) gaat vóór de opgeslagen naam op de order.
|
|
707
|
+
name: localCustomer?.name ?? r.customer_name ?? "Onbekende klant",
|
|
708
|
+
legalName: localCustomer?.legalName ?? null,
|
|
699
709
|
postalCode: "",
|
|
700
710
|
city: localCustomer?.city ?? "",
|
|
701
711
|
logoUrl: null,
|
|
@@ -715,6 +725,27 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
715
725
|
...(r.delivery_date ? [] : ["geen leverdatum"]),
|
|
716
726
|
],
|
|
717
727
|
packingSource: localPackingSource,
|
|
728
|
+
floridayFulfilled: Boolean(cf.floriday_fulfilled),
|
|
729
|
+
notReportedToFloriday: (sourceRaw === "floriday" || !!r.floriday_sales_order_id) &&
|
|
730
|
+
isNotReportedLocally(resolveOrderStage({
|
|
731
|
+
status: r.status,
|
|
732
|
+
shipped: shipmentStateByOrder.get(String(r.id))?.shipped,
|
|
733
|
+
controlledAt: shipmentStateByOrder.get(String(r.id))?.picked ? "picked" : null,
|
|
734
|
+
isReservation: !!r.is_reservation,
|
|
735
|
+
}), Boolean(cf.floriday_fulfilled)),
|
|
736
|
+
priceLines: lineItems.map((it) => ({
|
|
737
|
+
pieces: toNumber(it?.quantity) || 0,
|
|
738
|
+
unitPrice: toNumber(it?.unit_price) || 0,
|
|
739
|
+
})),
|
|
740
|
+
missingPrice: sourceRaw !== "floriday" &&
|
|
741
|
+
!r.floriday_sales_order_id &&
|
|
742
|
+
lineItems.some((it) => !(toNumber(it?.unit_price) > 0)),
|
|
743
|
+
floridayIds: sourceRaw === "floriday" || r.floriday_sales_order_id
|
|
744
|
+
? Array.from(new Set([
|
|
745
|
+
r.floriday_sales_order_id ? String(r.floriday_sales_order_id) : null,
|
|
746
|
+
...lineItems.map((it) => (it?.source_line_key ? String(it.source_line_key) : null)),
|
|
747
|
+
].filter((v) => !!v && /^[0-9a-f-]{36}$/i.test(v))))
|
|
748
|
+
: [],
|
|
718
749
|
raw: {
|
|
719
750
|
order: {
|
|
720
751
|
status: r.status ?? null,
|
|
@@ -807,6 +838,27 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
807
838
|
o.pickupLabel = shortPickup(selected.pickupDate, selected.pickupTime ?? selected.signupTime);
|
|
808
839
|
}
|
|
809
840
|
}
|
|
841
|
+
// 12a) Weggehaalde beoordelingsmeldingen (vals alarm) — los vastgelegd,
|
|
842
|
+
// zodat de order zelf niet gewijzigd hoeft te worden.
|
|
843
|
+
{
|
|
844
|
+
const reviewPairs = [];
|
|
845
|
+
for (const o of all) {
|
|
846
|
+
if (!o.needsManualReview)
|
|
847
|
+
continue;
|
|
848
|
+
const oid = o.id.startsWith("local:")
|
|
849
|
+
? o.id.slice("local:".length)
|
|
850
|
+
: (() => { const row = localRowByFoId.get(o.id); return row ? String(row.id) : null; })();
|
|
851
|
+
if (oid)
|
|
852
|
+
reviewPairs.push({ oid, o });
|
|
853
|
+
}
|
|
854
|
+
if (reviewPairs.length > 0) {
|
|
855
|
+
const dismissed = await loadReviewDismissals(supabase, reviewPairs.map((p) => p.oid));
|
|
856
|
+
for (const p of reviewPairs) {
|
|
857
|
+
if (isReviewDismissed(dismissed, p.oid, p.o.needsManualReview.reason))
|
|
858
|
+
p.o.needsManualReview = null;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
}
|
|
810
862
|
const sizeByBuffer = new Map();
|
|
811
863
|
for (const o of all) {
|
|
812
864
|
if (o.bufferId)
|
|
@@ -854,6 +906,8 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
854
906
|
reservationCount: members.filter((m) => m.isReservation).length,
|
|
855
907
|
floridayFulfilled: members.some((m) => m.floridayFulfilled),
|
|
856
908
|
floridayFulfilledCount: members.filter((m) => m.floridayFulfilled).length,
|
|
909
|
+
notReportedToFloriday: members.some((m) => m.notReportedToFloriday),
|
|
910
|
+
notReportedCount: members.filter((m) => m.notReportedToFloriday).length,
|
|
857
911
|
stage: mergeStages(members.map((m) => m.stage ?? "incoming")),
|
|
858
912
|
...(() => {
|
|
859
913
|
// De herkomst van de laatste statuswijziging binnen de buffer.
|
|
@@ -870,6 +924,8 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
870
924
|
incomplete,
|
|
871
925
|
engineCounts: members.some((m) => m.engineCounts),
|
|
872
926
|
planCoverage: mergeSummaries(members.map((m) => m.planCoverage)),
|
|
927
|
+
missingPrice: members.some((m) => m.missingPrice),
|
|
928
|
+
floridayStatus: mergeFloridayStatus(members.map((m) => m.floridayStatus)),
|
|
873
929
|
shifted: members.some((m) => m.shifted),
|
|
874
930
|
printedAt: members.map((m) => m.printedAt).find((v) => !!v) ?? null,
|
|
875
931
|
pickDate: members
|
|
@@ -962,11 +1018,15 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
962
1018
|
};
|
|
963
1019
|
// Achterstand is een weergave-categorie binnen "Te picken", geen eigen status.
|
|
964
1020
|
const isBacklogGroup = (members) => stageOf(members) === "topick" && members.some((m) => m.backlog);
|
|
1021
|
+
// Verzonden in het ERP, nog niet afgemeld bij Floriday (eigen kenmerk).
|
|
1022
|
+
const isNotReportedGroup = (members) => members.some((m) => m.notReportedToFloriday);
|
|
965
1023
|
const matchesTab = (members) => {
|
|
966
1024
|
if (params.tab === "all")
|
|
967
1025
|
return true;
|
|
968
1026
|
if (params.tab === "backlog")
|
|
969
1027
|
return isBacklogGroup(members);
|
|
1028
|
+
if (params.tab === "not_reported")
|
|
1029
|
+
return isNotReportedGroup(members);
|
|
970
1030
|
if (stageOf(members) !== params.tab)
|
|
971
1031
|
return false;
|
|
972
1032
|
// Achterstandorders horen onder hun eigen tab, niet bij het gewone "Te picken".
|
|
@@ -984,8 +1044,11 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
984
1044
|
picked: 0,
|
|
985
1045
|
shipped: 0,
|
|
986
1046
|
cancelled: 0,
|
|
1047
|
+
not_reported: 0,
|
|
987
1048
|
};
|
|
988
1049
|
for (const g of withoutTab) {
|
|
1050
|
+
if (isNotReportedGroup(g))
|
|
1051
|
+
statusCounts.not_reported++;
|
|
989
1052
|
if (isBacklogGroup(g)) {
|
|
990
1053
|
statusCounts.backlog++;
|
|
991
1054
|
continue; // telt niet mee bij het gewone "Te picken"
|
|
@@ -1035,6 +1098,29 @@ export async function buildSalesOrdersList(supabase, params, connectionSupabase
|
|
|
1035
1098
|
}
|
|
1036
1099
|
}
|
|
1037
1100
|
}
|
|
1101
|
+
// 15) Floriday-stand uit het statusoverzicht (alleen weergave), alleen voor de
|
|
1102
|
+
// zichtbare rijen, in één verzoek (max 100). Fail closed: "stand onbekend".
|
|
1103
|
+
if (!params.all) {
|
|
1104
|
+
const visible = pageGroups.flat();
|
|
1105
|
+
const idsOf = (o) => o.floridayIds && o.floridayIds.length
|
|
1106
|
+
? o.floridayIds
|
|
1107
|
+
: !o.id.startsWith("local:") && !o.id.startsWith("mailbox-proposal:") && /^[0-9a-f-]{36}$/i.test(o.id) && !o.isLocal
|
|
1108
|
+
? [o.id]
|
|
1109
|
+
: [];
|
|
1110
|
+
const allIds = Array.from(new Set(visible.flatMap(idsOf))).slice(0, 100);
|
|
1111
|
+
if (allIds.length) {
|
|
1112
|
+
const { loadFloridayStatuses } = await import("./floriday-status.server");
|
|
1113
|
+
const res = await loadFloridayStatuses(allIds);
|
|
1114
|
+
for (const o of visible) {
|
|
1115
|
+
const ids = idsOf(o);
|
|
1116
|
+
if (!ids.length)
|
|
1117
|
+
continue;
|
|
1118
|
+
o.floridayStatus = summarizeFloridayStatus(ids, res.entries, res.error);
|
|
1119
|
+
}
|
|
1120
|
+
if (res.error)
|
|
1121
|
+
warnings.push(`Floriday-stand niet beschikbaar (${res.error}).`);
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1038
1124
|
const rows = pageGroups.map(mergeGroup);
|
|
1039
1125
|
// Totalen over de volledige gefilterde set (alle orders in elke buffer).
|
|
1040
1126
|
const totals = computeTotals(filteredGroups.map(mergeGroup));
|
|
@@ -1094,3 +1180,18 @@ async function loadGroupPacking(supabase) {
|
|
|
1094
1180
|
}
|
|
1095
1181
|
return byName;
|
|
1096
1182
|
}
|
|
1183
|
+
function summarizeFloridayStatus(ids, entries, error) {
|
|
1184
|
+
const found = ids.map((id) => entries.get(id)).filter((e) => !!e);
|
|
1185
|
+
if (found.length === 0)
|
|
1186
|
+
return { stage: "onbekend", error: error ?? "geen antwoord", entries: [] };
|
|
1187
|
+
return { stage: combineStages(found.map((e) => e.floridayStage)), error: null, entries: found };
|
|
1188
|
+
}
|
|
1189
|
+
function mergeFloridayStatus(list) {
|
|
1190
|
+
const present = list.filter((x) => !!x);
|
|
1191
|
+
if (present.length === 0)
|
|
1192
|
+
return null;
|
|
1193
|
+
const entries = present.flatMap((p) => p.entries);
|
|
1194
|
+
if (entries.length === 0)
|
|
1195
|
+
return present[0];
|
|
1196
|
+
return { stage: combineStages(entries.map((e) => e.floridayStage)), error: null, entries };
|
|
1197
|
+
}
|
|
@@ -48,6 +48,9 @@ export interface SalesOrderDTO {
|
|
|
48
48
|
* Nooit sturend voor status, tabs, filters, facturatie of voorraadverbruik.
|
|
49
49
|
*/
|
|
50
50
|
floridayFulfilled?: boolean;
|
|
51
|
+
/** Verzonden in het ERP, nog niet afgemeld bij Floriday (alleen weergave). */
|
|
52
|
+
notReportedToFloriday?: boolean;
|
|
53
|
+
notReportedCount?: number;
|
|
51
54
|
/** Aantal orders binnen een buffer dat is doorgegeven aan Floriday. */
|
|
52
55
|
floridayFulfilledCount?: number;
|
|
53
56
|
/**
|
|
@@ -88,12 +91,25 @@ export interface SalesOrderDTO {
|
|
|
88
91
|
backlogDays?: number | null;
|
|
89
92
|
backlogLeverdatum?: string | null;
|
|
90
93
|
backlogUnknown?: boolean;
|
|
94
|
+
/** Floriday salesOrderId's op deze order (voor het statusoverzicht). */
|
|
95
|
+
floridayIds?: string[];
|
|
96
|
+
/** Floriday-stand uit het statusoverzicht; alleen weergave. */
|
|
97
|
+
floridayStatus?: import("./floriday-status").FloridayStatusSummary | null;
|
|
98
|
+
/** Actieve orderregels: stuks en prijs per stuk (voor de totaalregel). */
|
|
99
|
+
priceLines?: {
|
|
100
|
+
pieces: number;
|
|
101
|
+
unitPrice: number;
|
|
102
|
+
}[];
|
|
103
|
+
/** Handmatige/Mailbox-order met minstens één regel zonder prijs. */
|
|
104
|
+
missingPrice?: boolean;
|
|
91
105
|
/** Vervoerder van de order (indien bekend). */
|
|
92
106
|
carrierName?: string | null;
|
|
93
107
|
/** Concrete ontbrekende gegevens, bv. "geen klant gekoppeld". */
|
|
94
108
|
incomplete?: string[];
|
|
95
109
|
customer: {
|
|
96
110
|
name: string;
|
|
111
|
+
/** Bedrijfsnaam (company_name) als die afwijkt van de getoonde handelsnaam. */
|
|
112
|
+
legalName?: string | null;
|
|
97
113
|
postalCode: string;
|
|
98
114
|
city: string;
|
|
99
115
|
logoUrl: string | null;
|
|
@@ -114,6 +130,7 @@ export interface SalesOrderDTO {
|
|
|
114
130
|
}
|
|
115
131
|
export interface CustomerLookupEntry {
|
|
116
132
|
name: string;
|
|
133
|
+
legalName?: string | null;
|
|
117
134
|
postalCode: string;
|
|
118
135
|
city: string;
|
|
119
136
|
logoUrl: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -155,6 +155,7 @@ export function mapJsonbToSalesOrderDTO(o, customerLookup, tradeItemLookup, crat
|
|
|
155
155
|
totalPieces: numberOfPieces,
|
|
156
156
|
customer: {
|
|
157
157
|
name: found?.name ?? "Onbekende klant",
|
|
158
|
+
legalName: found?.legalName ?? null,
|
|
158
159
|
postalCode: found?.postalCode ?? "",
|
|
159
160
|
city: found?.city ?? "",
|
|
160
161
|
logoUrl: found?.logoUrl ?? null,
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { type SalesOrderDTO } from "./salesorders-mapping";
|
|
2
|
-
export declare function runSalesOrdersSyncFromCron(): Promise<
|
|
3
|
-
ok: boolean;
|
|
4
|
-
mirrorOk: boolean;
|
|
5
|
-
mirrored: number;
|
|
6
|
-
}>;
|
|
2
|
+
export declare function runSalesOrdersSyncFromCron(): Promise<any>;
|
|
7
3
|
export declare const runSalesOrdersSync: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
8
4
|
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
9
5
|
userId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salesorders.functions.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders.functions.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAqD/B,wBAAsB,0BAA0B
|
|
1
|
+
{"version":3,"file":"salesorders.functions.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders.functions.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAqD/B,wBAAsB,0BAA0B,iBAM/C;AAGD,eAAO,MAAM,kBAAkB;;;;;QA3BzB,OAAO;cACD,OAAO;cACP,MAAM;GA2B+B,CAAC;AA6BlD,eAAO,MAAM,gBAAgB;;;;6CAEJ,OAAO;;;;;;;;;;;;;GAmC5B,CAAC;AAGL,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDnC,CAAC;AASL,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;0CAEV,OAAO;;mCA2ZzB,CAAC;AAQL,eAAO,MAAM,uBAAuB;;;;0CAEd,OAAO;;;;;GAQzB,CAAC;AAOL,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,qBAAqB;;;;6EA4E9B,CAAC"}
|