@flowselections/layout-maker 1.69.8 → 1.69.13
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/A4StickervelKaart.d.ts +5 -0
- package/dist-lib/components/A4StickervelKaart.d.ts.map +1 -0
- package/dist-lib/components/A4StickervelKaart.js +123 -0
- package/dist-lib/components/KlaarOmTePrintenBlok.d.ts.map +1 -1
- package/dist-lib/components/KlaarOmTePrintenBlok.js +50 -7
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +2 -1
- package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekDetailPage.js +3 -1
- package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekkenPage.js +2 -1
- package/dist-lib/components/StickerRouteTestKaart.d.ts +5 -0
- package/dist-lib/components/StickerRouteTestKaart.d.ts.map +1 -0
- package/dist-lib/components/StickerRouteTestKaart.js +75 -0
- package/dist-lib/components/UitwijkRegel.d.ts +5 -0
- package/dist-lib/components/UitwijkRegel.d.ts.map +1 -0
- package/dist-lib/components/UitwijkRegel.js +17 -0
- package/dist-lib/components/UitwijkTekening.d.ts +19 -0
- package/dist-lib/components/UitwijkTekening.d.ts.map +1 -0
- package/dist-lib/components/UitwijkTekening.js +21 -0
- package/dist-lib/index.d.ts +12 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +14 -0
- package/dist-lib/integrations/supabase/types.d.ts +3227 -22
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/belading.d.ts +10 -0
- package/dist-lib/lib/belading.d.ts.map +1 -0
- package/dist-lib/lib/belading.js +49 -0
- package/dist-lib/lib/documentProfiles.js +2 -2
- package/dist-lib/lib/eigenDocumenten.d.ts +2 -0
- package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -1
- package/dist-lib/lib/eigenDocumenten.js +23 -0
- package/dist-lib/lib/fieldRegistry.js +3 -2
- package/dist-lib/lib/installCheck.d.ts +36 -0
- package/dist-lib/lib/installCheck.d.ts.map +1 -0
- package/dist-lib/lib/installCheck.js +65 -0
- package/dist-lib/lib/klaarOmTePrinten.d.ts +15 -1
- package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -1
- package/dist-lib/lib/klaarOmTePrinten.js +19 -1
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +20 -17
- package/dist-lib/lib/pakbonBuilder.d.ts +6 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +22 -9
- package/dist-lib/lib/pakbonContent.d.ts.map +1 -1
- package/dist-lib/lib/pakbonContent.js +4 -1
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +5 -2
- package/dist-lib/lib/pakbonPresentation.d.ts +3 -1
- package/dist-lib/lib/pakbonPresentation.d.ts.map +1 -1
- package/dist-lib/lib/pakbonPresentation.js +13 -6
- package/dist-lib/lib/printQueue.server.d.ts +24 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +239 -17
- package/dist-lib/lib/printService.server.d.ts.map +1 -1
- package/dist-lib/lib/printService.server.js +3 -2
- package/dist-lib/lib/profielHtml.d.ts.map +1 -1
- package/dist-lib/lib/profielHtml.js +2 -1
- package/dist-lib/lib/standaardLayouts.server.d.ts +6 -0
- package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
- package/dist-lib/lib/standaardLayouts.server.js +13 -0
- package/dist-lib/lib/stickerPlaatsing.d.ts +37 -0
- package/dist-lib/lib/stickerPlaatsing.d.ts.map +1 -0
- package/dist-lib/lib/stickerPlaatsing.js +122 -0
- package/dist-lib/lib/stickerUitwijk.d.ts +197 -0
- package/dist-lib/lib/stickerUitwijk.d.ts.map +1 -0
- package/dist-lib/lib/stickerUitwijk.js +311 -0
- package/dist-lib/lib/testprint.d.ts +13 -0
- package/dist-lib/lib/testprint.d.ts.map +1 -1
- package/dist-lib/lib/testprint.js +38 -0
- package/dist-lib/lib/useDocumentData.js +1 -1
- package/dist-lib/lib/versie.generated.d.ts +1 -1
- package/dist-lib/lib/versie.generated.d.ts.map +1 -1
- package/dist-lib/lib/versie.generated.js +1 -1
- package/dist-lib/lib/vervoerder.d.ts +27 -3
- package/dist-lib/lib/vervoerder.d.ts.map +1 -1
- package/dist-lib/lib/vervoerder.js +65 -10
- package/dist-lib/lib/vroegeWaarschuwing.d.ts +21 -0
- package/dist-lib/lib/vroegeWaarschuwing.d.ts.map +1 -0
- package/dist-lib/lib/vroegeWaarschuwing.js +15 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAgCL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AASD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAmB3D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AAwFD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AA8pBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAmFR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
|
|
8
8
|
// de afdruk altijd exact dezelfde secties — inclusief de orderregels.
|
|
9
9
|
// ============================================================================
|
|
10
|
-
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, HERHAAL_SECTIES, kopHerhalen, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
|
+
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, HERHAAL_SECTIES, kopHerhalen, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, zonderLegeKolommen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
11
11
|
import { haalPrintLogos } from "./logoLibrary.js";
|
|
12
12
|
import { code128BarsHtml } from "./code128.js";
|
|
13
13
|
import { karMetadata } from "./pakbonPresentation.js";
|
|
@@ -312,7 +312,7 @@ function fustTabel(velden, fusten, titel) {
|
|
|
312
312
|
return `${titel ? `<div class="sectitel">${esc(titel)}</div>` : ""}<table class="regels">${kop}${rijen}</table>`;
|
|
313
313
|
}
|
|
314
314
|
function productenHtml(sectie, laag, toonKop = true) {
|
|
315
|
-
|
|
315
|
+
let velden = lijst(sectie, "velden");
|
|
316
316
|
if (!velden.length)
|
|
317
317
|
return "";
|
|
318
318
|
let producten = sorteerProducten(laag.producten, optS(sectie, "sortering", "eigen"));
|
|
@@ -329,6 +329,9 @@ function productenHtml(sectie, laag, toonKop = true) {
|
|
|
329
329
|
}
|
|
330
330
|
if (!producten.length)
|
|
331
331
|
return "";
|
|
332
|
+
velden = zonderLegeKolommen(velden, producten, cel);
|
|
333
|
+
if (!velden.length)
|
|
334
|
+
return "";
|
|
332
335
|
const label = (v) => v === "foto" ? "Foto" : v === "qrcode" ? "QR-code" : PRODUCT_LABELS[v] ?? v;
|
|
333
336
|
const weergave = optS(sectie, "weergave", "tabel");
|
|
334
337
|
const sub = samenstellingTonen(sectie.opties) ? onderdeelVelden(sectie.opties) : null;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DemoKar } from "./pakbonBuilder.js";
|
|
2
2
|
/**
|
|
3
3
|
* Canonieke zichtbare metadata van een kar. Zowel het live voorbeeld als de
|
|
4
4
|
* print-renderer gebruiken deze lijst, zodat geen van beide zelf regels kan
|
|
5
5
|
* toevoegen of in een andere volgorde kan zetten.
|
|
6
6
|
*/
|
|
7
7
|
export declare function karMetadata(kar: DemoKar, velden: string[]): string[];
|
|
8
|
+
/** Stickers bij deze kar: planten van regels waar een sticker bij hoort. */
|
|
9
|
+
export declare function aantalStickersBijKar(kar: DemoKar): number;
|
|
8
10
|
//# sourceMappingURL=pakbonPresentation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwBpE;AACD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKzD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { telwoord } from "./pakbonBuilder.js";
|
|
1
2
|
/**
|
|
2
3
|
* Canonieke zichtbare metadata van een kar. Zowel het live voorbeeld als de
|
|
3
4
|
* print-renderer gebruiken deze lijst, zodat geen van beide zelf regels kan
|
|
@@ -5,8 +6,10 @@
|
|
|
5
6
|
*/
|
|
6
7
|
export function karMetadata(kar, velden) {
|
|
7
8
|
const info = [];
|
|
8
|
-
if (velden.includes("lagen"))
|
|
9
|
-
|
|
9
|
+
if (velden.includes("lagen")) {
|
|
10
|
+
const gevuld = kar.lagen.filter((l) => (l.producten?.length ?? 0) > 0).length;
|
|
11
|
+
info.push(telwoord(gevuld || kar.lagen.length, "laag", "lagen"));
|
|
12
|
+
}
|
|
10
13
|
if (velden.includes("producten")) {
|
|
11
14
|
const aantal = kar.lagen.reduce((totaal, laag) => totaal + laag.producten.reduce((som, product) => som + product.aantal, 0), 0);
|
|
12
15
|
info.push(`${aantal} producten`);
|
|
@@ -21,9 +24,13 @@ export function karMetadata(kar, velden) {
|
|
|
21
24
|
info.push("gedeelde kar");
|
|
22
25
|
// De karstand hoort in de grote karkop (`KAR 2 van 2`), niet nogmaals in
|
|
23
26
|
// deze metaregel. Anders verschijnt dezelfde telling op twee plekken.
|
|
24
|
-
if (
|
|
25
|
-
info.push(
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
if (velden.includes("stickers"))
|
|
28
|
+
info.push(telwoord(aantalStickersBijKar(kar), "sticker", "stickers"));
|
|
29
|
+
// Geen technisch kar-id en geen interne regeltelling op papier: de barcode
|
|
30
|
+
// identificeert de kar.
|
|
28
31
|
return info;
|
|
29
32
|
}
|
|
33
|
+
/** Stickers bij deze kar: planten van regels waar een sticker bij hoort. */
|
|
34
|
+
export function aantalStickersBijKar(kar) {
|
|
35
|
+
return kar.lagen.reduce((n, l) => n + l.producten.reduce((m, p) => m + (String(p.sticker ?? "") === "Ja" ? Number(p.aantal || 0) : 0), 0), 0);
|
|
36
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
2
|
import { type EigenStickerMaat } from "./eigenDocumenten.js";
|
|
3
|
+
import { type GeladenEtiket } from "./etiketControle.js";
|
|
4
|
+
import { type StickerSoort } from "./stickerUitwijk.js";
|
|
3
5
|
type Job = Record<string, any>;
|
|
4
6
|
/** De databaseclient die de shell aanlevert. De module maakt er zelf nooit een. */
|
|
5
7
|
export type PrintDb = SupabaseClient<any, any, any>;
|
|
@@ -17,6 +19,19 @@ export declare class GeenDocumentFout extends Error {
|
|
|
17
19
|
export declare class WachtOpLayoutFout extends Error {
|
|
18
20
|
name: string;
|
|
19
21
|
}
|
|
22
|
+
/** Geen vervoerder (of Engine te oud): wachten tot hij is ingesteld, onbegrensd. */
|
|
23
|
+
export declare class WachtOpVervoerderFout extends Error {
|
|
24
|
+
name: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Bepaalt de vervoerder voor een eigen document. Alleen carrier_label uit de
|
|
28
|
+
* Engine (payload of logistics_brief_transport). Geeft null voor documenten
|
|
29
|
+
* zonder vervoerder (of Floriday 1-op-1). Gooit WachtOpVervoerderFout als hij
|
|
30
|
+
* ontbreekt; nooit een naam opzoeken, nooit "onbekend".
|
|
31
|
+
*/
|
|
32
|
+
export declare function bepaalVervoerder(db: PrintDb, job: Job, p: Job, layout: Job | null): Promise<string | null>;
|
|
33
|
+
/** Wacht op een vervoerder: blijft wachtend (geen eindstatus), reden zichtbaar in de wachtrij. */
|
|
34
|
+
export declare function wachtOpVervoerder(db: PrintDb, job: Job, reden: string): Promise<"wachtend">;
|
|
20
35
|
/** Blijvende contractfout: opnieuw proberen met dezelfde invoer kan niet slagen. */
|
|
21
36
|
export declare class EngineContractFout extends GeenDocumentFout {
|
|
22
37
|
name: string;
|
|
@@ -124,5 +139,14 @@ export declare function bepaalDocumentKeuze(db: PrintDb, job: Job): Promise<{
|
|
|
124
139
|
keuze: LayoutKeuze;
|
|
125
140
|
klaarPdf: string | null;
|
|
126
141
|
}>;
|
|
142
|
+
/**
|
|
143
|
+
* Is dit een labelprinter? Ja als er een geladen etiket is ingesteld, of als
|
|
144
|
+
* een werkplek hem als labelprinter gebruikt. Alleen dan geldt de controle,
|
|
145
|
+
* zodat bestaande printers zonder werkplek precies blijven werken als nu.
|
|
146
|
+
*/
|
|
147
|
+
/** Stickersoort voor de verkleininstelling (op configuratie en bron, nooit op naam). */
|
|
148
|
+
export declare function stickerSoortVoor(documenttype: string, layout: Job | null, floriday: boolean, klaar: boolean): StickerSoort;
|
|
149
|
+
/** Eigen ontwerp past niet op het geladen etiket: variant op de etiketmaat maken. */
|
|
150
|
+
export declare function eigenEtiketVariantNodig(layout: Job, etiket: GeladenEtiket): boolean;
|
|
127
151
|
export {};
|
|
128
152
|
//# sourceMappingURL=printQueue.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,23 +3,25 @@
|
|
|
3
3
|
// Pakt wachtende opdrachten op, maakt er een PDF van en stuurt die stil naar
|
|
4
4
|
// de juiste printer. Draait alleen op de server (cron / interne aanroep).
|
|
5
5
|
// ============================================================================
|
|
6
|
-
import {
|
|
6
|
+
import { voerUitwijkUit } from "./stickerPlaatsing.js";
|
|
7
|
+
import { carrierUitPayload, carrierUitTransport, ENGINE_TE_OUD, geenVervoerderTekst, metVervoerder, VERVOERDER_DOCUMENTEN, voorbeeldVervoerder } from "./vervoerder.js";
|
|
7
8
|
import { maakPakbonOrder, renderPakbonDocument, voorbeeldPakbonOrder, } from "./pakbonHtml.js";
|
|
8
9
|
import { bouwPakbonScanInhoud, bewaarPakbonScanInhoud } from "./pakbonScan.js";
|
|
9
10
|
import { bouwPakbonBarcodeVerzoek, geleverdeBarcodeVoorJob, vraagPakbonBarcodeAan, } from "./pakbonBarcodeVerzoek.js";
|
|
10
11
|
import { bepaalVolleKarStand, deelkarRegels, leesAfleverbriefConfig, pakbonLayoutVariant, } from "./pakbonBuilder.js";
|
|
11
12
|
import { renderProductiebonDocument } from "./productiebonHtml.js";
|
|
12
|
-
import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData } from "./orderData.server.js";
|
|
13
|
+
import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData, zoekOrderVerwijzing } from "./orderData.server.js";
|
|
13
14
|
import { profielHeeftInhoud, renderProfielDocument } from "./profielHtml.js";
|
|
14
15
|
import { bouwDocumentHtml, voorbeeldContext } from "./layoutPreview.js";
|
|
15
16
|
import { AfbeeldingInhoudFout, htmlNaarPdfServer, PdfRenderFout } from "./htmlNaarPdf.server.js";
|
|
16
17
|
import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode, stickerIdUitPayload, stickerInfoUitCache, stickerNietNodig, stickerTypeLabel, STICKER_NIET_NODIG, FASE_NIET_NODIG } from "./stickerFormaat.js";
|
|
17
|
-
import { controlelijstHtml, EIGEN_STICKER_MAAT_ONBEKEND, eigenStickerId, eigenStickerKlant, eigenStickerMaat, kiesTraystickerLogo, TRAYSTICKER_GEEN_INDELING, trayProducten, traystickerHtml } from "./eigenDocumenten.js";
|
|
18
|
+
import { controlelijstHtml, EIGEN_STICKER_MAAT_ONBEKEND, VOORBEELD_TRAY_PAYLOAD, eigenStickerId, eigenStickerKlant, eigenStickerMaat, kiesTraystickerLogo, TRAYSTICKER_GEEN_INDELING, trayProducten, traystickerHtml } from "./eigenDocumenten.js";
|
|
18
19
|
import { OPMAAK_LIMIET_MS, OpmaakTeLangFout, metTijdslimiet } from "./opmaakLimiet.js";
|
|
19
20
|
import { stuurPdfNaarPrinter, opdrachtStatusDetail, vervaltijdVoor } from "./printService.server.js";
|
|
20
21
|
import { kiesPapier } from "./papierFormaten.js";
|
|
21
22
|
import { waaromDezePrinter } from "./waaromPrinter.js";
|
|
22
|
-
import { etiketPast, leesGeladenEtiket, pdfPaginaMm } from "./etiketControle.js";
|
|
23
|
+
import { etiketPast, leesGeladenEtiket, maatNl, pdfPaginaMm } from "./etiketControle.js";
|
|
24
|
+
import { a4VelVoor, kiesUitwijkroute, leesA4StickervelWaarde, leesStickerInstellingenStrikt, uitwijkVoorPickschermen } from "./stickerUitwijk.js";
|
|
23
25
|
import { documentTypeLabel as documentTypeLabelVoor } from "./documentTypes.js";
|
|
24
26
|
import { PAPIERFORMATEN } from "./documentTypes.js";
|
|
25
27
|
const MAX_POGINGEN = 3;
|
|
@@ -132,6 +134,71 @@ export class WachtOpLayoutFout extends Error {
|
|
|
132
134
|
this.name = "WachtOpLayoutFout";
|
|
133
135
|
}
|
|
134
136
|
}
|
|
137
|
+
/** Geen vervoerder (of Engine te oud): wachten tot hij is ingesteld, onbegrensd. */
|
|
138
|
+
export class WachtOpVervoerderFout extends Error {
|
|
139
|
+
constructor() {
|
|
140
|
+
super(...arguments);
|
|
141
|
+
this.name = "WachtOpVervoerderFout";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Bepaalt de vervoerder voor een eigen document. Alleen carrier_label uit de
|
|
146
|
+
* Engine (payload of logistics_brief_transport). Geeft null voor documenten
|
|
147
|
+
* zonder vervoerder (of Floriday 1-op-1). Gooit WachtOpVervoerderFout als hij
|
|
148
|
+
* ontbreekt; nooit een naam opzoeken, nooit "onbekend".
|
|
149
|
+
*/
|
|
150
|
+
export async function bepaalVervoerder(db, job, p, layout) {
|
|
151
|
+
const dt = normaliseerDocumenttype(layout?.documenttype ?? job.documenttype);
|
|
152
|
+
if (!VERVOERDER_DOCUMENTEN.includes(dt))
|
|
153
|
+
return null;
|
|
154
|
+
if (String(layout?.bron ?? "") === "floriday" || String(p._herkomst ?? "") === "floriday")
|
|
155
|
+
return null;
|
|
156
|
+
if (isTestprintJob(job) || p.voorbeeld === true)
|
|
157
|
+
return voorbeeldVervoerder(p);
|
|
158
|
+
const ref = zoekOrderVerwijzing(p);
|
|
159
|
+
const ordernummer = String(ref.ordernummer ?? p.order_number ?? p.ordernummer ?? "").trim();
|
|
160
|
+
let r = carrierUitPayload(p);
|
|
161
|
+
if (r.soort === "afwezig") {
|
|
162
|
+
if (!ref.orderId) {
|
|
163
|
+
// Engine-opdracht zonder carrier_label en zonder order: Engine te oud.
|
|
164
|
+
if (isEngineOpdracht(job))
|
|
165
|
+
throw new WachtOpVervoerderFout(ENGINE_TE_OUD);
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
const { data, error } = await db.rpc("logistics_brief_transport", {
|
|
169
|
+
p_order_id: ref.orderId,
|
|
170
|
+
...(ref.cartId ? { p_cart_id: ref.cartId } : {}),
|
|
171
|
+
});
|
|
172
|
+
if (error)
|
|
173
|
+
throw new WachtOpVervoerderFout(`${ENGINE_TE_OUD} (${String(error.message ?? "").slice(0, 120)})`);
|
|
174
|
+
r = carrierUitTransport(data);
|
|
175
|
+
if (r.soort === "afwezig")
|
|
176
|
+
throw new WachtOpVervoerderFout(ENGINE_TE_OUD);
|
|
177
|
+
}
|
|
178
|
+
if (r.soort === "geen")
|
|
179
|
+
throw new WachtOpVervoerderFout(geenVervoerderTekst(ordernummer));
|
|
180
|
+
return r.label;
|
|
181
|
+
}
|
|
182
|
+
/** Wacht op een vervoerder: blijft wachtend (geen eindstatus), reden zichtbaar in de wachtrij. */
|
|
183
|
+
export async function wachtOpVervoerder(db, job, reden) {
|
|
184
|
+
const nu = new Date().toISOString();
|
|
185
|
+
await db
|
|
186
|
+
.from("print_jobs")
|
|
187
|
+
.update({
|
|
188
|
+
status: "wachtend",
|
|
189
|
+
foutcode: "GEEN_VERVOERDER",
|
|
190
|
+
foutmelding: reden.slice(0, 500),
|
|
191
|
+
pogingen: Number(job.pogingen ?? 0) + 1,
|
|
192
|
+
volgende_poging: new Date(Date.now() + 5 * 60 * 1000).toISOString(),
|
|
193
|
+
opgepakt_op: null,
|
|
194
|
+
voltooid_op: null,
|
|
195
|
+
updated_at: nu,
|
|
196
|
+
})
|
|
197
|
+
.eq("id", job.id)
|
|
198
|
+
.neq("status", "geannuleerd");
|
|
199
|
+
await log(db, job.id, "wacht_op_vervoerder", reden);
|
|
200
|
+
return "wachtend";
|
|
201
|
+
}
|
|
135
202
|
/** Blijvende contractfout: opnieuw proberen met dezelfde invoer kan niet slagen. */
|
|
136
203
|
export class EngineContractFout extends GeenDocumentFout {
|
|
137
204
|
constructor() {
|
|
@@ -921,7 +988,9 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
921
988
|
noteer("render_html");
|
|
922
989
|
return meegestuurd;
|
|
923
990
|
}
|
|
924
|
-
|
|
991
|
+
let p = (job.payload ?? {});
|
|
992
|
+
// Vervoerder: alleen carrier_label uit de Engine. Ontbreekt hij → wachten.
|
|
993
|
+
const carrierLabel = await bepaalVervoerder(db, job, p, layout);
|
|
925
994
|
const liggend = String(layout.orientatie ?? "portrait") === "landscape";
|
|
926
995
|
const b = Number(layout.breedte_mm ?? 210);
|
|
927
996
|
const h = Number(layout.hoogte_mm ?? 297);
|
|
@@ -941,6 +1010,9 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
941
1010
|
}
|
|
942
1011
|
// Eigen traysticker (fs.eigen_traysticker): één sticker per tray.
|
|
943
1012
|
if (cfg.eigen_traysticker && typeof cfg.eigen_traysticker === "object") {
|
|
1013
|
+
// Testprint: voorbeeldgegevens (voorbeeldorder, fusten, een samenstelling).
|
|
1014
|
+
if (isTestprintJob(job) && !trayProducten(p))
|
|
1015
|
+
p = { ...VOORBEELD_TRAY_PAYLOAD, ...p };
|
|
944
1016
|
if (!trayProducten(p))
|
|
945
1017
|
throw new WachtOpLayoutFout(TRAYSTICKER_GEEN_INDELING);
|
|
946
1018
|
const inst = await bedrijfsInstelling(db).catch(() => null);
|
|
@@ -997,7 +1069,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
997
1069
|
const gekozen = (cartId ? karren.find((k) => String(k?.cart_id ?? "").trim() === cartId) : null) ??
|
|
998
1070
|
karren[0] ??
|
|
999
1071
|
null;
|
|
1000
|
-
const metTerugval = await metBedrijfsTerugval(db, { ...volledig, karren: gekozen ? [gekozen] : [] }, layout);
|
|
1072
|
+
const metTerugval = await metBedrijfsTerugval(db, metVervoerder({ ...volledig, karren: gekozen ? [gekozen] : [] }, p, carrierLabel), layout);
|
|
1001
1073
|
const order = metTerugval.order;
|
|
1002
1074
|
layout = metTerugval.layout;
|
|
1003
1075
|
return renderPakbonDocument(leesAfleverbriefConfig(layout.config), order, {
|
|
@@ -1074,7 +1146,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
1074
1146
|
if (isTestpakbon)
|
|
1075
1147
|
order = zonderBarcodes(order);
|
|
1076
1148
|
// Vervoerder/ophaalmoment alleen uit de printopdracht; ontbrekend = weglaten.
|
|
1077
|
-
order = metVervoerder(order, p);
|
|
1149
|
+
order = metVervoerder(order, p, carrierLabel);
|
|
1078
1150
|
if (isEngineOpdracht(job) && !isTestpakbon) {
|
|
1079
1151
|
let barcode = String(engineBarcode ?? "").trim();
|
|
1080
1152
|
if (!barcode) {
|
|
@@ -1271,6 +1343,13 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
1271
1343
|
? null
|
|
1272
1344
|
: await laadOrderVanuitDatabase(db, p).catch(() => null);
|
|
1273
1345
|
const gegevens = { ...(uitDatabase ?? {}), ...(meegegeven ?? {}) };
|
|
1346
|
+
if (carrierLabel !== null) {
|
|
1347
|
+
// Eén bron: carrier_label. Overschrijft elke andere transporteurwaarde.
|
|
1348
|
+
gegevens.carrier_label = carrierLabel;
|
|
1349
|
+
gegevens.transporteur = carrierLabel;
|
|
1350
|
+
gegevens.verzending = { ...(gegevens.verzending ?? {}), transporteur: carrierLabel };
|
|
1351
|
+
gegevens.order = { ...(gegevens.order ?? {}), transporteur: carrierLabel, carrier_label: carrierLabel };
|
|
1352
|
+
}
|
|
1274
1353
|
const profielData = p.voorbeeld === true ? { ...voorbeeldContext(), ...(gegevens ?? {}) } : gegevens;
|
|
1275
1354
|
const profielHtml = renderProfielDocument(String(layout.documenttype), cfg, profielData, {
|
|
1276
1355
|
breedteMm,
|
|
@@ -1543,7 +1622,7 @@ async function verwerkJob(db, job) {
|
|
|
1543
1622
|
}
|
|
1544
1623
|
const keuze = klaar ? { layout: null, ontwerpWint: false } : await zoekLayout(db, job);
|
|
1545
1624
|
klok.markeer("layout_resolved");
|
|
1546
|
-
|
|
1625
|
+
let layout = keuze.layout;
|
|
1547
1626
|
// Klantsticker/traysticker: maat vaststellen (Floriday-formaat, anders de
|
|
1548
1627
|
// PDF). Onbekend = niet printen. De maat kiest ook de printer via de
|
|
1549
1628
|
// formaatregels, zodat een sticker op een etiket komt dat groot genoeg is.
|
|
@@ -1611,8 +1690,20 @@ async function verwerkJob(db, job) {
|
|
|
1611
1690
|
await geweigerd(db, job, "GEEN_GELADEN_ETIKET", `${documentTypeLabelVoor(String(job.documenttype))} gaat alleen naar een labelprinter met een ingesteld geladen etiket; printer ${String(printer.naam ?? printer.id)} heeft er geen.`);
|
|
1612
1691
|
return "mislukt";
|
|
1613
1692
|
}
|
|
1693
|
+
// Eigen sticker/traysticker: variant op de maat van het geladen etiket,
|
|
1694
|
+
// opgebouwd uit dezelfde velden. Een eigen ontwerp wordt nooit geschaald
|
|
1695
|
+
// en de opgeslagen layout wordt niet gewijzigd (alleen deze opmaak).
|
|
1696
|
+
if (label?.etiket && layout && eigenEtiketVariantNodig(layout, label.etiket)) {
|
|
1697
|
+
const e = label.etiket;
|
|
1698
|
+
layout = { ...layout, breedte_mm: e.breedte_mm, hoogte_mm: e.hoogte_mm, orientatie: e.breedte_mm > e.hoogte_mm ? "landscape" : "portrait" };
|
|
1699
|
+
keuze.layout = layout;
|
|
1700
|
+
await log(db, job.id, "etiket", `Eigen ontwerp opgebouwd op de etiketmaat ${maatNl(e.breedte_mm, e.hoogte_mm)} (variant, niet geschaald).`);
|
|
1701
|
+
}
|
|
1614
1702
|
const isTest = (job.payload ?? {})["is_testprint"] === true;
|
|
1615
|
-
|
|
1703
|
+
// Testprint per uitwijkroute (1.69.12): de voorbeeldsticker houdt zijn
|
|
1704
|
+
// eigen maat, zodat de echte uitwijkroute zichtbaar wordt.
|
|
1705
|
+
const routeTest = (job.payload ?? {})["uitwijk_test"] === true;
|
|
1706
|
+
if (label && isTest && label.etiket && !routeTest) {
|
|
1616
1707
|
// Een testprint gebruikt het formaat dat echt in de printer zit.
|
|
1617
1708
|
const p = (job.payload ?? {});
|
|
1618
1709
|
p["voorbeeld_formaat"] = {
|
|
@@ -1665,21 +1756,44 @@ async function verwerkJob(db, job) {
|
|
|
1665
1756
|
const vfPapier = (job.payload ?? {})["voorbeeld_formaat"];
|
|
1666
1757
|
const breedteMm = Number(layout?.breedte_mm ?? vfPapier?.["breedte_mm"] ?? standaardMaat(printer).breedte);
|
|
1667
1758
|
const hoogteMm = Number(layout?.hoogte_mm ?? vfPapier?.["hoogte_mm"] ?? standaardMaat(printer).hoogte);
|
|
1759
|
+
let doelPrinter = printer;
|
|
1760
|
+
let uitwijk = null;
|
|
1761
|
+
const fitToPage = false;
|
|
1762
|
+
let kopieenNaarPrinter = Number(job.kopieen ?? 1);
|
|
1668
1763
|
let papier = kiesPapier(formaten, breedteMm, hoogteMm);
|
|
1669
1764
|
if (label) {
|
|
1670
1765
|
const maat = stickerMaat ?? (klaar ? pdfPaginaMm(pdfBase64) : null) ?? { breedte_mm: breedteMm, hoogte_mm: hoogteMm };
|
|
1671
1766
|
const uit = etiketPast({ ...maat, soortLabel: stickerCache?.sticker_type ? stickerTypeLabel(stickerCache.sticker_type) : documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
|
|
1672
|
-
if (
|
|
1767
|
+
if (label.etiket && ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? "")) && (uit.ok || uit.code === "FORMAAT_PAST_NIET")) {
|
|
1768
|
+
// 1.69.12: elke sticker via de uitwijkroute (vaste volgorde), papier
|
|
1769
|
+
// op afmeting gekozen; draaien/centreren/verkleinen in de PDF zelf.
|
|
1770
|
+
const keuzeUitwijk = await bepaalUitwijk(db, job, layout, !!floriday, !!klaar, maat, label, printer, formaten);
|
|
1771
|
+
if (!keuzeUitwijk) {
|
|
1772
|
+
await geweigerd(db, job, "FORMAAT_PAST_NIET", `${uit.ok ? "Geen passende papiermaat." : uit.bericht} Er is op deze printplek ook geen A4-printer om op uit te wijken.`);
|
|
1773
|
+
return "mislukt";
|
|
1774
|
+
}
|
|
1775
|
+
uitwijk = keuzeUitwijk.uitkomst;
|
|
1776
|
+
if (keuzeUitwijk.a4)
|
|
1777
|
+
doelPrinter = keuzeUitwijk.a4;
|
|
1778
|
+
const geplaatst = await voerUitwijkUit(pdfBase64, uitwijk, maat, Number(job.kopieen ?? 1));
|
|
1779
|
+
pdfBase64 = geplaatst.pdfBase64;
|
|
1780
|
+
kopieenNaarPrinter = geplaatst.kopieen;
|
|
1781
|
+
papier = { paper: uitwijk.paper || null, rotate: 0, uitleg: uitwijk.reden };
|
|
1782
|
+
await log(db, job.id, "uitwijk", `${uitwijk.reden} (${uitwijk.printerNaam}).`);
|
|
1783
|
+
}
|
|
1784
|
+
else if (!uit.ok) {
|
|
1673
1785
|
await geweigerd(db, job, uit.code, uit.bericht);
|
|
1674
1786
|
return "mislukt";
|
|
1675
1787
|
}
|
|
1676
|
-
|
|
1677
|
-
|
|
1788
|
+
else {
|
|
1789
|
+
papier = { paper: uit.paper, rotate: uit.rotate, uitleg: uit.uitleg };
|
|
1790
|
+
await log(db, job.id, "etiket", `Labelprinter ${label.naam}: ${uit.uitleg}.`);
|
|
1791
|
+
}
|
|
1678
1792
|
}
|
|
1679
1793
|
const verloopt = vervaltijdVoor(String(job.documenttype ?? ""));
|
|
1680
1794
|
// Eén fysieke printer via meerdere computers: probeer de routes op
|
|
1681
1795
|
// volgorde; valt de eerste weg, dan automatisch de volgende.
|
|
1682
|
-
const routes = await printerRoutes(db, String(
|
|
1796
|
+
const routes = await printerRoutes(db, String(doelPrinter.id), String(doelPrinter.extern_printer_id));
|
|
1683
1797
|
let externJobId = "";
|
|
1684
1798
|
let laatsteFout = null;
|
|
1685
1799
|
for (const [i, route] of routes.entries()) {
|
|
@@ -1690,9 +1804,9 @@ async function verwerkJob(db, job) {
|
|
|
1690
1804
|
externPrinterId: route.extern,
|
|
1691
1805
|
documentnaam: String(job.documentnaam ?? "Document"),
|
|
1692
1806
|
pdfBase64,
|
|
1693
|
-
kopieen:
|
|
1807
|
+
kopieen: kopieenNaarPrinter,
|
|
1694
1808
|
documenttype: String(job.documenttype ?? ""),
|
|
1695
|
-
opties: { paper: papier.paper, rotate: papier.rotate, fitToPage
|
|
1809
|
+
opties: { paper: papier.paper, rotate: papier.rotate, fitToPage },
|
|
1696
1810
|
});
|
|
1697
1811
|
if (i > 0) {
|
|
1698
1812
|
await log(db, job.id, "route", `Verstuurd via computer ${route.computer ?? "andere route"}: de eerste computer was niet bereikbaar.`);
|
|
@@ -1717,7 +1831,7 @@ async function verwerkJob(db, job) {
|
|
|
1717
1831
|
const { data: gekoppeldeJob } = await db
|
|
1718
1832
|
.from("print_jobs")
|
|
1719
1833
|
.update({
|
|
1720
|
-
printer_id:
|
|
1834
|
+
printer_id: doelPrinter.id,
|
|
1721
1835
|
// layout_id blijft de aangeleverde invoer en wordt bewust niet
|
|
1722
1836
|
// overschreven met de uitkomst.
|
|
1723
1837
|
// Bij Floriday 1-op-1 wordt de Floriday-layout vastgelegd (alleen nieuwe opdrachten).
|
|
@@ -1745,10 +1859,15 @@ async function verwerkJob(db, job) {
|
|
|
1745
1859
|
return "wachtend";
|
|
1746
1860
|
}
|
|
1747
1861
|
klok.markeer("submitted");
|
|
1748
|
-
|
|
1862
|
+
if (uitwijk)
|
|
1863
|
+
await legUitwijkVast(db, job, uitwijk);
|
|
1864
|
+
await log(db, job.id, "verstuurd", `Naar printer ${doelPrinter.naam ?? ""}. ${papier.uitleg} ${klok.samenvatting()}`);
|
|
1749
1865
|
return "verstuurd";
|
|
1750
1866
|
}
|
|
1751
1867
|
catch (e) {
|
|
1868
|
+
if (e instanceof WachtOpVervoerderFout) {
|
|
1869
|
+
return await wachtOpVervoerder(db, job, e.message);
|
|
1870
|
+
}
|
|
1752
1871
|
if (e instanceof WachtOpLayoutFout) {
|
|
1753
1872
|
return await wachtOpLayout(db, job, e.message);
|
|
1754
1873
|
}
|
|
@@ -2095,6 +2214,109 @@ export async function bepaalDocumentKeuze(db, job) {
|
|
|
2095
2214
|
* een werkplek hem als labelprinter gebruikt. Alleen dan geldt de controle,
|
|
2096
2215
|
* zodat bestaande printers zonder werkplek precies blijven werken als nu.
|
|
2097
2216
|
*/
|
|
2217
|
+
/** Stickersoort voor de verkleininstelling (op configuratie en bron, nooit op naam). */
|
|
2218
|
+
export function stickerSoortVoor(documenttype, layout, floriday, klaar) {
|
|
2219
|
+
const cfg = (layout?.config ?? {});
|
|
2220
|
+
if (cfg.eigen_traysticker)
|
|
2221
|
+
return "eigen_traysticker";
|
|
2222
|
+
if (cfg.eigen_sticker)
|
|
2223
|
+
return "eigen_sticker";
|
|
2224
|
+
const tray = String(documenttype) === "traysticker";
|
|
2225
|
+
if (floriday || (klaar && tray))
|
|
2226
|
+
return tray ? "floriday_traysticker" : "floriday_sticker";
|
|
2227
|
+
return "klantsticker";
|
|
2228
|
+
}
|
|
2229
|
+
/** Eigen ontwerp past niet op het geladen etiket: variant op de etiketmaat maken. */
|
|
2230
|
+
export function eigenEtiketVariantNodig(layout, etiket) {
|
|
2231
|
+
const cfg = (layout?.config ?? {});
|
|
2232
|
+
if (!cfg.eigen_traysticker && !cfg.eigen_sticker)
|
|
2233
|
+
return false;
|
|
2234
|
+
// Eigen sticker met geüploade afbeelding heeft een vaste maat: die volgt de uitwijkroute.
|
|
2235
|
+
if (cfg.eigen_sticker && !cfg.eigen_traysticker)
|
|
2236
|
+
return false;
|
|
2237
|
+
const b = Number(layout.breedte_mm ?? 0);
|
|
2238
|
+
const h = Number(layout.hoogte_mm ?? 0);
|
|
2239
|
+
if (!(b > 0) || !(h > 0))
|
|
2240
|
+
return false;
|
|
2241
|
+
return !etiketPast({ breedte_mm: b, hoogte_mm: h, soortLabel: "Traysticker" }, etiket, "").ok;
|
|
2242
|
+
}
|
|
2243
|
+
/**
|
|
2244
|
+
* Verkleininstelling via de databasefunctie (één bron met de vroege
|
|
2245
|
+
* waarschuwing; maakt de standaard aan als hij ontbreekt). null = niet
|
|
2246
|
+
* leesbaar: dan vervalt alleen de stap verkleinen, nooit wachten.
|
|
2247
|
+
*/
|
|
2248
|
+
async function leesStickerInstelling(db) {
|
|
2249
|
+
const { data, error } = await db.rpc("layouts_sticker_verkleinen");
|
|
2250
|
+
if (error)
|
|
2251
|
+
return null;
|
|
2252
|
+
return leesStickerInstellingenStrikt(data);
|
|
2253
|
+
}
|
|
2254
|
+
/** Uitwijkroute voor een sticker die niet op het geladen etiket past. */
|
|
2255
|
+
async function bepaalUitwijk(db, job, layout, floriday, klaar, maat, label, printer, formaten = null) {
|
|
2256
|
+
const instellingen = await leesStickerInstelling(db).catch(() => null);
|
|
2257
|
+
const soort = stickerSoortVoor(String(job.documenttype ?? ""), layout, floriday, klaar);
|
|
2258
|
+
const etiketten = label.etiket
|
|
2259
|
+
? [{ printerNaam: label.naam, printerId: String(printer.id), paper: label.etiket.standaard ? "" : label.etiket.naam, breedte_mm: label.etiket.breedte_mm, hoogte_mm: label.etiket.hoogte_mm, dpi: printerDpi(printer), formaten: formaten ? formaten : undefined }]
|
|
2260
|
+
: [];
|
|
2261
|
+
const plekId = leesPrintPlekId(job) || (await zoekPrintPlekId(db, job).catch(() => null));
|
|
2262
|
+
let a4 = null;
|
|
2263
|
+
if (plekId) {
|
|
2264
|
+
const { data: a4Id } = await db.rpc("printplek_printer", { _plek: plekId, _documenttype: "pakbon" });
|
|
2265
|
+
if (typeof a4Id === "string" && a4Id !== String(printer.id)) {
|
|
2266
|
+
const { data } = await db
|
|
2267
|
+
.from("printers")
|
|
2268
|
+
.select("id, naam, weergavenaam, extern_printer_id, actief, papierformaat, ondersteunde_formaten, geladen_etiket")
|
|
2269
|
+
.eq("id", a4Id)
|
|
2270
|
+
.maybeSingle();
|
|
2271
|
+
a4 = data && data.actief !== false && data.extern_printer_id ? data : null;
|
|
2272
|
+
}
|
|
2273
|
+
}
|
|
2274
|
+
// Ensure bij gebruik (eerste print): oude losse instelling overnemen.
|
|
2275
|
+
await db.rpc("layouts_zorg_voor_a4_stickervel").then(() => undefined, () => undefined);
|
|
2276
|
+
const vel = plekId ? await leesA4Stickervel(db, String(plekId)) : null;
|
|
2277
|
+
const velIndeling = a4VelVoor(vel, maat);
|
|
2278
|
+
const uitkomst = kiesUitwijkroute({
|
|
2279
|
+
sticker: maat,
|
|
2280
|
+
etiketten,
|
|
2281
|
+
a4Printer: a4 ? { naam: String(a4.weergavenaam || a4.naam || "A4-printer"), id: String(a4.id) } : null,
|
|
2282
|
+
a4VelIngesteld: !!velIndeling,
|
|
2283
|
+
a4VelIndeling: velIndeling,
|
|
2284
|
+
instelling: instellingen ? instellingen[soort] : null,
|
|
2285
|
+
});
|
|
2286
|
+
if (!uitkomst)
|
|
2287
|
+
return null;
|
|
2288
|
+
const naarA4 = uitkomst.uitwijkroute === "a4_vel" || uitkomst.uitwijkroute === "a4_snijlijnen";
|
|
2289
|
+
return { uitkomst, a4: naarA4 ? a4 : null };
|
|
2290
|
+
}
|
|
2291
|
+
/** A4-stickervel van de printplek (print_plekken.a4_stickervel, 1.69.12). */
|
|
2292
|
+
async function leesA4Stickervel(db, plekId) {
|
|
2293
|
+
const { data } = await db.from("print_plekken").select("a4_stickervel").eq("id", plekId).maybeSingle();
|
|
2294
|
+
return leesA4StickervelWaarde(data?.a4_stickervel);
|
|
2295
|
+
}
|
|
2296
|
+
/** Resolutie uit de PrintNode-gegevens; onbekend = null (de uitwijk neemt 203 dpi). */
|
|
2297
|
+
function printerDpi(printer) {
|
|
2298
|
+
const f = (printer?.ondersteunde_formaten ?? {});
|
|
2299
|
+
const d = Number(f?.dpi ?? (Array.isArray(f?.dpis) ? String(f.dpis[0]).split("x")[0] : NaN));
|
|
2300
|
+
return d > 0 ? d : null;
|
|
2301
|
+
}
|
|
2302
|
+
/** Legt vast wat er met de sticker gebeurd is (veldnamen voor Pickschermen 1.0.61). */
|
|
2303
|
+
async function legUitwijkVast(db, job, u) {
|
|
2304
|
+
// Pickschermen 1.0.61 leest uitwijkroute/printerNaam/schaal/reden; de
|
|
2305
|
+
// overige velden zijn alleen voor het voorbeeld in de printwachtrij.
|
|
2306
|
+
const waarde = {
|
|
2307
|
+
...uitwijkVoorPickschermen(u),
|
|
2308
|
+
rotate: u.rotate,
|
|
2309
|
+
pagina_breedte_mm: u.pagina_breedte_mm,
|
|
2310
|
+
pagina_hoogte_mm: u.pagina_hoogte_mm,
|
|
2311
|
+
sticker_breedte_mm: u.sticker_breedte_mm,
|
|
2312
|
+
sticker_hoogte_mm: u.sticker_hoogte_mm,
|
|
2313
|
+
};
|
|
2314
|
+
const { error } = await db.from("print_jobs").update({ uitwijk: waarde }).eq("id", job.id);
|
|
2315
|
+
if (error)
|
|
2316
|
+
await faseLog(db, job.id, "uitwijk_niet_vastgelegd", { ...waarde, fout: error.message });
|
|
2317
|
+
else
|
|
2318
|
+
await faseLog(db, job.id, "uitwijk", waarde);
|
|
2319
|
+
}
|
|
2098
2320
|
async function labelControleVoorbereiden(db, printer) {
|
|
2099
2321
|
const etiket = leesGeladenEtiket(printer?.geladen_etiket);
|
|
2100
2322
|
const naam = String(printer?.weergavenaam || printer?.naam || "onbekend");
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,8 +113,9 @@ export async function haalPrinterFormaten(externPrinterId) {
|
|
|
113
113
|
export async function stuurPdfNaarPrinter(input) {
|
|
114
114
|
const o = input.opties ?? {};
|
|
115
115
|
const options = {
|
|
116
|
-
//
|
|
117
|
-
|
|
116
|
+
// Altijd uit (1.69.12): de printer of driver mag nooit zelf schalen;
|
|
117
|
+
// verkleinen/centreren gebeurt in de PDF.
|
|
118
|
+
fit_to_page: false,
|
|
118
119
|
};
|
|
119
120
|
if (o.paper)
|
|
120
121
|
options["paper"] = o.paper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profielHtml.d.ts","sourceRoot":"","sources":["../../src/lib/profielHtml.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"profielHtml.d.ts","sourceRoot":"","sources":["../../src/lib/profielHtml.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA4ND,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAWjF;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE,mBAAwB,GAC/B,MAAM,CAwCR"}
|
|
@@ -48,7 +48,8 @@ const SYNONIEMEN = {
|
|
|
48
48
|
plaats: ["ontvanger.plaats", "klant.plaats", "adres.plaats"],
|
|
49
49
|
land: ["ontvanger.land", "klant.land", "adres.land"],
|
|
50
50
|
klantnaam: ["klant.naam", "ontvanger.bedrijf", "klantnaam"],
|
|
51
|
-
transporteur: ["verzending.transporteur", "order.transporteur", "transporteur"],
|
|
51
|
+
transporteur: ["carrier_label", "order.carrier_label", "verzending.transporteur", "order.transporteur", "transporteur"],
|
|
52
|
+
carrier_label: ["carrier_label", "order.carrier_label"],
|
|
52
53
|
verzendmethode: ["verzending.methode", "order.verzendmethode", "verzendmethode"],
|
|
53
54
|
route: ["verzending.route", "order.route", "route"],
|
|
54
55
|
track_trace: ["verzending.track_trace", "order.track_trace", "trackTrace"],
|
|
@@ -28,5 +28,11 @@ export declare function zorgVoorStandaardLayoutsMetStatus(db: Db): Promise<{
|
|
|
28
28
|
* (met de knop "Overnemen uit factuurgegevens"). Raakt de database niet.
|
|
29
29
|
*/
|
|
30
30
|
export declare function zorgVoorBedrijfsgegevens(_db: Db): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Ensure: zet de verkleininstelling per stickersoort in app_settings als die
|
|
33
|
+
* nog ontbreekt (gegevens reizen niet mee met de schemasync). Vult alleen
|
|
34
|
+
* ontbrekende soorten aan; een bestaande keuze wordt nooit overschreven.
|
|
35
|
+
*/
|
|
36
|
+
export declare function zorgVoorStickerInstellingen(db: Db): Promise<boolean>;
|
|
31
37
|
export {};
|
|
32
38
|
//# sourceMappingURL=standaardLayouts.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standaardLayouts.server.d.ts","sourceRoot":"","sources":["../../src/lib/standaardLayouts.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAExC,eAAO,MAAM,wBAAwB,2MACqK,CAAC;AAE3M,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBrG;AAED,kDAAkD;AAClD,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5E;AAED,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"standaardLayouts.server.d.ts","sourceRoot":"","sources":["../../src/lib/standaardLayouts.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAExC,eAAO,MAAM,wBAAwB,2MACqK,CAAC;AAE3M,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBrG;AAED,kDAAkD;AAClD,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5E;AAED,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAQrH;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1E"}
|
|
@@ -55,6 +55,7 @@ export async function zorgVoorStandaardLayoutsMetStatus(db) {
|
|
|
55
55
|
const aanvulling = await vulStandaardenAan(db);
|
|
56
56
|
if (aanvulling.schemaOntbreekt)
|
|
57
57
|
return { aantal: 0, schemaOntbreekt: true };
|
|
58
|
+
await zorgVoorStickerInstellingen(db).catch(() => false);
|
|
58
59
|
const { data, error: rpcFout } = await db.rpc("layout_zorg_systeemlayouts");
|
|
59
60
|
if (rpcFout)
|
|
60
61
|
throw new Error(`Standaardlayouts controleren mislukt: ${rpcFout.message}`);
|
|
@@ -70,3 +71,15 @@ export async function zorgVoorStandaardLayoutsMetStatus(db) {
|
|
|
70
71
|
export async function zorgVoorBedrijfsgegevens(_db) {
|
|
71
72
|
return false;
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Ensure: zet de verkleininstelling per stickersoort in app_settings als die
|
|
76
|
+
* nog ontbreekt (gegevens reizen niet mee met de schemasync). Vult alleen
|
|
77
|
+
* ontbrekende soorten aan; een bestaande keuze wordt nooit overschreven.
|
|
78
|
+
*/
|
|
79
|
+
export async function zorgVoorStickerInstellingen(db) {
|
|
80
|
+
// 1.69.12: de standaardwaarden staan alleen in de databasefunctie.
|
|
81
|
+
const { error } = await db.rpc("layouts_zorg_voor_sticker_verkleinen");
|
|
82
|
+
if (error)
|
|
83
|
+
throw new Error(`Stickerinstellingen aanvullen mislukt: ${error.message}`);
|
|
84
|
+
return true;
|
|
85
|
+
}
|