@flowselections/pick-schermen-kwekers 1.0.50 → 1.0.53

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.
Files changed (30) hide show
  1. package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
  2. package/dist-lib/components/pick/PickScherm.js +8 -6
  3. package/dist-lib/components/pick/QueueTable.js +4 -1
  4. package/dist-lib/components/pick/StickerReprintButton.d.ts +6 -0
  5. package/dist-lib/components/pick/StickerReprintButton.d.ts.map +1 -0
  6. package/dist-lib/components/pick/StickerReprintButton.js +47 -0
  7. package/dist-lib/components/pick/StickerState.d.ts +5 -0
  8. package/dist-lib/components/pick/StickerState.d.ts.map +1 -1
  9. package/dist-lib/components/pick/StickerState.js +29 -1
  10. package/dist-lib/index.d.ts +2 -0
  11. package/dist-lib/index.d.ts.map +1 -1
  12. package/dist-lib/index.js +2 -0
  13. package/dist-lib/integrations/supabase/types.d.ts +344 -0
  14. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  15. package/dist-lib/lib/__tests__/pick150.test.d.ts +2 -0
  16. package/dist-lib/lib/__tests__/pick150.test.d.ts.map +1 -0
  17. package/dist-lib/lib/__tests__/pick150.test.js +26 -0
  18. package/dist-lib/lib/__tests__/pick152.test.d.ts +2 -0
  19. package/dist-lib/lib/__tests__/pick152.test.d.ts.map +1 -0
  20. package/dist-lib/lib/__tests__/pick152.test.js +26 -0
  21. package/dist-lib/lib/pick142.d.ts +7 -1
  22. package/dist-lib/lib/pick142.d.ts.map +1 -1
  23. package/dist-lib/lib/pick142.js +17 -0
  24. package/dist-lib/lib/pick150.d.ts +15 -0
  25. package/dist-lib/lib/pick150.d.ts.map +1 -0
  26. package/dist-lib/lib/pick150.js +45 -0
  27. package/dist-lib/lib/pick152.d.ts +9 -0
  28. package/dist-lib/lib/pick152.d.ts.map +1 -0
  29. package/dist-lib/lib/pick152.js +30 -0
  30. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pick150.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick150.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pick150.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ vi.mock("@flowselections/core", () => ({ supabase: {} }));
3
+ import { parseStickerFit, stickerFitTone } from "../pick150.js";
4
+ import { isJobFailed, printStageLabel } from "../pick142.js";
5
+ describe("1.0.50 stickers", () => {
6
+ it("niet_nodig is geen fout", () => {
7
+ const j = { status: "geannuleerd", verwerkingsfase: "niet_nodig" };
8
+ expect(printStageLabel(j)).toBe("Niet nodig – de koper wil geen sticker");
9
+ expect(isJobFailed(j)).toBe(false);
10
+ });
11
+ it("andere geannuleerde opdracht blijft mislukt", () => {
12
+ expect(isJobFailed({ status: "geannuleerd" })).toBe(true);
13
+ expect(printStageLabel({ status: "geannuleerd" })).toBe("Mislukt – opnieuw printen");
14
+ });
15
+ it("controle fail closed", () => {
16
+ expect(parseStickerFit({ toegang: false })).toBeNull();
17
+ expect(parseStickerFit(null)).toBeNull();
18
+ expect(parseStickerFit({ toegang: true, controle: [{ uitkomst: "past", melding: "M" }] })[0].melding).toBe("M");
19
+ });
20
+ it("toon per uitkomst", () => {
21
+ expect(stickerFitTone("past_niet")).toBe("warning");
22
+ expect(stickerFitTone("onbekend")).toBe("warning");
23
+ expect(stickerFitTone("niet_nodig")).toBe("muted");
24
+ expect(stickerFitTone("past")).toBe("normal");
25
+ });
26
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pick152.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick152.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pick152.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ vi.mock("@flowselections/core", () => ({ supabase: {} }));
3
+ import { hasPrintedSticker, reprintResultText } from "../pick152.js";
4
+ const stand = (status) => ({
5
+ cartId: "k", totaal: 1, inPrintwachtrij: 0, wachtend: 0, geblokkeerd: 0,
6
+ regels: [{ soort: null, stickerId: "s", kopieen: 1, status, reden: null, printJobId: null, breedteMm: null, hoogteMm: null }],
7
+ });
8
+ describe("1.0.52 stickers opnieuw printen", () => {
9
+ it("knop alleen bij al geprinte sticker", () => {
10
+ expect(hasPrintedSticker(stand("in_printwachtrij"))).toBe(true);
11
+ expect(hasPrintedSticker(stand("afgemeld"))).toBe(true);
12
+ expect(hasPrintedSticker(stand("wacht_op_moment"))).toBe(false);
13
+ expect(hasPrintedSticker(stand("klaar"))).toBe(false);
14
+ expect(hasPrintedSticker(null)).toBe(false);
15
+ });
16
+ it("ok-tekst", () => {
17
+ expect(reprintResultText({ ok: true, aantal: 2 }).tekst).toBe("2 sticker(s) opnieuw in de printwachtrij");
18
+ });
19
+ it("redenen", () => {
20
+ expect(reprintResultText({ ok: false, reden: "onbekend_of_inactief_station" }).tekst).toBe("Dit pickstation is onbekend of staat uit.");
21
+ expect(reprintResultText({ ok: false, reden: "niet_in_wachtrij_station" }).tekst).toBe("Deze kar hoort niet bij dit pickstation.");
22
+ expect(reprintResultText({ ok: false, reden: "geen_eerder_geprinte_sticker" }).tekst).toBe("Er is voor deze kar nog geen sticker geprint.");
23
+ expect(reprintResultText({ ok: false, reden: "x" }).tekst).toBe("Opnieuw printen lukte niet. Probeer het later opnieuw.");
24
+ expect(reprintResultText("raar").ok).toBe(false);
25
+ });
26
+ });
@@ -57,7 +57,13 @@ export type PrintStageJob = {
57
57
  verwerkingsfase?: string | null;
58
58
  printnode_status?: string | null;
59
59
  };
60
+ export declare const PRINT_NOT_NEEDED = "Niet nodig \u2013 de koper wil geen sticker";
61
+ export declare const PRINT_NOT_NEEDED_HINT = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
62
+ /** Geannuleerd omdat de koper geen sticker wil: geen fout. */
63
+ export declare function isJobNotNeeded(job: PrintStageJob | null | undefined): boolean;
64
+ /** Echt mislukt: mislukt, of geannuleerd zonder "niet nodig". */
65
+ export declare function isJobFailed(job: PrintStageJob | null | undefined): boolean;
60
66
  /** Echte stand van een printopdracht, alleen uit print_jobs. Onbekend = fail closed. */
61
- export declare function printStage(job: PrintStageJob | null | undefined): "rendering" | "arrived" | "failed" | "unknown";
67
+ export declare function printStage(job: PrintStageJob | null | undefined): "rendering" | "arrived" | "failed" | "not_needed" | "unknown";
62
68
  export declare function printStageLabel(job: PrintStageJob | null | undefined): string;
63
69
  //# sourceMappingURL=pick142.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pick142.d.ts","sourceRoot":"","sources":["../../src/lib/pick142.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pick142.d.ts","sourceRoot":"","sources":["../../src/lib/pick142.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBjD,eAAO,MAAM,0BAA0B,0FACkD,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAE5D;AAID,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAK5D;AAMD,mFAAmF;AACnF,wBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBrD;AAED,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAS9F;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE/E;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAqBzF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAavG;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAiBnG;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAS7D;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EACb,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EACnD,QAAQ,SAAK,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQxE;AAED,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AAWvE,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAShH;AAID,uDAAuD;AACvD,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAClD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAC9C,eAAO,MAAM,YAAY,mCAA8B,CAAC;AACxD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,yEAAyE;AACzE,eAAO,MAAM,YAAY,qCAAqC,CAAC;AAC/D,eAAO,MAAM,iBAAiB,iEAAuD,CAAC;AAItF,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1H,eAAO,MAAM,gBAAgB,gDAA2C,CAAC;AACzE,eAAO,MAAM,qBAAqB,6EAA6E,CAAC;AAEhH,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI1E;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAS/H;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAI7E"}
@@ -225,8 +225,23 @@ export const PRINT_UNKNOWN = "Status onbekend";
225
225
  export const PRINT_MANUAL = "Handmatig als geprint gemarkeerd";
226
226
  export const PRINT_FAILED_HINT = "Klik op ‘Opnieuw printen’ of meld het bij kantoor.";
227
227
  const PRINTNODE_CONFIRMED = new Set(["done", "delivered", "completed", "printed"]);
228
+ export const PRINT_NOT_NEEDED = "Niet nodig – de koper wil geen sticker";
229
+ export const PRINT_NOT_NEEDED_HINT = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
230
+ /** Geannuleerd omdat de koper geen sticker wil: geen fout. */
231
+ export function isJobNotNeeded(job) {
232
+ return job?.status === "geannuleerd" && job?.verwerkingsfase === "niet_nodig";
233
+ }
234
+ /** Echt mislukt: mislukt, of geannuleerd zonder "niet nodig". */
235
+ export function isJobFailed(job) {
236
+ const s = job?.status ?? null;
237
+ if (s === "mislukt")
238
+ return true;
239
+ return s === "geannuleerd" && !isJobNotNeeded(job);
240
+ }
228
241
  /** Echte stand van een printopdracht, alleen uit print_jobs. Onbekend = fail closed. */
229
242
  export function printStage(job) {
243
+ if (isJobNotNeeded(job))
244
+ return "not_needed";
230
245
  const status = job?.status ?? null;
231
246
  if (status === "mislukt" || status === "geannuleerd")
232
247
  return "failed";
@@ -241,5 +256,7 @@ export function printStage(job) {
241
256
  }
242
257
  export function printStageLabel(job) {
243
258
  const stage = printStage(job);
259
+ if (stage === "not_needed")
260
+ return PRINT_NOT_NEEDED;
244
261
  return stage === "failed" ? PRINT_FAILED : stage === "arrived" ? PRINT_ARRIVED : stage === "rendering" ? PRINT_RENDERING : PRINT_UNKNOWN;
245
262
  }
@@ -0,0 +1,15 @@
1
+ export declare const STICKER_FIT_UNKNOWN = "Stickercontrole onbekend";
2
+ export type StickerFitOutcome = "past" | "past_niet" | "niet_nodig" | "onbekend";
3
+ export interface StickerFit {
4
+ stickerId: string | null;
5
+ uitkomst: StickerFitOutcome;
6
+ melding: string;
7
+ printerNaam: string | null;
8
+ geladenEtiket: string | null;
9
+ }
10
+ /** null = onleesbaar of geen toegang (fail closed). */
11
+ export declare function parseStickerFit(raw: unknown): StickerFit[] | null;
12
+ /** Toon: waarschuwing bij past_niet/onbekend, grijs bij niet_nodig. */
13
+ export declare function stickerFitTone(u: StickerFitOutcome): "warning" | "muted" | "normal";
14
+ export declare function fetchStickerFit(cartId: string, slug: string | null): Promise<StickerFit[] | null>;
15
+ //# sourceMappingURL=pick150.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick150.d.ts","sourceRoot":"","sources":["../../src/lib/pick150.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,IAAI,CAiBjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAInF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAMvG"}
@@ -0,0 +1,45 @@
1
+ // Pickschermen 1.0.50: controle vooraf of klantstickers passen. Alleen lezen;
2
+ // de uitkomst en melding komen letterlijk uit Layouts en printers.
3
+ import { supabase } from "@flowselections/core";
4
+ const db = supabase;
5
+ export const STICKER_FIT_UNKNOWN = "Stickercontrole onbekend";
6
+ const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
7
+ const txt = (v) => (typeof v === "string" && v.trim() ? v : null);
8
+ const OUTCOMES = new Set(["past", "past_niet", "niet_nodig", "onbekend"]);
9
+ /** null = onleesbaar of geen toegang (fail closed). */
10
+ export function parseStickerFit(raw) {
11
+ const r = rec(raw);
12
+ if (!r || r["toegang"] !== true || !Array.isArray(r["controle"]))
13
+ return null;
14
+ return r["controle"].flatMap((x) => {
15
+ const l = rec(x);
16
+ if (!l)
17
+ return [];
18
+ const u = txt(l["uitkomst"]);
19
+ const uitkomst = (u && OUTCOMES.has(u) ? u : "onbekend");
20
+ const etiket = l["geladen_etiket"];
21
+ return [{
22
+ stickerId: txt(l["sticker_id"]),
23
+ uitkomst,
24
+ melding: txt(l["melding"]) ?? STICKER_FIT_UNKNOWN,
25
+ printerNaam: txt(l["printer_naam"]),
26
+ geladenEtiket: etiket == null ? null : typeof etiket === "string" ? etiket : JSON.stringify(etiket),
27
+ }];
28
+ });
29
+ }
30
+ /** Toon: waarschuwing bij past_niet/onbekend, grijs bij niet_nodig. */
31
+ export function stickerFitTone(u) {
32
+ if (u === "past_niet" || u === "onbekend")
33
+ return "warning";
34
+ if (u === "niet_nodig")
35
+ return "muted";
36
+ return "normal";
37
+ }
38
+ export async function fetchStickerFit(cartId, slug) {
39
+ const { data, error } = slug
40
+ ? await db.rpc("pickstation_sticker_past_controle", { p_slug: slug, p_cart_id: cartId })
41
+ : await db.rpc("pick_sticker_past_controle", { p_cart_id: cartId });
42
+ if (error)
43
+ throw new Error(error.message);
44
+ return parseStickerFit(data);
45
+ }
@@ -0,0 +1,9 @@
1
+ import type { CartStickerState } from "./pickStickers.js";
2
+ export declare const REPRINT_FAILED = "Opnieuw printen lukte niet. Probeer het later opnieuw.";
3
+ export declare function hasPrintedSticker(s: CartStickerState | null | undefined): boolean;
4
+ export declare function reprintResultText(raw: unknown): {
5
+ ok: boolean;
6
+ tekst: string;
7
+ };
8
+ export declare function reprintStickers(slug: string, cartId: string, reden: string | null): Promise<unknown>;
9
+ //# sourceMappingURL=pick152.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick152.d.ts","sourceRoot":"","sources":["../../src/lib/pick152.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,eAAO,MAAM,cAAc,2DAA2D,CAAC;AAQvF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGjF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO9E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1G"}
@@ -0,0 +1,30 @@
1
+ // 1.0.52: stickers van een kar opnieuw printen via de Engine (pickstation_sticker_reprint).
2
+ // Deze module maakt zelf nooit printopdrachten.
3
+ import { supabase } from "@flowselections/core";
4
+ const db = supabase;
5
+ export const REPRINT_FAILED = "Opnieuw printen lukte niet. Probeer het later opnieuw.";
6
+ const REDEN_TEKST = {
7
+ onbekend_of_inactief_station: "Dit pickstation is onbekend of staat uit.",
8
+ niet_in_wachtrij_station: "Deze kar hoort niet bij dit pickstation.",
9
+ geen_eerder_geprinte_sticker: "Er is voor deze kar nog geen sticker geprint.",
10
+ };
11
+ const PRINTED = new Set(["in_printwachtrij", "afgemeld"]);
12
+ export function hasPrintedSticker(s) {
13
+ const regels = Array.isArray(s?.regels) ? s.regels : [];
14
+ return regels.some((r) => r.status != null && PRINTED.has(r.status));
15
+ }
16
+ export function reprintResultText(raw) {
17
+ const r = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : null;
18
+ if (r?.["ok"] === true && typeof r["aantal"] === "number") {
19
+ return { ok: true, tekst: `${r["aantal"]} sticker(s) opnieuw in de printwachtrij` };
20
+ }
21
+ const reden = typeof r?.["reden"] === "string" ? r["reden"] : "";
22
+ return { ok: false, tekst: REDEN_TEKST[reden] ?? REPRINT_FAILED };
23
+ }
24
+ export async function reprintStickers(slug, cartId, reden) {
25
+ const r = reden?.trim() ? reden.trim() : null;
26
+ const { data, error } = await db.rpc("pickstation_sticker_reprint", { p_slug: slug, p_cart_id: cartId, p_reden: r });
27
+ if (error)
28
+ throw new Error(error.message);
29
+ return data;
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/pick-schermen-kwekers",
3
- "version": "1.0.50",
3
+ "version": "1.0.53",
4
4
  "flowselections": {
5
5
  "moduleId": "pick-schermen",
6
6
  "pages": [