@flowselections/layout-maker 1.69.1 → 1.69.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/BedrijfsgegevensMelding.d.ts +3 -0
- package/dist-lib/components/BedrijfsgegevensMelding.d.ts.map +1 -0
- package/dist-lib/components/BedrijfsgegevensMelding.js +26 -0
- package/dist-lib/components/GeladenEtiketTab.d.ts +8 -0
- package/dist-lib/components/GeladenEtiketTab.d.ts.map +1 -0
- package/dist-lib/components/GeladenEtiketTab.js +34 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +2 -1
- package/dist-lib/components/PrintenPage.d.ts +2 -1
- package/dist-lib/components/PrintenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintenPage.js +5 -2
- package/dist-lib/components/WerkplekkenTab.js +1 -1
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/types.d.ts +334 -18
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/eigenDocumenten.d.ts +52 -0
- package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -0
- package/dist-lib/lib/eigenDocumenten.js +182 -0
- package/dist-lib/lib/printQueue.server.d.ts +6 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +90 -2
- package/dist-lib/lib/standaardLayouts.server.d.ts +5 -4
- package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
- package/dist-lib/lib/standaardLayouts.server.js +8 -38
- package/dist-lib/lib/standaardenBron.d.ts.map +1 -1
- package/dist-lib/lib/standaardenBron.js +42 -0
- package/dist-lib/lib/stickerFormaat.d.ts +1 -1
- package/dist-lib/lib/stickerFormaat.d.ts.map +1 -1
- package/dist-lib/lib/versie.generated.d.ts +1 -1
- package/dist-lib/lib/versie.generated.js +1 -1
- package/dist-lib/lib/werkplekken.d.ts +1 -0
- package/dist-lib/lib/werkplekken.d.ts.map +1 -1
- package/dist-lib/lib/werkplekken.js +1 -1
- package/package.json +1 -1
- package/sql/print-schema.sql +56 -6
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const EIGEN_STICKER_MAAT_ONBEKEND = "Maat van deze sticker onbekend \u2013 sla breedte en hoogte op bij de sticker. Er is niets geprint (een sticker wordt nooit geschaald).";
|
|
2
|
+
export type EigenStickerMaat = {
|
|
3
|
+
breedte_mm: number;
|
|
4
|
+
hoogte_mm: number;
|
|
5
|
+
bron: "payload" | "sticker" | "klant" | "pdf";
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Werkelijke maat van de geüploade sticker. Volgorde: (1) maat in de opdracht
|
|
9
|
+
* (sticker_formaat_mm / sticker_afbeelding.breedte_mm) → (2) customer_product_stickers
|
|
10
|
+
* (width_mm/height_mm) → (3) customer_sticker_settings per klant → (4) paginamaat
|
|
11
|
+
* van een PDF-bestand. Nooit de layoutmaat; nooit schalen.
|
|
12
|
+
*/
|
|
13
|
+
export declare function eigenStickerMaat(payload: unknown, stickerRij: unknown, klantRij?: unknown, pdfMaat?: {
|
|
14
|
+
breedte_mm: number;
|
|
15
|
+
hoogte_mm: number;
|
|
16
|
+
} | null): EigenStickerMaat | null;
|
|
17
|
+
/** Klantsleutel voor customer_sticker_settings: stickerrij, anders opdracht. */
|
|
18
|
+
export declare function eigenStickerKlant(payload: unknown, stickerRij: unknown): string | null;
|
|
19
|
+
/** Logo voor de eigen traysticker: payload.logo_url → bedrijfslogo → geen. */
|
|
20
|
+
export declare function kiesTraystickerLogo(payloadLogo: unknown, bedrijfsLogo: string | null | undefined): string | null;
|
|
21
|
+
/** Id van de klantsticker (customer_product_stickers.id) uit de opdracht. */
|
|
22
|
+
export declare function eigenStickerId(payload: unknown): string | null;
|
|
23
|
+
export declare const TRAYSTICKER_VELDEN: readonly ["logo", "bedrijfsnaam", "klantnaam", "ordernummer", "leverdatum", "afleverlocatie", "tray", "producten", "barcode"];
|
|
24
|
+
export type TrayVeld = (typeof TRAYSTICKER_VELDEN)[number];
|
|
25
|
+
export declare const TRAYSTICKER_GEEN_INDELING = "Aantal fusten onbekend";
|
|
26
|
+
export type TrayRegel = {
|
|
27
|
+
artikelnummer: string;
|
|
28
|
+
naam: string;
|
|
29
|
+
aantal: string;
|
|
30
|
+
};
|
|
31
|
+
export type TrayProduct = TrayRegel & {
|
|
32
|
+
onderdelen: TrayRegel[];
|
|
33
|
+
};
|
|
34
|
+
/** Producten van één fust (Engine: één item, optioneel met onderdelen). */
|
|
35
|
+
export declare function trayProducten(payload: unknown): TrayProduct[] | null;
|
|
36
|
+
export declare function trayBarcodeWaarde(payload: unknown): string;
|
|
37
|
+
export declare function traystickerHtml(payload: unknown, cfg: unknown, maat: {
|
|
38
|
+
breedte_mm: number;
|
|
39
|
+
hoogte_mm: number;
|
|
40
|
+
}, bedrijf: {
|
|
41
|
+
naam?: string;
|
|
42
|
+
logoSrc?: string | null;
|
|
43
|
+
}): string;
|
|
44
|
+
export declare const CONTROLELIJST_KOLOMMEN: {
|
|
45
|
+
veld: string;
|
|
46
|
+
label: string;
|
|
47
|
+
standaard: boolean;
|
|
48
|
+
}[];
|
|
49
|
+
export declare const CONTROLELIJST_STANDAARD_KOLOMMEN: string[];
|
|
50
|
+
export declare function controlelijstKolommen(cfg: unknown): string[];
|
|
51
|
+
export declare function controlelijstHtml(payload: unknown, cfg: unknown): string;
|
|
52
|
+
//# sourceMappingURL=eigenDocumenten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eigenDocumenten.d.ts","sourceRoot":"","sources":["../../src/lib/eigenDocumenten.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,2BAA2B,4IAC8F,CAAC;AAEvI,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAA;CAAE,CAAC;AAExH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,GAAE,OAAc,EACxB,OAAO,GAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,GAC/D,gBAAgB,GAAG,IAAI,CAmBzB;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGtF;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIhH;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI9D;AAGD,eAAO,MAAM,kBAAkB,+HAErB,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC;AAOlE,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,IAAI,CAOpE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD,MAAM,CAiCR;AAGD,eAAO,MAAM,sBAAsB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAmBvF,CAAC;AAEF,eAAO,MAAM,gCAAgC,UAAuE,CAAC;AAarH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAaxE"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/eigenDocumenten.ts — opmaak van de eigen standaarden
|
|
3
|
+
// fs.eigen_sticker (maat), fs.eigen_traysticker en fs.controlelijst.
|
|
4
|
+
// Puur: geen database, geen servercode. Lege velden blijven leeg.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { code128BarsHtml } from "./code128.js";
|
|
7
|
+
const obj = (v) => (v && typeof v === "object" && !Array.isArray(v) ? v : {});
|
|
8
|
+
const tekst = (v) => (v == null ? "" : String(v).trim());
|
|
9
|
+
const esc = (v) => tekst(v).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
10
|
+
const getal = (v) => {
|
|
11
|
+
const n = Number(v);
|
|
12
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
13
|
+
};
|
|
14
|
+
// ---------------------------------------------------------------- eigen sticker
|
|
15
|
+
export const EIGEN_STICKER_MAAT_ONBEKEND = "Maat van deze sticker onbekend – sla breedte en hoogte op bij de sticker. Er is niets geprint (een sticker wordt nooit geschaald).";
|
|
16
|
+
/**
|
|
17
|
+
* Werkelijke maat van de geüploade sticker. Volgorde: (1) maat in de opdracht
|
|
18
|
+
* (sticker_formaat_mm / sticker_afbeelding.breedte_mm) → (2) customer_product_stickers
|
|
19
|
+
* (width_mm/height_mm) → (3) customer_sticker_settings per klant → (4) paginamaat
|
|
20
|
+
* van een PDF-bestand. Nooit de layoutmaat; nooit schalen.
|
|
21
|
+
*/
|
|
22
|
+
export function eigenStickerMaat(payload, stickerRij, klantRij = null, pdfMaat = null) {
|
|
23
|
+
const p = obj(payload);
|
|
24
|
+
const f = obj(p["sticker_formaat_mm"]);
|
|
25
|
+
const a = obj(p["sticker_afbeelding"]);
|
|
26
|
+
const pb = getal(f["breedte"]) ?? getal(a["breedte_mm"]);
|
|
27
|
+
const ph = getal(f["hoogte"]) ?? getal(a["hoogte_mm"]);
|
|
28
|
+
if (pb && ph)
|
|
29
|
+
return { breedte_mm: pb, hoogte_mm: ph, bron: "payload" };
|
|
30
|
+
const r = obj(stickerRij);
|
|
31
|
+
const sb = getal(r["width_mm"]);
|
|
32
|
+
const sh = getal(r["height_mm"]);
|
|
33
|
+
if (sb && sh)
|
|
34
|
+
return { breedte_mm: sb, hoogte_mm: sh, bron: "sticker" };
|
|
35
|
+
const k = obj(klantRij);
|
|
36
|
+
const kb = getal(k["width_mm"]);
|
|
37
|
+
const kh = getal(k["height_mm"]);
|
|
38
|
+
if (kb && kh)
|
|
39
|
+
return { breedte_mm: kb, hoogte_mm: kh, bron: "klant" };
|
|
40
|
+
const db = getal(pdfMaat?.breedte_mm);
|
|
41
|
+
const dh = getal(pdfMaat?.hoogte_mm);
|
|
42
|
+
if (db && dh)
|
|
43
|
+
return { breedte_mm: db, hoogte_mm: dh, bron: "pdf" };
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/** Klantsleutel voor customer_sticker_settings: stickerrij, anders opdracht. */
|
|
47
|
+
export function eigenStickerKlant(payload, stickerRij) {
|
|
48
|
+
const v = tekst(obj(stickerRij)["customer_key"]) || tekst(obj(payload)["customer_key"]);
|
|
49
|
+
return v || null;
|
|
50
|
+
}
|
|
51
|
+
/** Logo voor de eigen traysticker: payload.logo_url → bedrijfslogo → geen. */
|
|
52
|
+
export function kiesTraystickerLogo(payloadLogo, bedrijfsLogo) {
|
|
53
|
+
const geldig = (v) => typeof v === "string" && /^(https?:|data:)/.test(v);
|
|
54
|
+
if (geldig(payloadLogo))
|
|
55
|
+
return payloadLogo;
|
|
56
|
+
return geldig(bedrijfsLogo) ? bedrijfsLogo : null;
|
|
57
|
+
}
|
|
58
|
+
/** Id van de klantsticker (customer_product_stickers.id) uit de opdracht. */
|
|
59
|
+
export function eigenStickerId(payload) {
|
|
60
|
+
const p = obj(payload);
|
|
61
|
+
const v = tekst(p["customer_product_sticker_id"] ?? obj(p["sticker_afbeelding"])["sticker_id"]);
|
|
62
|
+
return v || null;
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------- traysticker
|
|
65
|
+
export const TRAYSTICKER_VELDEN = [
|
|
66
|
+
"logo", "bedrijfsnaam", "klantnaam", "ordernummer", "leverdatum", "afleverlocatie", "tray", "producten", "barcode",
|
|
67
|
+
];
|
|
68
|
+
export const TRAYSTICKER_GEEN_INDELING = "Aantal fusten onbekend";
|
|
69
|
+
const trayRegel = (x) => {
|
|
70
|
+
const r = obj(x);
|
|
71
|
+
return { artikelnummer: tekst(r["artikelnummer"]), naam: tekst(r["naam"] ?? r["productnaam"]), aantal: tekst(r["aantal"]) };
|
|
72
|
+
};
|
|
73
|
+
/** Producten van één fust (Engine: één item, optioneel met onderdelen). */
|
|
74
|
+
export function trayProducten(payload) {
|
|
75
|
+
const lijst = obj(payload)["tray_producten"];
|
|
76
|
+
if (!Array.isArray(lijst))
|
|
77
|
+
return null;
|
|
78
|
+
return lijst.map((x) => {
|
|
79
|
+
const o = obj(x)["onderdelen"];
|
|
80
|
+
return { ...trayRegel(x), onderdelen: Array.isArray(o) ? o.map(trayRegel) : [] };
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function trayBarcodeWaarde(payload) {
|
|
84
|
+
const p = obj(payload);
|
|
85
|
+
const o = tekst(p["order_number"] ?? p["ordernummer"]);
|
|
86
|
+
const t = tekst(p["tray_nummer"]);
|
|
87
|
+
return o && t ? `${o}-T${t}` : "";
|
|
88
|
+
}
|
|
89
|
+
export function traystickerHtml(payload, cfg, maat, bedrijf) {
|
|
90
|
+
const p = obj(payload);
|
|
91
|
+
const producten = trayProducten(p);
|
|
92
|
+
if (!producten)
|
|
93
|
+
throw new Error(TRAYSTICKER_GEEN_INDELING);
|
|
94
|
+
const c = obj(obj(cfg)["eigen_traysticker"]);
|
|
95
|
+
const aan = (v) => obj(c["velden"])[v] !== false;
|
|
96
|
+
const regel = (label, waarde) => `<div class="r"><b>${label}</b> ${esc(waarde)}</div>`;
|
|
97
|
+
const delen = [];
|
|
98
|
+
const kop = [];
|
|
99
|
+
if (aan("logo") && bedrijf.logoSrc)
|
|
100
|
+
kop.push(`<img class="logo" src="${bedrijf.logoSrc}" alt="">`);
|
|
101
|
+
if (aan("bedrijfsnaam"))
|
|
102
|
+
kop.push(`<span class="bn">${esc(bedrijf.naam)}</span>`);
|
|
103
|
+
if (kop.length)
|
|
104
|
+
delen.push(`<div class="kop">${kop.join("")}</div>`);
|
|
105
|
+
if (aan("klantnaam"))
|
|
106
|
+
delen.push(regel("Klant", p["klantnaam"] ?? p["customer_name"]));
|
|
107
|
+
if (aan("ordernummer"))
|
|
108
|
+
delen.push(regel("Order", p["order_number"] ?? p["ordernummer"]));
|
|
109
|
+
if (aan("leverdatum"))
|
|
110
|
+
delen.push(regel("Levering", p["leverdatum"] ?? p["delivery_date"]));
|
|
111
|
+
if (aan("afleverlocatie"))
|
|
112
|
+
delen.push(regel("Locatie", p["afleverlocatie"]));
|
|
113
|
+
if (aan("tray")) {
|
|
114
|
+
const n = tekst(p["tray_nummer"]);
|
|
115
|
+
const t = tekst(p["tray_totaal"]);
|
|
116
|
+
delen.push(`<div class="tray">${n || t ? `Fust ${esc(n)} van ${esc(t)}` : ""}</div>`);
|
|
117
|
+
}
|
|
118
|
+
if (aan("producten")) {
|
|
119
|
+
const rij = (x, cls = "") => `<tr${cls ? ` class="${cls}"` : ""}><td>${esc(x.artikelnummer)}</td><td>${esc(x.naam)}</td><td class="n">${esc(x.aantal)}</td></tr>`;
|
|
120
|
+
delen.push(`<table>${producten.map((x) => rij(x) + x.onderdelen.map((o) => rij(o, "od")).join("")).join("")}</table>`);
|
|
121
|
+
}
|
|
122
|
+
if (aan("barcode")) {
|
|
123
|
+
const w = trayBarcodeWaarde(p);
|
|
124
|
+
if (w)
|
|
125
|
+
delen.push(`<div class="bc">${code128BarsHtml(w)}</div><div class="bct">${esc(w)}</div>`);
|
|
126
|
+
}
|
|
127
|
+
return `<!doctype html><html><head><meta charset="utf-8"><style>@page{size:${maat.breedte_mm}mm ${maat.hoogte_mm}mm;margin:0}html,body{margin:0;padding:0}body{width:${maat.breedte_mm}mm;height:${maat.hoogte_mm}mm;box-sizing:border-box;padding:2mm;font:7pt Arial,sans-serif;overflow:hidden}.kop{display:flex;align-items:center;gap:2mm;margin-bottom:1mm}.logo{max-height:7mm;max-width:25mm}.bn{font-weight:bold;font-size:8pt}.r{line-height:1.25}.tray{font-weight:bold;font-size:10pt;margin:1mm 0}table{width:100%;border-collapse:collapse}td{padding:0 1mm 0 0;vertical-align:top}.n{text-align:right;font-weight:bold}.od td{font-size:6pt;padding-left:2mm}.od .n{font-weight:normal}.bc{display:flex;height:8mm;margin-top:1mm}.bct{text-align:center;font-size:6pt}</style></head><body>${delen.join("")}</body></html>`;
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------- controlelijst
|
|
130
|
+
export const CONTROLELIJST_KOLOMMEN = [
|
|
131
|
+
{ veld: "karnummer", label: "Kar", standaard: true },
|
|
132
|
+
{ veld: "kar_volgnummer", label: "Kar x van y", standaard: false },
|
|
133
|
+
{ veld: "klaarzetten_tekst", label: "Klaarzetten", standaard: true },
|
|
134
|
+
{ veld: "klantnaam", label: "Klant", standaard: true },
|
|
135
|
+
{ veld: "ordernummers", label: "Order(s)", standaard: true },
|
|
136
|
+
{ veld: "fusten", label: "Fusten", standaard: false },
|
|
137
|
+
{ veld: "land", label: "Land", standaard: false },
|
|
138
|
+
{ veld: "klaarzetten_datum", label: "Klaarzetdatum", standaard: false },
|
|
139
|
+
{ veld: "klaarzetten_tijd", label: "Klaarzettijd", standaard: false },
|
|
140
|
+
{ veld: "ophaal_datum", label: "Ophaaldatum", standaard: false },
|
|
141
|
+
{ veld: "ophaal_tijd", label: "Ophaaltijd", standaard: false },
|
|
142
|
+
{ veld: "leverdatum", label: "Leverdatum", standaard: false },
|
|
143
|
+
{ veld: "pickdag", label: "Pickdag", standaard: false },
|
|
144
|
+
{ veld: "oorspronkelijke_pickdag", label: "Oorspr. pickdag", standaard: false },
|
|
145
|
+
{ veld: "status", label: "Status (code)", standaard: false },
|
|
146
|
+
{ veld: "status_tekst", label: "Status", standaard: true },
|
|
147
|
+
{ veld: "geprint", label: "Geprint", standaard: false },
|
|
148
|
+
{ veld: "geprint_om", label: "Geprint om", standaard: false },
|
|
149
|
+
];
|
|
150
|
+
export const CONTROLELIJST_STANDAARD_KOLOMMEN = CONTROLELIJST_KOLOMMEN.filter((k) => k.standaard).map((k) => k.veld);
|
|
151
|
+
function karWaarde(kar, veld) {
|
|
152
|
+
if (veld === "ordernummers")
|
|
153
|
+
return Array.isArray(kar[veld]) ? kar[veld].map(tekst).filter(Boolean).join(", ") : tekst(kar[veld]);
|
|
154
|
+
if (veld === "kar_volgnummer") {
|
|
155
|
+
const a = tekst(kar["kar_volgnummer"]);
|
|
156
|
+
const b = tekst(kar["kar_totaal"]);
|
|
157
|
+
return a || b ? `${a} van ${b}` : "";
|
|
158
|
+
}
|
|
159
|
+
if (veld === "geprint")
|
|
160
|
+
return kar[veld] === true ? "Ja" : kar[veld] === false ? "Nee" : "";
|
|
161
|
+
return tekst(kar[veld]);
|
|
162
|
+
}
|
|
163
|
+
export function controlelijstKolommen(cfg) {
|
|
164
|
+
const k = obj(obj(cfg)["controlelijst"])["kolommen"];
|
|
165
|
+
const bekend = new Set(CONTROLELIJST_KOLOMMEN.map((x) => x.veld));
|
|
166
|
+
const lijst = Array.isArray(k) ? k.map(String).filter((v) => bekend.has(v)) : [];
|
|
167
|
+
return lijst.length ? lijst : CONTROLELIJST_STANDAARD_KOLOMMEN;
|
|
168
|
+
}
|
|
169
|
+
export function controlelijstHtml(payload, cfg) {
|
|
170
|
+
const p = obj(payload);
|
|
171
|
+
const c = obj(obj(cfg)["controlelijst"]);
|
|
172
|
+
const kop = tekst(c["kop"]) || "Controlelijst karren";
|
|
173
|
+
const kolommen = controlelijstKolommen(cfg);
|
|
174
|
+
const labels = new Map(CONTROLELIJST_KOLOMMEN.map((k) => [k.veld, k.label]));
|
|
175
|
+
const karren = Array.isArray(p["karren"]) ? p["karren"].map(obj) : [];
|
|
176
|
+
const voet = Array.isArray(c["voet"]) ? c["voet"].map(tekst) : ["Gecontroleerd door", "Datum en tijd", "Handtekening"];
|
|
177
|
+
return `<!doctype html><html><head><meta charset="utf-8"><style>@page{size:A4;margin:12mm}body{font:10pt Arial,sans-serif;margin:0}h1{font-size:16pt;margin:0 0 2mm}.sub{color:#444;margin-bottom:5mm}table{width:100%;border-collapse:collapse}th,td{border:1px solid #999;padding:1.5mm 2mm;text-align:left;vertical-align:top}th{background:#eee}.voet{display:flex;gap:6mm;margin-top:12mm}.voet div{flex:1;border-top:1px solid #000;padding-top:1mm;font-size:9pt}</style></head><body><h1>${esc(kop)}</h1><div class="sub">${esc(p["documentdatum_tekst"])}${tekst(p["totaal_karren"]) ? ` · ${esc(p["totaal_karren"])} karren` : ""}</div><table><thead><tr>${kolommen
|
|
178
|
+
.map((k) => `<th>${esc(labels.get(k))}</th>`)
|
|
179
|
+
.join("")}</tr></thead><tbody>${karren
|
|
180
|
+
.map((kar) => `<tr>${kolommen.map((k) => `<td>${esc(karWaarde(kar, k))}</td>`).join("")}</tr>`)
|
|
181
|
+
.join("")}</tbody></table><div class="voet">${voet.map((v) => `<div>${esc(v)}</div>`).join("")}</div></body></html>`;
|
|
182
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
import { type EigenStickerMaat } from "./eigenDocumenten.js";
|
|
2
3
|
type Job = Record<string, any>;
|
|
3
4
|
/** De databaseclient die de shell aanlevert. De module maakt er zelf nooit een. */
|
|
4
5
|
export type PrintDb = SupabaseClient<any, any, any>;
|
|
@@ -70,6 +71,11 @@ export declare function stickerAfbeeldingUitPayload(payload: unknown): {
|
|
|
70
71
|
bucket: string;
|
|
71
72
|
pad: string;
|
|
72
73
|
} | null;
|
|
74
|
+
/**
|
|
75
|
+
* Werkelijke maat van een eigen sticker: opdracht → customer_product_stickers →
|
|
76
|
+
* customer_sticker_settings (klant) → paginamaat van een PDF-bestand. Anders null.
|
|
77
|
+
*/
|
|
78
|
+
export declare function zoekEigenStickerMaat(db: PrintDb, payload: Job): Promise<EigenStickerMaat | null>;
|
|
73
79
|
export declare function bouwHtml(db: PrintDb, job: Job, keuze: LayoutKeuze, uitkomst?: BronUitkomst): Promise<string>;
|
|
74
80
|
/**
|
|
75
81
|
* Controleert of het document echt iets afdrukt. Zonder deze controle kan een
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ 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
16
|
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";
|
|
17
18
|
import { OPMAAK_LIMIET_MS, OpmaakTeLangFout, metTijdslimiet } from "./opmaakLimiet.js";
|
|
18
19
|
import { stuurPdfNaarPrinter, opdrachtStatusDetail, vervaltijdVoor } from "./printService.server.js";
|
|
19
20
|
import { kiesPapier } from "./papierFormaten.js";
|
|
@@ -825,6 +826,59 @@ export function stickerAfbeeldingUitPayload(payload) {
|
|
|
825
826
|
const pad = typeof a?.["pad"] === "string" ? a["pad"].trim() : "";
|
|
826
827
|
return bucket && pad ? { bucket, pad } : null;
|
|
827
828
|
}
|
|
829
|
+
/**
|
|
830
|
+
* Werkelijke maat van een eigen sticker: opdracht → customer_product_stickers →
|
|
831
|
+
* customer_sticker_settings (klant) → paginamaat van een PDF-bestand. Anders null.
|
|
832
|
+
*/
|
|
833
|
+
export async function zoekEigenStickerMaat(db, payload) {
|
|
834
|
+
const direct = eigenStickerMaat(payload, null);
|
|
835
|
+
if (direct)
|
|
836
|
+
return direct;
|
|
837
|
+
const id = eigenStickerId(payload);
|
|
838
|
+
const bron = stickerAfbeeldingUitPayload(payload);
|
|
839
|
+
let rij = null;
|
|
840
|
+
if (id) {
|
|
841
|
+
const r = await db.from("customer_product_stickers").select("width_mm, height_mm, customer_key").eq("id", id).maybeSingle();
|
|
842
|
+
rij = r.data;
|
|
843
|
+
}
|
|
844
|
+
else if (bron?.pad) {
|
|
845
|
+
const r = await db.from("customer_product_stickers").select("width_mm, height_mm, customer_key").eq("file_path", bron.pad).limit(1).maybeSingle();
|
|
846
|
+
rij = r.data;
|
|
847
|
+
}
|
|
848
|
+
const viaSticker = eigenStickerMaat(payload, rij);
|
|
849
|
+
if (viaSticker)
|
|
850
|
+
return viaSticker;
|
|
851
|
+
let klantRij = null;
|
|
852
|
+
const klant = eigenStickerKlant(payload, rij);
|
|
853
|
+
if (klant) {
|
|
854
|
+
const r = await db.from("customer_sticker_settings").select("width_mm, height_mm").eq("customer_key", klant).maybeSingle();
|
|
855
|
+
klantRij = r.data;
|
|
856
|
+
}
|
|
857
|
+
const viaKlant = eigenStickerMaat(payload, rij, klantRij);
|
|
858
|
+
if (viaKlant)
|
|
859
|
+
return viaKlant;
|
|
860
|
+
// Laatste stap: alleen een echt PDF-bestand levert een paginamaat.
|
|
861
|
+
let pdfMaat = null;
|
|
862
|
+
if (bron) {
|
|
863
|
+
try {
|
|
864
|
+
const { data } = await db
|
|
865
|
+
.storage.from(bron.bucket).download(bron.pad);
|
|
866
|
+
if (data) {
|
|
867
|
+
const bytes = new Uint8Array(await data.arrayBuffer());
|
|
868
|
+
if (bytes[0] === 0x25 && bytes[1] === 0x50 && bytes[2] === 0x44 && bytes[3] === 0x46) {
|
|
869
|
+
let ruw = "";
|
|
870
|
+
for (let i = 0; i < bytes.length; i += 8192)
|
|
871
|
+
ruw += String.fromCharCode(...bytes.subarray(i, i + 8192));
|
|
872
|
+
pdfMaat = pdfPaginaMm(btoa(ruw));
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
catch {
|
|
877
|
+
pdfMaat = null;
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
return eigenStickerMaat(payload, rij, klantRij, pdfMaat);
|
|
881
|
+
}
|
|
828
882
|
async function eigenStickerHtml(db, p, breedteMm, hoogteMm) {
|
|
829
883
|
const bron = stickerAfbeeldingUitPayload(p);
|
|
830
884
|
if (!bron) {
|
|
@@ -875,12 +929,37 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
875
929
|
const hoogteMm = liggend ? b : h;
|
|
876
930
|
const cfg = (layout.config ?? {});
|
|
877
931
|
// Eigen sticker (fs.eigen_sticker): tekent de afbeelding uit
|
|
878
|
-
// payload.sticker_afbeelding = { bucket, pad } op
|
|
932
|
+
// payload.sticker_afbeelding = { bucket, pad } op haar WERKELIJKE maat
|
|
933
|
+
// (nooit de layoutmaat; een sticker wordt nooit geschaald).
|
|
879
934
|
if (cfg.eigen_sticker && typeof cfg.eigen_sticker === "object") {
|
|
880
|
-
const
|
|
935
|
+
const maat = await zoekEigenStickerMaat(db, p);
|
|
936
|
+
if (!maat)
|
|
937
|
+
throw new GeenDocumentFout(EIGEN_STICKER_MAAT_ONBEKEND);
|
|
938
|
+
const html = await eigenStickerHtml(db, p, maat.breedte_mm, maat.hoogte_mm);
|
|
881
939
|
noteer("eigen_layout");
|
|
882
940
|
return html;
|
|
883
941
|
}
|
|
942
|
+
// Eigen traysticker (fs.eigen_traysticker): één sticker per tray.
|
|
943
|
+
if (cfg.eigen_traysticker && typeof cfg.eigen_traysticker === "object") {
|
|
944
|
+
if (!trayProducten(p))
|
|
945
|
+
throw new WachtOpLayoutFout(TRAYSTICKER_GEEN_INDELING);
|
|
946
|
+
const inst = await bedrijfsInstelling(db).catch(() => null);
|
|
947
|
+
const pb = (p.bedrijf ?? {});
|
|
948
|
+
const naam = String(pb.naam ?? inst?.naam ?? "");
|
|
949
|
+
let bedrijfsLogo = null;
|
|
950
|
+
if (!kiesTraystickerLogo(p.logo_url, null) && inst?.logoId) {
|
|
951
|
+
const logos = await logosVoor(db, { config: { logo: { logoId: inst.logoId } } }).catch(() => []);
|
|
952
|
+
bedrijfsLogo = logos.find((l) => l.id === inst.logoId)?.viewUrl ?? null;
|
|
953
|
+
}
|
|
954
|
+
const logoSrc = kiesTraystickerLogo(p.logo_url, bedrijfsLogo);
|
|
955
|
+
noteer("eigen_layout");
|
|
956
|
+
return traystickerHtml(p, cfg, { breedte_mm: breedteMm, hoogte_mm: hoogteMm }, { naam, logoSrc });
|
|
957
|
+
}
|
|
958
|
+
// Controlelijst (fs.controlelijst): A4, tabel uit payload.karren.
|
|
959
|
+
if (cfg.controlelijst && typeof cfg.controlelijst === "object") {
|
|
960
|
+
noteer("eigen_layout");
|
|
961
|
+
return controlelijstHtml(p, cfg);
|
|
962
|
+
}
|
|
884
963
|
// Stickers met "kies altijd de layout van de klant": meegestuurde opmaak van
|
|
885
964
|
// de klant wint. Is er niets meegestuurd, dan bepaalt de terugvalkeuze of we
|
|
886
965
|
// deze layout gebruiken of de opdracht netjes laten mislukken.
|
|
@@ -1496,6 +1575,15 @@ async function verwerkJob(db, job) {
|
|
|
1496
1575
|
throw new GeenDocumentFout(STICKER_MAAT_ONBEKEND);
|
|
1497
1576
|
await faseLog(db, job.id, "sticker_maat", { bron: stickerMaat.bron, breedte_mm: stickerMaat.breedte_mm, hoogte_mm: stickerMaat.hoogte_mm });
|
|
1498
1577
|
}
|
|
1578
|
+
else if (!klaar && layout?.config?.eigen_sticker) {
|
|
1579
|
+
// Eigen sticker: werkelijke maat van de geüploade sticker; die kiest de
|
|
1580
|
+
// printer en gaat door de etiketcontrole. Onbekend = niet printen.
|
|
1581
|
+
const m = await zoekEigenStickerMaat(db, (job.payload ?? {}));
|
|
1582
|
+
if (!m)
|
|
1583
|
+
throw new GeenDocumentFout(EIGEN_STICKER_MAAT_ONBEKEND);
|
|
1584
|
+
stickerMaat = { breedte_mm: m.breedte_mm, hoogte_mm: m.hoogte_mm, bron: "eigen" };
|
|
1585
|
+
await faseLog(db, job.id, "sticker_maat", { bron: `eigen_${m.bron}`, breedte_mm: m.breedte_mm, hoogte_mm: m.hoogte_mm });
|
|
1586
|
+
}
|
|
1499
1587
|
const printerKeuze = await zoekPrinter(db, job, layout);
|
|
1500
1588
|
if (stickerMaat) {
|
|
1501
1589
|
const viaFormaat = await printerVoorStickerFormaat(db, String(job.documenttype), stickerMaat);
|
|
@@ -22,10 +22,11 @@ export declare function zorgVoorStandaardLayoutsMetStatus(db: Db): Promise<{
|
|
|
22
22
|
schemaOntbreekt: boolean;
|
|
23
23
|
}>;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* 1.69.2: bedrijfsgegevens worden NIET meer automatisch gevuld (niet uit
|
|
26
|
+
* Floriday, niet uit de factuurgegevens): niet elke Shell koppelt Floriday.
|
|
27
|
+
* Bestaande waarden blijven staan. Invullen gebeurt op de instellingenkaart
|
|
28
|
+
* (met de knop "Overnemen uit factuurgegevens"). Raakt de database niet.
|
|
28
29
|
*/
|
|
29
|
-
export declare function zorgVoorBedrijfsgegevens(
|
|
30
|
+
export declare function zorgVoorBedrijfsgegevens(_db: Db): Promise<boolean>;
|
|
30
31
|
export {};
|
|
31
32
|
//# 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;
|
|
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,CAOrH;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE"}
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
// alleen als er geen enkele actieve eigen layout van die soort is;
|
|
9
9
|
// - precies één actieve layout zonder standaard → standaard (gelogd);
|
|
10
10
|
// - standaardprinter alleen als het eenduidig is (gelogd).
|
|
11
|
-
//
|
|
11
|
+
// Bedrijfsgegevens worden sinds 1.69.2 niet meer automatisch voorgevuld.
|
|
12
12
|
// ============================================================================
|
|
13
|
-
import { BEDRIJFSGEGEVENS_SLEUTEL, voorinvulBesluit } from "./bedrijfsgegevens.js";
|
|
14
13
|
import { STANDAARDEN_BRON } from "./standaardenBron.js";
|
|
15
14
|
export const SCHEMA_ONTBREEKT_MELDING = "Het schema van Layouts is nog niet gedraaid in deze database. Laat de schema-update van Layouts uitvoeren; tot die tijd worden Pakbon, Afleverbrief (BVO) en Productiebon niet automatisch aangemaakt.";
|
|
16
15
|
/** Tabel of kolom bestaat niet (Postgres of PostgREST). */
|
|
@@ -59,44 +58,15 @@ export async function zorgVoorStandaardLayoutsMetStatus(db) {
|
|
|
59
58
|
const { data, error: rpcFout } = await db.rpc("layout_zorg_systeemlayouts");
|
|
60
59
|
if (rpcFout)
|
|
61
60
|
throw new Error(`Standaardlayouts controleren mislukt: ${rpcFout.message}`);
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
if (await zorgVoorBedrijfsgegevens(db))
|
|
65
|
-
aantal += 1;
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
/* voorinvullen is een gemak; nooit de aanvulronde laten mislukken */
|
|
69
|
-
}
|
|
61
|
+
const aantal = Number(data ?? 0) || 0;
|
|
70
62
|
return { aantal, schemaOntbreekt: false };
|
|
71
63
|
}
|
|
72
64
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
65
|
+
* 1.69.2: bedrijfsgegevens worden NIET meer automatisch gevuld (niet uit
|
|
66
|
+
* Floriday, niet uit de factuurgegevens): niet elke Shell koppelt Floriday.
|
|
67
|
+
* Bestaande waarden blijven staan. Invullen gebeurt op de instellingenkaart
|
|
68
|
+
* (met de knop "Overnemen uit factuurgegevens"). Raakt de database niet.
|
|
76
69
|
*/
|
|
77
|
-
export async function zorgVoorBedrijfsgegevens(
|
|
78
|
-
|
|
79
|
-
.from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
|
|
80
|
-
if (error)
|
|
81
|
-
return false;
|
|
82
|
-
let floriday = null;
|
|
83
|
-
let factuur = null;
|
|
84
|
-
const f = await db.rpc("floriday_eigen_organisatie");
|
|
85
|
-
if (!f.error)
|
|
86
|
-
floriday = Array.isArray(f.data) ? f.data[0] : f.data;
|
|
87
|
-
const besluitZonderFactuur = voorinvulBesluit(rij?.value ?? null, floriday, null);
|
|
88
|
-
if (besluitZonderFactuur === "overslaan")
|
|
89
|
-
return false;
|
|
90
|
-
if (!besluitZonderFactuur) {
|
|
91
|
-
const fr = await db.from("invoice_branding_settings").select("*").limit(1).maybeSingle();
|
|
92
|
-
if (!fr.error)
|
|
93
|
-
factuur = fr.data;
|
|
94
|
-
}
|
|
95
|
-
const besluit = besluitZonderFactuur ?? voorinvulBesluit(rij?.value ?? null, null, factuur);
|
|
96
|
-
if (!besluit || besluit === "overslaan")
|
|
97
|
-
return false;
|
|
98
|
-
const { error: fout } = await db
|
|
99
|
-
.from("app_settings")
|
|
100
|
-
.upsert({ key: BEDRIJFSGEGEVENS_SLEUTEL, value: JSON.stringify(besluit) }, { onConflict: "key" });
|
|
101
|
-
return !fout;
|
|
70
|
+
export async function zorgVoorBedrijfsgegevens(_db) {
|
|
71
|
+
return false;
|
|
102
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standaardenBron.d.ts","sourceRoot":"","sources":["../../src/lib/standaardenBron.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"standaardenBron.d.ts","sourceRoot":"","sources":["../../src/lib/standaardenBron.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAgS3C,CAAC;AAMF,8GAA8G;AAC9G,wBAAgB,cAAc,IAAI,MAAM,CAevC"}
|
|
@@ -250,6 +250,48 @@ export const STANDAARDEN_BRON = [
|
|
|
250
250
|
"passend": "ware_grootte"
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"sleutel": "fs.eigen_traysticker",
|
|
256
|
+
"versie": 2,
|
|
257
|
+
"documenttype": "traysticker",
|
|
258
|
+
"naam": "Eigen traysticker",
|
|
259
|
+
"omschrijving": "Eén sticker per fust voor eigen orders: logo/bedrijfsnaam, klant, order, leverdatum, afleverlocatie, fust x van y, product met aantal planten per fust (en onderdelen) en barcode. Elk veld aan/uit te zetten.",
|
|
260
|
+
"papierformaat": "LABEL_100x62",
|
|
261
|
+
"breedte_mm": 100,
|
|
262
|
+
"hoogte_mm": 62,
|
|
263
|
+
"config": {
|
|
264
|
+
"eigen_traysticker": {
|
|
265
|
+
"velden": {
|
|
266
|
+
"logo": true,
|
|
267
|
+
"bedrijfsnaam": true,
|
|
268
|
+
"klantnaam": true,
|
|
269
|
+
"ordernummer": true,
|
|
270
|
+
"leverdatum": true,
|
|
271
|
+
"afleverlocatie": true,
|
|
272
|
+
"tray": true,
|
|
273
|
+
"producten": true,
|
|
274
|
+
"barcode": true
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"sleutel": "fs.controlelijst",
|
|
281
|
+
"versie": 1,
|
|
282
|
+
"documenttype": "controlelijst",
|
|
283
|
+
"naam": "Controlelijst karren",
|
|
284
|
+
"omschrijving": "Controlelijst van de karren (Afhandeling). Kop met datum en aantal karren, tabel per kar en een voet om af te tekenen. Kolommen aan/uit te zetten.",
|
|
285
|
+
"papierformaat": "A4",
|
|
286
|
+
"breedte_mm": 210,
|
|
287
|
+
"hoogte_mm": 297,
|
|
288
|
+
"config": {
|
|
289
|
+
"controlelijst": {
|
|
290
|
+
"kop": "Controlelijst karren",
|
|
291
|
+
"kolommen": ["karnummer", "klaarzetten_tekst", "klantnaam", "ordernummers", "status_tekst"],
|
|
292
|
+
"voet": ["Gecontroleerd door", "Datum en tijd", "Handtekening"]
|
|
293
|
+
}
|
|
294
|
+
}
|
|
253
295
|
}
|
|
254
296
|
];
|
|
255
297
|
function lit(s) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type StickerMaat = {
|
|
2
2
|
breedte_mm: number;
|
|
3
3
|
hoogte_mm: number;
|
|
4
|
-
bron: "floriday" | "pdf";
|
|
4
|
+
bron: "floriday" | "pdf" | "eigen";
|
|
5
5
|
};
|
|
6
6
|
/** Leest widthInMm/heightInMm uit de payload (ook genest onder sticker/customerSticker). */
|
|
7
7
|
export declare function floridayStickerMaat(payload: unknown): {
|
|
@@ -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;
|
|
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,GAAG,OAAO,CAAA;CAAE,CAAC;AAOxG,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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PAKKET_VERSIE = "1.69.
|
|
1
|
+
export declare const PAKKET_VERSIE = "1.69.5";
|
|
2
2
|
//# sourceMappingURL=versie.generated.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Gegenereerd door scripts/schrijf-versie.cjs uit package.json. Niet met de hand wijzigen.
|
|
2
|
-
export const PAKKET_VERSIE = "1.69.
|
|
2
|
+
export const PAKKET_VERSIE = "1.69.5";
|
|
@@ -26,6 +26,7 @@ export interface PrinterRij {
|
|
|
26
26
|
extern_printer_id: string | null;
|
|
27
27
|
ondersteunde_formaten: Record<string, number[]> | null;
|
|
28
28
|
geladen_etiket: GeladenEtiket | null;
|
|
29
|
+
soort?: string | null;
|
|
29
30
|
}
|
|
30
31
|
export declare const isVirtuelePrinter: (naam: string | null | undefined) => boolean;
|
|
31
32
|
/** De naam die we tonen: eigen naam van de beheerder, anders de technische. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"werkplekken.d.ts","sourceRoot":"","sources":["../../src/lib/werkplekken.ts"],"names":[],"mappings":"AASA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMzE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACvD,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"werkplekken.d.ts","sourceRoot":"","sources":["../../src/lib/werkplekken.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,7 +87,7 @@ export function usePrinterLijst() {
|
|
|
87
87
|
const load = useCallback(async () => {
|
|
88
88
|
const { data } = await db
|
|
89
89
|
.from("printers")
|
|
90
|
-
.select("id, naam, weergavenaam, systeemnaam, locatie, online, actief, verborgen, is_virtueel, extern_printer_id, ondersteunde_formaten, geladen_etiket")
|
|
90
|
+
.select("id, naam, weergavenaam, systeemnaam, locatie, online, actief, verborgen, is_virtueel, extern_printer_id, ondersteunde_formaten, geladen_etiket, soort")
|
|
91
91
|
.order("naam");
|
|
92
92
|
setPrinters(arr(data).map((p) => ({
|
|
93
93
|
...p,
|