@flowselections/layout-maker 1.62.3 → 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.
- package/dist-lib/components/BevestigDialog.d.ts +9 -0
- package/dist-lib/components/BevestigDialog.d.ts.map +1 -0
- package/dist-lib/components/BevestigDialog.js +24 -0
- package/dist-lib/components/LogosPage.d.ts.map +1 -1
- package/dist-lib/components/LogosPage.js +27 -5
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +2 -1
- package/dist-lib/components/PrintenInstellenWizard.js +1 -1
- package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
- package/dist-lib/components/PrinterSetupWizard.js +3 -1
- package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekDetailPage.js +42 -4
- package/dist-lib/components/TestprintDialog.d.ts.map +1 -1
- package/dist-lib/components/TestprintDialog.js +15 -1
- package/dist-lib/components/WerkplekConfiguratiePage.js +2 -2
- package/dist-lib/components/WerkplekkenTab.d.ts.map +1 -1
- package/dist-lib/components/WerkplekkenTab.js +13 -6
- package/dist-lib/integrations/supabase/types.d.ts +364 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/afbeeldingMaat.d.ts +10 -0
- package/dist-lib/lib/afbeeldingMaat.d.ts.map +1 -0
- package/dist-lib/lib/afbeeldingMaat.js +39 -0
- package/dist-lib/lib/etiketControle.d.ts +9 -1
- package/dist-lib/lib/etiketControle.d.ts.map +1 -1
- package/dist-lib/lib/etiketControle.js +21 -4
- package/dist-lib/lib/htmlNaarPdf.server.d.ts +4 -0
- package/dist-lib/lib/htmlNaarPdf.server.d.ts.map +1 -1
- package/dist-lib/lib/htmlNaarPdf.server.js +5 -1
- package/dist-lib/lib/htmlPdf.server.d.ts +6 -0
- package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -1
- package/dist-lib/lib/htmlPdf.server.js +46 -10
- package/dist-lib/lib/logoLibrary.d.ts +25 -0
- package/dist-lib/lib/logoLibrary.d.ts.map +1 -1
- package/dist-lib/lib/logoLibrary.js +73 -1
- package/dist-lib/lib/opmaakLimiet.d.ts +8 -0
- package/dist-lib/lib/opmaakLimiet.d.ts.map +1 -0
- package/dist-lib/lib/opmaakLimiet.js +25 -0
- package/dist-lib/lib/printQueue.server.d.ts +2 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +122 -20
- package/dist-lib/lib/printService.functions.js +2 -2
- package/dist-lib/lib/printService.server.d.ts +2 -0
- package/dist-lib/lib/printService.server.d.ts.map +1 -1
- package/dist-lib/lib/printService.server.js +2 -1
- package/dist-lib/lib/printnodeStatus.d.ts +2 -0
- package/dist-lib/lib/printnodeStatus.d.ts.map +1 -1
- package/dist-lib/lib/printnodeStatus.js +10 -0
- package/dist-lib/lib/printplekken.d.ts +17 -1
- package/dist-lib/lib/printplekken.d.ts.map +1 -1
- package/dist-lib/lib/printplekken.js +42 -3
- package/dist-lib/lib/profielHtml.js +1 -1
- package/dist-lib/lib/shellPoort.d.ts +1 -1
- package/dist-lib/lib/shellPoort.js +1 -1
- package/dist-lib/lib/stickerFormaat.d.ts +46 -0
- package/dist-lib/lib/stickerFormaat.d.ts.map +1 -0
- package/dist-lib/lib/stickerFormaat.js +96 -0
- package/dist-lib/lib/testprint.js +1 -1
- package/package.json +1 -1
|
@@ -12,7 +12,9 @@ import { renderProductiebonDocument } from "./productiebonHtml.js";
|
|
|
12
12
|
import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData } from "./orderData.server.js";
|
|
13
13
|
import { profielHeeftInhoud, renderProfielDocument } from "./profielHtml.js";
|
|
14
14
|
import { bouwDocumentHtml, voorbeeldContext } from "./layoutPreview.js";
|
|
15
|
-
import { htmlNaarPdfServer, PdfRenderFout } from "./htmlNaarPdf.server.js";
|
|
15
|
+
import { AfbeeldingInhoudFout, htmlNaarPdfServer, PdfRenderFout } from "./htmlNaarPdf.server.js";
|
|
16
|
+
import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode, stickerIdUitPayload, stickerInfoUitCache, stickerNietNodig, stickerTypeLabel, STICKER_NIET_NODIG, FASE_NIET_NODIG } from "./stickerFormaat.js";
|
|
17
|
+
import { OPMAAK_LIMIET_MS, OpmaakTeLangFout, metTijdslimiet } from "./opmaakLimiet.js";
|
|
16
18
|
import { stuurPdfNaarPrinter, opdrachtStatusDetail, vervaltijdVoor } from "./printService.server.js";
|
|
17
19
|
import { kiesPapier } from "./papierFormaten.js";
|
|
18
20
|
import { waaromDezePrinter } from "./waaromPrinter.js";
|
|
@@ -40,6 +42,35 @@ export async function controleerClient(db) {
|
|
|
40
42
|
return `Achtergrondprinten is niet ingesteld: de server kan niet bij de database (${e instanceof Error ? e.message : "onbekende fout"}).`;
|
|
41
43
|
}
|
|
42
44
|
}
|
|
45
|
+
/** Fase met tijd en details in het logboek, zodat een vastloper nooit stil is. */
|
|
46
|
+
async function faseLog(db, jobId, fase, detail) {
|
|
47
|
+
try {
|
|
48
|
+
await log(db, String(jobId), "fase", JSON.stringify({ fase, op: new Date().toISOString(), ...detail }));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
/* loggen mag het printen nooit blokkeren */
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Printer uit de formaatregels (documentsoort + formaat), beide richtingen. */
|
|
55
|
+
async function printerVoorStickerFormaat(db, documenttype, maat) {
|
|
56
|
+
const code = stickerFormaatCode(maat.breedte_mm, maat.hoogte_mm);
|
|
57
|
+
const { data } = await db
|
|
58
|
+
.from("document_formaat_printers")
|
|
59
|
+
.select("printer_id, formaat_code")
|
|
60
|
+
.eq("documenttype", documenttype)
|
|
61
|
+
.not("printer_id", "is", null);
|
|
62
|
+
const rijen = Array.isArray(data) ? data : [];
|
|
63
|
+
// Formaatcodes zijn bv. "STICKER_100x150"; vergelijk alleen de maat, in beide richtingen.
|
|
64
|
+
const passend = rijen.find((r) => {
|
|
65
|
+
const m = /(\d+)\s*x\s*(\d+)\s*$/i.exec(String(r.formaat_code ?? ""));
|
|
66
|
+
return !!m && stickerFormaatCode(Number(m[1]), Number(m[2])) === code;
|
|
67
|
+
});
|
|
68
|
+
const id = passend?.printer_id;
|
|
69
|
+
if (!id)
|
|
70
|
+
return null;
|
|
71
|
+
const { data: p } = await db.from("printers").select("*").eq("id", id).eq("actief", true).maybeSingle();
|
|
72
|
+
return p ?? null;
|
|
73
|
+
}
|
|
43
74
|
async function log(db, jobId, gebeurtenis, detail) {
|
|
44
75
|
await db.from("print_job_logs").insert({
|
|
45
76
|
job_id: jobId,
|
|
@@ -1220,6 +1251,25 @@ export async function geweigerd(db, job, code, bericht) {
|
|
|
1220
1251
|
.neq("status", "geannuleerd");
|
|
1221
1252
|
await log(db, job.id, "geweigerd", `${code}: ${bericht}`);
|
|
1222
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
|
+
}
|
|
1223
1273
|
async function mislukt(db, job, reden, terugNaarWachtend) {
|
|
1224
1274
|
const pogingen = Number(job.pogingen ?? 0);
|
|
1225
1275
|
const opnieuw = terugNaarWachtend && pogingen < MAX_POGINGEN;
|
|
@@ -1351,7 +1401,45 @@ async function verwerkJob(db, job) {
|
|
|
1351
1401
|
const keuze = klaar ? { layout: null, ontwerpWint: false } : await zoekLayout(db, job);
|
|
1352
1402
|
klok.markeer("layout_resolved");
|
|
1353
1403
|
const layout = keuze.layout;
|
|
1404
|
+
// Klantsticker/traysticker: maat vaststellen (Floriday-formaat, anders de
|
|
1405
|
+
// PDF). Onbekend = niet printen. De maat kiest ook de printer via de
|
|
1406
|
+
// formaatregels, zodat een sticker op een etiket komt dat groot genoeg is.
|
|
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
|
+
}
|
|
1427
|
+
if (klaar && ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? ""))) {
|
|
1428
|
+
stickerMaat = stickerCache?.maat
|
|
1429
|
+
? { ...stickerCache.maat, bron: "floriday" }
|
|
1430
|
+
: bepaalStickerMaat(floridayStickerMaat(job.payload), pdfPaginaMm(klaar));
|
|
1431
|
+
if (!stickerMaat)
|
|
1432
|
+
throw new GeenDocumentFout(STICKER_MAAT_ONBEKEND);
|
|
1433
|
+
await faseLog(db, job.id, "sticker_maat", { bron: stickerMaat.bron, breedte_mm: stickerMaat.breedte_mm, hoogte_mm: stickerMaat.hoogte_mm });
|
|
1434
|
+
}
|
|
1354
1435
|
const printerKeuze = await zoekPrinter(db, job, layout);
|
|
1436
|
+
if (stickerMaat) {
|
|
1437
|
+
const viaFormaat = await printerVoorStickerFormaat(db, String(job.documenttype), stickerMaat);
|
|
1438
|
+
if (viaFormaat) {
|
|
1439
|
+
printerKeuze.printer = viaFormaat;
|
|
1440
|
+
await log(db, job.id, "formaat", `Printer gekozen via de formaatregel ${stickerFormaatCode(stickerMaat.breedte_mm, stickerMaat.hoogte_mm)}.`);
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1355
1443
|
klok.markeer("printer_resolved");
|
|
1356
1444
|
const printer = printerKeuze.printer;
|
|
1357
1445
|
if (!printer || !printer.extern_printer_id) {
|
|
@@ -1388,23 +1476,33 @@ async function verwerkJob(db, job) {
|
|
|
1388
1476
|
const uitkomst = { bron: floriday ? "floriday_1op1" : "extern_pdf" };
|
|
1389
1477
|
let pdfBase64 = klaar;
|
|
1390
1478
|
if (!pdfBase64) {
|
|
1391
|
-
const
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1479
|
+
const opmaakStart = Date.now();
|
|
1480
|
+
await faseLog(db, job.id, "opmaken_gestart", { layout_id: layout?.id ?? null });
|
|
1481
|
+
pdfBase64 = await metTijdslimiet(OPMAAK_LIMIET_MS, async () => {
|
|
1482
|
+
const html = await bouwHtml(db, job, keuze, uitkomst);
|
|
1483
|
+
await faseLog(db, job.id, "html_klaar", { ms: Date.now() - opmaakStart, tekens: html.length });
|
|
1484
|
+
if (!heeftZichtbareInhoud(html)) {
|
|
1485
|
+
throw new GeenDocumentFout("Het document was leeg: er zijn geen gegevens gevonden om af te drukken. " +
|
|
1486
|
+
"Controleer of de layout blokken bevat en of de order gegevens heeft.");
|
|
1487
|
+
}
|
|
1488
|
+
// Een voorbeeldafdruk koppelt bewust geen layout (het meegestuurde
|
|
1489
|
+
// ontwerp is leidend), maar geeft wél het papierformaat van de bewerkte
|
|
1490
|
+
// layout mee. Zonder dit zou het voorbeeld altijd op A4 uitkomen.
|
|
1491
|
+
const vf = (job.payload ?? {})["voorbeeld_formaat"];
|
|
1492
|
+
const liggend = String(layout?.orientatie ?? vf?.["orientatie"] ?? "portrait") === "landscape";
|
|
1493
|
+
const pdf = await htmlNaarPdfServer({
|
|
1494
|
+
html,
|
|
1495
|
+
breedteMm: Number(layout?.breedte_mm ?? vf?.["breedte_mm"] ?? 210),
|
|
1496
|
+
hoogteMm: Number(layout?.hoogte_mm ?? vf?.["hoogte_mm"] ?? 297),
|
|
1497
|
+
margeMm: Number(layout?.marge_boven ?? vf?.["marge_boven"] ?? 10),
|
|
1498
|
+
landschap: liggend,
|
|
1499
|
+
bijOvergeslagen: (src, reden) => {
|
|
1500
|
+
void faseLog(db, job.id, "afbeelding_weggelaten", { bron: src.split("?")[0]?.slice(0, 200), reden });
|
|
1501
|
+
},
|
|
1502
|
+
});
|
|
1503
|
+
return pdf;
|
|
1407
1504
|
});
|
|
1505
|
+
await faseLog(db, job.id, "pdf_klaar", { ms: Date.now() - opmaakStart, bytes: Math.round((pdfBase64.length * 3) / 4) });
|
|
1408
1506
|
}
|
|
1409
1507
|
klok.markeer("rendered");
|
|
1410
1508
|
if (await isJobGeannuleerd(db, String(job.id))) {
|
|
@@ -1417,8 +1515,8 @@ async function verwerkJob(db, job) {
|
|
|
1417
1515
|
const hoogteMm = Number(layout?.hoogte_mm ?? vfPapier?.["hoogte_mm"] ?? standaardMaat(printer).hoogte);
|
|
1418
1516
|
let papier = kiesPapier(formaten, breedteMm, hoogteMm);
|
|
1419
1517
|
if (label) {
|
|
1420
|
-
const maat = (klaar ? pdfPaginaMm(pdfBase64) : null) ?? { breedte_mm: breedteMm, hoogte_mm: hoogteMm };
|
|
1421
|
-
const uit = etiketPast({ ...maat, soortLabel: documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam);
|
|
1518
|
+
const maat = stickerMaat ?? (klaar ? pdfPaginaMm(pdfBase64) : null) ?? { breedte_mm: breedteMm, hoogte_mm: hoogteMm };
|
|
1519
|
+
const uit = etiketPast({ ...maat, soortLabel: stickerCache?.sticker_type ? stickerTypeLabel(stickerCache.sticker_type) : documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
|
|
1422
1520
|
if (!uit.ok) {
|
|
1423
1521
|
await geweigerd(db, job, uit.code, uit.bericht);
|
|
1424
1522
|
return "mislukt";
|
|
@@ -1441,6 +1539,7 @@ async function verwerkJob(db, job) {
|
|
|
1441
1539
|
documentnaam: String(job.documentnaam ?? "Document"),
|
|
1442
1540
|
pdfBase64,
|
|
1443
1541
|
kopieen: Number(job.kopieen ?? 1),
|
|
1542
|
+
documenttype: String(job.documenttype ?? ""),
|
|
1444
1543
|
opties: { paper: papier.paper, rotate: papier.rotate, fitToPage: false },
|
|
1445
1544
|
});
|
|
1446
1545
|
if (i > 0) {
|
|
@@ -1502,7 +1601,10 @@ async function verwerkJob(db, job) {
|
|
|
1502
1601
|
return await wachtOpLayout(db, job, e.message);
|
|
1503
1602
|
}
|
|
1504
1603
|
// Ontbreekt er een document of layout? Dan heeft opnieuw proberen geen zin.
|
|
1505
|
-
|
|
1604
|
+
if (e instanceof OpmaakTeLangFout || e instanceof AfbeeldingInhoudFout) {
|
|
1605
|
+
await faseLog(db, job.id, "fout", { fase: e instanceof OpmaakTeLangFout ? "opmaken" : "afbeelding", fout: e.message });
|
|
1606
|
+
}
|
|
1607
|
+
const blijvend = e instanceof GeenDocumentFout || e instanceof OpmaakTeLangFout || e instanceof AfbeeldingInhoudFout;
|
|
1506
1608
|
const tijdelijk = !blijvend && (e instanceof PdfRenderFout || e?.name === "PrintToegangFout");
|
|
1507
1609
|
await mislukt(db, job, e instanceof Error ? e.message : "Afdrukken mislukt", tijdelijk);
|
|
1508
1610
|
return "mislukt";
|
|
@@ -200,7 +200,7 @@ export const opnieuwPrinten = createServerFn({ method: "POST" })
|
|
|
200
200
|
_print_plek_id: payload["print_plek_id"] ?? null,
|
|
201
201
|
_werkplek: payload["werkplek"] ?? null,
|
|
202
202
|
_kopieen: Number(job["kopieen"] ?? 1),
|
|
203
|
-
_payload: { ...payload, opnieuw_van: job["id"] },
|
|
203
|
+
_payload: { ...payload, opnieuw_van: job["id"], herprint_alleen_dit_document: true },
|
|
204
204
|
});
|
|
205
205
|
if (e) {
|
|
206
206
|
const { leesbareFout } = await import("./foutTekst.js");
|
|
@@ -224,7 +224,7 @@ export const opnieuwPrinten = createServerFn({ method: "POST" })
|
|
|
224
224
|
render_html: job["render_html"] ?? null,
|
|
225
225
|
is_herprint: true,
|
|
226
226
|
bron_job_id: job["id"],
|
|
227
|
-
payload: { ...payload, is_herprint: true, bron_job_id: job["id"] },
|
|
227
|
+
payload: { ...payload, is_herprint: true, herprint_alleen_dit_document: true, bron_job_id: job["id"] },
|
|
228
228
|
})
|
|
229
229
|
.select("id")
|
|
230
230
|
.single();
|
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,oDAAoD;IACpD,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAWD,iFAAiF;AACjF,qBAAa,eAAgB,SAAQ,KAAK;;CAEzC;AAED,kFAAkF;AAClF,eAAO,MAAM,aAAa,gCAA2B,CAAC;AACtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOvD,CAAC;AACF,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE9E;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAE7E;AA4CD,6EAA6E;AAC7E,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAmBrE;AAED,gFAAgF;AAChF,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CASzE;AAED,2FAA2F;AAC3F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CpF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWjF;AAED,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AACtF,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAA0D,CAAC;AAEpH,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAM5D;AAED,0DAA0D;AAC1D,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,CAUzE;AAED,8EAA8E;AAC9E,wBAAsB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrF;AAGD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E,uDAAuD;AACvD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAejF;AAED,yCAAyC;AACzC,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGpD;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,qDAAqD;AACrD,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAchE"}
|
|
@@ -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:
|
|
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,
|
|
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
|
+
}
|
|
@@ -136,7 +136,7 @@ export declare function printerGebruik(printerId: string): Promise<PrinterGebrui
|
|
|
136
136
|
/** Zet alle verwijzingen in één keer over naar `nieuw` (of `null` = geen printer). */
|
|
137
137
|
export declare function vervangPrinterOveral(oud: string, nieuw: string | null): Promise<Record<string, number>>;
|
|
138
138
|
/** De printplek waar een computer/werkplek bij hoort, of `null`. */
|
|
139
|
-
export declare function printplekVoorComputer(computerNaam: string): Promise<string | null>;
|
|
139
|
+
export declare function printplekVoorComputer(computerNaam: string, printnodeComputerId?: number | string | null): Promise<string | null>;
|
|
140
140
|
/** Naam van een printplek, voor nette foutmeldingen. */
|
|
141
141
|
export declare function printplekNaam(printPlekId: string): Promise<string | null>;
|
|
142
142
|
/**
|
|
@@ -154,4 +154,20 @@ export declare function useKoppelingVoorBron(bron: string, bronId: string, label
|
|
|
154
154
|
ontkoppel: () => Promise<void>;
|
|
155
155
|
herlaad: () => Promise<void>;
|
|
156
156
|
};
|
|
157
|
+
export interface PrinterVerwijzingen {
|
|
158
|
+
printplek_regels: number;
|
|
159
|
+
werkplek_regels: {
|
|
160
|
+
werkplek: string;
|
|
161
|
+
documenttype: string;
|
|
162
|
+
}[];
|
|
163
|
+
werkplekken: {
|
|
164
|
+
naam: string;
|
|
165
|
+
rol: string;
|
|
166
|
+
}[];
|
|
167
|
+
}
|
|
168
|
+
/** Wat verwijst nog naar deze printer (printplekregels, uitzonderingen, werkplekken)? */
|
|
169
|
+
export declare function printerVerwijzingen(printPlekId: string, printerId: string): Promise<PrinterVerwijzingen>;
|
|
170
|
+
/** Aantal lege regels dat deze printer terug kan krijgen (herkend op PrintNode-nummer). */
|
|
171
|
+
export declare function printerHerstelVoorstel(printPlekId: string, printerId: string): Promise<number>;
|
|
172
|
+
export declare function printerHerstelUitvoeren(printPlekId: string, printerId: string): Promise<number>;
|
|
157
173
|
//# sourceMappingURL=printplekken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printplekken.d.ts","sourceRoot":"","sources":["../../src/lib/printplekken.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"printplekken.d.ts","sourceRoot":"","sources":["../../src/lib/printplekken.ts"],"names":[],"mappings":"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"}
|
|
@@ -310,7 +310,19 @@ export async function vervangPrinterOveral(oud, nieuw) {
|
|
|
310
310
|
return (data ?? {});
|
|
311
311
|
}
|
|
312
312
|
/** De printplek waar een computer/werkplek bij hoort, of `null`. */
|
|
313
|
-
export async function printplekVoorComputer(computerNaam) {
|
|
313
|
+
export async function printplekVoorComputer(computerNaam, printnodeComputerId) {
|
|
314
|
+
// Eerst op PrintNode-computernummer (vast), pas daarna op naam voor rijen zonder nummer.
|
|
315
|
+
const nr = printnodeComputerId != null && String(printnodeComputerId).trim() !== "" ? Number(printnodeComputerId) : NaN;
|
|
316
|
+
if (Number.isFinite(nr)) {
|
|
317
|
+
const { data } = await supabase
|
|
318
|
+
.from("print_plek_computers")
|
|
319
|
+
.select("print_plek_id")
|
|
320
|
+
.eq("printnode_computer_id", nr)
|
|
321
|
+
.limit(1);
|
|
322
|
+
const rij = Array.isArray(data) ? data[0] : undefined;
|
|
323
|
+
if (rij?.print_plek_id)
|
|
324
|
+
return rij.print_plek_id;
|
|
325
|
+
}
|
|
314
326
|
const naam = (computerNaam ?? "").trim();
|
|
315
327
|
if (!naam)
|
|
316
328
|
return null;
|
|
@@ -318,8 +330,10 @@ export async function printplekVoorComputer(computerNaam) {
|
|
|
318
330
|
.from("print_plek_computers")
|
|
319
331
|
.select("print_plek_id")
|
|
320
332
|
.eq("computer_naam", naam)
|
|
321
|
-
.
|
|
322
|
-
|
|
333
|
+
.is("printnode_computer_id", null)
|
|
334
|
+
.limit(1);
|
|
335
|
+
const rij = Array.isArray(data) ? data[0] : undefined;
|
|
336
|
+
return rij?.print_plek_id ?? null;
|
|
323
337
|
}
|
|
324
338
|
/** Naam van een printplek, voor nette foutmeldingen. */
|
|
325
339
|
export async function printplekNaam(printPlekId) {
|
|
@@ -376,3 +390,28 @@ export function useKoppelingVoorBron(bron, bronId, label) {
|
|
|
376
390
|
herlaad: lees,
|
|
377
391
|
};
|
|
378
392
|
}
|
|
393
|
+
/** Wat verwijst nog naar deze printer (printplekregels, uitzonderingen, werkplekken)? */
|
|
394
|
+
export async function printerVerwijzingen(printPlekId, printerId) {
|
|
395
|
+
const { data, error } = await supabase.rpc("printer_verwijder_verwijzingen", { _plek: printPlekId, _printer: printerId });
|
|
396
|
+
if (error)
|
|
397
|
+
throw error;
|
|
398
|
+
const d = (data ?? {});
|
|
399
|
+
return {
|
|
400
|
+
printplek_regels: Number(d.printplek_regels ?? 0),
|
|
401
|
+
werkplek_regels: Array.isArray(d.werkplek_regels) ? d.werkplek_regels : [],
|
|
402
|
+
werkplekken: Array.isArray(d.werkplekken) ? d.werkplekken : [],
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
/** Aantal lege regels dat deze printer terug kan krijgen (herkend op PrintNode-nummer). */
|
|
406
|
+
export async function printerHerstelVoorstel(printPlekId, printerId) {
|
|
407
|
+
const { data, error } = await supabase.rpc("printer_herstel_voorstel", { _plek: printPlekId, _printer: printerId });
|
|
408
|
+
if (error)
|
|
409
|
+
throw error;
|
|
410
|
+
return Number(data ?? 0);
|
|
411
|
+
}
|
|
412
|
+
export async function printerHerstelUitvoeren(printPlekId, printerId) {
|
|
413
|
+
const { data, error } = await supabase.rpc("printer_herstel_uitvoeren", { _plek: printPlekId, _printer: printerId });
|
|
414
|
+
if (error)
|
|
415
|
+
throw error;
|
|
416
|
+
return Number(data ?? 0);
|
|
417
|
+
}
|
|
@@ -171,7 +171,7 @@ function groepHtml(groep, config, velden, data, opties) {
|
|
|
171
171
|
velden["product.afbeelding"] ??
|
|
172
172
|
String(zoekRegels(data).find((r) => r["afbeelding"])?.["afbeelding"] ?? "");
|
|
173
173
|
delen.push(url
|
|
174
|
-
? `<img src="${esc(url)}" style="height:35mm" />`
|
|
174
|
+
? `<img src="${esc(url)}" data-inhoud="1" style="height:35mm" />`
|
|
175
175
|
: `<div class="lijnveld hoog"></div>`);
|
|
176
176
|
}
|
|
177
177
|
else if (inst.key === "handtekening") {
|
|
@@ -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.
|
|
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.
|
|
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;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type StickerMaat = {
|
|
2
|
+
breedte_mm: number;
|
|
3
|
+
hoogte_mm: number;
|
|
4
|
+
bron: "floriday" | "pdf";
|
|
5
|
+
};
|
|
6
|
+
/** Leest widthInMm/heightInMm uit de payload (ook genest onder sticker/customerSticker). */
|
|
7
|
+
export declare function floridayStickerMaat(payload: unknown): {
|
|
8
|
+
breedte_mm: number;
|
|
9
|
+
hoogte_mm: number;
|
|
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;
|
|
15
|
+
export declare function bepaalStickerMaat(floriday: {
|
|
16
|
+
breedte_mm: number;
|
|
17
|
+
hoogte_mm: number;
|
|
18
|
+
} | null, pdf: {
|
|
19
|
+
breedte_mm: number;
|
|
20
|
+
hoogte_mm: number;
|
|
21
|
+
} | null): StickerMaat | null;
|
|
22
|
+
export declare const STICKER_MAAT_ONBEKEND = "De maat van deze klantsticker is onbekend; er is niets geprint.";
|
|
23
|
+
/** Formaatcode voor de formaatregels: "48x48" (kleinste maat eerst, hele mm). */
|
|
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";
|
|
46
|
+
//# sourceMappingURL=stickerFormaat.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/stickerFormaat.ts — maat van een klantsticker en of die past.
|
|
3
|
+
// Volgorde: formaat uit Floriday (widthInMm/heightInMm) → maat uit de PDF →
|
|
4
|
+
// onbekend = niet printen. Een sticker wordt nooit geschaald.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
const getal = (v) => {
|
|
7
|
+
const n = Number(v);
|
|
8
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
9
|
+
};
|
|
10
|
+
/** Leest widthInMm/heightInMm uit de payload (ook genest onder sticker/customerSticker). */
|
|
11
|
+
export function floridayStickerMaat(payload) {
|
|
12
|
+
if (!payload || typeof payload !== "object")
|
|
13
|
+
return null;
|
|
14
|
+
const p = payload;
|
|
15
|
+
const kandidaten = [p, p["sticker"], p["customerSticker"], p["customer_sticker"], p["data"]];
|
|
16
|
+
for (const k of kandidaten) {
|
|
17
|
+
if (!k || typeof k !== "object")
|
|
18
|
+
continue;
|
|
19
|
+
const r = k;
|
|
20
|
+
const b = getal(r["widthInMm"] ?? r["sticker_width_mm"]);
|
|
21
|
+
const h = getal(r["heightInMm"] ?? r["sticker_height_mm"]);
|
|
22
|
+
if (b && h)
|
|
23
|
+
return { breedte_mm: b, hoogte_mm: h };
|
|
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
|
+
}
|
|
33
|
+
return null;
|
|
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
|
+
}
|
|
45
|
+
export function bepaalStickerMaat(floriday, pdf) {
|
|
46
|
+
if (floriday)
|
|
47
|
+
return { ...floriday, bron: "floriday" };
|
|
48
|
+
if (pdf && pdf.breedte_mm > 0 && pdf.hoogte_mm > 0)
|
|
49
|
+
return { ...pdf, bron: "pdf" };
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
export const STICKER_MAAT_ONBEKEND = "De maat van deze klantsticker is onbekend; er is niets geprint.";
|
|
53
|
+
/** Formaatcode voor de formaatregels: "48x48" (kleinste maat eerst, hele mm). */
|
|
54
|
+
export function stickerFormaatCode(b, h) {
|
|
55
|
+
const [x, y] = [Math.round(b), Math.round(h)].sort((p, q) => p - q);
|
|
56
|
+
return `${x}x${y}`;
|
|
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";
|
|
@@ -131,7 +131,7 @@ export async function verstuurTestprint(documenttype, ctx) {
|
|
|
131
131
|
printerId,
|
|
132
132
|
...(printplekId ? { printplekId } : {}),
|
|
133
133
|
...(werkplek ? { werkplek } : {}),
|
|
134
|
-
payload: { test_id: testId, is_testprint: true },
|
|
134
|
+
payload: { test_id: testId, is_testprint: true, is_test: true },
|
|
135
135
|
});
|
|
136
136
|
return { jobId, printerId };
|
|
137
137
|
}
|