@flowselections/pick-schermen-kwekers 1.0.68 → 1.0.70

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=pick167b.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick167b.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pick167b.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { stickerLineWithJobs } from "../pick161.js";
3
+ import { parseCartStickerBundle } from "../pickStickerBundle.js";
4
+ import { parseCartStickerState } from "../pickStickers.js";
5
+ const tz = "Europe/Amsterdam";
6
+ const leeg = { cartId: "c", totaal: 0, inPrintwachtrij: 0, wachtend: 0, geblokkeerd: 0, regels: [] };
7
+ describe("1.0.67 stickervraag (needs_sticker)", () => {
8
+ it("gevraagd zonder opdracht", () => {
9
+ expect(stickerLineWithJobs(leeg, [], tz, undefined, new Date(), true)).toBe("Sticker gevraagd, nog niet naar de printer gestuurd");
10
+ });
11
+ it("opdracht gaat voor, ook zonder vinkje", () => {
12
+ expect(stickerLineWithJobs(leeg, [{ id: "j", status: "voltooid", fase: null, voltooidOp: null, geplandOp: null, reden: null }], tz, undefined, new Date(), false)).toBe("Sticker geprint");
13
+ });
14
+ it("geen vraag en geen opdracht: Geen stickers nodig", () => {
15
+ expect(stickerLineWithJobs(leeg, [], tz, undefined, new Date(), false)).toBe("Geen stickers nodig voor deze kar");
16
+ });
17
+ it("onleesbare vraag: Stickerstand onbekend", () => {
18
+ expect(stickerLineWithJobs(leeg, [], tz, undefined, new Date(), null)).toBe("Stickerstand onbekend");
19
+ });
20
+ it("bundel leest sticker_gevraagd", () => {
21
+ const r = parseCartStickerBundle({ toegang: true, karren: [{ cart_id: "c1", toegang: true, stand: { toegang: true, stand: { totaal: 0, regels: [] } }, opdrachten: [], sticker_gevraagd: true }] });
22
+ expect(r[0].gevraagd).toBe(true);
23
+ });
24
+ it("ingelogd: Engine 1.0.201-velden", () => {
25
+ const s = parseCartStickerState({ totaal: 0, regels: [], stickerGevraagd: true, printopdrachten: [{ printJobId: "p1", status: "mislukt", foutmelding: "Printer offline" }] });
26
+ expect(s?.stickerGevraagd).toBe(true);
27
+ expect(s?.printopdrachten?.[0]).toMatchObject({ id: "p1", reden: "Printer offline" });
28
+ });
29
+ it("ingelogd: oudere Engine zonder velden blijft oud gedrag", () => {
30
+ const s = parseCartStickerState({ totaal: 0, regels: [] });
31
+ expect(s && "stickerGevraagd" in s).toBe(false);
32
+ });
33
+ });
@@ -1,4 +1,4 @@
1
- import type { CartStickerState } from "./pickStickers.js";
1
+ import { type CartStickerState } from "./pickStickers.js";
2
2
  import { type Uitwijk } from "./pickUitwijk.js";
3
3
  export declare const SCAN_UNKNOWN = "Scan de barcode onderaan de pakbon";
4
4
  /** PB-<order>-K<n>: pakbonnummer, moet eerst naar de kar-barcode. */
@@ -37,6 +37,9 @@ export declare function parseStickerOpdrachten(raw: unknown): StickerOpdracht[]
37
37
  /** HH:MM in de vestigingstijdzone; zonder bekende tijdzone geen tijd (geen UTC-terugval). */
38
38
  export declare function clockText(iso: string | null, tz: string | null): string | null;
39
39
  export declare function stickerOpdrachtText(o: StickerOpdracht, tz: string | null, now?: Date): string;
40
+ export declare const STICKER_GEVRAAGD = "Sticker gevraagd, nog niet naar de printer gestuurd";
40
41
  /** Regel per kar: printopdrachten gaan voor; "Geen stickers nodig" alleen zonder opdracht. */
41
- export declare function stickerLineWithJobs(s: CartStickerState | null, opdrachten: StickerOpdracht[] | null | undefined, tz: string | null, uitwijk?: Map<string, Uitwijk>, now?: Date): string;
42
+ export declare function stickerLineWithJobs(s: CartStickerState | null, opdrachten: StickerOpdracht[] | null | undefined, tz: string | null, uitwijk?: Map<string, Uitwijk>, now?: Date,
43
+ /** true = minstens één orderregel vraagt sticker; null = onleesbaar; undefined = niet geleverd (oud gedrag). */
44
+ gevraagd?: boolean | null): string;
42
45
  //# sourceMappingURL=pick161.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pick161.d.ts","sourceRoot":"","sources":["../../src/lib/pick161.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAO,MAAM,YAAY,uCAAuC,CAAC;AAEjE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAMD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE3E;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9E;AASD,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAQlI;AAUD,wBAAgB,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAErI,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAejG;AAMD,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAY9F;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,EAAE,GAAG,IAAI,CAO7E;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAS9E;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAazG;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAC1B,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,GAAE,IAAiB,GACrB,MAAM,CAOR"}
1
+ {"version":3,"file":"pick161.d.ts","sourceRoot":"","sources":["../../src/lib/pick161.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAO,MAAM,YAAY,uCAAuC,CAAC;AAEjE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAMD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE3E;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9E;AASD,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAQlI;AAUD,wBAAgB,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAErI,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAejG;AAMD,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAY9F;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,EAAE,GAAG,IAAI,CAe7E;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAS9E;AAID,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAazG;AAED,eAAO,MAAM,gBAAgB,wDAAwD,CAAC;AAEtF,8FAA8F;AAC9F,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAC1B,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,GAAE,IAAiB;AACtB,gHAAgH;AAChH,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,GACxB,MAAM,CAUR"}
@@ -1,3 +1,6 @@
1
+ // Pickschermen 1.0.61: scannen op pakbonnummer, gewone taal voor ruwe waarden
2
+ // en de stickerregel per kar (aantal, waar geprint, of waarom niet nodig).
3
+ import { STICKER_UNKNOWN } from "./pickStickers.js";
1
4
  import { uitwijkRouteText } from "./pickUitwijk.js";
2
5
  export const SCAN_UNKNOWN = "Scan de barcode onderaan de pakbon";
3
6
  /** PB-<order>-K<n>: pakbonnummer, moet eerst naar de kar-barcode. */
@@ -91,7 +94,15 @@ export function parseStickerOpdrachten(raw) {
91
94
  if (!x || typeof x !== "object")
92
95
  return [];
93
96
  const o = x;
94
- return [{ id: str(o["id"]), status: str(o["status"]), fase: str(o["fase"]), voltooidOp: str(o["voltooid_op"]), geplandOp: str(o["gepland_op"]), reden: str(o["reden"]) }];
97
+ // Bundel (snake_case) of Engine 1.0.201 logistics_cart_sticker_state.printopdrachten (camelCase).
98
+ return [{
99
+ id: str(o["id"] ?? o["printJobId"]),
100
+ status: str(o["status"]),
101
+ fase: str(o["fase"] ?? o["verwerkingsfase"]),
102
+ voltooidOp: str(o["voltooid_op"] ?? o["voltooidOp"]),
103
+ geplandOp: str(o["gepland_op"] ?? o["geplandOp"]),
104
+ reden: str(o["reden"] ?? o["foutmelding"]),
105
+ }];
95
106
  });
96
107
  }
97
108
  /** HH:MM in de vestigingstijdzone; zonder bekende tijdzone geen tijd (geen UTC-terugval). */
@@ -126,12 +137,20 @@ export function stickerOpdrachtText(o, tz, now = new Date()) {
126
137
  }
127
138
  return "Sticker wordt geprint";
128
139
  }
140
+ export const STICKER_GEVRAAGD = "Sticker gevraagd, nog niet naar de printer gestuurd";
129
141
  /** Regel per kar: printopdrachten gaan voor; "Geen stickers nodig" alleen zonder opdracht. */
130
- export function stickerLineWithJobs(s, opdrachten, tz, uitwijk, now = new Date()) {
142
+ export function stickerLineWithJobs(s, opdrachten, tz, uitwijk, now = new Date(),
143
+ /** true = minstens één orderregel vraagt sticker; null = onleesbaar; undefined = niet geleverd (oud gedrag). */
144
+ gevraagd) {
131
145
  const list = Array.isArray(opdrachten) ? opdrachten : [];
132
146
  if (list.length > 0) {
133
147
  const seen = new Set();
134
148
  return list.map((o) => stickerOpdrachtText(o, tz, now)).filter((t) => (seen.has(t) ? false : (seen.add(t), true))).join(" · ");
135
149
  }
150
+ const zonderStand = !s || s.totaal === 0;
151
+ if (zonderStand && gevraagd === true)
152
+ return STICKER_GEVRAAGD;
153
+ if (zonderStand && gevraagd === null)
154
+ return STICKER_UNKNOWN;
136
155
  return stickerLine(s, uitwijk);
137
156
  }
@@ -15,6 +15,8 @@ export interface CartStickerBundleItem {
15
15
  /** null = niet geleverd (oudere functie). */
16
16
  opdrachten: StickerOpdracht[] | null;
17
17
  tijdzone: string | null;
18
+ /** true/false = stickervraag orderregels; null = onleesbaar; undefined = niet geleverd. */
19
+ gevraagd?: boolean | null;
18
20
  }
19
21
  export declare function parseCartStickerBundle(raw: unknown): CartStickerBundleItem[];
20
22
  //# sourceMappingURL=pickStickerBundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pickStickerBundle.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickerBundle.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0D,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpI,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAMD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,EAAE,CA6B5E"}
1
+ {"version":3,"file":"pickStickerBundle.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickerBundle.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0D,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpI,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAMD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,EAAE,CA8B5E"}
@@ -35,6 +35,7 @@ export function parseCartStickerBundle(raw) {
35
35
  jobIds,
36
36
  opdrachten: parseStickerOpdrachten(k["opdrachten"]),
37
37
  tijdzone,
38
+ ...("sticker_gevraagd" in k ? { gevraagd: typeof k["sticker_gevraagd"] === "boolean" ? k["sticker_gevraagd"] : null } : {}),
38
39
  }];
39
40
  });
40
41
  }
@@ -1,3 +1,4 @@
1
+ import { type StickerOpdracht } from "./pick161.js";
1
2
  export declare const STICKER_UNKNOWN = "Stickerstand onbekend";
2
3
  export interface StickerLine {
3
4
  soort: string | null;
@@ -21,6 +22,9 @@ export interface CartStickerState {
21
22
  regels: StickerLine[];
22
23
  /** Reden van de Engine waarom er geen stickers nodig zijn. */
23
24
  geenStickersReden?: string | null;
25
+ /** Engine 1.0.201: undefined = niet geleverd (oudere Engine). */
26
+ stickerGevraagd?: boolean | null;
27
+ printopdrachten?: StickerOpdracht[] | null;
24
28
  }
25
29
  export interface StickerMelding {
26
30
  id: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"pickStickers.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickers.ts"],"names":[],"mappings":"AAQA,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;IACxB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;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;IACtB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;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,CAwB3E;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"}
1
+ {"version":3,"file":"pickStickers.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickers.ts"],"names":[],"mappings":"AAIA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAKzE,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;IACxB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;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;IACtB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CAC5C;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,CA0B3E;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"}
@@ -2,6 +2,7 @@
2
2
  // voert zelf nooit print.sticker/print.traysticker uit en haalt geen PDF op.
3
3
  import { supabase } from "@flowselections/core";
4
4
  import { keyedRpc } from "./pick159.js";
5
+ import { parseStickerOpdrachten } from "./pick161.js";
5
6
  const db = keyedRpc(supabase);
6
7
  export const STICKER_UNKNOWN = "Stickerstand onbekend";
7
8
  const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
@@ -36,6 +37,8 @@ export function parseCartStickerState(raw) {
36
37
  wachtend: num(r["wachtend"]),
37
38
  geblokkeerd: num(r["geblokkeerd"]),
38
39
  geenStickersReden: txt(r["geenStickersReden"] ?? r["geen_stickers_reden"] ?? r["reden"]),
40
+ ...("stickerGevraagd" in r ? { stickerGevraagd: typeof r["stickerGevraagd"] === "boolean" ? r["stickerGevraagd"] : null } : {}),
41
+ ...("printopdrachten" in r ? { printopdrachten: parseStickerOpdrachten(r["printopdrachten"]) } : {}),
39
42
  regels: r["regels"].flatMap((x) => {
40
43
  const l = rec(x);
41
44
  if (!l)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/pick-schermen-kwekers",
3
- "version": "1.0.68",
3
+ "version": "1.0.70",
4
4
  "flowselections": {
5
5
  "moduleId": "pick-schermen",
6
6
  "schema": {
@@ -3919,6 +3919,18 @@ BEGIN
3919
3919
  v := v || jsonb_build_object('niveau','fout','tekst','Functie zonder interne controle: '||t);
3920
3920
  END IF;
3921
3921
  END LOOP;
3922
+ -- 1.0.67: stickerbundel levert printopdrachten en stickervraag.
3923
+ v_oid := to_regprocedure('public.pickstation_cart_sticker_states(text,uuid[])');
3924
+ IF v_oid IS NULL THEN
3925
+ v := v || jsonb_build_object('niveau','fout','tekst','Pickschermen: stickerbundel ontbreekt (pickstation_cart_sticker_states).');
3926
+ ELSIF position('''opdrachten''' IN pg_get_functiondef(v_oid)) = 0 THEN
3927
+ v := v || jsonb_build_object('niveau','fout','tekst','Pickschermen: stickerbundel levert geen printopdrachten.');
3928
+ ELSE
3929
+ v := v || jsonb_build_object('niveau','info','tekst','Pickschermen: stickerbundel levert printopdrachten.');
3930
+ END IF;
3931
+ IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='public' AND table_name='order_items' AND column_name='needs_sticker') THEN
3932
+ v := v || jsonb_build_object('niveau','waarschuwing','tekst','Pickschermen: stickervraag per orderregel niet leesbaar (order_items.needs_sticker ontbreekt, Verkoop).');
3933
+ END IF;
3922
3934
  SELECT true, device_key_required INTO v_rij, v_req FROM public.pick_settings WHERE id;
3923
3935
  IF v_rij IS NULL THEN v := v || jsonb_build_object('niveau','waarschuwing','tekst','Instellingenrij ontbreekt; voer pick_ensure_settings() uit. Apparaatsleutel nog niet verplicht.');
3924
3936
  ELSIF NOT v_req THEN v := v || jsonb_build_object('niveau','waarschuwing','tekst','Apparaatsleutel nog niet verplicht.'); END IF;
@@ -4066,7 +4078,7 @@ CREATE OR REPLACE FUNCTION public.pickstation_cart_sticker_states(p_slug text, p
4066
4078
  RETURNS jsonb LANGUAGE plpgsql VOLATILE SECURITY DEFINER SET search_path = public AS $$
4067
4079
  DECLARE v_station uuid; c uuid; v_stand jsonb; v_fit jsonb; v_meld jsonb; v_order uuid;
4068
4080
  v_jobs uuid[]; v_uitwijk jsonb; out jsonb := '[]'::jsonb; v_has_uitwijk boolean;
4069
- v_opdr jsonb; v_tz text;
4081
+ v_opdr jsonb; v_tz text; v_has_ns boolean; v_gevr boolean;
4070
4082
  BEGIN
4071
4083
  IF p_slug IS NOT NULL AND btrim(p_slug) <> '' THEN
4072
4084
  SELECT s.id INTO v_station FROM public.pick_stations s WHERE s.slug = p_slug AND s.active IS TRUE LIMIT 1;
@@ -4083,6 +4095,8 @@ BEGIN
4083
4095
  END IF;
4084
4096
  v_has_uitwijk := EXISTS (SELECT 1 FROM information_schema.columns
4085
4097
  WHERE table_schema='public' AND table_name='print_jobs' AND column_name='uitwijk');
4098
+ v_has_ns := EXISTS (SELECT 1 FROM information_schema.columns
4099
+ WHERE table_schema='public' AND table_name='order_items' AND column_name='needs_sticker');
4086
4100
  FOREACH c IN ARRAY (SELECT array_agg(DISTINCT x) FROM unnest(p_cart_ids[1:200]) x WHERE x IS NOT NULL) LOOP
4087
4101
  BEGIN
4088
4102
  v_stand := public.pickstation_cart_sticker_state(p_slug => p_slug, p_cart_id => c);
@@ -4119,6 +4133,14 @@ BEGIN
4119
4133
  WHERE pj.payload->>'cart_id' = c::text
4120
4134
  AND pj.documenttype ILIKE '%sticker%';
4121
4135
  EXCEPTION WHEN OTHERS THEN v_opdr := NULL; END;
4136
+ -- Stickervraag: minstens één orderregel op de kar met needs_sticker (Verkoop). null = onleesbaar.
4137
+ v_gevr := NULL;
4138
+ IF v_has_ns THEN
4139
+ BEGIN
4140
+ EXECUTE 'SELECT EXISTS (SELECT 1 FROM public.order_cart_items oci JOIN public.order_items oi ON oi.id = oci.order_item_id
4141
+ WHERE oci.cart_id = $1 AND oi.needs_sticker IS TRUE)' INTO v_gevr USING c;
4142
+ EXCEPTION WHEN OTHERS THEN v_gevr := NULL; END;
4143
+ END IF;
4122
4144
  v_uitwijk := '[]'::jsonb;
4123
4145
  IF v_has_uitwijk THEN
4124
4146
  BEGIN
@@ -4135,7 +4157,7 @@ BEGIN
4135
4157
  EXCEPTION WHEN OTHERS THEN v_uitwijk := '[]'::jsonb; END;
4136
4158
  END IF;
4137
4159
  out := out || jsonb_build_array(jsonb_build_object('cart_id', c, 'toegang', true, 'order_id', v_order,
4138
- 'stand', v_stand, 'controle', v_fit, 'meldingen', v_meld, 'uitwijk', v_uitwijk, 'opdrachten', v_opdr));
4160
+ 'stand', v_stand, 'controle', v_fit, 'meldingen', v_meld, 'uitwijk', v_uitwijk, 'opdrachten', v_opdr, 'sticker_gevraagd', v_gevr));
4139
4161
  END LOOP;
4140
4162
  RETURN jsonb_build_object('toegang', true, 'tijdzone', v_tz, 'karren', out);
4141
4163
  END $$;