@flowselections/pick-schermen-kwekers 1.0.34 → 1.0.39
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/README.md +0 -1
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +9 -3
- package/dist-lib/components/pick/QueueTable.d.ts.map +1 -1
- package/dist-lib/components/pick/QueueTable.js +14 -1
- package/dist-lib/components/pick/StickerState.d.ts +11 -0
- package/dist-lib/components/pick/StickerState.d.ts.map +1 -0
- package/dist-lib/components/pick/StickerState.js +45 -0
- package/dist-lib/index.d.ts +2 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -0
- package/dist-lib/integrations/supabase/types.d.ts +941 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pickSentElsewhere.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickSentElsewhere.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickSentElsewhere.test.js +30 -0
- package/dist-lib/lib/__tests__/pickStickers.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickStickers.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickStickers.test.js +25 -0
- package/dist-lib/lib/__tests__/pickStickers138.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickStickers138.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickStickers138.test.js +32 -0
- package/dist-lib/lib/pickApi.d.ts +12 -0
- package/dist-lib/lib/pickApi.d.ts.map +1 -1
- package/dist-lib/lib/pickApi.js +16 -0
- package/dist-lib/lib/pickCartResults.d.ts +6 -1
- package/dist-lib/lib/pickCartResults.d.ts.map +1 -1
- package/dist-lib/lib/pickCartResults.js +24 -0
- package/dist-lib/lib/pickRowState.d.ts +1 -1
- package/dist-lib/lib/pickRowState.d.ts.map +1 -1
- package/dist-lib/lib/pickRowState.js +1 -1
- package/dist-lib/lib/pickStickers.d.ts +41 -0
- package/dist-lib/lib/pickStickers.d.ts.map +1 -0
- package/dist-lib/lib/pickStickers.js +111 -0
- package/dist-lib/lib/pickTypes.js +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickSentElsewhere.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickSentElsewhere.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
vi.mock("@flowselections/core", () => ({ supabase: {} }));
|
|
3
|
+
import { parseSentElsewhere } from "../pickApi";
|
|
4
|
+
import { resultsFromBatch, sentElsewhereMessage, summarizeCartResults, trackableJobs, resettableJobs } from "../pickCartResults";
|
|
5
|
+
const cart = (id, n) => ({ cartId: id, cartIndex: n, cartTotal: 1, cartLabel: `K${n}`, isFullCart: true, slipVariant: "full_cart", barcode: "LC1", isShared: false, items: [] });
|
|
6
|
+
const raw = { jobId: "j9", origin: "elders", printerName: "Zebra hal 1", sentAt: "2026-10-14T09:43:20Z", barcode: "LC1", ownBarcode: "LC1", barcodeMismatch: false };
|
|
7
|
+
describe("pakbon al elders verstuurd", () => {
|
|
8
|
+
it("melding met herkomst, printer en tijd", () => {
|
|
9
|
+
const e = parseSentElsewhere(raw);
|
|
10
|
+
expect(sentElsewhereMessage(e)).toMatch(/^Pakbon al verstuurd vanuit elders naar Zebra hal 1 om \d{2}:\d{2}$/);
|
|
11
|
+
});
|
|
12
|
+
it("geen nieuwe opdracht, niets volgen of terugzetten", () => {
|
|
13
|
+
const r = resultsFromBatch([cart("c1", 1)], [
|
|
14
|
+
{ cartId: "c1", cartLabel: "K1", jobId: null, status: "sent_elsewhere", message: "x", elsewhere: parseSentElsewhere(raw) },
|
|
15
|
+
], []);
|
|
16
|
+
expect(r[0].outcome).toBe("not_created");
|
|
17
|
+
expect(r[0].sentElsewhere?.jobId).toBe("j9");
|
|
18
|
+
expect(r[0].reason).toMatch(/^Pakbon al verstuurd vanuit elders/);
|
|
19
|
+
expect(trackableJobs(r)).toEqual([]);
|
|
20
|
+
expect(resettableJobs(trackableJobs(r))).toEqual([]);
|
|
21
|
+
expect(summarizeCartResults(r).title).toMatch(/^K1 — Pakbon al verstuurd/);
|
|
22
|
+
});
|
|
23
|
+
it("andere barcode wordt zichtbaar gemeld", () => {
|
|
24
|
+
const e = parseSentElsewhere({ ...raw, ownBarcode: "LC2", barcodeMismatch: true });
|
|
25
|
+
expect(sentElsewhereMessage(e)).toContain("andere kar-barcode LC1 dan LC2");
|
|
26
|
+
});
|
|
27
|
+
it("zonder herkomst: elders", () => {
|
|
28
|
+
expect(parseSentElsewhere({ printerName: "P" }).origin).toBe("elders");
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickStickers.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickStickers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
vi.mock("@flowselections/core", () => ({ supabase: {} }));
|
|
3
|
+
import { parseCartStickerState, parseStickerMeldingen, stickerStatusLabel } from "../pickStickers";
|
|
4
|
+
import { parsePickCartPlan } from "../pickTypes";
|
|
5
|
+
describe("stickers (alleen lezen)", () => {
|
|
6
|
+
it("regels geen lijst: stand onbekend", () => {
|
|
7
|
+
expect(parseCartStickerState({ regels: "x" })).toBeNull();
|
|
8
|
+
expect(parseCartStickerState(null)).toBeNull();
|
|
9
|
+
});
|
|
10
|
+
it("stand per sticker letterlijk", () => {
|
|
11
|
+
const s = parseCartStickerState({ cartId: "c", totaal: 1, regels: [{ soort: "tray", status: "in_printwachtrij", reden: "r" }] });
|
|
12
|
+
expect(s.regels[0].reden).toBe("r");
|
|
13
|
+
expect(stickerStatusLabel("in_printwachtrij")).toMatch(/niet fysiek/);
|
|
14
|
+
expect(stickerStatusLabel("nieuw")).toBe("nieuw");
|
|
15
|
+
});
|
|
16
|
+
it("meldingen letterlijk, gesloten weg, onleesbaar = null", () => {
|
|
17
|
+
expect(parseStickerMeldingen([{ melding: "Let op X" }, { melding: "oud", status: "gesloten" }])).toEqual([{ id: null, tekst: "Let op X" }]);
|
|
18
|
+
expect(parseStickerMeldingen({ meldingen: [] })).toEqual([]);
|
|
19
|
+
expect(parseStickerMeldingen("x")).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
it("cartSeq bepaalt Kar X", () => {
|
|
22
|
+
const p = parsePickCartPlan({ orderId: "o", cartTotal: 2, carts: [{ cartId: "a", cartSeq: 2, cartTotal: 2, items: [] }, { cartId: "b", cartSeq: 1, cartTotal: 2, items: [] }] });
|
|
23
|
+
expect(p.carts.map((c) => c.cartIndex).sort()).toEqual([1, 2]);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickStickers138.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pickStickers138.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach } from "vitest";
|
|
2
|
+
const rpc = vi.fn();
|
|
3
|
+
vi.mock("@flowselections/core", () => ({ supabase: { rpc: (...a) => rpc(...a) } }));
|
|
4
|
+
import { fetchCartStickerState, fetchOrderStickerMeldingen, parsePickstationCartSticker, parsePickstationMeldingen, stickerSummary, stickerStatusLabel } from "../pickStickers";
|
|
5
|
+
const stand = (o) => ({ cartId: "c", totaal: 2, inPrintwachtrij: 0, wachtend: 0, geblokkeerd: 0, regels: [], ...o });
|
|
6
|
+
describe("1.0.38 omhulsel", () => {
|
|
7
|
+
beforeEach(() => rpc.mockReset());
|
|
8
|
+
it("herkent omhulsel, anders onbekend", () => {
|
|
9
|
+
expect(parsePickstationCartSticker({ toegang: true, stand: stand({}) })?.totaal).toBe(2);
|
|
10
|
+
expect(parsePickstationCartSticker({ toegang: false, reden: "niet_in_wachtrij_station" })).toBeNull();
|
|
11
|
+
expect(parsePickstationCartSticker({ stand: stand({}) })).toBeNull();
|
|
12
|
+
expect(parsePickstationCartSticker(stand({}))).toBeNull();
|
|
13
|
+
expect(parsePickstationMeldingen({ toegang: false })).toBeNull();
|
|
14
|
+
expect(parsePickstationMeldingen({ toegang: true, meldingen: [] })).toEqual([]);
|
|
15
|
+
});
|
|
16
|
+
it("totaal 0 en nooit klaar", () => {
|
|
17
|
+
expect(stickerSummary(stand({ totaal: 0 }))).toBe("Geen stickers nodig voor deze kar");
|
|
18
|
+
expect(stickerSummary(stand({ inPrintwachtrij: 2 }))).toBe("Alle stickers naar de printer gestuurd");
|
|
19
|
+
expect(stickerStatusLabel("klaar")).toBe("klaar om te printen");
|
|
20
|
+
});
|
|
21
|
+
it("met slug geen terugval naar logistics_*", async () => {
|
|
22
|
+
rpc.mockResolvedValue({ data: null, error: { message: "x" } });
|
|
23
|
+
await expect(fetchCartStickerState("c", "s")).rejects.toThrow();
|
|
24
|
+
await expect(fetchOrderStickerMeldingen("o", "s")).rejects.toThrow();
|
|
25
|
+
expect(rpc.mock.calls.map((c) => c[0])).toEqual(["pickstation_cart_sticker_state", "pickstation_order_sticker_meldingen"]);
|
|
26
|
+
});
|
|
27
|
+
it("zonder slug logistics_*", async () => {
|
|
28
|
+
rpc.mockResolvedValue({ data: stand({ totaal: 0 }), error: null });
|
|
29
|
+
expect((await fetchCartStickerState("c", null))?.totaal).toBe(0);
|
|
30
|
+
expect(rpc.mock.calls[0][0]).toBe("logistics_cart_sticker_state");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -44,7 +44,19 @@ export interface PickBatchCartResult {
|
|
|
44
44
|
/** created | not_created | already_printed; null bij een oudere database. */
|
|
45
45
|
status?: string | null;
|
|
46
46
|
message?: string | null;
|
|
47
|
+
/** Bij status sent_elsewhere: waar en wanneer de pakbon al is verstuurd. */
|
|
48
|
+
elsewhere?: SentElsewhere | null;
|
|
47
49
|
}
|
|
50
|
+
export interface SentElsewhere {
|
|
51
|
+
jobId: string | null;
|
|
52
|
+
origin: string;
|
|
53
|
+
printerName: string;
|
|
54
|
+
sentAt: string | null;
|
|
55
|
+
barcode: string | null;
|
|
56
|
+
ownBarcode: string | null;
|
|
57
|
+
barcodeMismatch: boolean;
|
|
58
|
+
}
|
|
59
|
+
export declare function parseSentElsewhere(raw: unknown): SentElsewhere | null;
|
|
48
60
|
export interface PickBatchPrintResult {
|
|
49
61
|
item: PickQueueItem;
|
|
50
62
|
jobs: PickBatchPrintJob[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EAEX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EACT,MAAM,aAAa,CAAC;AAMrB,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IACzB,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;CAC5B,CAAC;AAGF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAUjE;AACD,QAAA,MAAM,EAAE,cAAwB,CAAC;AAEjC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAYD,sEAAsE;AACtE,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBxB;AAOD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EAEX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EACT,MAAM,aAAa,CAAC;AAMrB,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IACzB,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;CAC5B,CAAC;AAGF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAUjE;AACD,QAAA,MAAM,EAAE,cAAwB,CAAC;AAEjC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAYD,sEAAsE;AACtE,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBxB;AAOD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAarE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAyBD,eAAO,MAAM,OAAO;;;;IAYlB,gEAAgE;;IAOhE,gDAAgD;;IAOhD,mEAAmE;gCACjC,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAM/E,6DAA6D;;IAO7D,yEAAyE;mCACpC,MAAM,eAAe,MAAM,GAAG,IAAI;;;;;wBAoB7C,MAAM;wBAMN,MAAM;kCAKI,MAAM;0BACN,MAAM;qBAAe,MAAM;oBAAc,MAAM,GAAG,IAAI;;sBAIlE,MAAM;;IAW9B,wEAAwE;sBAChD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM9C,6EAA6E;yBAClD,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAQrE,uEAAuE;qBAChD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C;;;;OAIG;IACH,yFAAyF;iBACtE,OAAO,CAAC,IAAI,CAAC;IAWhC,4FAA4F;oBACtE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;;;;;;wBAiB9D;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBnE,qDAAqD;kBACjC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;IAyCD,2FAA2F;qBACpE,MAAM,cAAc,MAAM;oBAqB3B;QACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,uDAAuD;QACvD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB;gBAciB;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,gFAAgF;0BACpD,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAMjE;;;;;OAKG;8BAC6B,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjG;;;;;OAKG;yBACwB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOvE;;;;OAIG;gBACe,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI,CAAC;IAeT;;;OAGG;wBACuB,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAWxG,6FAA6F;4BAC/D,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOjF;;;OAGG;IACH,2DAA2D;qBAC1C;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE;+BAIpB,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAOtE,mEAAmE;8BACnC,MAAM,aAAa,MAAM,UAAU,MAAM;IAWzE,yFAAyF;+BACxD,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;IAU7E,4EAA4E;0BAChD,MAAM,aAAa,MAAM;IAUrD;;;;OAIG;oBACmB,MAAM,aAAa,MAAM;IAS/C,+DAA+D;wBACrC,MAAM,aAAa,MAAM,UAAU,MAAM;IAUnE,sEAAsE;0BAC1C,MAAM;IAMlC,qEAAqE;4BACvC,MAAM,EAAE;IAOtC,mEAAmE;uBAC1C,MAAM,aAAa,MAAM,WAAU,MAAM,GAAG,IAAI;IAUzE,yFAAyF;0BAC7D,MAAM,aAAa,MAAM,UAAU,MAAM,SAAS,MAAM;IAWpF,2EAA2E;2BAEjE,MAAM,aACH,MAAM,QACX,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhD,kEAAkE;2BACrC,MAAM,aAAa,MAAM;IAStD;;;OAGG;wBACuB,MAAM,aAAa,MAAM,WAAU,MAAM,GAAG,IAAI;wBAYhD,MAAM;uBAKP,MAAM;eAWd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOlB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;;YAiB/E,MAAM;oBACE,MAAM;mBACP,MAAM,GAAG,IAAI;oBACZ,MAAM;sBACJ,MAAM;;;YAMhB,MAAM;gBACF,MAAM;oBACF,MAAM;iBACT,MAAM,GAAG,IAAI;uBACP,MAAM,GAAG,IAAI;oBAChB,MAAM,GAAG,IAAI;;kBAIT,MAAM,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;kBAMpC,MAAM,MAAM,MAAM;CAIvC,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CASrC"}
|
package/dist-lib/lib/pickApi.js
CHANGED
|
@@ -51,6 +51,21 @@ function unwrap(res) {
|
|
|
51
51
|
throw new Error(res.error.message);
|
|
52
52
|
return safeArray(res.data);
|
|
53
53
|
}
|
|
54
|
+
export function parseSentElsewhere(raw) {
|
|
55
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
56
|
+
return null;
|
|
57
|
+
const r = raw;
|
|
58
|
+
const str = (v) => (typeof v === "string" && v ? v : null);
|
|
59
|
+
return {
|
|
60
|
+
jobId: str(r["jobId"]),
|
|
61
|
+
origin: str(r["origin"]) ?? "elders",
|
|
62
|
+
printerName: str(r["printerName"]) ?? "onbekende printer",
|
|
63
|
+
sentAt: str(r["sentAt"]),
|
|
64
|
+
barcode: str(r["barcode"]),
|
|
65
|
+
ownBarcode: str(r["ownBarcode"]),
|
|
66
|
+
barcodeMismatch: r["barcodeMismatch"] === true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
54
69
|
function parseBatchPrintResult(value) {
|
|
55
70
|
if (!value || typeof value !== "object")
|
|
56
71
|
throw new Error("De batchprint gaf geen resultaat terug.");
|
|
@@ -70,6 +85,7 @@ function parseBatchPrintResult(value) {
|
|
|
70
85
|
cartLabel: typeof job["cartLabel"] === "string" ? job["cartLabel"] : null,
|
|
71
86
|
status: typeof job["status"] === "string" ? job["status"] : null,
|
|
72
87
|
message: typeof job["message"] === "string" && job["message"] ? job["message"] : null,
|
|
88
|
+
elsewhere: parseSentElsewhere(job["elsewhere"]),
|
|
73
89
|
}];
|
|
74
90
|
});
|
|
75
91
|
const jobs = carts.flatMap((c) => (c.jobId ? [{ cartId: c.cartId, cartLabel: c.cartLabel, jobId: c.jobId }] : []));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PickBatchPrintJob } from "./pickApi";
|
|
1
|
+
import type { PickBatchPrintJob, SentElsewhere } from "./pickApi";
|
|
2
2
|
import type { PickCart, PickCartPlan, PickQueueItem } from "./pickTypes";
|
|
3
3
|
import { printedCartIdsOf } from "./pickTypes";
|
|
4
4
|
export type CartPrintOutcome = "created" | "not_created" | "error";
|
|
@@ -9,7 +9,11 @@ export interface CartPrintResult {
|
|
|
9
9
|
jobId: string | null;
|
|
10
10
|
reprint: boolean;
|
|
11
11
|
reason: string | null;
|
|
12
|
+
/** Pakbon voor deze kar is al elders verstuurd; geen nieuwe opdracht. */
|
|
13
|
+
sentElsewhere?: SentElsewhere | null;
|
|
12
14
|
}
|
|
15
|
+
/** "Pakbon al verstuurd vanuit <herkomst> naar <printer> om <tijd>" (tijd in lokale tijd). */
|
|
16
|
+
export declare function sentElsewhereMessage(e: SentElsewhere): string;
|
|
13
17
|
export declare const CART_MISSING_MESSAGE = "De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij";
|
|
14
18
|
export declare class CartMissingError extends Error {
|
|
15
19
|
constructor();
|
|
@@ -32,6 +36,7 @@ export declare function resultsFromBatch(requested: PickCart[], jobs: Array<{
|
|
|
32
36
|
cartLabel: string | null;
|
|
33
37
|
status?: string | null;
|
|
34
38
|
message?: string | null;
|
|
39
|
+
elsewhere?: SentElsewhere | null;
|
|
35
40
|
}>, alreadyPrinted: string[]): CartPrintResult[];
|
|
36
41
|
/** Alle karren al geprint: geen opdracht, per kar "al geprint; kies Herprint". */
|
|
37
42
|
export declare function alreadyPrintedResults(carts: PickCart[]): CartPrintResult[];
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"pickCartResults.d.ts","sourceRoot":"","sources":["../../src/lib/pickCartResults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import { cartRowOf, printedCartIdsOf } from "./pickTypes";
|
|
2
|
+
/** "Pakbon al verstuurd vanuit <herkomst> naar <printer> om <tijd>" (tijd in lokale tijd). */
|
|
3
|
+
export function sentElsewhereMessage(e) {
|
|
4
|
+
const d = e.sentAt ? new Date(e.sentAt) : null;
|
|
5
|
+
const time = d && !Number.isNaN(d.getTime())
|
|
6
|
+
? d.toLocaleTimeString("nl-NL", { hour: "2-digit", minute: "2-digit" })
|
|
7
|
+
: "onbekende tijd";
|
|
8
|
+
const base = `Pakbon al verstuurd vanuit ${e.origin || "elders"} naar ${e.printerName || "onbekende printer"} om ${time}`;
|
|
9
|
+
return e.barcodeMismatch
|
|
10
|
+
? `${base} (let op: andere kar-barcode ${e.barcode ?? "?"} dan ${e.ownBarcode ?? "?"})`
|
|
11
|
+
: base;
|
|
12
|
+
}
|
|
2
13
|
export const CART_MISSING_MESSAGE = "De kar van deze rij bestaat niet meer in het karplan; ververs de pickwachtrij";
|
|
3
14
|
export class CartMissingError extends Error {
|
|
4
15
|
constructor() {
|
|
@@ -71,6 +82,17 @@ export function resultsFromBatch(requested, jobs, alreadyPrinted) {
|
|
|
71
82
|
return requested.map((cart) => {
|
|
72
83
|
const job = byCart.get(cart.cartId);
|
|
73
84
|
const jobId = job?.jobId ?? null;
|
|
85
|
+
if (!jobId && job?.status === "sent_elsewhere") {
|
|
86
|
+
return {
|
|
87
|
+
cartId: cart.cartId,
|
|
88
|
+
cartLabel: cart.cartLabel,
|
|
89
|
+
outcome: "not_created",
|
|
90
|
+
jobId: null,
|
|
91
|
+
reprint: false,
|
|
92
|
+
reason: job.elsewhere ? sentElsewhereMessage(job.elsewhere) : job.message ?? "Pakbon al verstuurd vanuit elders",
|
|
93
|
+
sentElsewhere: job.elsewhere ?? null,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
74
96
|
return {
|
|
75
97
|
cartId: cart.cartId,
|
|
76
98
|
cartLabel: cart.cartLabel,
|
|
@@ -126,6 +148,8 @@ const LABEL = {
|
|
|
126
148
|
};
|
|
127
149
|
export function cartResultLine(r) {
|
|
128
150
|
const name = r.cartLabel ?? r.cartId;
|
|
151
|
+
if (r.sentElsewhere)
|
|
152
|
+
return `${name} — ${r.reason ?? ""}`.trim();
|
|
129
153
|
return r.outcome === "created" ? `${name} — ${LABEL.created}` : `${name} — ${LABEL[r.outcome]}: ${r.reason ?? ""}`.trim();
|
|
130
154
|
}
|
|
131
155
|
/** Eén kar: korte melding. Meerdere karren: per kar een regel. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PickPrintJob, PickQueueItem } from "./pickTypes";
|
|
2
|
-
export declare const ROW_GONE_MESSAGE = "Deze pickrij
|
|
2
|
+
export declare const ROW_GONE_MESSAGE = "Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.";
|
|
3
3
|
export declare const RELEASE_PENDING_MESSAGE = "Het pickvenster voor deze order is nog niet begonnen; de pakbon kan nog niet worden opgebouwd of geprint.";
|
|
4
4
|
export declare const NO_ROW_IN_FILTER_MESSAGE = "Geen rij in het filter om te printen.";
|
|
5
5
|
/** Fout die betekent: deze rij of zijn kar bestaat niet meer (vervangen). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pickRowState.d.ts","sourceRoot":"","sources":["../../src/lib/pickRowState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"pickRowState.d.ts","sourceRoot":"","sources":["../../src/lib/pickRowState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,gBAAgB,wFAAwF,CAAC;AACtH,eAAO,MAAM,uBAAuB,8GACyE,CAAC;AAC9G,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,aAAa,GAAG,IAAI,CAGxG;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAQ3F;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUtH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const ROW_GONE_MESSAGE = "Deze pickrij
|
|
1
|
+
export const ROW_GONE_MESSAGE = "Deze pickrij bestaat niet meer (vervangen of afgehandeld); ververs de pickwachtrij.";
|
|
2
2
|
export const RELEASE_PENDING_MESSAGE = "Het pickvenster voor deze order is nog niet begonnen; de pakbon kan nog niet worden opgebouwd of geprint.";
|
|
3
3
|
export const NO_ROW_IN_FILTER_MESSAGE = "Geen rij in het filter om te printen.";
|
|
4
4
|
/** Fout die betekent: deze rij of zijn kar bestaat niet meer (vervangen). */
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const STICKER_UNKNOWN = "Stickerstand onbekend";
|
|
2
|
+
export interface StickerLine {
|
|
3
|
+
soort: string | null;
|
|
4
|
+
stickerId: string | null;
|
|
5
|
+
kopieen: number | null;
|
|
6
|
+
status: string | null;
|
|
7
|
+
reden: string | null;
|
|
8
|
+
printJobId: string | null;
|
|
9
|
+
breedteMm: number | null;
|
|
10
|
+
hoogteMm: number | null;
|
|
11
|
+
}
|
|
12
|
+
export interface CartStickerState {
|
|
13
|
+
cartId: string | null;
|
|
14
|
+
totaal: number | null;
|
|
15
|
+
inPrintwachtrij: number | null;
|
|
16
|
+
wachtend: number | null;
|
|
17
|
+
geblokkeerd: number | null;
|
|
18
|
+
regels: StickerLine[];
|
|
19
|
+
}
|
|
20
|
+
export interface StickerMelding {
|
|
21
|
+
id: string | null;
|
|
22
|
+
tekst: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const STICKER_STATUS_LABEL: Record<string, string>;
|
|
25
|
+
export declare function stickerStatusLabel(s: string | null): string;
|
|
26
|
+
/** null = onleesbaar antwoord (stand onbekend). Leest de kale stand. */
|
|
27
|
+
export declare function parseCartStickerState(raw: unknown): CartStickerState | null;
|
|
28
|
+
/** Pickstation-omhulsel: alleen toegang === true met een geldige stand telt. */
|
|
29
|
+
export declare function parsePickstationCartSticker(raw: unknown): CartStickerState | null;
|
|
30
|
+
/** Meldingen letterlijk; null = onleesbaar. Gesloten meldingen tellen niet. */
|
|
31
|
+
export declare function parseStickerMeldingen(raw: unknown): StickerMelding[] | null;
|
|
32
|
+
export declare function parsePickstationMeldingen(raw: unknown): StickerMelding[] | null;
|
|
33
|
+
/** Samenvattende regel; nooit "Klaar" (de Engine heeft geen veld voor echt geprint). */
|
|
34
|
+
export declare function stickerSummary(s: CartStickerState): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Met slug (openbaar pickstation): alleen pickstation_cart_sticker_state, geen terugval.
|
|
37
|
+
* Zonder slug (ingelogd scherm): logistics_cart_sticker_state. Fout of onbekende vorm: null.
|
|
38
|
+
*/
|
|
39
|
+
export declare function fetchCartStickerState(cartId: string, slug: string | null): Promise<CartStickerState | null>;
|
|
40
|
+
export declare function fetchOrderStickerMeldingen(orderId: string, slug: string | null): Promise<StickerMelding[] | null>;
|
|
41
|
+
//# sourceMappingURL=pickStickers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickStickers.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickers.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,cAAc;IAAG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAOpE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQvD,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG3D;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAqB3E;AAED,gFAAgF;AAChF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAIjF;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAe3E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAI/E;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAIjE;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGjH;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAGvH"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Stickerstand en stickermeldingen: alleen lezen uit de Engine. Deze module
|
|
2
|
+
// voert zelf nooit print.sticker/print.traysticker uit en haalt geen PDF op.
|
|
3
|
+
import { supabase } from "@flowselections/core";
|
|
4
|
+
const db = supabase;
|
|
5
|
+
export const STICKER_UNKNOWN = "Stickerstand onbekend";
|
|
6
|
+
const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
|
|
7
|
+
const txt = (v) => (typeof v === "string" && v.trim() ? v : typeof v === "number" ? String(v) : null);
|
|
8
|
+
const num = (v) => (typeof v === "number" && Number.isFinite(v) ? v : null);
|
|
9
|
+
export const STICKER_STATUS_LABEL = {
|
|
10
|
+
wacht_op_moment: "wacht op moment",
|
|
11
|
+
klaar: "klaar om te printen",
|
|
12
|
+
in_printwachtrij: "in de printwachtrij (nog niet fysiek geprint)",
|
|
13
|
+
geblokkeerd: "geblokkeerd",
|
|
14
|
+
mislukt: "mislukt",
|
|
15
|
+
afgemeld: "afgemeld bij de printer (nog niet bevestigd geprint)",
|
|
16
|
+
niet_printen: "niet printen",
|
|
17
|
+
};
|
|
18
|
+
export function stickerStatusLabel(s) {
|
|
19
|
+
if (!s)
|
|
20
|
+
return "onbekend";
|
|
21
|
+
return STICKER_STATUS_LABEL[s] ?? s;
|
|
22
|
+
}
|
|
23
|
+
/** null = onleesbaar antwoord (stand onbekend). Leest de kale stand. */
|
|
24
|
+
export function parseCartStickerState(raw) {
|
|
25
|
+
const r = rec(raw);
|
|
26
|
+
if (!r || !Array.isArray(r["regels"]))
|
|
27
|
+
return null;
|
|
28
|
+
const totaal = num(r["totaal"]);
|
|
29
|
+
if (totaal == null)
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
cartId: txt(r["cartId"]),
|
|
33
|
+
totaal,
|
|
34
|
+
inPrintwachtrij: num(r["inPrintwachtrij"]),
|
|
35
|
+
wachtend: num(r["wachtend"]),
|
|
36
|
+
geblokkeerd: num(r["geblokkeerd"]),
|
|
37
|
+
regels: r["regels"].flatMap((x) => {
|
|
38
|
+
const l = rec(x);
|
|
39
|
+
if (!l)
|
|
40
|
+
return [];
|
|
41
|
+
return [{
|
|
42
|
+
soort: txt(l["soort"]), stickerId: txt(l["stickerId"]), kopieen: num(l["kopieen"]),
|
|
43
|
+
status: txt(l["status"]), reden: txt(l["reden"]), printJobId: txt(l["printJobId"]),
|
|
44
|
+
breedteMm: num(l["breedteMm"]), hoogteMm: num(l["hoogteMm"]),
|
|
45
|
+
}];
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Pickstation-omhulsel: alleen toegang === true met een geldige stand telt. */
|
|
50
|
+
export function parsePickstationCartSticker(raw) {
|
|
51
|
+
const r = rec(raw);
|
|
52
|
+
if (!r || r["toegang"] !== true)
|
|
53
|
+
return null;
|
|
54
|
+
return parseCartStickerState(r["stand"]);
|
|
55
|
+
}
|
|
56
|
+
/** Meldingen letterlijk; null = onleesbaar. Gesloten meldingen tellen niet. */
|
|
57
|
+
export function parseStickerMeldingen(raw) {
|
|
58
|
+
const r = rec(raw);
|
|
59
|
+
const list = Array.isArray(raw) ? raw : Array.isArray(r?.["meldingen"]) ? r["meldingen"] : null;
|
|
60
|
+
if (!list)
|
|
61
|
+
return null;
|
|
62
|
+
return list.flatMap((x) => {
|
|
63
|
+
if (typeof x === "string")
|
|
64
|
+
return x.trim() ? [{ id: null, tekst: x }] : [];
|
|
65
|
+
const m = rec(x);
|
|
66
|
+
if (!m)
|
|
67
|
+
return [];
|
|
68
|
+
const status = txt(m["status"]);
|
|
69
|
+
if (m["gesloten"] === true || m["closed"] === true || status === "gesloten" || status === "closed")
|
|
70
|
+
return [];
|
|
71
|
+
const basis = txt(m["melding"] ?? m["tekst"] ?? m["message"]);
|
|
72
|
+
if (!basis)
|
|
73
|
+
return [];
|
|
74
|
+
const extra = [txt(m["plek"]), txt(m["sinds"])].filter(Boolean).join(" · ");
|
|
75
|
+
return [{ id: txt(m["id"]) ?? txt(m["stickerId"]), tekst: extra ? `${basis} (${extra})` : basis }];
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function parsePickstationMeldingen(raw) {
|
|
79
|
+
const r = rec(raw);
|
|
80
|
+
if (!r || r["toegang"] !== true || !Array.isArray(r["meldingen"]))
|
|
81
|
+
return null;
|
|
82
|
+
return parseStickerMeldingen(r["meldingen"]);
|
|
83
|
+
}
|
|
84
|
+
/** Samenvattende regel; nooit "Klaar" (de Engine heeft geen veld voor echt geprint). */
|
|
85
|
+
export function stickerSummary(s) {
|
|
86
|
+
if (s.totaal === 0)
|
|
87
|
+
return "Geen stickers nodig voor deze kar";
|
|
88
|
+
if (s.wachtend === 0 && s.geblokkeerd === 0 && (s.inPrintwachtrij ?? 0) > 0)
|
|
89
|
+
return "Alle stickers naar de printer gestuurd";
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
async function call(fn, args) {
|
|
93
|
+
const { data, error } = await db.rpc(fn, args);
|
|
94
|
+
if (error)
|
|
95
|
+
throw new Error(error.message);
|
|
96
|
+
return data;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Met slug (openbaar pickstation): alleen pickstation_cart_sticker_state, geen terugval.
|
|
100
|
+
* Zonder slug (ingelogd scherm): logistics_cart_sticker_state. Fout of onbekende vorm: null.
|
|
101
|
+
*/
|
|
102
|
+
export async function fetchCartStickerState(cartId, slug) {
|
|
103
|
+
if (slug)
|
|
104
|
+
return parsePickstationCartSticker(await call("pickstation_cart_sticker_state", { p_slug: slug, p_cart_id: cartId }));
|
|
105
|
+
return parseCartStickerState(await call("logistics_cart_sticker_state", { p_cart_id: cartId }));
|
|
106
|
+
}
|
|
107
|
+
export async function fetchOrderStickerMeldingen(orderId, slug) {
|
|
108
|
+
if (slug)
|
|
109
|
+
return parsePickstationMeldingen(await call("pickstation_order_sticker_meldingen", { p_slug: slug, p_order_id: orderId }));
|
|
110
|
+
return parseStickerMeldingen(await call("logistics_order_sticker_meldingen", { p_order_id: orderId }));
|
|
111
|
+
}
|
|
@@ -58,7 +58,7 @@ export function parsePickCartPlan(value) {
|
|
|
58
58
|
const carts = rawCarts.flatMap((rawCart) => {
|
|
59
59
|
const cart = recordOf(rawCart);
|
|
60
60
|
const cartId = textOf(cart?.["cartId"] ?? cart?.["cart_id"]);
|
|
61
|
-
const cartNumber = numberOf(cart?.["cartNumber"] ?? cart?.["cart_number"]);
|
|
61
|
+
const cartNumber = numberOf(cart?.["cartSeq"] ?? cart?.["cart_seq"] ?? cart?.["cartNumber"] ?? cart?.["cart_number"]);
|
|
62
62
|
const cartTotal = numberOf(cart?.["cartTotal"] ?? cart?.["cart_total"]);
|
|
63
63
|
const isShared = cart?.["isShared"] === true;
|
|
64
64
|
if (!cartId
|
|
@@ -194,7 +194,7 @@ export function cartRowOf(item) {
|
|
|
194
194
|
return null;
|
|
195
195
|
return {
|
|
196
196
|
cartId: textOf(p["cartId"] ?? p["cart_id"]),
|
|
197
|
-
cartIndex: numberOf(p["cartNumber"] ?? p["cart_number"] ?? p["cartIndex"]),
|
|
197
|
+
cartIndex: numberOf(p["cartSeq"] ?? p["cart_seq"] ?? p["cartNumber"] ?? p["cart_number"] ?? p["cartIndex"]),
|
|
198
198
|
cartTotal: numberOf(p["cartTotal"] ?? p["cart_total"]),
|
|
199
199
|
};
|
|
200
200
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowselections/pick-schermen-kwekers",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.39",
|
|
4
4
|
"flowselections": {
|
|
5
5
|
"moduleId": "pick-schermen",
|
|
6
6
|
"pages": [
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"@cloudflare/vite-plugin": "^1.25.5",
|
|
66
66
|
"@eslint/js": "^9.32.0",
|
|
67
67
|
"@flowselections/core": "1.0.29",
|
|
68
|
-
"@lovable.dev/vite-tanstack-config": "2.
|
|
68
|
+
"@lovable.dev/vite-tanstack-config": "2.26.5",
|
|
69
69
|
"@rsbuild/core": "^1.0.0",
|
|
70
70
|
"@tailwindcss/vite": "^4.2.1",
|
|
71
71
|
"@tanstack/react-query": "^5.83.0",
|