@flowselections/layout-maker 1.69.10 → 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/eigenDocumenten.d.ts +2 -0
- package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -1
- package/dist-lib/lib/eigenDocumenten.js +22 -0
- 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 +18 -5
- 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 +11 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +158 -13
- package/dist-lib/lib/printService.server.d.ts.map +1 -1
- package/dist-lib/lib/printService.server.js +3 -2
- 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.js +1 -1
- 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 +1 -1
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
export type StickerSoort = "floriday_sticker" | "floriday_traysticker" | "klantsticker" | "eigen_sticker" | "eigen_traysticker";
|
|
2
|
+
import type { PrinterFormaten } from "./papierFormaten.js";
|
|
3
|
+
export declare const STICKER_SOORTEN: {
|
|
4
|
+
soort: StickerSoort;
|
|
5
|
+
label: string;
|
|
6
|
+
veilingbarcode: boolean;
|
|
7
|
+
}[];
|
|
8
|
+
export interface VerkleinInstelling {
|
|
9
|
+
toegestaan: boolean;
|
|
10
|
+
ondergrens_pct: number;
|
|
11
|
+
}
|
|
12
|
+
export type StickerInstellingen = Record<StickerSoort, VerkleinInstelling>;
|
|
13
|
+
/** Sleutel in app_settings. De standaardwaarden staan alleen hieronder. */
|
|
14
|
+
export declare const STICKER_INSTELLING_SLEUTEL = "layouts.sticker_verkleinen";
|
|
15
|
+
/** Printplekken (ids, JSON-lijst) waar een A4-stickervel in de A4-printer ligt. */
|
|
16
|
+
/** @deprecated 1.69.12: vervangen door print_plekken.a4_stickervel; alleen nog voor de overname. */
|
|
17
|
+
export declare const A4_STICKERVEL_SLEUTEL = "layouts.a4_stickervel_plekken";
|
|
18
|
+
/** De enige plek met de standaardwaarden: aan, 90% met veilingbarcode, anders 85%. */
|
|
19
|
+
export declare function standaardStickerInstellingen(): StickerInstellingen;
|
|
20
|
+
/** Leest de opgeslagen waarde (tekst of object); ontbrekende soorten krijgen de standaard. */
|
|
21
|
+
export declare function leesStickerInstellingen(v: unknown): StickerInstellingen;
|
|
22
|
+
/**
|
|
23
|
+
* Strikt lezen (1.69.12): alleen een volledige instelling voor alle soorten
|
|
24
|
+
* telt; anders null. Geen aanvulling met standaardwaarden uit de code — die
|
|
25
|
+
* staan alleen in de databasefunctie layouts_zorg_voor_sticker_verkleinen.
|
|
26
|
+
*/
|
|
27
|
+
export declare function leesStickerInstellingenStrikt(v: unknown): StickerInstellingen | null;
|
|
28
|
+
/** Vaste velindelingen op A4 (210 × 297 mm) voor gangbare stickermaten. */
|
|
29
|
+
export interface Velindeling {
|
|
30
|
+
breedte_mm: number;
|
|
31
|
+
hoogte_mm: number;
|
|
32
|
+
kolommen: number;
|
|
33
|
+
rijen: number;
|
|
34
|
+
/** Alleen bij een eigen vel: vaste randen en tussenruimtes (mm). */
|
|
35
|
+
marge_boven_mm?: number;
|
|
36
|
+
marge_links_mm?: number;
|
|
37
|
+
tussen_h_mm?: number;
|
|
38
|
+
tussen_v_mm?: number;
|
|
39
|
+
}
|
|
40
|
+
export declare const A4_VELINDELINGEN: Velindeling[];
|
|
41
|
+
/** Gangbare etiketmaten (ook voor de varianten van eigen stickers). */
|
|
42
|
+
export declare const GANGBARE_ETIKETMATEN: {
|
|
43
|
+
breedte_mm: number;
|
|
44
|
+
hoogte_mm: number;
|
|
45
|
+
}[];
|
|
46
|
+
export declare function velindelingVoor(b: number, h: number): Velindeling | null;
|
|
47
|
+
export type Uitwijkroute = "precies" | "gedraaid" | "groter_etiket" | "verkleind" | "a4_vel" | "a4_snijlijnen";
|
|
48
|
+
export interface EtiketKandidaat {
|
|
49
|
+
printerNaam: string;
|
|
50
|
+
printerId?: string;
|
|
51
|
+
/** Naam van het formaat zoals eerder ingesteld; alleen gebruikt als `formaten` onbekend is. */
|
|
52
|
+
paper: string;
|
|
53
|
+
breedte_mm: number;
|
|
54
|
+
hoogte_mm: number;
|
|
55
|
+
/** Resolutie van de printer; onbekend = 203 dpi (gangbare labelprinter). */
|
|
56
|
+
dpi?: number | null;
|
|
57
|
+
/**
|
|
58
|
+
* Papiermaten die PrintNode voor deze printer meldt (naam -> [b, h] in 0,1 mm).
|
|
59
|
+
* Gegeven (ook null) = de papiernaam wordt op afmeting (±1 mm) gekozen; geen
|
|
60
|
+
* passende maat = dit etiket telt als niet passend. Weggelaten = niet gecontroleerd.
|
|
61
|
+
*/
|
|
62
|
+
formaten?: PrinterFormaten | null;
|
|
63
|
+
}
|
|
64
|
+
export interface UitwijkUitkomst {
|
|
65
|
+
uitwijkroute: Uitwijkroute;
|
|
66
|
+
printerNaam: string;
|
|
67
|
+
printerId?: string;
|
|
68
|
+
/** 1 = ware grootte. Nooit groter dan 1. */
|
|
69
|
+
schaal: number;
|
|
70
|
+
/** In gewone taal, bijvoorbeeld "Geprint op 50×50 in plaats van 50×40, 1-op-1 gecentreerd". */
|
|
71
|
+
reden: string;
|
|
72
|
+
/** Papiernaam voor PrintNode (op afmeting gekozen) of "A4". */
|
|
73
|
+
paper: string;
|
|
74
|
+
/** Draaiing van de sticker binnen de PDF; naar PrintNode gaat altijd rotate 0. */
|
|
75
|
+
rotate: 0 | 90;
|
|
76
|
+
/** Altijd false: de printer of driver mag nooit zelf schalen (1.69.12). */
|
|
77
|
+
fitToPage: false;
|
|
78
|
+
/** Maat van de PDF-pagina = het geladen etiket of A4. */
|
|
79
|
+
pagina_breedte_mm: number;
|
|
80
|
+
pagina_hoogte_mm: number;
|
|
81
|
+
/** Maat van de sticker zelf (voor het voorbeeld in de wachtrij). */
|
|
82
|
+
sticker_breedte_mm: number;
|
|
83
|
+
sticker_hoogte_mm: number;
|
|
84
|
+
/** Alleen bij a4_vel: de gebruikte velindeling (eigen vel of standaard). */
|
|
85
|
+
velindeling?: Velindeling;
|
|
86
|
+
}
|
|
87
|
+
/** Tolerantie bij het herkennen van een papiermaat van de printer. */
|
|
88
|
+
export declare const PAPIER_TOLERANTIE_MM = 1;
|
|
89
|
+
/** Papiernaam op afmeting (±1 mm, ook gedraaid) uit de PrintNode-lijst; null als er geen is. */
|
|
90
|
+
export declare function papierOpMaat(formaten: PrinterFormaten | null | undefined, b: number, h: number): string | null;
|
|
91
|
+
/** Nominale smalste streep van een Code128/veilingbarcode op ware grootte. */
|
|
92
|
+
export declare const NOMINALE_STREEP_MM = 0.33;
|
|
93
|
+
/** Minimaal 2 printerpunten per smalste streep. */
|
|
94
|
+
export declare function barcodeLeesbaar(schaal: number, dpi: number | null | undefined, streep_mm?: number): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Kiest de uitwijkroute, vaste volgorde:
|
|
97
|
+
* 1. precies passend etiket; 2. hetzelfde etiket gedraaid;
|
|
98
|
+
* 3. groter etiket 1-op-1 gecentreerd, en pas als geen etiket groot genoeg
|
|
99
|
+
* is: verkleinen (verhouding gelijk, ondergrens, barcode leesbaar);
|
|
100
|
+
* 4. A4-stickervel; 5. A4 met snijlijnen.
|
|
101
|
+
* Geeft null alleen als er helemaal geen printer is.
|
|
102
|
+
*/
|
|
103
|
+
export declare function kiesUitwijkroute(input: {
|
|
104
|
+
sticker: {
|
|
105
|
+
breedte_mm: number;
|
|
106
|
+
hoogte_mm: number;
|
|
107
|
+
};
|
|
108
|
+
etiketten: EtiketKandidaat[];
|
|
109
|
+
a4Printer: {
|
|
110
|
+
naam: string;
|
|
111
|
+
id?: string;
|
|
112
|
+
} | null;
|
|
113
|
+
/** Er ligt een A4-stickervel klaar (instelling per printplek). */
|
|
114
|
+
a4VelIngesteld: boolean;
|
|
115
|
+
/** Velindeling van de printplek (a4VelVoor); weggelaten = standaardlijst. */
|
|
116
|
+
a4VelIndeling?: Velindeling | null;
|
|
117
|
+
/** null = instelling niet leesbaar: alleen de stap verkleinen vervalt. */
|
|
118
|
+
instelling: VerkleinInstelling | null;
|
|
119
|
+
heeftBarcode?: boolean;
|
|
120
|
+
}): UitwijkUitkomst | null;
|
|
121
|
+
/** Instelling per printplek (print_plekken.a4_stickervel). Zonder maat = elke vaste velindeling. */
|
|
122
|
+
export interface A4Stickervel {
|
|
123
|
+
aanwezig: boolean;
|
|
124
|
+
breedte_mm?: number;
|
|
125
|
+
hoogte_mm?: number;
|
|
126
|
+
marge_boven_mm?: number;
|
|
127
|
+
marge_links_mm?: number;
|
|
128
|
+
tussen_h_mm?: number;
|
|
129
|
+
tussen_v_mm?: number;
|
|
130
|
+
}
|
|
131
|
+
/** Voorstelwaarden voor een eigen vel op de kaart A4-stickervel (alleen invulhulp). */
|
|
132
|
+
export declare const EIGEN_VEL_VOORSTEL: {
|
|
133
|
+
marge_boven_mm: number;
|
|
134
|
+
marge_links_mm: number;
|
|
135
|
+
tussen_h_mm: number;
|
|
136
|
+
tussen_v_mm: number;
|
|
137
|
+
};
|
|
138
|
+
export declare function leesA4StickervelWaarde(v: unknown): A4Stickervel | null;
|
|
139
|
+
/**
|
|
140
|
+
* Velindeling voor deze sticker op deze printplek. Een eigen vel (met maat)
|
|
141
|
+
* gaat altijd vóór de standaardlijst; past de sticker daar niet op, dan geen
|
|
142
|
+
* vel (dus A4 met snijlijnen), nooit schalen. Zonder eigen maat: standaardlijst.
|
|
143
|
+
*/
|
|
144
|
+
export declare function a4VelVoor(vel: A4Stickervel | null, sticker: {
|
|
145
|
+
breedte_mm: number;
|
|
146
|
+
hoogte_mm: number;
|
|
147
|
+
}): Velindeling | null;
|
|
148
|
+
/** Ligt er op deze printplek een vel dat bij deze stickermaat hoort? */
|
|
149
|
+
export declare function a4VelPast(vel: A4Stickervel | null, sticker: {
|
|
150
|
+
breedte_mm: number;
|
|
151
|
+
hoogte_mm: number;
|
|
152
|
+
}): boolean;
|
|
153
|
+
/** Papiermaat-waarschuwing per etiket (voor Printplekken en install_check). */
|
|
154
|
+
export declare function papierWaarschuwingen(etiketten: EtiketKandidaat[]): string[];
|
|
155
|
+
/** Vastgelegde uitkomst met precies de veldnamen die Pickschermen 1.0.61 leest. */
|
|
156
|
+
export declare function uitwijkVoorPickschermen(u: UitwijkUitkomst): {
|
|
157
|
+
uitwijkroute: Uitwijkroute;
|
|
158
|
+
printerNaam: string;
|
|
159
|
+
schaal: number;
|
|
160
|
+
reden: string;
|
|
161
|
+
};
|
|
162
|
+
/** Overzicht per printplek: hoe elke gangbare maat geprint wordt (waarschuwing, geen blokkade). */
|
|
163
|
+
export declare function stickerMatenOverzicht(etiketten: EtiketKandidaat[], a4Printer: {
|
|
164
|
+
naam: string;
|
|
165
|
+
} | null, a4VelIngesteld: boolean, instelling: VerkleinInstelling, maten?: {
|
|
166
|
+
breedte_mm: number;
|
|
167
|
+
hoogte_mm: number;
|
|
168
|
+
}[]): {
|
|
169
|
+
maat: string;
|
|
170
|
+
uitkomst: UitwijkUitkomst | null;
|
|
171
|
+
}[];
|
|
172
|
+
/**
|
|
173
|
+
* Vroege waarschuwing: vergelijkt per dag en printplek de benodigde
|
|
174
|
+
* stickermaten (aangeleverd door Engine/Pickschermen) met de aanwezige
|
|
175
|
+
* etiketten. Alleen maten die niet precies of gedraaid passen komen terug.
|
|
176
|
+
*/
|
|
177
|
+
export declare function vroegeStickerWaarschuwing(nodig: {
|
|
178
|
+
dag: string;
|
|
179
|
+
print_plek_id: string;
|
|
180
|
+
breedte_mm: number;
|
|
181
|
+
hoogte_mm: number;
|
|
182
|
+
aantal?: number;
|
|
183
|
+
}[], perPlek: Map<string, {
|
|
184
|
+
etiketten: EtiketKandidaat[];
|
|
185
|
+
a4Printer: {
|
|
186
|
+
naam: string;
|
|
187
|
+
} | null;
|
|
188
|
+
a4VelIngesteld: boolean;
|
|
189
|
+
}>, instelling: VerkleinInstelling): {
|
|
190
|
+
dag: string;
|
|
191
|
+
print_plek_id: string;
|
|
192
|
+
maat: string;
|
|
193
|
+
aantal: number;
|
|
194
|
+
uitwijkroute: Uitwijkroute | "geen_printer";
|
|
195
|
+
reden: string;
|
|
196
|
+
}[];
|
|
197
|
+
//# sourceMappingURL=stickerUitwijk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stickerUitwijk.d.ts","sourceRoot":"","sources":["../../src/lib/stickerUitwijk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/stickerUitwijk.ts — stickers worden ALTIJD geprint, op het best
|
|
3
|
+
// passende etiket (1.69.11). Vervangt "nooit schalen; past niet = weigeren".
|
|
4
|
+
//
|
|
5
|
+
// Volgorde per sticker:
|
|
6
|
+
// a. precies passend etiket → "precies"
|
|
7
|
+
// b. 90° gedraaid passend → "gedraaid"
|
|
8
|
+
// c. best passend, kleinste afwijking:
|
|
9
|
+
// - groter etiket: 1-op-1 gecentreerd, nooit vergroten → "groter_etiket"
|
|
10
|
+
// - kleiner etiket: verkleinen met behoud van verhouding, alleen als het
|
|
11
|
+
// voor deze soort aan staat, binnen de ondergrens en met leesbare
|
|
12
|
+
// barcode → "verkleind"
|
|
13
|
+
// d. 1-op-1 op een A4-stickervel op de A4-printer → "a4_vel"
|
|
14
|
+
// e. geen vel ingesteld: 1-op-1 op gewoon A4 met snijlijnen → "a4_snijlijnen"
|
|
15
|
+
// Nooit uitrekken, nooit overslaan. Eén functie voor wachtrij, voorbeeld,
|
|
16
|
+
// Printen/Printplekken en de install_check.
|
|
17
|
+
// ============================================================================
|
|
18
|
+
export const STICKER_SOORTEN = [
|
|
19
|
+
{ soort: "floriday_sticker", label: "Floriday-sticker", veilingbarcode: true },
|
|
20
|
+
{ soort: "floriday_traysticker", label: "Floriday-traysticker", veilingbarcode: true },
|
|
21
|
+
{ soort: "klantsticker", label: "Klantsticker", veilingbarcode: false },
|
|
22
|
+
{ soort: "eigen_sticker", label: "Eigen sticker", veilingbarcode: false },
|
|
23
|
+
{ soort: "eigen_traysticker", label: "Eigen traysticker", veilingbarcode: false },
|
|
24
|
+
];
|
|
25
|
+
/** Sleutel in app_settings. De standaardwaarden staan alleen hieronder. */
|
|
26
|
+
export const STICKER_INSTELLING_SLEUTEL = "layouts.sticker_verkleinen";
|
|
27
|
+
/** Printplekken (ids, JSON-lijst) waar een A4-stickervel in de A4-printer ligt. */
|
|
28
|
+
/** @deprecated 1.69.12: vervangen door print_plekken.a4_stickervel; alleen nog voor de overname. */
|
|
29
|
+
export const A4_STICKERVEL_SLEUTEL = "layouts.a4_stickervel_plekken";
|
|
30
|
+
/** De enige plek met de standaardwaarden: aan, 90% met veilingbarcode, anders 85%. */
|
|
31
|
+
export function standaardStickerInstellingen() {
|
|
32
|
+
const uit = {};
|
|
33
|
+
for (const s of STICKER_SOORTEN)
|
|
34
|
+
uit[s.soort] = { toegestaan: true, ondergrens_pct: s.veilingbarcode ? 90 : 85 };
|
|
35
|
+
return uit;
|
|
36
|
+
}
|
|
37
|
+
/** Leest de opgeslagen waarde (tekst of object); ontbrekende soorten krijgen de standaard. */
|
|
38
|
+
export function leesStickerInstellingen(v) {
|
|
39
|
+
let o = v;
|
|
40
|
+
if (typeof v === "string") {
|
|
41
|
+
try {
|
|
42
|
+
o = JSON.parse(v);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
o = null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const basis = standaardStickerInstellingen();
|
|
49
|
+
if (!o || typeof o !== "object")
|
|
50
|
+
return basis;
|
|
51
|
+
for (const s of STICKER_SOORTEN) {
|
|
52
|
+
const r = o[s.soort];
|
|
53
|
+
if (!r || typeof r !== "object")
|
|
54
|
+
continue;
|
|
55
|
+
const t = r.toegestaan;
|
|
56
|
+
const g = Number(r.ondergrens_pct);
|
|
57
|
+
basis[s.soort] = {
|
|
58
|
+
toegestaan: typeof t === "boolean" ? t : basis[s.soort].toegestaan,
|
|
59
|
+
ondergrens_pct: g > 0 && g <= 100 ? g : basis[s.soort].ondergrens_pct,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return basis;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Strikt lezen (1.69.12): alleen een volledige instelling voor alle soorten
|
|
66
|
+
* telt; anders null. Geen aanvulling met standaardwaarden uit de code — die
|
|
67
|
+
* staan alleen in de databasefunctie layouts_zorg_voor_sticker_verkleinen.
|
|
68
|
+
*/
|
|
69
|
+
export function leesStickerInstellingenStrikt(v) {
|
|
70
|
+
let o = v;
|
|
71
|
+
if (typeof v === "string") {
|
|
72
|
+
try {
|
|
73
|
+
o = JSON.parse(v);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!o || typeof o !== "object")
|
|
80
|
+
return null;
|
|
81
|
+
const uit = {};
|
|
82
|
+
for (const s of STICKER_SOORTEN) {
|
|
83
|
+
const r = o[s.soort];
|
|
84
|
+
const g = Number(r?.["ondergrens_pct"]);
|
|
85
|
+
if (!r || typeof r["toegestaan"] !== "boolean" || !(g > 0 && g <= 100))
|
|
86
|
+
return null;
|
|
87
|
+
uit[s.soort] = { toegestaan: r["toegestaan"], ondergrens_pct: g };
|
|
88
|
+
}
|
|
89
|
+
return uit;
|
|
90
|
+
}
|
|
91
|
+
export const A4_VELINDELINGEN = [
|
|
92
|
+
{ breedte_mm: 100, hoogte_mm: 62, kolommen: 2, rijen: 4 },
|
|
93
|
+
{ breedte_mm: 100, hoogte_mm: 150, kolommen: 2, rijen: 1 },
|
|
94
|
+
{ breedte_mm: 50, hoogte_mm: 50, kolommen: 4, rijen: 5 },
|
|
95
|
+
{ breedte_mm: 40, hoogte_mm: 40, kolommen: 5, rijen: 7 },
|
|
96
|
+
{ breedte_mm: 48, hoogte_mm: 48, kolommen: 4, rijen: 6 },
|
|
97
|
+
{ breedte_mm: 50, hoogte_mm: 40, kolommen: 4, rijen: 7 },
|
|
98
|
+
];
|
|
99
|
+
/** Gangbare etiketmaten (ook voor de varianten van eigen stickers). */
|
|
100
|
+
export const GANGBARE_ETIKETMATEN = A4_VELINDELINGEN.map((v) => ({ breedte_mm: v.breedte_mm, hoogte_mm: v.hoogte_mm }));
|
|
101
|
+
export function velindelingVoor(b, h) {
|
|
102
|
+
return (A4_VELINDELINGEN.find((v) => (Math.abs(v.breedte_mm - b) <= 1 && Math.abs(v.hoogte_mm - h) <= 1) ||
|
|
103
|
+
(Math.abs(v.breedte_mm - h) <= 1 && Math.abs(v.hoogte_mm - b) <= 1)) ?? null);
|
|
104
|
+
}
|
|
105
|
+
/** Tolerantie bij het herkennen van een papiermaat van de printer. */
|
|
106
|
+
export const PAPIER_TOLERANTIE_MM = 1;
|
|
107
|
+
/** Papiernaam op afmeting (±1 mm, ook gedraaid) uit de PrintNode-lijst; null als er geen is. */
|
|
108
|
+
export function papierOpMaat(formaten, b, h) {
|
|
109
|
+
if (!formaten || typeof formaten !== "object" || Array.isArray(formaten))
|
|
110
|
+
return null;
|
|
111
|
+
const kort = Math.min(b, h);
|
|
112
|
+
const lang = Math.max(b, h);
|
|
113
|
+
let beste = null;
|
|
114
|
+
for (const [naam, m] of Object.entries(formaten)) {
|
|
115
|
+
const w = Number(m?.[0]) / 10;
|
|
116
|
+
const hh = Number(m?.[1]) / 10;
|
|
117
|
+
if (!Number.isFinite(w) || !Number.isFinite(hh))
|
|
118
|
+
continue;
|
|
119
|
+
const k = Math.min(w, hh);
|
|
120
|
+
const l = Math.max(w, hh);
|
|
121
|
+
const dk = Math.abs(k - kort);
|
|
122
|
+
const dl = Math.abs(l - lang);
|
|
123
|
+
if (dk <= PAPIER_TOLERANTIE_MM + 1e-9 && dl <= PAPIER_TOLERANTIE_MM + 1e-9 && (!beste || dk + dl < beste.af))
|
|
124
|
+
beste = { naam, af: dk + dl };
|
|
125
|
+
}
|
|
126
|
+
return beste?.naam ?? null;
|
|
127
|
+
}
|
|
128
|
+
const MARGE_MM = 2;
|
|
129
|
+
/** Nominale smalste streep van een Code128/veilingbarcode op ware grootte. */
|
|
130
|
+
export const NOMINALE_STREEP_MM = 0.33;
|
|
131
|
+
/** Minimaal 2 printerpunten per smalste streep. */
|
|
132
|
+
export function barcodeLeesbaar(schaal, dpi, streep_mm = NOMINALE_STREEP_MM) {
|
|
133
|
+
const punt = 25.4 / (dpi && dpi > 0 ? dpi : 203);
|
|
134
|
+
return streep_mm * schaal >= 2 * punt - 1e-9;
|
|
135
|
+
}
|
|
136
|
+
const r = (n) => Math.round(n);
|
|
137
|
+
const maat = (b, h) => `${r(b)}×${r(h)}`;
|
|
138
|
+
/**
|
|
139
|
+
* Kiest de uitwijkroute, vaste volgorde:
|
|
140
|
+
* 1. precies passend etiket; 2. hetzelfde etiket gedraaid;
|
|
141
|
+
* 3. groter etiket 1-op-1 gecentreerd, en pas als geen etiket groot genoeg
|
|
142
|
+
* is: verkleinen (verhouding gelijk, ondergrens, barcode leesbaar);
|
|
143
|
+
* 4. A4-stickervel; 5. A4 met snijlijnen.
|
|
144
|
+
* Geeft null alleen als er helemaal geen printer is.
|
|
145
|
+
*/
|
|
146
|
+
export function kiesUitwijkroute(input) {
|
|
147
|
+
const { breedte_mm: b, hoogte_mm: h } = input.sticker;
|
|
148
|
+
const liggend = b > h;
|
|
149
|
+
const draai = (e) => (liggend !== e.breedte_mm > e.hoogte_mm ? 90 : 0);
|
|
150
|
+
const bijna = (x, y) => Math.abs(x - y) <= MARGE_MM;
|
|
151
|
+
const st = maat(b, h);
|
|
152
|
+
// Papiermaat op afmeting; zonder passende papiermaat telt het etiket niet.
|
|
153
|
+
const zonderPapier = [];
|
|
154
|
+
const bruikbaar = [];
|
|
155
|
+
for (const e of input.etiketten) {
|
|
156
|
+
if (e.formaten === undefined) {
|
|
157
|
+
bruikbaar.push({ ...e, gekozenPaper: e.paper });
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const naam = papierOpMaat(e.formaten, e.breedte_mm, e.hoogte_mm);
|
|
161
|
+
if (naam)
|
|
162
|
+
bruikbaar.push({ ...e, gekozenPaper: naam });
|
|
163
|
+
else
|
|
164
|
+
zonderPapier.push(`Printer ${e.printerNaam} heeft geen papiermaat ${maat(e.breedte_mm, e.hoogte_mm)} ingesteld`);
|
|
165
|
+
}
|
|
166
|
+
const uit = (e, route, schaal, rotate, reden) => ({
|
|
167
|
+
uitwijkroute: route, printerNaam: e.printerNaam, printerId: e.printerId, schaal, reden, paper: e.gekozenPaper, rotate, fitToPage: false,
|
|
168
|
+
pagina_breedte_mm: e.breedte_mm, pagina_hoogte_mm: e.hoogte_mm, sticker_breedte_mm: b, sticker_hoogte_mm: h,
|
|
169
|
+
});
|
|
170
|
+
// 1. precies
|
|
171
|
+
for (const e of bruikbaar) {
|
|
172
|
+
if (bijna(b, e.breedte_mm) && bijna(h, e.hoogte_mm))
|
|
173
|
+
return uit(e, "precies", 1, draai(e), `Geprint op ${maat(e.breedte_mm, e.hoogte_mm)}, precies passend`);
|
|
174
|
+
}
|
|
175
|
+
// 2. gedraaid
|
|
176
|
+
for (const e of bruikbaar) {
|
|
177
|
+
if (bijna(b, e.hoogte_mm) && bijna(h, e.breedte_mm))
|
|
178
|
+
return uit(e, "gedraaid", 1, 90, `Geprint op ${maat(e.breedte_mm, e.hoogte_mm)} in plaats van ${st}, 90° gedraaid`);
|
|
179
|
+
}
|
|
180
|
+
const groter = [];
|
|
181
|
+
const kleiner = [];
|
|
182
|
+
for (const e of bruikbaar) {
|
|
183
|
+
for (const rot of [0, 90]) {
|
|
184
|
+
const eb = rot ? e.hoogte_mm : e.breedte_mm;
|
|
185
|
+
const eh = rot ? e.breedte_mm : e.hoogte_mm;
|
|
186
|
+
if (b <= eb + MARGE_MM && h <= eh + MARGE_MM) {
|
|
187
|
+
groter.push({ afwijking: (eb * eh - b * h) / (b * h), u: uit(e, "groter_etiket", 1, rot, `Geprint op ${maat(e.breedte_mm, e.hoogte_mm)} in plaats van ${st}, 1-op-1 gecentreerd${rot ? " en 90° gedraaid" : ""}`) });
|
|
188
|
+
}
|
|
189
|
+
else if (input.instelling && input.instelling.toegestaan) {
|
|
190
|
+
// 3b. verkleinen, verhouding gelijk, nooit uitrekken
|
|
191
|
+
const schaal = Math.min(eb / b, eh / h, 1);
|
|
192
|
+
const pct = Math.round(schaal * 100);
|
|
193
|
+
if (schaal * 100 >= input.instelling.ondergrens_pct - 1e-9 && (input.heeftBarcode === false || barcodeLeesbaar(schaal, e.dpi))) {
|
|
194
|
+
kleiner.push({ afwijking: 1 - schaal, u: uit(e, "verkleind", Math.round(schaal * 100) / 100, rot, `Geprint op ${maat(e.breedte_mm, e.hoogte_mm)} in plaats van ${st}, verkleind tot ${pct}%`) });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
groter.sort((x, y) => x.afwijking - y.afwijking);
|
|
200
|
+
if (groter[0])
|
|
201
|
+
return groter[0].u;
|
|
202
|
+
kleiner.sort((x, y) => x.afwijking - y.afwijking);
|
|
203
|
+
if (kleiner[0])
|
|
204
|
+
return kleiner[0].u;
|
|
205
|
+
// 4 + 5: A4
|
|
206
|
+
if (input.a4Printer) {
|
|
207
|
+
if (!input.instelling && bruikbaar.length)
|
|
208
|
+
zonderPapier.push("Instelling verkleinen niet leesbaar");
|
|
209
|
+
const vooraf = zonderPapier.length ? `${zonderPapier.join("; ")} – ` : "";
|
|
210
|
+
const vel = input.a4VelIngesteld ? (input.a4VelIndeling ?? velindelingVoor(b, h)) : null;
|
|
211
|
+
const basis = { printerNaam: input.a4Printer.naam, printerId: input.a4Printer.id, schaal: 1, paper: "A4", rotate: 0, fitToPage: false, pagina_breedte_mm: 210, pagina_hoogte_mm: 297, sticker_breedte_mm: b, sticker_hoogte_mm: h };
|
|
212
|
+
return vel
|
|
213
|
+
? { ...basis, uitwijkroute: "a4_vel", velindeling: vel, reden: `${vooraf}${vooraf ? "geprint" : "Geprint"} op A4-stickervel (${vel.kolommen}×${vel.rijen} van ${maat(vel.breedte_mm, vel.hoogte_mm)}) in plaats van ${st}, 1-op-1` }
|
|
214
|
+
: { ...basis, uitwijkroute: "a4_snijlijnen", reden: `${vooraf}${vooraf ? "geprint" : "Geprint"} op A4 met snijlijnen in plaats van ${st}, 1-op-1` };
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
/** Voorstelwaarden voor een eigen vel op de kaart A4-stickervel (alleen invulhulp). */
|
|
219
|
+
export const EIGEN_VEL_VOORSTEL = { marge_boven_mm: 10, marge_links_mm: 5, tussen_h_mm: 0, tussen_v_mm: 0 };
|
|
220
|
+
export function leesA4StickervelWaarde(v) {
|
|
221
|
+
if (!v || typeof v !== "object")
|
|
222
|
+
return null;
|
|
223
|
+
const o = v;
|
|
224
|
+
if (o["aanwezig"] !== true)
|
|
225
|
+
return { aanwezig: false };
|
|
226
|
+
const b = Number(o["breedte_mm"]);
|
|
227
|
+
const h = Number(o["hoogte_mm"]);
|
|
228
|
+
if (!(b > 0 && h > 0))
|
|
229
|
+
return { aanwezig: true };
|
|
230
|
+
const mm = (k) => { const n = Number(o[k]); return Number.isFinite(n) && n >= 0 ? n : undefined; };
|
|
231
|
+
const uit = { aanwezig: true, breedte_mm: b, hoogte_mm: h };
|
|
232
|
+
for (const k of ["marge_boven_mm", "marge_links_mm", "tussen_h_mm", "tussen_v_mm"]) {
|
|
233
|
+
const v = mm(k);
|
|
234
|
+
if (v !== undefined)
|
|
235
|
+
uit[k] = v;
|
|
236
|
+
}
|
|
237
|
+
return uit;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Velindeling voor deze sticker op deze printplek. Een eigen vel (met maat)
|
|
241
|
+
* gaat altijd vóór de standaardlijst; past de sticker daar niet op, dan geen
|
|
242
|
+
* vel (dus A4 met snijlijnen), nooit schalen. Zonder eigen maat: standaardlijst.
|
|
243
|
+
*/
|
|
244
|
+
export function a4VelVoor(vel, sticker) {
|
|
245
|
+
if (!vel?.aanwezig)
|
|
246
|
+
return null;
|
|
247
|
+
const { breedte_mm: b, hoogte_mm: h } = sticker;
|
|
248
|
+
if (vel.breedte_mm !== undefined && vel.hoogte_mm !== undefined) {
|
|
249
|
+
if (Math.abs(vel.breedte_mm - b) > 1 || Math.abs(vel.hoogte_mm - h) > 1)
|
|
250
|
+
return null;
|
|
251
|
+
const mb = vel.marge_boven_mm ?? 0;
|
|
252
|
+
const ml = vel.marge_links_mm ?? 0;
|
|
253
|
+
const th = vel.tussen_h_mm ?? 0;
|
|
254
|
+
const tv = vel.tussen_v_mm ?? 0;
|
|
255
|
+
return {
|
|
256
|
+
breedte_mm: vel.breedte_mm,
|
|
257
|
+
hoogte_mm: vel.hoogte_mm,
|
|
258
|
+
kolommen: Math.max(1, Math.floor((210 - 2 * ml + th + 1e-9) / (vel.breedte_mm + th))),
|
|
259
|
+
rijen: Math.max(1, Math.floor((297 - 2 * mb + tv + 1e-9) / (vel.hoogte_mm + tv))),
|
|
260
|
+
marge_boven_mm: mb,
|
|
261
|
+
marge_links_mm: ml,
|
|
262
|
+
tussen_h_mm: th,
|
|
263
|
+
tussen_v_mm: tv,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return velindelingVoor(b, h);
|
|
267
|
+
}
|
|
268
|
+
/** Ligt er op deze printplek een vel dat bij deze stickermaat hoort? */
|
|
269
|
+
export function a4VelPast(vel, sticker) {
|
|
270
|
+
return !!a4VelVoor(vel, sticker);
|
|
271
|
+
}
|
|
272
|
+
/** Papiermaat-waarschuwing per etiket (voor Printplekken en install_check). */
|
|
273
|
+
export function papierWaarschuwingen(etiketten) {
|
|
274
|
+
return etiketten
|
|
275
|
+
.filter((e) => e.formaten !== undefined && !papierOpMaat(e.formaten, e.breedte_mm, e.hoogte_mm))
|
|
276
|
+
.map((e) => `Printer ${e.printerNaam} heeft geen papiermaat ${maat(e.breedte_mm, e.hoogte_mm)} ingesteld – stickers gaan naar A4. Stel de papiermaat in bij de printer.`);
|
|
277
|
+
}
|
|
278
|
+
/** Vastgelegde uitkomst met precies de veldnamen die Pickschermen 1.0.61 leest. */
|
|
279
|
+
export function uitwijkVoorPickschermen(u) {
|
|
280
|
+
return { uitwijkroute: u.uitwijkroute, printerNaam: u.printerNaam, schaal: u.schaal, reden: u.reden };
|
|
281
|
+
}
|
|
282
|
+
/** Overzicht per printplek: hoe elke gangbare maat geprint wordt (waarschuwing, geen blokkade). */
|
|
283
|
+
export function stickerMatenOverzicht(etiketten, a4Printer, a4VelIngesteld, instelling, maten = GANGBARE_ETIKETMATEN) {
|
|
284
|
+
return maten.map((m) => ({
|
|
285
|
+
maat: maat(m.breedte_mm, m.hoogte_mm),
|
|
286
|
+
uitkomst: kiesUitwijkroute({ sticker: m, etiketten, a4Printer, a4VelIngesteld, instelling }),
|
|
287
|
+
}));
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Vroege waarschuwing: vergelijkt per dag en printplek de benodigde
|
|
291
|
+
* stickermaten (aangeleverd door Engine/Pickschermen) met de aanwezige
|
|
292
|
+
* etiketten. Alleen maten die niet precies of gedraaid passen komen terug.
|
|
293
|
+
*/
|
|
294
|
+
export function vroegeStickerWaarschuwing(nodig, perPlek, instelling) {
|
|
295
|
+
const uit = [];
|
|
296
|
+
for (const n of Array.isArray(nodig) ? nodig : []) {
|
|
297
|
+
const plek = perPlek.get(n.print_plek_id) ?? { etiketten: [], a4Printer: null, a4VelIngesteld: false };
|
|
298
|
+
const u = kiesUitwijkroute({ sticker: n, etiketten: plek.etiketten, a4Printer: plek.a4Printer, a4VelIngesteld: plek.a4VelIngesteld, instelling });
|
|
299
|
+
if (u && (u.uitwijkroute === "precies" || u.uitwijkroute === "gedraaid"))
|
|
300
|
+
continue;
|
|
301
|
+
uit.push({
|
|
302
|
+
dag: n.dag,
|
|
303
|
+
print_plek_id: n.print_plek_id,
|
|
304
|
+
maat: maat(n.breedte_mm, n.hoogte_mm),
|
|
305
|
+
aantal: Number(n.aantal ?? 0),
|
|
306
|
+
uitwijkroute: u?.uitwijkroute ?? "geen_printer",
|
|
307
|
+
reden: u?.reden ?? "geen labelprinter en geen A4-printer op deze printplek",
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
return uit;
|
|
311
|
+
}
|
|
@@ -36,4 +36,17 @@ export interface TestprintResultaat {
|
|
|
36
36
|
* routering en PrintNode-afhandeling worden gebruikt als bij echte documenten.
|
|
37
37
|
*/
|
|
38
38
|
export declare function verstuurTestprint(documenttype: string, ctx: TestprintContext): Promise<TestprintResultaat>;
|
|
39
|
+
/** Voorbeeldstickers voor de testprint per uitwijkroute (1.69.12). */
|
|
40
|
+
export declare const VOORBEELD_STICKERMATEN: {
|
|
41
|
+
breedte_mm: number;
|
|
42
|
+
hoogte_mm: number;
|
|
43
|
+
uitleg: string;
|
|
44
|
+
}[];
|
|
45
|
+
/** HTML van een voorbeeldsticker met rand en maat; geen echte order. */
|
|
46
|
+
export declare function voorbeeldStickerHtml(b: number, h: number): string;
|
|
47
|
+
/** Testprint van een voorbeeldsticker op zijn eigen maat; de wachtrij kiest de uitwijkroute. */
|
|
48
|
+
export declare function verstuurStickerRouteTestprint(maat: {
|
|
49
|
+
breedte_mm: number;
|
|
50
|
+
hoogte_mm: number;
|
|
51
|
+
}, ctx: TestprintContext): Promise<TestprintResultaat>;
|
|
39
52
|
//# sourceMappingURL=testprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testprint.d.ts","sourceRoot":"","sources":["../../src/lib/testprint.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B1F;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CA0B9F;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAMrD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CA6C7B"}
|
|
1
|
+
{"version":3,"file":"testprint.d.ts","sourceRoot":"","sources":["../../src/lib/testprint.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B1F;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CA0B9F;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAMrD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CA6C7B;AAED,sEAAsE;AACtE,eAAO,MAAM,sBAAsB,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAM7F,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,gGAAgG;AAChG,wBAAsB,6BAA6B,CACjD,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAoB7B"}
|
|
@@ -135,3 +135,41 @@ export async function verstuurTestprint(documenttype, ctx) {
|
|
|
135
135
|
});
|
|
136
136
|
return { jobId, printerId };
|
|
137
137
|
}
|
|
138
|
+
/** Voorbeeldstickers voor de testprint per uitwijkroute (1.69.12). */
|
|
139
|
+
export const VOORBEELD_STICKERMATEN = [
|
|
140
|
+
{ breedte_mm: 50, hoogte_mm: 40, uitleg: "bijv. op een 50×50-rol: 1-op-1 gecentreerd" },
|
|
141
|
+
{ breedte_mm: 62, hoogte_mm: 100, uitleg: "bijv. op 100×62: gedraaid" },
|
|
142
|
+
{ breedte_mm: 50, hoogte_mm: 50, uitleg: "zonder passend etiket: naar A4" },
|
|
143
|
+
{ breedte_mm: 100, hoogte_mm: 62, uitleg: "traysticker" },
|
|
144
|
+
{ breedte_mm: 100, hoogte_mm: 150, uitleg: "sticker" },
|
|
145
|
+
];
|
|
146
|
+
/** HTML van een voorbeeldsticker met rand en maat; geen echte order. */
|
|
147
|
+
export function voorbeeldStickerHtml(b, h) {
|
|
148
|
+
return `<div style="box-sizing:border-box;width:${b}mm;height:${h}mm;border:0.4mm solid #000;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:Helvetica,Arial,sans-serif;text-align:center">
|
|
149
|
+
<div style="font-size:4mm;font-weight:bold">VOORBEELDSTICKER</div>
|
|
150
|
+
<div style="font-size:3.2mm">${Math.round(b)} × ${Math.round(h)} mm</div>
|
|
151
|
+
<div style="font-size:2.4mm">TESTAFDRUK – geen echte order</div></div>`;
|
|
152
|
+
}
|
|
153
|
+
/** Testprint van een voorbeeldsticker op zijn eigen maat; de wachtrij kiest de uitwijkroute. */
|
|
154
|
+
export async function verstuurStickerRouteTestprint(maat, ctx) {
|
|
155
|
+
const printplekId = ctx.printplekId ?? undefined;
|
|
156
|
+
const uitkomst = await routeringVoor({ documenttype: "sticker", printplekId: printplekId ?? null, werkplek: ctx.werkplek ?? null });
|
|
157
|
+
if (!uitkomst.printer_id)
|
|
158
|
+
throw new Error("Geen stickerprinter op deze printplek — stel dit in bij de printplek.");
|
|
159
|
+
const testId = `test-uitwijk-${maat.breedte_mm}x${maat.hoogte_mm}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
160
|
+
const { jobId } = await printHtml({
|
|
161
|
+
documenttype: "sticker",
|
|
162
|
+
documentnaam: `Testprint sticker ${Math.round(maat.breedte_mm)}×${Math.round(maat.hoogte_mm)}`,
|
|
163
|
+
html: voorbeeldStickerHtml(maat.breedte_mm, maat.hoogte_mm),
|
|
164
|
+
printerId: uitkomst.printer_id,
|
|
165
|
+
...(printplekId ? { printplekId } : {}),
|
|
166
|
+
payload: {
|
|
167
|
+
test_id: testId,
|
|
168
|
+
is_testprint: true,
|
|
169
|
+
is_test: true,
|
|
170
|
+
uitwijk_test: true,
|
|
171
|
+
voorbeeld_formaat: { breedte_mm: maat.breedte_mm, hoogte_mm: maat.hoogte_mm, orientatie: maat.breedte_mm > maat.hoogte_mm ? "landscape" : "portrait", marge_boven: 0 },
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
return { jobId, printerId: uitkomst.printer_id };
|
|
175
|
+
}
|
|
@@ -332,7 +332,7 @@ export function usePrintJobs() {
|
|
|
332
332
|
setLoading(true);
|
|
333
333
|
const { data } = await supabase
|
|
334
334
|
.from("print_jobs")
|
|
335
|
-
.select("id, layout_id, printer_id, documenttype, documentnaam, status, paginas, kopieen, foutmelding, is_herprint, gebruiker_naam, created_at, voltooid_op, extern_job_id, gebruikte_layout_id, gebruikte_bron, payload, lokale_pdf_status, lokaal_opgeslagen_op, lokale_pdf_fout, lokale_pdf_print_plek_id, artefact_pad, artefact_sha256, artefact_bytes, verwerkingsfase, foutcode, printnode_status, printnode_bericht, printnode_status_op")
|
|
335
|
+
.select("id, layout_id, printer_id, documenttype, documentnaam, status, paginas, kopieen, foutmelding, is_herprint, gebruiker_naam, created_at, voltooid_op, extern_job_id, gebruikte_layout_id, gebruikte_bron, payload, lokale_pdf_status, lokaal_opgeslagen_op, lokale_pdf_fout, lokale_pdf_print_plek_id, artefact_pad, artefact_sha256, artefact_bytes, verwerkingsfase, foutcode, printnode_status, printnode_bericht, printnode_status_op, uitwijk")
|
|
336
336
|
.order("created_at", { ascending: false })
|
|
337
337
|
.limit(200);
|
|
338
338
|
setJobs(arr(data));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PAKKET_VERSIE = "1.69.
|
|
1
|
+
export declare const PAKKET_VERSIE = "1.69.13";
|
|
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.13";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface VroegeWaarschuwingRegel {
|
|
2
|
+
dag: string;
|
|
3
|
+
print_plek_id: string;
|
|
4
|
+
maat: string;
|
|
5
|
+
aantal: number;
|
|
6
|
+
uitwijkroute: string;
|
|
7
|
+
schaal: number;
|
|
8
|
+
reden: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function haalVroegeStickerWaarschuwing(db: {
|
|
11
|
+
rpc: (fn: string, args: Record<string, unknown>) => PromiseLike<{
|
|
12
|
+
data: unknown;
|
|
13
|
+
error: {
|
|
14
|
+
message?: string;
|
|
15
|
+
} | null;
|
|
16
|
+
}>;
|
|
17
|
+
}, van: string, tot: string): Promise<{
|
|
18
|
+
regels: VroegeWaarschuwingRegel[];
|
|
19
|
+
reden: string | null;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=vroegeWaarschuwing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vroegeWaarschuwing.d.ts","sourceRoot":"","sources":["../../src/lib/vroegeWaarschuwing.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE;IAAE,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAAE,EAC9H,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAQtE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/vroegeWaarschuwing.ts — vroege stickerwaarschuwing via de
|
|
3
|
+
// databasefunctie layouts_vroege_sticker_waarschuwing (1.69.12). Pickschermen
|
|
4
|
+
// roept dezelfde functie aan; de vergelijking zit dus op één plek.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
export async function haalVroegeStickerWaarschuwing(db, van, tot) {
|
|
7
|
+
const { data, error } = await db.rpc("layouts_vroege_sticker_waarschuwing", { p_van: van, p_tot: tot });
|
|
8
|
+
if (error)
|
|
9
|
+
throw new Error(error.message || "Vroege stickerwaarschuwing kon niet worden opgehaald.");
|
|
10
|
+
const o = (data && typeof data === "object" ? data : {});
|
|
11
|
+
return {
|
|
12
|
+
regels: Array.isArray(o.regels) ? o.regels : [],
|
|
13
|
+
reden: typeof o.reden === "string" ? o.reden : null,
|
|
14
|
+
};
|
|
15
|
+
}
|