@flowselections/pick-schermen-kwekers 1.0.24 → 1.0.28

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pickAlreadyPrinted.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickAlreadyPrinted.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickAlreadyPrinted.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { ALREADY_PRINTED_MESSAGE, resettableJobs, resultsFromBatch, trackableJobs } from "../pickCartResults";
3
+ const cart = (id, n) => ({
4
+ cartId: id, cartIndex: n, cartTotal: 2, cartLabel: `K${n}`, isFullCart: true,
5
+ slipVariant: "full_cart", barcode: `B${n}`, isShared: false, items: [],
6
+ });
7
+ describe("al geprinte kar via pick_complete_print_carts", () => {
8
+ it("already_printed → niet aangemaakt met letterlijke reden; niets volgen of terugzetten", () => {
9
+ const r = resultsFromBatch([cart("c1", 1)], [
10
+ { cartId: "c1", cartLabel: "K1", jobId: null, status: "already_printed", message: "al geprint; kies Herprint" },
11
+ ], ["c1"]);
12
+ expect(r[0].outcome).toBe("not_created");
13
+ expect(r[0].reason).toBe("al geprint; kies Herprint");
14
+ expect(ALREADY_PRINTED_MESSAGE).toBe("al geprint; kies Herprint");
15
+ expect(trackableJobs(r)).toEqual([]);
16
+ });
17
+ it("half geprinte rij: K1 al geprint, K2 aangemaakt", () => {
18
+ const r = resultsFromBatch([cart("c1", 1), cart("c2", 2)], [
19
+ { cartId: "c1", cartLabel: "K1", jobId: null, status: "already_printed", message: null },
20
+ { cartId: "c2", cartLabel: "K2", jobId: "j2", status: "created", message: null },
21
+ ], ["c1"]);
22
+ expect(r.map((x) => x.outcome)).toEqual(["not_created", "created"]);
23
+ expect(r[0].reason).toBe(ALREADY_PRINTED_MESSAGE);
24
+ expect(trackableJobs(r).map((j) => j.jobId)).toEqual(["j2"]);
25
+ expect(resettableJobs(trackableJobs(r)).map((j) => j.cartId)).toEqual(["c2"]);
26
+ });
27
+ it("oudere database zonder status: huidig gedrag", () => {
28
+ const r = resultsFromBatch([cart("c1", 1)], [{ cartId: "c1", cartLabel: "K1", jobId: null }], []);
29
+ expect(r[0].reason).toBe("Er loopt al een opdracht voor deze kar; geen nieuwe aangemaakt.");
30
+ });
31
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pickCartResults.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickCartResults.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickCartResults.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ vi.mock("@flowselections/core", () => ({ supabase: {} }));
3
+ import { CartMissingError, cartsForRow, reprintCartsIndividually, resettableJobs, resultsFromBatch, runExclusive, summarizeCartResults, trackableJobs, } from "../pickCartResults";
4
+ const cart = (id, n) => ({ cartId: id, cartIndex: n, cartTotal: 3, cartLabel: `K${n}`, isFullCart: true, slipVariant: "full_cart", barcode: "b", isShared: false, items: [] });
5
+ const plan = { orderId: "o", cartTotal: 3, carts: [cart("c1", 1), cart("c2", 2), cart("c3", 3)], warnings: [] };
6
+ describe("(a) dubbelklik", () => {
7
+ it("twee snelle klikken: één aanvraag", async () => {
8
+ const lock = { current: false };
9
+ const rpc = vi.fn(() => new Promise((r) => setTimeout(r, 20)));
10
+ const [a, b] = await Promise.all([runExclusive(lock, rpc), runExclusive(lock, rpc)]);
11
+ expect(rpc).toHaveBeenCalledTimes(1);
12
+ expect([a, b]).toEqual([true, false]);
13
+ // na afloop weer vrij
14
+ await runExclusive(lock, rpc);
15
+ expect(rpc).toHaveBeenCalledTimes(2);
16
+ });
17
+ });
18
+ describe("(b)+(c) herprint per kar", () => {
19
+ it("K2 geweigerd: K1/K3 gelukt, K2 niet aangemaakt, geen terugzetting", async () => {
20
+ const printed = ["c1", "c2", "c3"];
21
+ const before = [...printed];
22
+ const reprint = vi.fn(async (id) => {
23
+ if (id === "c2")
24
+ throw new Error("Deze kar is net al naar de printer gestuurd. Wacht even voordat je opnieuw print.");
25
+ return `job-${id}`;
26
+ });
27
+ const results = await reprintCartsIndividually(plan.carts, reprint);
28
+ expect(reprint).toHaveBeenCalledTimes(3);
29
+ expect(results.map((r) => r.outcome)).toEqual(["created", "not_created", "created"]);
30
+ const jobs = trackableJobs(results);
31
+ expect(jobs.every((j) => j.reprint === true)).toBe(true);
32
+ // stel: alle herprintopdrachten mislukken later → niets terugzetten
33
+ expect(resettableJobs(jobs)).toHaveLength(0);
34
+ expect(printed).toEqual(before);
35
+ const s = summarizeCartResults(results);
36
+ expect(s.lines).toHaveLength(3);
37
+ expect(s.lines[1]).toMatch(/^K2 — niet aangemaakt/);
38
+ });
39
+ it("mislukte eerste print wordt wél teruggezet, herprint niet", () => {
40
+ const failed = [
41
+ { cartId: "c1", reprint: false },
42
+ { cartId: "c2", reprint: true },
43
+ { cartId: "c3" }, // oude opdracht zonder vlag = eerste print
44
+ ];
45
+ expect(resettableJobs(failed).map((f) => f.cartId)).toEqual(["c1", "c3"]);
46
+ });
47
+ it("eerste print zonder opdracht-id telt als niet aangemaakt", () => {
48
+ const r = resultsFromBatch(plan.carts, [
49
+ { cartId: "c1", jobId: "j1", cartLabel: "K1" },
50
+ { cartId: "c2", jobId: null, cartLabel: "K2" },
51
+ { cartId: "c3", jobId: "j3", cartLabel: "K3" },
52
+ ], []);
53
+ expect(r.map((x) => x.outcome)).toEqual(["created", "not_created", "created"]);
54
+ expect(trackableJobs(r).map((j) => j.cartId)).toEqual(["c1", "c3"]);
55
+ });
56
+ });
57
+ describe("(d) alleen karren van deze rij", () => {
58
+ const row = (payload) => ({ id: "q", payload });
59
+ it("rij met eigen kar: precies die kar", () => {
60
+ expect(cartsForRow(row({ cartRowFor: "o", cartId: "c2" }), plan).map((c) => c.cartId)).toEqual(["c2"]);
61
+ });
62
+ it("eigen kar niet in karplan: verversfout, niets verstuurd", () => {
63
+ expect(() => cartsForRow(row({ cartRowFor: "o", cartId: "weg" }), plan)).toThrow(CartMissingError);
64
+ });
65
+ it("rij zonder eigen kar: alle karren uit het karplan", () => {
66
+ expect(cartsForRow(row({}), plan)).toHaveLength(3);
67
+ });
68
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pickSetComponents.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickSetComponents.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickSetComponents.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { readFileSync, readdirSync, statSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { componentsUnknown, parsePickCartPlan } from "../pickTypes";
5
+ function plan(items, extra = {}) {
6
+ return parsePickCartPlan({
7
+ orderId: "o1",
8
+ cartTotal: 1,
9
+ carts: [{ cartId: "c1", cartNumber: 1, cartTotal: 1, items }],
10
+ ...extra,
11
+ });
12
+ }
13
+ describe("sets met onderdelen (koppelprompt 41)", () => {
14
+ it("leest onderdelen precies zoals geleverd, ook set binnen set (laagste niveau)", () => {
15
+ const p = plan([{
16
+ productName: "Set A", article_number: "S-1", quantity: 2, isSet: true,
17
+ components: [
18
+ { trade_item_key: "k1", product_id: "p1", product_name: "Onderdeel 1", article_number: "A-1", qty: 4 },
19
+ { trade_item_key: "k2", product_id: "p2", product_name: "Diep onderdeel", article_number: "A-2", qty: 6 },
20
+ ],
21
+ }]);
22
+ const item = p.carts[0].items[0];
23
+ expect(item.articleNumber).toBe("S-1");
24
+ expect(item.quantity).toBe(2);
25
+ expect(item.components).toEqual([
26
+ { tradeItemKey: "k1", productId: "p1", productName: "Onderdeel 1", articleNumber: "A-1", qty: 4 },
27
+ { tradeItemKey: "k2", productId: "p2", productName: "Diep onderdeel", articleNumber: "A-2", qty: 6 },
28
+ ]);
29
+ expect(componentsUnknown(item)).toBe(false);
30
+ });
31
+ it("set zonder onderdelen of met geen-lijst: onderdelen onbekend; regel blijft bestaan", () => {
32
+ const p = plan([
33
+ { productName: "Set leeg", isSet: true, components: [] },
34
+ { productName: "Set kapot", is_set: true, components: "x" },
35
+ { productName: "Set ontbreekt", isSet: true },
36
+ ]);
37
+ const items = p.carts[0].items;
38
+ expect(items).toHaveLength(3);
39
+ expect(items.map(componentsUnknown)).toEqual([true, true, true]);
40
+ });
41
+ it("zonder isSet is een lege of ontbrekende lijst een gewone regel", () => {
42
+ const p = plan([{ productName: "Gewoon", components: [] }, { productName: "Oud" }]);
43
+ expect(p.carts[0].items.map(componentsUnknown)).toEqual([false, false]);
44
+ });
45
+ it("groepsleden blijven losse regels; geen groepskop", () => {
46
+ const p = plan([{ productName: "Lid 1" }, { productName: "Lid 2" }]);
47
+ expect(p.carts[0].items.map((i) => i.productName)).toEqual(["Lid 1", "Lid 2"]);
48
+ });
49
+ it("warnings letterlijk; leeg bij ontbreken, geen lijst of lege lijst", () => {
50
+ const tekort = "voorraadtekort op Lid 1 voor bevroren regel 123; verdeling niet aangepast";
51
+ const groep = "groepsregel en ledenregels tegelijk; groepsregel niet meegeteld";
52
+ expect(plan([], { warnings: [tekort, groep, 5] }).warnings).toEqual([tekort, groep]);
53
+ expect(plan([]).warnings).toEqual([]);
54
+ expect(plan([], { warnings: "x" }).warnings).toEqual([]);
55
+ expect(plan([], { warnings: [] }).warnings).toEqual([]);
56
+ });
57
+ it("geen .from() op Engine-tabellen in pickcode", () => {
58
+ const files = [];
59
+ const walk = (d) => readdirSync(d).forEach((f) => {
60
+ const p = join(d, f);
61
+ if (statSync(p).isDirectory()) {
62
+ if (f !== "__tests__")
63
+ walk(p);
64
+ }
65
+ else if (/\.tsx?$/.test(f))
66
+ files.push(p);
67
+ });
68
+ walk("src/components/pick");
69
+ walk("src/lib");
70
+ const banned = /\.from\(\s*["'](order_cart_items|logistics_reservation_allocations|order_items|orders)["']/;
71
+ expect(files.filter((f) => banned.test(readFileSync(f, "utf8")))).toEqual([]);
72
+ });
73
+ });
@@ -33,10 +33,23 @@ export interface PickBatchPrintJob {
33
33
  cartId: string;
34
34
  cartLabel: string | null;
35
35
  jobId: string;
36
+ /** Herprint van een al geprinte kar: bij mislukken nooit terugzetten. */
37
+ reprint?: boolean;
38
+ }
39
+ export interface PickBatchCartResult {
40
+ cartId: string;
41
+ cartLabel: string | null;
42
+ /** Leeg = de database heeft voor deze kar geen opdracht aangemaakt. */
43
+ jobId: string | null;
44
+ /** created | not_created | already_printed; null bij een oudere database. */
45
+ status?: string | null;
46
+ message?: string | null;
36
47
  }
37
48
  export interface PickBatchPrintResult {
38
49
  item: PickQueueItem;
39
50
  jobs: PickBatchPrintJob[];
51
+ /** Alle gevraagde karren, ook die zonder nieuwe opdracht. */
52
+ carts: PickBatchCartResult[];
40
53
  }
41
54
  export declare const pickApi: {
42
55
  countries(): Promise<PickCountry[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"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"}
@@ -59,20 +59,21 @@ function parseBatchPrintResult(value) {
59
59
  const rawJobs = safeArray(record["jobs"]);
60
60
  if (!item || typeof item !== "object")
61
61
  throw new Error("De batchprint gaf geen wachtrijregel terug.");
62
- const jobs = rawJobs.flatMap((job) => {
62
+ const carts = rawJobs.flatMap((job) => {
63
63
  const cartId = job["cartId"];
64
- const jobId = job["jobId"];
65
- if (typeof cartId !== "string" || typeof jobId !== "string")
64
+ if (typeof cartId !== "string")
66
65
  return [];
66
+ const jobId = job["jobId"];
67
67
  return [{
68
68
  cartId,
69
- jobId,
69
+ jobId: typeof jobId === "string" && jobId ? jobId : null,
70
70
  cartLabel: typeof job["cartLabel"] === "string" ? job["cartLabel"] : null,
71
+ status: typeof job["status"] === "string" ? job["status"] : null,
72
+ message: typeof job["message"] === "string" && job["message"] ? job["message"] : null,
71
73
  }];
72
74
  });
73
- if (jobs.length === 0)
74
- throw new Error("Er zijn geen printopdrachten aangemaakt.");
75
- return { item: item, jobs };
75
+ const jobs = carts.flatMap((c) => (c.jobId ? [{ cartId: c.cartId, cartLabel: c.cartLabel, jobId: c.jobId }] : []));
76
+ return { item: item, jobs, carts };
76
77
  }
77
78
  export const pickApi = {
78
79
  async countries() {
@@ -0,0 +1,59 @@
1
+ import type { PickBatchPrintJob } from "./pickApi";
2
+ import type { PickCart, PickCartPlan, PickQueueItem } from "./pickTypes";
3
+ import { printedCartIdsOf } from "./pickTypes";
4
+ export type CartPrintOutcome = "created" | "not_created" | "error";
5
+ export interface CartPrintResult {
6
+ cartId: string;
7
+ cartLabel: string | null;
8
+ outcome: CartPrintOutcome;
9
+ jobId: string | null;
10
+ reprint: boolean;
11
+ reason: string | null;
12
+ }
13
+ export declare const CART_MISSING_MESSAGE = "De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij";
14
+ export declare class CartMissingError extends Error {
15
+ constructor();
16
+ }
17
+ export declare function isCartMissingError(e: unknown): boolean;
18
+ /**
19
+ * Karren die deze rij mag printen. Een rij met een eigen kar biedt alleen die
20
+ * kar aan; die moet in het karplan van de rij staan, anders CartMissingError.
21
+ * Een rij zonder eigen kar: alle karren uit het karplan van die rij.
22
+ */
23
+ export declare function cartsForRow(item: PickQueueItem, plan: PickCartPlan | null): PickCart[];
24
+ /** Herprint elke kar apart; een fout bij één kar stopt de andere niet. */
25
+ export declare function reprintCartsIndividually(carts: PickCart[], reprint: (cartId: string) => Promise<string | null>): Promise<CartPrintResult[]>;
26
+ /** Uitkomsten van een eerste print (één aanvraag voor alle gevraagde karren). */
27
+ /** Letterlijke tekst van de database voor een kar die al geprint is. */
28
+ export declare const ALREADY_PRINTED_MESSAGE = "al geprint; kies Herprint";
29
+ export declare function resultsFromBatch(requested: PickCart[], jobs: Array<{
30
+ cartId: string;
31
+ jobId: string | null;
32
+ cartLabel: string | null;
33
+ status?: string | null;
34
+ message?: string | null;
35
+ }>, alreadyPrinted: string[]): CartPrintResult[];
36
+ /** Weigert de database de hele aanvraag, dan is elke gevraagde kar "fout". */
37
+ export declare function resultsFromBatchError(requested: PickCart[], e: unknown, alreadyPrinted: string[]): CartPrintResult[];
38
+ /** Alleen echt aangemaakte opdrachten gaan naar de statusvolging. */
39
+ export declare function trackableJobs(results: CartPrintResult[]): PickBatchPrintJob[];
40
+ /** Mislukte opdrachten die teruggezet mogen worden: alleen eerste prints. */
41
+ export declare function resettableJobs<T extends {
42
+ reprint?: boolean;
43
+ }>(failed: T[]): T[];
44
+ export declare function cartResultLine(r: CartPrintResult): string;
45
+ /** Eén kar: korte melding. Meerdere karren: per kar een regel. */
46
+ export declare function summarizeCartResults(results: CartPrintResult[]): {
47
+ kind: "success" | "warning" | "error";
48
+ title: string;
49
+ lines: string[];
50
+ };
51
+ export { printedCartIdsOf };
52
+ /**
53
+ * Voert fn alleen uit als er geen andere actie loopt. De vergrendeling is een
54
+ * gewone (ref-)waarde en gaat dus direct bij de klik in, niet pas na een render.
55
+ */
56
+ export declare function runExclusive(lock: {
57
+ current: boolean;
58
+ }, fn: () => Promise<unknown>): Promise<boolean>;
59
+ //# sourceMappingURL=pickCartResults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickCartResults.d.ts","sourceRoot":"","sources":["../../src/lib/pickCartResults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAa,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,kFACgD,CAAC;AAElF,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAOtD;AAQD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,QAAQ,EAAE,CAStF;AAED,0EAA0E;AAC1E,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAClD,OAAO,CAAC,eAAe,EAAE,CAAC,CA0B5B;AAED,iFAAiF;AACjF,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAEnE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EAChI,cAAc,EAAE,MAAM,EAAE,GACvB,eAAe,EAAE,CAmBnB;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAWpH;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAM7E;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEhF;AAQD,wBAAgB,cAAc,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAGzD;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG;IAChE,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAYA;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3G"}
@@ -0,0 +1,150 @@
1
+ import { cartRowOf, printedCartIdsOf } from "./pickTypes";
2
+ export const CART_MISSING_MESSAGE = "De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij";
3
+ export class CartMissingError extends Error {
4
+ constructor() {
5
+ super(CART_MISSING_MESSAGE);
6
+ this.name = "CartMissingError";
7
+ }
8
+ }
9
+ export function isCartMissingError(e) {
10
+ const msg = e instanceof Error ? e.message : String(e ?? "");
11
+ return (e instanceof CartMissingError ||
12
+ msg.includes("bestaat niet meer in het karplan") ||
13
+ msg.includes("bestaat niet meer in het actuele karplan"));
14
+ }
15
+ /** Weigeringen die betekenen "er is geen nieuwe opdracht", niet "kapot". */
16
+ function isNotCreatedReason(msg) {
17
+ const low = msg.toLowerCase();
18
+ return low.includes("net al naar de printer") || low.includes("al een lopende opdracht");
19
+ }
20
+ /**
21
+ * Karren die deze rij mag printen. Een rij met een eigen kar biedt alleen die
22
+ * kar aan; die moet in het karplan van de rij staan, anders CartMissingError.
23
+ * Een rij zonder eigen kar: alle karren uit het karplan van die rij.
24
+ */
25
+ export function cartsForRow(item, plan) {
26
+ const carts = Array.isArray(plan?.carts) ? plan.carts : [];
27
+ const row = cartRowOf(item);
28
+ if (row) {
29
+ const own = row.cartId ? carts.find((c) => c.cartId === row.cartId) : undefined;
30
+ if (!own)
31
+ throw new CartMissingError();
32
+ return [own];
33
+ }
34
+ return carts;
35
+ }
36
+ /** Herprint elke kar apart; een fout bij één kar stopt de andere niet. */
37
+ export async function reprintCartsIndividually(carts, reprint) {
38
+ const results = [];
39
+ for (const cart of carts) {
40
+ try {
41
+ const jobId = await reprint(cart.cartId);
42
+ results.push({
43
+ cartId: cart.cartId,
44
+ cartLabel: cart.cartLabel,
45
+ outcome: jobId ? "created" : "not_created",
46
+ jobId: jobId ?? null,
47
+ reprint: true,
48
+ reason: jobId ? null : "De database maakte geen nieuwe opdracht aan.",
49
+ });
50
+ }
51
+ catch (e) {
52
+ const msg = e instanceof Error ? e.message : String(e);
53
+ results.push({
54
+ cartId: cart.cartId,
55
+ cartLabel: cart.cartLabel,
56
+ outcome: isNotCreatedReason(msg) ? "not_created" : "error",
57
+ jobId: null,
58
+ reprint: true,
59
+ reason: msg,
60
+ });
61
+ }
62
+ }
63
+ return results;
64
+ }
65
+ /** Uitkomsten van een eerste print (één aanvraag voor alle gevraagde karren). */
66
+ /** Letterlijke tekst van de database voor een kar die al geprint is. */
67
+ export const ALREADY_PRINTED_MESSAGE = "al geprint; kies Herprint";
68
+ export function resultsFromBatch(requested, jobs, alreadyPrinted) {
69
+ const byCart = new Map(jobs.map((j) => [j.cartId, j]));
70
+ const printed = new Set(alreadyPrinted);
71
+ return requested.map((cart) => {
72
+ const job = byCart.get(cart.cartId);
73
+ const jobId = job?.jobId ?? null;
74
+ return {
75
+ cartId: cart.cartId,
76
+ cartLabel: cart.cartLabel,
77
+ outcome: jobId ? "created" : "not_created",
78
+ jobId,
79
+ reprint: printed.has(cart.cartId),
80
+ reason: jobId
81
+ ? null
82
+ : job?.status === "already_printed"
83
+ ? job.message ?? ALREADY_PRINTED_MESSAGE
84
+ : job?.message ?? "Er loopt al een opdracht voor deze kar; geen nieuwe aangemaakt.",
85
+ };
86
+ });
87
+ }
88
+ /** Weigert de database de hele aanvraag, dan is elke gevraagde kar "fout". */
89
+ export function resultsFromBatchError(requested, e, alreadyPrinted) {
90
+ const msg = e instanceof Error ? e.message : String(e);
91
+ const printed = new Set(alreadyPrinted);
92
+ return requested.map((cart) => ({
93
+ cartId: cart.cartId,
94
+ cartLabel: cart.cartLabel,
95
+ outcome: "error",
96
+ jobId: null,
97
+ reprint: printed.has(cart.cartId),
98
+ reason: msg,
99
+ }));
100
+ }
101
+ /** Alleen echt aangemaakte opdrachten gaan naar de statusvolging. */
102
+ export function trackableJobs(results) {
103
+ return results.flatMap((r) => r.outcome === "created" && r.jobId
104
+ ? [{ cartId: r.cartId, cartLabel: r.cartLabel, jobId: r.jobId, reprint: r.reprint }]
105
+ : []);
106
+ }
107
+ /** Mislukte opdrachten die teruggezet mogen worden: alleen eerste prints. */
108
+ export function resettableJobs(failed) {
109
+ return failed.filter((f) => f.reprint !== true);
110
+ }
111
+ const LABEL = {
112
+ created: "gelukt",
113
+ not_created: "niet aangemaakt",
114
+ error: "fout",
115
+ };
116
+ export function cartResultLine(r) {
117
+ const name = r.cartLabel ?? r.cartId;
118
+ return r.outcome === "created" ? `${name} — ${LABEL.created}` : `${name} — ${LABEL[r.outcome]}: ${r.reason ?? ""}`.trim();
119
+ }
120
+ /** Eén kar: korte melding. Meerdere karren: per kar een regel. */
121
+ export function summarizeCartResults(results) {
122
+ const ok = results.filter((r) => r.outcome === "created").length;
123
+ const kind = ok === results.length ? "success" : ok === 0 && results.some((r) => r.outcome === "error") ? "error" : "warning";
124
+ if (results.length === 1) {
125
+ const r = results[0];
126
+ return { kind, title: cartResultLine(r), lines: [] };
127
+ }
128
+ return {
129
+ kind,
130
+ title: `${ok} van ${results.length} karren naar de printer gestuurd`,
131
+ lines: results.map(cartResultLine),
132
+ };
133
+ }
134
+ export { printedCartIdsOf };
135
+ /**
136
+ * Voert fn alleen uit als er geen andere actie loopt. De vergrendeling is een
137
+ * gewone (ref-)waarde en gaat dus direct bij de klik in, niet pas na een render.
138
+ */
139
+ export async function runExclusive(lock, fn) {
140
+ if (lock.current)
141
+ return false;
142
+ lock.current = true;
143
+ try {
144
+ await fn();
145
+ return true;
146
+ }
147
+ finally {
148
+ lock.current = false;
149
+ }
150
+ }
@@ -129,21 +129,40 @@ export interface PickQueueItem {
129
129
  cancelled_at: string | null;
130
130
  created_at: string;
131
131
  }
132
+ export interface PickCartComponent {
133
+ tradeItemKey: string | null;
134
+ productId: string | null;
135
+ productName: string;
136
+ articleNumber: string | null;
137
+ qty: number | null;
138
+ }
132
139
  export interface PickCartItem {
133
140
  itemId: string | null;
134
141
  orderItemId: string | null;
135
142
  productId: string | null;
136
143
  productName: string;
144
+ articleNumber: string | null;
137
145
  crates: number | null;
138
146
  plantsPerCrate: number | null;
139
147
  quantity: number | null;
140
148
  belongsToOrder: boolean | null;
149
+ /** Alleen true als de Engine de regel expliciet als set markeert. */
150
+ isSet: boolean;
151
+ /** null = geen lijst geleverd (onbekend); [] = lege lijst. */
152
+ components: PickCartComponent[] | null;
141
153
  }
142
154
  export interface PickCartPlan {
143
155
  orderId: string;
144
156
  cartTotal: number;
145
157
  carts: PickCart[];
158
+ /** Letterlijke Engine-meldingen op orderniveau; leeg als het veld ontbreekt. */
159
+ warnings: string[];
146
160
  }
161
+ /** Onderdelen precies zoals de Engine ze levert; niets herberekend. */
162
+ export declare function parseCartComponents(value: unknown): PickCartComponent[] | null;
163
+ /** "onderdelen onbekend" alleen bij een door de Engine gemarkeerde set zonder onderdelen. */
164
+ export declare function componentsUnknown(item: Pick<PickCartItem, "isSet" | "components">): boolean;
165
+ export declare function parsePlanWarnings(value: unknown): string[];
147
166
  export interface PickCart {
148
167
  cartId: string;
149
168
  cartIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"pickTypes.d.ts","sourceRoot":"","sources":["../../src/lib/pickTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pickTypes.d.ts","sourceRoot":"","sources":["../../src/lib/pickTypes.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,OAAO,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,UAAU,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAa9E;AAED,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,YAAY,CAAC,GAAG,OAAO,CAE3F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAG1D;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAiBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAoErE;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAE9D;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKlF;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG9E;AAGD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EASzD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAQrD;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI,CAQjE;AAGD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAqB3E;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAK5D;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAwCpE;AAID,gDAAgD;AAChD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAoClE;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE7D;AAED,iEAAiE;AACjE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf,+EAA+E;IAC/E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACrC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACvF,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,GAC1B,aAAa,CA2Cf;AAGD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAG7D;AAMD,iDAAiD;AACjD,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAI7E;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMrD"}
@@ -1,5 +1,31 @@
1
1
  // Types voor de Pickstations-module. Alles is database-gestuurd; deze types
2
2
  // beschrijven alleen de vorm van de rijen, nooit vaste waardes.
3
+ /** Onderdelen precies zoals de Engine ze levert; niets herberekend. */
4
+ export function parseCartComponents(value) {
5
+ if (!Array.isArray(value))
6
+ return null;
7
+ return value.flatMap((raw) => {
8
+ const c = recordOf(raw);
9
+ if (!c)
10
+ return [];
11
+ return [{
12
+ tradeItemKey: textOf(c["trade_item_key"] ?? c["tradeItemKey"]),
13
+ productId: textOf(c["product_id"] ?? c["productId"]),
14
+ productName: textOf(c["product_name"] ?? c["productName"]) ?? "Onderdeel",
15
+ articleNumber: textOf(c["article_number"] ?? c["articleNumber"]),
16
+ qty: numberOf(c["qty"] ?? c["quantity"]),
17
+ }];
18
+ });
19
+ }
20
+ /** "onderdelen onbekend" alleen bij een door de Engine gemarkeerde set zonder onderdelen. */
21
+ export function componentsUnknown(item) {
22
+ return item.isSet && (!Array.isArray(item.components) || item.components.length === 0);
23
+ }
24
+ export function parsePlanWarnings(value) {
25
+ if (!Array.isArray(value))
26
+ return [];
27
+ return value.filter((w) => typeof w === "string" && w.trim().length > 0);
28
+ }
3
29
  function recordOf(value) {
4
30
  return value && typeof value === "object" && !Array.isArray(value)
5
31
  ? value
@@ -54,10 +80,13 @@ export function parsePickCartPlan(value) {
54
80
  orderItemId: textOf(item["orderItemId"] ?? item["order_item_id"]),
55
81
  productId: textOf(item["productId"] ?? item["product_id"]),
56
82
  productName: textOf(item["productName"] ?? item["product_name"]) ?? "Product",
83
+ articleNumber: textOf(item["articleNumber"] ?? item["article_number"]),
57
84
  crates: numberOf(item["crates"]),
58
85
  plantsPerCrate: numberOf(item["plantsPerCrate"] ?? item["plants_per_crate"]),
59
86
  quantity: numberOf(item["quantity"]),
60
87
  belongsToOrder: typeof item["belongsToOrder"] === "boolean" ? item["belongsToOrder"] : null,
88
+ isSet: (item["isSet"] ?? item["is_set"]) === true,
89
+ components: parseCartComponents(item["components"]),
61
90
  }];
62
91
  });
63
92
  return [{
@@ -81,7 +110,7 @@ export function parsePickCartPlan(value) {
81
110
  return null;
82
111
  if (!isBuffer && new Set(ownCarts.map((cart) => cart.cartIndex)).size !== declaredTotal)
83
112
  return null;
84
- return { orderId, cartTotal: declaredTotal, carts };
113
+ return { orderId, cartTotal: declaredTotal, carts, warnings: parsePlanWarnings(root["warnings"]) };
85
114
  }
86
115
  export function printedCartIdsOf(item) {
87
116
  return safeArray(item.printed_cart_ids).filter((value) => typeof value === "string");