@flowselections/logistiek-engine 1.0.138 → 1.0.147
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/GearchiveerdeOrdersCard.d.ts +2 -0
- package/dist-lib/components/GearchiveerdeOrdersCard.d.ts.map +1 -0
- package/dist-lib/components/GearchiveerdeOrdersCard.js +32 -0
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +1 -1
- package/dist-lib/components/PlanWachtrijPage.d.ts.map +1 -1
- package/dist-lib/components/PlanWachtrijPage.js +20 -13
- package/dist-lib/components/RuleEnginePage.d.ts.map +1 -1
- package/dist-lib/components/RuleEnginePage.js +24 -3
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +20 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +57 -0
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/types.d.ts +728 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/briefTransport.server.d.ts +17 -0
- package/dist-lib/lib/briefTransport.server.d.ts.map +1 -0
- package/dist-lib/lib/briefTransport.server.js +41 -0
- package/dist-lib/lib/controlScan.server.d.ts.map +1 -1
- package/dist-lib/lib/controlScan.server.js +16 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +21 -0
- package/dist-lib/lib/layoutPrint.server.d.ts +18 -0
- package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
- package/dist-lib/lib/layoutPrint.server.js +32 -1
- package/dist-lib/lib/logisticsTasks.d.ts +1 -0
- package/dist-lib/lib/logisticsTasks.d.ts.map +1 -1
- package/dist-lib/lib/logisticsTasks.js +2 -1
- package/dist-lib/lib/modulePrompts.d.ts +1 -0
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +338 -1
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/planQueue.server.js +13 -0
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +18 -0
- package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/shippingNoteQueue.server.js +18 -1
- package/dist-lib/lib/stickerQueue.server.d.ts +15 -0
- package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -0
- package/dist-lib/lib/stickerQueue.server.js +349 -0
- package/dist-lib/lib/stickerRules.d.ts +38 -0
- package/dist-lib/lib/stickerRules.d.ts.map +1 -0
- package/dist-lib/lib/stickerRules.js +111 -0
- package/package.json +2 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
export interface BriefTransport {
|
|
3
|
+
velden: Record<string, unknown>;
|
|
4
|
+
onbekend: string[];
|
|
5
|
+
}
|
|
6
|
+
/** Puur: databaseantwoord -> payloadvelden. Onbekend = weglaten, nooit raden. */
|
|
7
|
+
export declare function bouwBriefTransport(data: unknown): BriefTransport;
|
|
8
|
+
export declare function onbekendTekst(onbekend: string[]): string | null;
|
|
9
|
+
/** Haalt het blok op; een fout blokkeert het printen niet. */
|
|
10
|
+
export declare function briefTransport(sb: SupabaseClient, orderId: string | null, cartId: string | null, log: {
|
|
11
|
+
traceId?: string | null;
|
|
12
|
+
orderRef?: string | null;
|
|
13
|
+
cartRef?: string | null;
|
|
14
|
+
phase: string;
|
|
15
|
+
actor: string;
|
|
16
|
+
}): Promise<Record<string, unknown>>;
|
|
17
|
+
//# sourceMappingURL=briefTransport.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"briefTransport.server.d.ts","sourceRoot":"","sources":["../../src/lib/briefTransport.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAiBhE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAO/D;AAED,8DAA8D;AAC9D,wBAAsB,cAAc,CAClC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChH,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAOlC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { trace } from "./trace.server.js";
|
|
2
|
+
/** Puur: databaseantwoord -> payloadvelden. Onbekend = weglaten, nooit raden. */
|
|
3
|
+
export function bouwBriefTransport(data) {
|
|
4
|
+
const r = (data && typeof data === "object" ? data : {});
|
|
5
|
+
const velden = {};
|
|
6
|
+
const v = r["vervoerder"];
|
|
7
|
+
const naam = typeof v?.["naam"] === "string" ? v["naam"].trim() : "";
|
|
8
|
+
if (naam) {
|
|
9
|
+
const code = typeof v?.["code"] === "string" ? v["code"].trim() : "";
|
|
10
|
+
velden["vervoerder"] = code ? { naam, code } : { naam };
|
|
11
|
+
}
|
|
12
|
+
const om = r["ophaalmoment"];
|
|
13
|
+
if (typeof om === "string" && !Number.isNaN(Date.parse(om)))
|
|
14
|
+
velden["ophaalmoment"] = om;
|
|
15
|
+
const adres = r["ophaaladres"];
|
|
16
|
+
if (typeof adres === "string" && adres.trim())
|
|
17
|
+
velden["ophaaladres"] = adres.trim();
|
|
18
|
+
const onbekend = Array.isArray(r["onbekend"]) ? r["onbekend"].map(String) : [];
|
|
19
|
+
if (!naam && !onbekend.includes("vervoerder"))
|
|
20
|
+
onbekend.push("vervoerder");
|
|
21
|
+
if (!velden["ophaalmoment"] && !onbekend.some((x) => x.startsWith("ophaalmoment")))
|
|
22
|
+
onbekend.push("ophaalmoment");
|
|
23
|
+
return { velden, onbekend };
|
|
24
|
+
}
|
|
25
|
+
export function onbekendTekst(onbekend) {
|
|
26
|
+
const delen = onbekend
|
|
27
|
+
.filter((x) => x !== "ophaaladres")
|
|
28
|
+
.map((x) => x === "ophaalmoment_niet_eenduidig" ? "ophaalmoment niet eenduidig" : x === "order" ? "order niet gevonden" : `${x} onbekend`);
|
|
29
|
+
return delen.length ? `Op deze brief ontbreekt: ${delen.join(", ")}.` : null;
|
|
30
|
+
}
|
|
31
|
+
/** Haalt het blok op; een fout blokkeert het printen niet. */
|
|
32
|
+
export async function briefTransport(sb, orderId, cartId, log) {
|
|
33
|
+
if (!orderId)
|
|
34
|
+
return {};
|
|
35
|
+
const { data, error } = await sb.rpc("logistics_brief_transport", { p_order_id: orderId, p_cart_id: cartId });
|
|
36
|
+
const res = error ? { velden: {}, onbekend: ["vervoerder", "ophaalmoment"] } : bouwBriefTransport(data);
|
|
37
|
+
const tekst = error ? `Vervoerder/ophaalmoment niet te lezen: ${error.message}` : onbekendTekst(res.onbekend);
|
|
38
|
+
if (tekst)
|
|
39
|
+
await trace(sb, { ...log, step: "Vervoerder/ophaalmoment voor de brief", status: "waarschuwing", reason: tekst });
|
|
40
|
+
return res.velden;
|
|
41
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlScan.server.d.ts","sourceRoot":"","sources":["../../src/lib/controlScan.server.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"controlScan.server.d.ts","sourceRoot":"","sources":["../../src/lib/controlScan.server.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAiBD,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAgBzC,mDAAmD;AACnD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1F,GAAG,GAAE,MAAmB,GACvB,UAAU,GAAG,MAAM,GAAG,IAAI,CAK5B;AA6BD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,cAAc,CAAC,CAuQzB"}
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
// en dubbele scans worden al in de database geblokkeerd. Geen omgevings- of
|
|
15
15
|
// klantwaarden in deze code; de printer komt uit de werkwijze in de database.
|
|
16
16
|
// ============================================================================
|
|
17
|
-
import { printViaLayoutGecontroleerd, floridayLayout } from "./layoutPrint.server.js";
|
|
17
|
+
import { printViaLayoutGecontroleerd, floridayLayout, floridayPdfOpslag } from "./layoutPrint.server.js";
|
|
18
|
+
import { briefTransport } from "./briefTransport.server.js";
|
|
18
19
|
import { isFloridayCancelled, FLORIDAY_CANCELLED_REASON } from "./floridayCancellation.server.js";
|
|
19
20
|
import { trace } from "./trace.server.js";
|
|
20
21
|
/** Maximaal aantal wachtrondes op Floriday voordat de controle als mislukt stopt. */
|
|
@@ -238,7 +239,19 @@ export async function runControlScanQueue(sb, options = {}) {
|
|
|
238
239
|
run.failed++;
|
|
239
240
|
continue;
|
|
240
241
|
}
|
|
242
|
+
// Blijvende verwijzing { bucket, pad } naast de tijdelijke link.
|
|
243
|
+
const pdfOpslag = await floridayPdfOpslag(sb, {
|
|
244
|
+
fulfillmentOrderId,
|
|
245
|
+
labelCode: doc["logisticLabelCode"] ?? null,
|
|
246
|
+
pdfUrl: url,
|
|
247
|
+
});
|
|
241
248
|
// Via de Layout maker; idempotent per controle.
|
|
249
|
+
const transport = await briefTransport(sb, row.order_id ?? null, row.cart_id ?? null, {
|
|
250
|
+
orderRef: row.order_number ?? row.order_id ?? null,
|
|
251
|
+
cartRef: row.cart_id ?? null,
|
|
252
|
+
phase: "controle",
|
|
253
|
+
actor: "logistiek-engine:controlescan",
|
|
254
|
+
});
|
|
242
255
|
const printed = await printViaLayoutGecontroleerd(sb, {
|
|
243
256
|
documenttype: "afleverbrief",
|
|
244
257
|
layoutId: layout.layoutId,
|
|
@@ -259,6 +272,8 @@ export async function runControlScanQueue(sb, options = {}) {
|
|
|
259
272
|
cart_id: row.cart_id,
|
|
260
273
|
fulfillment_order_id: fulfillmentOrderId,
|
|
261
274
|
control_scan_id: row.id,
|
|
275
|
+
...(pdfOpslag ? { pdf_opslag: pdfOpslag } : {}),
|
|
276
|
+
...transport,
|
|
262
277
|
},
|
|
263
278
|
});
|
|
264
279
|
if (!printed.ok) {
|
|
@@ -265,6 +265,15 @@ async function runTickRound(supabase, tickJob, ident) {
|
|
|
265
265
|
shippingNotes = { error: String(e?.message ?? e) };
|
|
266
266
|
shippingNotesOk = false;
|
|
267
267
|
}
|
|
268
|
+
// Stickerronde: klant- en tray-stickers (Engine is eigenaar).
|
|
269
|
+
let stickers = null;
|
|
270
|
+
try {
|
|
271
|
+
const { runStickerQueue } = await import("../stickerQueue.server.js");
|
|
272
|
+
stickers = await runStickerQueue(supabase, { limit: 10 });
|
|
273
|
+
}
|
|
274
|
+
catch (e) {
|
|
275
|
+
stickers = { error: String(e?.message ?? e) };
|
|
276
|
+
}
|
|
268
277
|
// Seintjes van de pickschermen: karplan ontbreekt. Direct oppakken.
|
|
269
278
|
let cartPlanRequests = null;
|
|
270
279
|
try {
|
|
@@ -285,6 +294,16 @@ async function runTickRound(supabase, tickJob, ident) {
|
|
|
285
294
|
catch (e) {
|
|
286
295
|
queueCleanup = { error: String(e?.message ?? e) };
|
|
287
296
|
}
|
|
297
|
+
// Blokkades van verzonden orders sluiten, niet-geleverde verlopen orders
|
|
298
|
+
// archiveren en meldingen sluiten waarvan de oorzaak weg is.
|
|
299
|
+
let housekeeping = null;
|
|
300
|
+
try {
|
|
301
|
+
const { data, error } = await supabase.rpc("logistics_plan_housekeeping");
|
|
302
|
+
housekeeping = error ? { error: error.message } : data;
|
|
303
|
+
}
|
|
304
|
+
catch (e) {
|
|
305
|
+
housekeeping = { error: String(e?.message ?? e) };
|
|
306
|
+
}
|
|
288
307
|
// Pakbonnen zonder kar, of van een kar die na een herindeling niet meer
|
|
289
308
|
// bestaat, kunnen nooit een barcode krijgen. Die worden hier afgesloten met
|
|
290
309
|
// een leesbare reden in plaats van eeuwig te blijven wachten.
|
|
@@ -339,7 +358,9 @@ async function runTickRound(supabase, tickJob, ident) {
|
|
|
339
358
|
shippingNotes,
|
|
340
359
|
barcodes,
|
|
341
360
|
cartPlanRequests,
|
|
361
|
+
stickers,
|
|
342
362
|
queueCleanup,
|
|
363
|
+
housekeeping,
|
|
343
364
|
orphanPrintJobs,
|
|
344
365
|
}, { status: shippingNotesOk ? 200 : 500, headers: CORS_HEADERS });
|
|
345
366
|
}
|
|
@@ -8,6 +8,8 @@ export interface LayoutPrintInput {
|
|
|
8
8
|
printPlekId?: string | null;
|
|
9
9
|
herkomst?: string | null;
|
|
10
10
|
isHerprint?: boolean;
|
|
11
|
+
/** Aantal kopieën (standaard 1). */
|
|
12
|
+
kopieen?: number;
|
|
11
13
|
/** Alleen snake_case-velden: print_plek_id, order_id, ordernummer, queue_item_id, cart_id, fulfillment_order_id. */
|
|
12
14
|
payload: Record<string, unknown>;
|
|
13
15
|
idempotentieSleutel: string;
|
|
@@ -33,6 +35,22 @@ export declare function floridayLayout(sb: SupabaseClient, documenttype: string)
|
|
|
33
35
|
layoutId: string | null;
|
|
34
36
|
reden: string | null;
|
|
35
37
|
}>;
|
|
38
|
+
/** Bucket uit een ondertekende opslaglink (/storage/v1/object/sign/<bucket>/<pad>). */
|
|
39
|
+
export declare function bucketUitLink(url: string | null | undefined): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Blijvende verwijzing naar de opgeslagen Floriday-pdf: { bucket, pad }.
|
|
42
|
+
* Het pad komt op id uit floriday_logistic_labels_cache (eigendom van de
|
|
43
|
+
* Floriday-koppeling); de bucket uit de ondertekende link. Alleen bij precies
|
|
44
|
+
* één rij; anders null (geen gok, printen gaat door met pdf_url).
|
|
45
|
+
*/
|
|
46
|
+
export declare function floridayPdfOpslag(sb: SupabaseClient, input: {
|
|
47
|
+
fulfillmentOrderId: string | null;
|
|
48
|
+
labelCode?: string | null;
|
|
49
|
+
pdfUrl: string | null;
|
|
50
|
+
}): Promise<{
|
|
51
|
+
bucket: string;
|
|
52
|
+
pad: string;
|
|
53
|
+
} | null>;
|
|
36
54
|
export declare function foutcode(message: string): string;
|
|
37
55
|
export declare function printViaLayout(sb: SupabaseClient, input: LayoutPrintInput): Promise<LayoutPrintResult>;
|
|
38
56
|
export type GecontroleerdResult = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPrint.server.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPrint.server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oHAAoH;IACpH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAInF,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAuBvE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,cAAc,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAQ5D;AAKD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAqD5B;AAOD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,0EAA0E;AAC1E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI9F;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,gBAAgB,EACvB,MAAM,SAAI,GACT,OAAO,CAAC,mBAAmB,CAAC,CAqC9B"}
|
|
1
|
+
{"version":3,"file":"layoutPrint.server.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPrint.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,37 @@ export async function floridayLayout(sb, documenttype) {
|
|
|
51
51
|
const id = typeof r["layout_id"] === "string" ? r["layout_id"] : null;
|
|
52
52
|
return { layoutId: id, reden: id ? null : String(r["reden"] ?? "Geen actieve Floriday-layout gevonden.") };
|
|
53
53
|
}
|
|
54
|
+
/** Bucket uit een ondertekende opslaglink (/storage/v1/object/sign/<bucket>/<pad>). */
|
|
55
|
+
export function bucketUitLink(url) {
|
|
56
|
+
if (!url)
|
|
57
|
+
return null;
|
|
58
|
+
const m = /\/storage\/v1\/object\/(?:sign|public|authenticated)\/([^/?#]+)\//.exec(url);
|
|
59
|
+
return m ? decodeURIComponent(m[1]) : null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Blijvende verwijzing naar de opgeslagen Floriday-pdf: { bucket, pad }.
|
|
63
|
+
* Het pad komt op id uit floriday_logistic_labels_cache (eigendom van de
|
|
64
|
+
* Floriday-koppeling); de bucket uit de ondertekende link. Alleen bij precies
|
|
65
|
+
* één rij; anders null (geen gok, printen gaat door met pdf_url).
|
|
66
|
+
*/
|
|
67
|
+
export async function floridayPdfOpslag(sb, input) {
|
|
68
|
+
if (!input.fulfillmentOrderId)
|
|
69
|
+
return null;
|
|
70
|
+
const bucket = bucketUitLink(input.pdfUrl);
|
|
71
|
+
if (!bucket)
|
|
72
|
+
return null;
|
|
73
|
+
let q = sb
|
|
74
|
+
.from("floriday_logistic_labels_cache")
|
|
75
|
+
.select("storage_path")
|
|
76
|
+
.eq("fulfillment_order_id", input.fulfillmentOrderId);
|
|
77
|
+
if (input.labelCode)
|
|
78
|
+
q = q.eq("logistic_label_code", input.labelCode);
|
|
79
|
+
const { data, error } = await q.limit(2);
|
|
80
|
+
if (error || !Array.isArray(data) || data.length !== 1)
|
|
81
|
+
return null;
|
|
82
|
+
const pad = String(data[0]["storage_path"] ?? "").trim();
|
|
83
|
+
return pad ? { bucket, pad } : null;
|
|
84
|
+
}
|
|
54
85
|
const HINT = ' Los dit op bij Layouts en printers en druk daarna op "Opnieuw proberen"; opnieuw scannen is niet nodig.';
|
|
55
86
|
export function foutcode(message) {
|
|
56
87
|
const m = /^([A-Z_]+):/.exec(message.trim());
|
|
@@ -65,7 +96,7 @@ export async function printViaLayout(sb, input) {
|
|
|
65
96
|
_layout_id: input.layoutId ?? null,
|
|
66
97
|
_print_plek_id: input.printPlekId ?? null,
|
|
67
98
|
_werkplek: null,
|
|
68
|
-
_kopieen: 1,
|
|
99
|
+
_kopieen: Math.max(1, Math.floor(input.kopieen ?? 1)),
|
|
69
100
|
_herkomst: input.herkomst ?? null,
|
|
70
101
|
_is_herprint: input.isHerprint ?? false,
|
|
71
102
|
_payload: input.payload,
|
|
@@ -7,6 +7,7 @@ export declare const LOGISTICS_MODULES: {
|
|
|
7
7
|
readonly klanten: "Floriday - Klanten Module";
|
|
8
8
|
readonly mailbox: "Mail box voor bestellingen ERP Kwekers";
|
|
9
9
|
readonly personeelsplanning: "Personeelsplanning module";
|
|
10
|
+
readonly logistiek: "Logistiek Engine";
|
|
10
11
|
};
|
|
11
12
|
export type LogisticsModuleKey = keyof typeof LOGISTICS_MODULES;
|
|
12
13
|
export declare const TASK_TYPES: readonly ["buffer.close", "stock.reserve", "load.compose", "pick.execute", "scan.verify", "control.execute", "print.packing_slip", "print.sticker", "print.shipping_note", "print.control_note", "print.production_note", "transport.dispatch"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logisticsTasks.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsTasks.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"logisticsTasks.d.ts","sourceRoot":"","sources":["../../src/lib/logisticsTasks.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB;;;;;;;;;;CAUpB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEhE,eAAO,MAAM,UAAU,iPAab,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAapE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAaxD,CAAC;AAEF,eAAO,MAAM,aAAa,wGAShB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CASjE,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,EAMnD,CAAC;AAGF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAErE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEvE"}
|
|
@@ -13,6 +13,7 @@ export const LOGISTICS_MODULES = {
|
|
|
13
13
|
klanten: "Floriday - Klanten Module",
|
|
14
14
|
mailbox: "Mail box voor bestellingen ERP Kwekers",
|
|
15
15
|
personeelsplanning: "Personeelsplanning module",
|
|
16
|
+
logistiek: "Logistiek Engine",
|
|
16
17
|
};
|
|
17
18
|
export const TASK_TYPES = [
|
|
18
19
|
"buffer.close",
|
|
@@ -36,7 +37,7 @@ export const TASK_OWNER = {
|
|
|
36
37
|
"scan.verify": "scanners",
|
|
37
38
|
"control.execute": "afhandeling",
|
|
38
39
|
"print.packing_slip": "pickschermen",
|
|
39
|
-
"print.sticker": "
|
|
40
|
+
"print.sticker": "logistiek",
|
|
40
41
|
"print.shipping_note": "afhandeling",
|
|
41
42
|
"print.control_note": "afhandeling",
|
|
42
43
|
"print.production_note": "pickschermen",
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export declare const PROMPT_MODULE_LABELS: {
|
|
7
7
|
readonly layoutmaker: "Layout maker (pakbonnen, verzendbrieven, extra)";
|
|
8
8
|
readonly floridaykoppeling: "Floriday koppeling (authenticatie en gateway)";
|
|
9
|
+
readonly dashboards: "Dashboards (dashboard-erp-kwekers)";
|
|
9
10
|
readonly verkoop: "Floriday - Verkoop Module";
|
|
10
11
|
readonly voorraad: "Floriday - Voorraad Module";
|
|
11
12
|
readonly afhandeling: "Floriday - Afhandeling Module";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modulePrompts.d.ts","sourceRoot":"","sources":["../../src/lib/modulePrompts.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"modulePrompts.d.ts","sourceRoot":"","sources":["../../src/lib/modulePrompts.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;CAKvB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAKhE,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAgpKD,eAAO,MAAM,cAAc,EAAE,YAAY,EAUL,CAAC;AAErC,gEAAgE;AAChE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAmBR;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE9D;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,IAAI,MAAM,CAiB9C;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,eAAe,EAC1B,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAIR"}
|