@flowselections/layout-maker 1.63.2 → 1.63.5

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.
@@ -76,7 +76,7 @@ sticker = false) {
76
76
  ok: false,
77
77
  code: "FORMAAT_PAST_NIET",
78
78
  bericht: sticker
79
- ? `Klantsticker ${heel(b, h)} past niet op het etiket in ${printerNaam} (${heel(geladen.breedte_mm, geladen.hoogte_mm)}). ` +
79
+ ? `${/sticker/i.test(doc.soortLabel) ? doc.soortLabel : "Klantsticker"} ${heel(b, h)} past niet op het etiket in ${printerNaam} (${heel(geladen.breedte_mm, geladen.hoogte_mm)}). ` +
80
80
  `Leg etiketten van minimaal ${heel(b, h)} in of kies een andere printer.`
81
81
  : `Past niet op het etiket in de printer (${heel(b, h)} op ${heel(geladen.breedte_mm, geladen.hoogte_mm)}).`,
82
82
  };
@@ -85,6 +85,8 @@ export declare function wachtOpLayout(db: PrintDb, job: Job, reden: string): Pro
85
85
  * en valt buiten "Alles annuleren". De foutcode bepaalt het label.
86
86
  */
87
87
  export declare function geweigerd(db: PrintDb, job: Job, code: "FORMAAT_PAST_NIET" | "GEEN_GELADEN_ETIKET", bericht: string): Promise<void>;
88
+ /** Koper wil deze sticker niet: eindstatus zonder fout en zonder nieuwe poging. */
89
+ export declare function nietNodig(db: PrintDb, job: Job): Promise<void>;
88
90
  /**
89
91
  * Verwerkt één stabiele PrintNode-status (uit /states of de webhook) op een
90
92
  * opdracht. Gedeeld door polling en webhook, zodat beide hetzelfde doen.
@@ -1 +1 @@
1
- {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAwC5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAiFD,2EAA2E;AAC3E,qBAAa,gBAAiB,SAAQ,KAAK;IAChC,IAAI,SAAsB;CACpC;AAED,+EAA+E;AAC/E,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAuB;CACrC;AAED,oFAAoF;AACpF,qBAAa,kBAAmB,SAAQ,gBAAgB;IAC7C,IAAI,SAAwB;CACtC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvE,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;AAE5G,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAcnD,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAI7D;AASD,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQnD;AAkCD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAIlE;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAe7C;AA8ND;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQlH;AAWD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqClF;AA8SD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,MAAM,CAAC,CAkajB;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AAqBD,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAsCzG;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,OAAO,EAAE,MAAM,iBAiBxH;AA8WD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAOD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGlG;AAqID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA2BD,oFAAoF;AACpF,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8GtF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,GAAG,GACP,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA6B1D"}
1
+ {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData } from "./ord
13
13
  import { profielHeeftInhoud, renderProfielDocument } from "./profielHtml.js";
14
14
  import { bouwDocumentHtml, voorbeeldContext } from "./layoutPreview.js";
15
15
  import { AfbeeldingInhoudFout, htmlNaarPdfServer, PdfRenderFout } from "./htmlNaarPdf.server.js";
16
- import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode } from "./stickerFormaat.js";
16
+ import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode, stickerIdUitPayload, stickerInfoUitCache, stickerNietNodig, stickerTypeLabel, STICKER_NIET_NODIG, FASE_NIET_NODIG } from "./stickerFormaat.js";
17
17
  import { OPMAAK_LIMIET_MS, OpmaakTeLangFout, metTijdslimiet } from "./opmaakLimiet.js";
18
18
  import { stuurPdfNaarPrinter, opdrachtStatusDetail, vervaltijdVoor } from "./printService.server.js";
19
19
  import { kiesPapier } from "./papierFormaten.js";
@@ -1251,6 +1251,25 @@ export async function geweigerd(db, job, code, bericht) {
1251
1251
  .neq("status", "geannuleerd");
1252
1252
  await log(db, job.id, "geweigerd", `${code}: ${bericht}`);
1253
1253
  }
1254
+ /** Koper wil deze sticker niet: eindstatus zonder fout en zonder nieuwe poging. */
1255
+ export async function nietNodig(db, job) {
1256
+ const nu = new Date().toISOString();
1257
+ await db
1258
+ .from("print_jobs")
1259
+ .update({
1260
+ status: "geannuleerd",
1261
+ verwerkingsfase: FASE_NIET_NODIG,
1262
+ fase_voltooid_op: nu,
1263
+ foutcode: null,
1264
+ foutmelding: STICKER_NIET_NODIG,
1265
+ volgende_poging: null,
1266
+ voltooid_op: nu,
1267
+ updated_at: nu,
1268
+ })
1269
+ .eq("id", job.id)
1270
+ .neq("status", "geannuleerd");
1271
+ await log(db, job.id, FASE_NIET_NODIG, STICKER_NIET_NODIG);
1272
+ }
1254
1273
  async function mislukt(db, job, reden, terugNaarWachtend) {
1255
1274
  const pogingen = Number(job.pogingen ?? 0);
1256
1275
  const opnieuw = terugNaarWachtend && pogingen < MAX_POGINGEN;
@@ -1386,8 +1405,29 @@ async function verwerkJob(db, job) {
1386
1405
  // PDF). Onbekend = niet printen. De maat kiest ook de printer via de
1387
1406
  // formaatregels, zodat een sticker op een etiket komt dat groot genoeg is.
1388
1407
  let stickerMaat = null;
1408
+ let stickerCache = null;
1409
+ if (ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? ""))) {
1410
+ const sid = stickerIdUitPayload(job.payload);
1411
+ if (sid) {
1412
+ const { data: rij } = await db
1413
+ .from("floriday_customer_stickers_cache")
1414
+ .select("sticker_width_mm, sticker_height_mm, sticker_type, should_be_printed")
1415
+ .eq("floriday_id", sid)
1416
+ .eq("is_deleted", false)
1417
+ .order("updated_at", { ascending: false })
1418
+ .limit(1)
1419
+ .maybeSingle();
1420
+ stickerCache = stickerInfoUitCache(rij);
1421
+ }
1422
+ if (stickerNietNodig(stickerCache, job.payload)) {
1423
+ await nietNodig(db, job);
1424
+ return "mislukt";
1425
+ }
1426
+ }
1389
1427
  if (klaar && ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? ""))) {
1390
- stickerMaat = bepaalStickerMaat(floridayStickerMaat(job.payload), pdfPaginaMm(klaar));
1428
+ stickerMaat = stickerCache?.maat
1429
+ ? { ...stickerCache.maat, bron: "floriday" }
1430
+ : bepaalStickerMaat(floridayStickerMaat(job.payload), pdfPaginaMm(klaar));
1391
1431
  if (!stickerMaat)
1392
1432
  throw new GeenDocumentFout(STICKER_MAAT_ONBEKEND);
1393
1433
  await faseLog(db, job.id, "sticker_maat", { bron: stickerMaat.bron, breedte_mm: stickerMaat.breedte_mm, hoogte_mm: stickerMaat.hoogte_mm });
@@ -1476,7 +1516,7 @@ async function verwerkJob(db, job) {
1476
1516
  let papier = kiesPapier(formaten, breedteMm, hoogteMm);
1477
1517
  if (label) {
1478
1518
  const maat = stickerMaat ?? (klaar ? pdfPaginaMm(pdfBase64) : null) ?? { breedte_mm: breedteMm, hoogte_mm: hoogteMm };
1479
- const uit = etiketPast({ ...maat, soortLabel: documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
1519
+ const uit = etiketPast({ ...maat, soortLabel: stickerCache?.sticker_type ? stickerTypeLabel(stickerCache.sticker_type) : documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
1480
1520
  if (!uit.ok) {
1481
1521
  await geweigerd(db, job, uit.code, uit.bericht);
1482
1522
  return "mislukt";
@@ -1499,6 +1539,7 @@ async function verwerkJob(db, job) {
1499
1539
  documentnaam: String(job.documentnaam ?? "Document"),
1500
1540
  pdfBase64,
1501
1541
  kopieen: Number(job.kopieen ?? 1),
1542
+ documenttype: String(job.documenttype ?? ""),
1502
1543
  opties: { paper: papier.paper, rotate: papier.rotate, fitToPage: false },
1503
1544
  });
1504
1545
  if (i > 0) {
@@ -28,6 +28,8 @@ export interface PrintOpdrachtInput {
28
28
  documentnaam: string;
29
29
  pdfBase64: string;
30
30
  kopieen?: number;
31
+ /** Documentsoort: bepaalt het maximum (sticker/traysticker 5000, anders 50). */
32
+ documenttype?: string | null;
31
33
  opties?: PrintOpties;
32
34
  }
33
35
  /** Fout voor een 409 van PrintNode: deze idempotentiesleutel is al ontvangen. */
@@ -1 +1 @@
1
- {"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { kopieenVoorPrinter } from "./stickerFormaat.js";
1
2
  // ============================================================================
2
3
  // src/lib/printService.server.ts — communicatie met de externe printdienst.
3
4
  // Alleen server-side. Fouten worden vertaald naar begrijpelijke meldingen.
@@ -128,7 +129,7 @@ export async function stuurPdfNaarPrinter(input) {
128
129
  contentType: "pdf_base64",
129
130
  content: input.pdfBase64,
130
131
  source: sourceVoorJob(input.jobId),
131
- qty: Math.max(1, Math.min(50, input.kopieen ?? 1)),
132
+ qty: kopieenVoorPrinter(input.kopieen, input.documenttype),
132
133
  options,
133
134
  };
134
135
  if (typeof input.expireAfter === "number" && input.expireAfter > 0) {
@@ -13,5 +13,7 @@ export declare const SCANBARE_SOORTEN: Set<string>;
13
13
  export declare function opnieuwActie(j: JobVoorLabel): "opnieuw_proberen" | "opnieuw_printen" | null;
14
14
  /** "gescand" alleen als de scan ná het printen van dit document was. */
15
15
  export declare function scanLabel(scanTijd: number | string, printTijd: string | null | undefined): "gescand" | "eerder";
16
+ /** "Sticker × 480" voor sticker-opdrachten met meer dan één afdruk. */
17
+ export declare function aantalLabel(documenttype: string | null | undefined, kopieen: number | null | undefined): string | null;
16
18
  export {};
17
19
  //# sourceMappingURL=printnodeStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAe5D;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AAEpF,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAI3F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAI/G"}
1
+ {"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAiB5D;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AAEpF,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAI3F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAI/G;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKtH"}
@@ -13,6 +13,8 @@ export const PRINTNODE_STATUS_LABEL = {
13
13
  };
14
14
  /** Label voor de statuskolom van de wachtrij. */
15
15
  export function printnodeStatusLabel(j) {
16
+ if (j.status === "geannuleerd" && j.verwerkingsfase === "niet_nodig")
17
+ return "Niet nodig – de koper wil geen sticker";
16
18
  if (j.status === "geannuleerd")
17
19
  return "Geannuleerd";
18
20
  if (j.foutcode === "AANLEVERING_MISLUKT")
@@ -53,3 +55,11 @@ export function scanLabel(scanTijd, printTijd) {
53
55
  const print = printTijd ? new Date(printTijd).getTime() : NaN;
54
56
  return !Number.isNaN(print) && scan >= print ? "gescand" : "eerder";
55
57
  }
58
+ /** "Sticker × 480" voor sticker-opdrachten met meer dan één afdruk. */
59
+ export function aantalLabel(documenttype, kopieen) {
60
+ const t = String(documenttype ?? "");
61
+ const n = Number(kopieen ?? 1);
62
+ if ((t !== "sticker" && t !== "traysticker") || !(n > 1))
63
+ return null;
64
+ return `${t === "traysticker" ? "Traysticker" : "Sticker"} × ${Math.floor(n)}`;
65
+ }
@@ -1,5 +1,5 @@
1
1
  /** Moduleversie van deze code. Gelijk houden aan package.json (test bewaakt dit). */
2
- export declare const MODULE_VERSIE = "1.63.1";
2
+ export declare const MODULE_VERSIE = "1.63.4";
3
3
  export declare function normaliseerAdres(u: unknown): string | null;
4
4
  /** -1 als a < b, 0 als gelijk, 1 als a > b (alleen cijfers, punt-gescheiden). */
5
5
  export declare function vergelijkVersie(a: string, b: string): number;
@@ -4,7 +4,7 @@
4
4
  // database. Niets vast in code; ontbreekt het adres, dan wordt er niet geprint.
5
5
  // ============================================================================
6
6
  /** Moduleversie van deze code. Gelijk houden aan package.json (test bewaakt dit). */
7
- export const MODULE_VERSIE = "1.63.1";
7
+ export const MODULE_VERSIE = "1.63.4";
8
8
  export function normaliseerAdres(u) {
9
9
  const s = String(u ?? "").trim().replace(/\/+$/, "").toLowerCase();
10
10
  return s || null;
@@ -8,6 +8,10 @@ export declare function floridayStickerMaat(payload: unknown): {
8
8
  breedte_mm: number;
9
9
  hoogte_mm: number;
10
10
  } | null;
11
+ /** Maximum afdrukken per opdracht: klantstickers per stuk tot 5000, de rest 50. */
12
+ export declare function maxKopieen(documenttype: string | null | undefined): number;
13
+ /** Aantal dat naar de printer gaat: binnen 1..max voor deze soort. */
14
+ export declare function kopieenVoorPrinter(kopieen: number | null | undefined, documenttype: string | null | undefined): number;
11
15
  export declare function bepaalStickerMaat(floriday: {
12
16
  breedte_mm: number;
13
17
  hoogte_mm: number;
@@ -18,4 +22,25 @@ export declare function bepaalStickerMaat(floriday: {
18
22
  export declare const STICKER_MAAT_ONBEKEND = "De maat van deze klantsticker is onbekend; er is niets geprint.";
19
23
  /** Formaatcode voor de formaatregels: "48x48" (kleinste maat eerst, hele mm). */
20
24
  export declare function stickerFormaatCode(b: number, h: number): string;
25
+ /** Floriday-stickernummer uit de payload (veld floriday_sticker_id; match op id, nooit op naam). */
26
+ export declare function stickerIdUitPayload(payload: unknown): string | null;
27
+ export type StickerCacheInfo = {
28
+ maat: {
29
+ breedte_mm: number;
30
+ hoogte_mm: number;
31
+ } | null;
32
+ sticker_type: string | null;
33
+ should_be_printed: boolean | null;
34
+ };
35
+ /** Leest een rij uit floriday_customer_stickers_cache (Floriday-authenticatie 1.0.87). */
36
+ export declare function stickerInfoUitCache(rij: unknown): StickerCacheInfo | null;
37
+ /** Koper wil geen sticker: cache of payload (shouldBePrinted) zegt expliciet false. */
38
+ export declare function stickerNietNodig(cache: StickerCacheInfo | null, payload: unknown): boolean;
39
+ /** "Potsticker 48 × 48 mm" — soort alleen als informatie, nooit voor het formaat. */
40
+ export declare function stickerTypeLabel(type: string | null | undefined, maat?: {
41
+ breedte_mm: number;
42
+ hoogte_mm: number;
43
+ } | null): string;
44
+ export declare const STICKER_NIET_NODIG = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
45
+ export declare const FASE_NIET_NODIG = "niet_nodig";
21
46
  //# sourceMappingURL=stickerFormaat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stickerFormaat.d.ts","sourceRoot":"","sources":["../../src/lib/stickerFormaat.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAA;CAAE,CAAC;AAO9F,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYtG;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1D,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,WAAW,GAAG,IAAI,CAIpB;AAED,eAAO,MAAM,qBAAqB,oEAAoE,CAAC;AAEvG,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D"}
1
+ {"version":3,"file":"stickerFormaat.d.ts","sourceRoot":"","sources":["../../src/lib/stickerFormaat.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAA;CAAE,CAAC;AAO9F,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmBtG;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG1E;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGtH;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1D,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,WAAW,GAAG,IAAI,CAIpB;AAED,eAAO,MAAM,qBAAqB,oEAAoE,CAAC;AAEvG,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAInE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAUzE;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAO1F;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,MAAM,CAIjI;AAED,eAAO,MAAM,kBAAkB,6EAA6E,CAAC;AAC7G,eAAO,MAAM,eAAe,eAAe,CAAC"}
@@ -22,8 +22,26 @@ export function floridayStickerMaat(payload) {
22
22
  if (b && h)
23
23
  return { breedte_mm: b, hoogte_mm: h };
24
24
  }
25
+ // Engine 1.0.164: sticker_formaat_mm: { breedte, hoogte }
26
+ const f = p["sticker_formaat_mm"];
27
+ if (f && typeof f === "object") {
28
+ const b = getal(f["breedte"]);
29
+ const h = getal(f["hoogte"]);
30
+ if (b && h)
31
+ return { breedte_mm: b, hoogte_mm: h };
32
+ }
25
33
  return null;
26
34
  }
35
+ /** Maximum afdrukken per opdracht: klantstickers per stuk tot 5000, de rest 50. */
36
+ export function maxKopieen(documenttype) {
37
+ const t = String(documenttype ?? "").trim();
38
+ return t === "sticker" || t === "traysticker" ? 5000 : 50;
39
+ }
40
+ /** Aantal dat naar de printer gaat: binnen 1..max voor deze soort. */
41
+ export function kopieenVoorPrinter(kopieen, documenttype) {
42
+ const n = Math.floor(Number(kopieen ?? 1));
43
+ return Math.max(1, Math.min(maxKopieen(documenttype), Number.isFinite(n) ? n : 1));
44
+ }
27
45
  export function bepaalStickerMaat(floriday, pdf) {
28
46
  if (floriday)
29
47
  return { ...floriday, bron: "floriday" };
@@ -37,3 +55,42 @@ export function stickerFormaatCode(b, h) {
37
55
  const [x, y] = [Math.round(b), Math.round(h)].sort((p, q) => p - q);
38
56
  return `${x}x${y}`;
39
57
  }
58
+ /** Floriday-stickernummer uit de payload (veld floriday_sticker_id; match op id, nooit op naam). */
59
+ export function stickerIdUitPayload(payload) {
60
+ if (!payload || typeof payload !== "object")
61
+ return null;
62
+ const v = payload["floriday_sticker_id"];
63
+ return typeof v === "string" && v.trim() ? v.trim() : null;
64
+ }
65
+ /** Leest een rij uit floriday_customer_stickers_cache (Floriday-authenticatie 1.0.87). */
66
+ export function stickerInfoUitCache(rij) {
67
+ if (!rij || typeof rij !== "object")
68
+ return null;
69
+ const r = rij;
70
+ const b = getal(r["sticker_width_mm"]);
71
+ const h = getal(r["sticker_height_mm"]);
72
+ return {
73
+ maat: b && h ? { breedte_mm: b, hoogte_mm: h } : null,
74
+ sticker_type: typeof r["sticker_type"] === "string" && r["sticker_type"] ? r["sticker_type"] : null,
75
+ should_be_printed: typeof r["should_be_printed"] === "boolean" ? r["should_be_printed"] : null,
76
+ };
77
+ }
78
+ /** Koper wil geen sticker: cache of payload (shouldBePrinted) zegt expliciet false. */
79
+ export function stickerNietNodig(cache, payload) {
80
+ if (cache?.should_be_printed === false)
81
+ return true;
82
+ if (payload && typeof payload === "object") {
83
+ const p = payload;
84
+ if (p["shouldBePrinted"] === false || p["should_be_printed"] === false)
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+ /** "Potsticker 48 × 48 mm" — soort alleen als informatie, nooit voor het formaat. */
90
+ export function stickerTypeLabel(type, maat) {
91
+ const t = String(type ?? "").trim().toUpperCase();
92
+ const soort = !t ? "Klantsticker" : t === "POT" ? "Potsticker" : `Klantsticker (${type})`;
93
+ return maat ? `${soort} ${Math.round(maat.breedte_mm)} × ${Math.round(maat.hoogte_mm)} mm` : soort;
94
+ }
95
+ export const STICKER_NIET_NODIG = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
96
+ export const FASE_NIET_NODIG = "niet_nodig";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/layout-maker",
3
- "version": "1.63.2",
3
+ "version": "1.63.5",
4
4
  "flowselections": {
5
5
  "moduleId": "layout-maker",
6
6
  "pages": [