@flowselections/layout-maker 1.8.2 → 1.13.1
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/README.md +8 -1
- package/dist-lib/components/ComputersLijst.d.ts +2 -1
- package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
- package/dist-lib/components/ComputersLijst.js +2 -2
- package/dist-lib/components/DocumentRouteringPage.d.ts +2 -0
- package/dist-lib/components/DocumentRouteringPage.d.ts.map +1 -0
- package/dist-lib/components/DocumentRouteringPage.js +115 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +13 -8
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +16 -1
- package/dist-lib/components/PrintStatusBanner.d.ts +8 -0
- package/dist-lib/components/PrintStatusBanner.d.ts.map +1 -0
- package/dist-lib/components/PrintStatusBanner.js +15 -0
- package/dist-lib/components/PrintersPage.d.ts.map +1 -1
- package/dist-lib/components/PrintersPage.js +7 -23
- package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
- package/dist-lib/components/WerkplekConfiguratiePage.js +35 -24
- package/dist-lib/components/WerkplekkenTabel.d.ts +2 -2
- package/dist-lib/components/WerkplekkenTabel.d.ts.map +1 -1
- package/dist-lib/components/WerkplekkenTabel.js +4 -3
- package/dist-lib/index.d.ts +8 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +9 -5
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +491 -145
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +491 -145
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +505 -150
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +491 -145
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/documentBron.d.ts +35 -0
- package/dist-lib/lib/documentBron.d.ts.map +1 -0
- package/dist-lib/lib/documentBron.js +62 -0
- package/dist-lib/lib/documentRoutering.d.ts +23 -0
- package/dist-lib/lib/documentRoutering.d.ts.map +1 -0
- package/dist-lib/lib/documentRoutering.js +58 -0
- package/dist-lib/lib/documentTypes.d.ts +54 -0
- package/dist-lib/lib/documentTypes.d.ts.map +1 -1
- package/dist-lib/lib/documentTypes.js +56 -0
- package/dist-lib/lib/formaatPrinters.d.ts +5 -0
- package/dist-lib/lib/formaatPrinters.d.ts.map +1 -1
- package/dist-lib/lib/formaatPrinters.js +12 -0
- package/dist-lib/lib/printApi.d.ts +20 -5
- package/dist-lib/lib/printApi.d.ts.map +1 -1
- package/dist-lib/lib/printApi.js +93 -32
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +72 -1
- package/dist-lib/lib/printService.functions.d.ts +1964 -580
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/printerTelling.d.ts +24 -0
- package/dist-lib/lib/printerTelling.d.ts.map +1 -0
- package/dist-lib/lib/printerTelling.js +41 -0
- package/dist-lib/lib/useDocumentData.d.ts +4 -0
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +106 -1
- package/package.json +7 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/documentBron.ts — waar komt het document vandaan? Per documentsoort
|
|
3
|
+
// en per herkomst van de order (Floriday of een eigen order) kan worden gekozen
|
|
4
|
+
// tussen het meegestuurde externe document en een eigen ontwerp.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { useCallback, useEffect, useState } from "react";
|
|
7
|
+
import { supabase } from "./supabaseClient.js";
|
|
8
|
+
export const HERKOMSTEN = [
|
|
9
|
+
{ value: "floriday", label: "Floriday-order" },
|
|
10
|
+
{ value: "eigen", label: "Eigen order" },
|
|
11
|
+
];
|
|
12
|
+
export const BRONNEN = [
|
|
13
|
+
{ value: "auto", label: "Automatisch" },
|
|
14
|
+
{ value: "extern_pdf", label: "Document van Floriday" },
|
|
15
|
+
{ value: "eigen_layout", label: "Eigen ontwerp" },
|
|
16
|
+
];
|
|
17
|
+
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
18
|
+
/** Alle bronregels, eventueel gefilterd op documentsoort. */
|
|
19
|
+
export function useBronregels(documenttype) {
|
|
20
|
+
const [regels, setRegels] = useState([]);
|
|
21
|
+
const [laden, setLaden] = useState(true);
|
|
22
|
+
const load = useCallback(async () => {
|
|
23
|
+
let query = supabase.from("document_bronregels").select("*");
|
|
24
|
+
if (documenttype)
|
|
25
|
+
query = query.eq("documenttype", documenttype);
|
|
26
|
+
const { data } = await query;
|
|
27
|
+
setRegels(arr(data));
|
|
28
|
+
setLaden(false);
|
|
29
|
+
}, [documenttype]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
void load();
|
|
32
|
+
}, [load]);
|
|
33
|
+
return { regels, laden, reload: load };
|
|
34
|
+
}
|
|
35
|
+
/** Legt vast welke bron geldt voor een documentsoort bij een bepaalde herkomst. */
|
|
36
|
+
export async function zetBronregel(documenttype, herkomst, bron, layout_id) {
|
|
37
|
+
const { error } = await supabase.from("document_bronregels").upsert({ documenttype, herkomst, bron, layout_id: layout_id ?? null }, { onConflict: "documenttype,herkomst" });
|
|
38
|
+
if (error)
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
/** Verwijdert een bronregel; daarna geldt weer het standaardgedrag. */
|
|
42
|
+
export async function verwijderBronregel(id) {
|
|
43
|
+
const { error } = await supabase.from("document_bronregels").delete().eq("id", id);
|
|
44
|
+
if (error)
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* De ingestelde bron voor een documentsoort bij deze herkomst.
|
|
49
|
+
* Geeft `null` als er niets is ingesteld (dan geldt het standaardgedrag).
|
|
50
|
+
*/
|
|
51
|
+
export async function bronVoorDocument(documenttype, herkomst) {
|
|
52
|
+
const h = (herkomst ?? "").trim();
|
|
53
|
+
if (!h)
|
|
54
|
+
return null;
|
|
55
|
+
const { data } = await supabase
|
|
56
|
+
.from("document_bronregels")
|
|
57
|
+
.select("*")
|
|
58
|
+
.eq("documenttype", documenttype)
|
|
59
|
+
.eq("herkomst", h)
|
|
60
|
+
.maybeSingle();
|
|
61
|
+
return data ?? null;
|
|
62
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface WerkplekPrinter {
|
|
2
|
+
id: string;
|
|
3
|
+
documenttype: string;
|
|
4
|
+
werkplek: string;
|
|
5
|
+
printer_id: string | null;
|
|
6
|
+
papierformaat: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** Alle werkplek-uitzonderingen, eventueel gefilterd op documentsoort. */
|
|
9
|
+
export declare function useWerkplekPrinters(documenttype?: string): {
|
|
10
|
+
koppelingen: WerkplekPrinter[];
|
|
11
|
+
laden: boolean;
|
|
12
|
+
reload: () => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
/** Legt vast dat een documentsoort op een werkplek naar een printer gaat. */
|
|
15
|
+
export declare function zetWerkplekPrinter(documenttype: string, werkplek: string, printer_id: string | null, papierformaat?: string | null): Promise<void>;
|
|
16
|
+
/** Verwijdert een werkplek-uitzondering. */
|
|
17
|
+
export declare function verwijderWerkplekPrinter(id: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* De printer die voor deze documentsoort op deze werkplek is ingesteld.
|
|
20
|
+
* Geeft `null` als er geen uitzondering bestaat.
|
|
21
|
+
*/
|
|
22
|
+
export declare function printerVoorWerkplekDocument(documenttype: string, werkplek: string): Promise<string | null>;
|
|
23
|
+
//# sourceMappingURL=documentRoutering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentRoutering.d.ts","sourceRoot":"","sources":["../../src/lib/documentRoutering.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAID,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM;;;;EAiBxD;AAED,6EAA6E;AAC7E,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,iBAY9B;AAED,4CAA4C;AAC5C,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,iBAGxD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/documentRoutering.ts — welke documentsoort gaat via welke werkplek
|
|
3
|
+
// naar welke printer. Uitzonderingen per werkplek staan hier; de standaard per
|
|
4
|
+
// documentsoort + formaat blijft in `formaatPrinters.ts`.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { useCallback, useEffect, useState } from "react";
|
|
7
|
+
import { supabase } from "./supabaseClient.js";
|
|
8
|
+
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
9
|
+
/** Alle werkplek-uitzonderingen, eventueel gefilterd op documentsoort. */
|
|
10
|
+
export function useWerkplekPrinters(documenttype) {
|
|
11
|
+
const [koppelingen, setKoppelingen] = useState([]);
|
|
12
|
+
const [laden, setLaden] = useState(true);
|
|
13
|
+
const load = useCallback(async () => {
|
|
14
|
+
let query = supabase.from("document_werkplek_printers").select("*");
|
|
15
|
+
if (documenttype)
|
|
16
|
+
query = query.eq("documenttype", documenttype);
|
|
17
|
+
const { data } = await query;
|
|
18
|
+
setKoppelingen(arr(data));
|
|
19
|
+
setLaden(false);
|
|
20
|
+
}, [documenttype]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
void load();
|
|
23
|
+
}, [load]);
|
|
24
|
+
return { koppelingen, laden, reload: load };
|
|
25
|
+
}
|
|
26
|
+
/** Legt vast dat een documentsoort op een werkplek naar een printer gaat. */
|
|
27
|
+
export async function zetWerkplekPrinter(documenttype, werkplek, printer_id, papierformaat) {
|
|
28
|
+
const { error } = await supabase.from("document_werkplek_printers").upsert({
|
|
29
|
+
documenttype,
|
|
30
|
+
werkplek: werkplek.trim(),
|
|
31
|
+
printer_id,
|
|
32
|
+
papierformaat: papierformaat ?? null,
|
|
33
|
+
}, { onConflict: "documenttype,werkplek" });
|
|
34
|
+
if (error)
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
/** Verwijdert een werkplek-uitzondering. */
|
|
38
|
+
export async function verwijderWerkplekPrinter(id) {
|
|
39
|
+
const { error } = await supabase.from("document_werkplek_printers").delete().eq("id", id);
|
|
40
|
+
if (error)
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* De printer die voor deze documentsoort op deze werkplek is ingesteld.
|
|
45
|
+
* Geeft `null` als er geen uitzondering bestaat.
|
|
46
|
+
*/
|
|
47
|
+
export async function printerVoorWerkplekDocument(documenttype, werkplek) {
|
|
48
|
+
const naam = (werkplek ?? "").trim();
|
|
49
|
+
if (!naam)
|
|
50
|
+
return null;
|
|
51
|
+
const { data } = await supabase
|
|
52
|
+
.from("document_werkplek_printers")
|
|
53
|
+
.select("printer_id")
|
|
54
|
+
.eq("documenttype", documenttype)
|
|
55
|
+
.eq("werkplek", naam)
|
|
56
|
+
.maybeSingle();
|
|
57
|
+
return data?.printer_id ?? null;
|
|
58
|
+
}
|
|
@@ -103,8 +103,62 @@ export interface LayoutModel {
|
|
|
103
103
|
page_settings: PageSettings;
|
|
104
104
|
/** documentspecifieke configuratie, opgebouwd uit het documentprofiel */
|
|
105
105
|
config?: Record<string, Record<string, unknown>>;
|
|
106
|
+
/** herkomst van het document: "eigen" ontwerp of "floriday" */
|
|
107
|
+
bron?: string;
|
|
108
|
+
/** vaste layout die niet mag worden aangepast of verwijderd */
|
|
109
|
+
systeem?: boolean;
|
|
106
110
|
updated_at: string;
|
|
107
111
|
}
|
|
112
|
+
/** Is dit een vaste layout voor een document dat uit Floriday komt? */
|
|
113
|
+
export declare function isFloridayLayout(l: {
|
|
114
|
+
bron?: string | null;
|
|
115
|
+
systeem?: boolean | null;
|
|
116
|
+
}): boolean;
|
|
117
|
+
/** Toelichting bij een Floriday-layout. */
|
|
118
|
+
export declare const FLORIDAY_LAYOUT_TOELICHTING = "Document komt kant-en-klaar uit Floriday en wordt 1-op-1 afgedrukt.";
|
|
119
|
+
/** Vaste layouts die altijd aanwezig moeten zijn (documenten uit Floriday). */
|
|
120
|
+
export declare const FLORIDAY_SYSTEEM_LAYOUTS: readonly [{
|
|
121
|
+
readonly naam: "Afleverbrief (Floriday)";
|
|
122
|
+
readonly documenttype: "afleverbrief";
|
|
123
|
+
readonly papierformaat: "A4";
|
|
124
|
+
readonly breedte_mm: 210;
|
|
125
|
+
readonly hoogte_mm: 297;
|
|
126
|
+
}, {
|
|
127
|
+
readonly naam: "Veilingbrief (Floriday)";
|
|
128
|
+
readonly documenttype: "veilingbrief";
|
|
129
|
+
readonly papierformaat: "A4";
|
|
130
|
+
readonly breedte_mm: 210;
|
|
131
|
+
readonly hoogte_mm: 297;
|
|
132
|
+
}, {
|
|
133
|
+
readonly naam: "Sticker (Floriday)";
|
|
134
|
+
readonly documenttype: "sticker";
|
|
135
|
+
readonly papierformaat: "LABEL_100x62";
|
|
136
|
+
readonly breedte_mm: 100;
|
|
137
|
+
readonly hoogte_mm: 62;
|
|
138
|
+
}];
|
|
139
|
+
/** Toelichting bij een standaardlayout (geen Floriday-document). */
|
|
140
|
+
export declare const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar \u2014 aanpassen kan per klant.";
|
|
141
|
+
/**
|
|
142
|
+
* Standaardlayouts die bij een verse shell altijd worden toegevoegd, los van
|
|
143
|
+
* Floriday. Deze zijn "eigen" (niet systeem) en dus vrij aanpasbaar/verwijderbaar.
|
|
144
|
+
* Het seeden gebeurt slechts één keer per shell (zie useDocumentData); als een
|
|
145
|
+
* gebruiker een layout verwijdert, wordt deze niet opnieuw aangemaakt.
|
|
146
|
+
*/
|
|
147
|
+
export declare const STANDAARD_LAYOUTS: readonly [{
|
|
148
|
+
readonly naam: "Pakbon";
|
|
149
|
+
readonly documenttype: "pakbon";
|
|
150
|
+
readonly papierformaat: "A4";
|
|
151
|
+
readonly breedte_mm: 210;
|
|
152
|
+
readonly hoogte_mm: 297;
|
|
153
|
+
readonly omschrijving: "Standaarddocument voor eigen orders. Volledig aanpasbaar — aanpassen kan per klant.";
|
|
154
|
+
}, {
|
|
155
|
+
readonly naam: "Afleverbrief (BVO)";
|
|
156
|
+
readonly documenttype: "afleverbrief";
|
|
157
|
+
readonly papierformaat: "A4";
|
|
158
|
+
readonly breedte_mm: 210;
|
|
159
|
+
readonly hoogte_mm: 297;
|
|
160
|
+
readonly omschrijving: "Verzendbrief voor eigen (niet-Floriday) orders. Volledig aanpasbaar.";
|
|
161
|
+
}];
|
|
108
162
|
export interface LayoutVariabele {
|
|
109
163
|
id?: string;
|
|
110
164
|
naam: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,SAAS,GACT,cAAc,GACd,SAAS,GACT,SAAS,GACT,kBAAkB,GAClB,QAAQ,GACR,cAAc,GACd,cAAc,GACd,eAAe,GACf,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,MAAM,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAkBlE,CAAC;AAGF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,EAAE,gBAAgB,EAU5C,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,MAAM,GACN,YAAY,GACZ,MAAM,GACN,MAAM,GACN,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,cAAc,GACd,OAAO,GACP,MAAM,GACN,cAAc,GACd,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,YAAY,CAAC;IAC5B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAE/F;AAED,2CAA2C;AAC3C,eAAO,MAAM,2BAA2B,wEAC+B,CAAC;AAExE,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAsB3B,CAAC;AAEX,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,6FAC8C,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;EAiBpB,CAAC;AAGX,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,WAAW,EACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,CAmB1F,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAc7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,UAAU,EAM1C,CAAC"}
|
|
@@ -34,6 +34,62 @@ export const PAPIERFORMATEN = [
|
|
|
34
34
|
{ code: "LABEL_57x32", label: "Label 57 × 32 mm", breedte: 57, hoogte: 32 },
|
|
35
35
|
{ code: "VRIJ", label: "Vrij formaat", breedte: 210, hoogte: 297 },
|
|
36
36
|
];
|
|
37
|
+
/** Is dit een vaste layout voor een document dat uit Floriday komt? */
|
|
38
|
+
export function isFloridayLayout(l) {
|
|
39
|
+
return Boolean(l?.systeem) && String(l?.bron ?? "") === "floriday";
|
|
40
|
+
}
|
|
41
|
+
/** Toelichting bij een Floriday-layout. */
|
|
42
|
+
export const FLORIDAY_LAYOUT_TOELICHTING = "Document komt kant-en-klaar uit Floriday en wordt 1-op-1 afgedrukt.";
|
|
43
|
+
/** Vaste layouts die altijd aanwezig moeten zijn (documenten uit Floriday). */
|
|
44
|
+
export const FLORIDAY_SYSTEEM_LAYOUTS = [
|
|
45
|
+
{
|
|
46
|
+
naam: "Afleverbrief (Floriday)",
|
|
47
|
+
documenttype: "afleverbrief",
|
|
48
|
+
papierformaat: "A4",
|
|
49
|
+
breedte_mm: 210,
|
|
50
|
+
hoogte_mm: 297,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
naam: "Veilingbrief (Floriday)",
|
|
54
|
+
documenttype: "veilingbrief",
|
|
55
|
+
papierformaat: "A4",
|
|
56
|
+
breedte_mm: 210,
|
|
57
|
+
hoogte_mm: 297,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
naam: "Sticker (Floriday)",
|
|
61
|
+
documenttype: "sticker",
|
|
62
|
+
papierformaat: "LABEL_100x62",
|
|
63
|
+
breedte_mm: 100,
|
|
64
|
+
hoogte_mm: 62,
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
/** Toelichting bij een standaardlayout (geen Floriday-document). */
|
|
68
|
+
export const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar — aanpassen kan per klant.";
|
|
69
|
+
/**
|
|
70
|
+
* Standaardlayouts die bij een verse shell altijd worden toegevoegd, los van
|
|
71
|
+
* Floriday. Deze zijn "eigen" (niet systeem) en dus vrij aanpasbaar/verwijderbaar.
|
|
72
|
+
* Het seeden gebeurt slechts één keer per shell (zie useDocumentData); als een
|
|
73
|
+
* gebruiker een layout verwijdert, wordt deze niet opnieuw aangemaakt.
|
|
74
|
+
*/
|
|
75
|
+
export const STANDAARD_LAYOUTS = [
|
|
76
|
+
{
|
|
77
|
+
naam: "Pakbon",
|
|
78
|
+
documenttype: "pakbon",
|
|
79
|
+
papierformaat: "A4",
|
|
80
|
+
breedte_mm: 210,
|
|
81
|
+
hoogte_mm: 297,
|
|
82
|
+
omschrijving: STANDAARD_LAYOUT_TOELICHTING,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
naam: "Afleverbrief (BVO)",
|
|
86
|
+
documenttype: "afleverbrief",
|
|
87
|
+
papierformaat: "A4",
|
|
88
|
+
breedte_mm: 210,
|
|
89
|
+
hoogte_mm: 297,
|
|
90
|
+
omschrijving: "Verzendbrief voor eigen (niet-Floriday) orders. Volledig aanpasbaar.",
|
|
91
|
+
},
|
|
92
|
+
];
|
|
37
93
|
export const ELEMENT_STANDAARD = {
|
|
38
94
|
tekst: { label: "Tekst", breedte: 60, hoogte: 8, content: "Nieuwe tekst" },
|
|
39
95
|
veld: { label: "Databaseveld", breedte: 60, hoogte: 8, content: "{{order.nummer}}" },
|
|
@@ -11,4 +11,9 @@ export declare function useFormaatPrinters(documenttype: string): {
|
|
|
11
11
|
export declare function zetFormaatPrinter(documenttype: string, formaat_code: string, printer_id: string | null): Promise<void>;
|
|
12
12
|
/** Bepaalt welke printer bij een formaat hoort (voor automatisch afdrukken). */
|
|
13
13
|
export declare function printerVoorFormaat(documenttype: string, formaat_code: string): Promise<string | null>;
|
|
14
|
+
/** Alle standaardkoppelingen (documentsoort + formaat), voor overzichten. */
|
|
15
|
+
export declare function useAlleFormaatPrinters(): {
|
|
16
|
+
koppelingen: FormaatPrinter[];
|
|
17
|
+
reload: () => Promise<void>;
|
|
18
|
+
};
|
|
14
19
|
//# sourceMappingURL=formaatPrinters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formaatPrinters.d.ts","sourceRoot":"","sources":["../../src/lib/formaatPrinters.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;EAgBtD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,iBAQ1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
|
|
1
|
+
{"version":3,"file":"formaatPrinters.d.ts","sourceRoot":"","sources":["../../src/lib/formaatPrinters.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;EAgBtD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,iBAQ1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB;;;EAarC"}
|
|
@@ -37,3 +37,15 @@ export async function printerVoorFormaat(documenttype, formaat_code) {
|
|
|
37
37
|
.maybeSingle();
|
|
38
38
|
return data?.printer_id ?? null;
|
|
39
39
|
}
|
|
40
|
+
/** Alle standaardkoppelingen (documentsoort + formaat), voor overzichten. */
|
|
41
|
+
export function useAlleFormaatPrinters() {
|
|
42
|
+
const [koppelingen, setKoppelingen] = useState([]);
|
|
43
|
+
const load = useCallback(async () => {
|
|
44
|
+
const { data } = await supabase.from("document_formaat_printers").select("*");
|
|
45
|
+
setKoppelingen(arr(data));
|
|
46
|
+
}, []);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
void load();
|
|
49
|
+
}, [load]);
|
|
50
|
+
return { koppelingen, reload: load };
|
|
51
|
+
}
|
|
@@ -6,10 +6,18 @@ export interface PrintDocumentInput {
|
|
|
6
6
|
layoutId?: string;
|
|
7
7
|
/** Optioneel: specifieke printer. Anders wordt er automatisch gekozen. */
|
|
8
8
|
printerId?: string;
|
|
9
|
+
/** Optioneel: naam van de werkplek/computer waar dit vandaan komt. */
|
|
10
|
+
werkplek?: string;
|
|
9
11
|
/** Naam zoals die in de wachtrij verschijnt. */
|
|
10
12
|
documentnaam: string;
|
|
11
13
|
kopieen?: number;
|
|
12
|
-
/**
|
|
14
|
+
/** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
|
|
15
|
+
herkomst?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Vrije data die bij het afdrukken gebruikt wordt. Geef hierin ALTIJD een
|
|
18
|
+
* order-kenmerk mee (`queue_item_id`, `order_id` of `ordernummer`): daarmee
|
|
19
|
+
* kunnen twee verschillende orders nooit als dubbele aanvraag worden gezien.
|
|
20
|
+
*/
|
|
13
21
|
payload?: Record<string, unknown>;
|
|
14
22
|
isHerprint?: boolean;
|
|
15
23
|
}
|
|
@@ -29,11 +37,12 @@ export declare class DubbeleAanvraagFout extends Error {
|
|
|
29
37
|
*/
|
|
30
38
|
export declare function printDocument(input: PrintDocumentInput): Promise<PrintDocumentResult>;
|
|
31
39
|
/**
|
|
32
|
-
* De printer die aan een documentsoort hangt: eerst de
|
|
33
|
-
*
|
|
34
|
-
* de koppeling op papierformaat. Geeft `null` als
|
|
40
|
+
* De printer die aan een documentsoort hangt: eerst de uitzondering voor de
|
|
41
|
+
* werkplek, dan de standaard (of nieuwste actieve) layout voor die soort met
|
|
42
|
+
* zijn printerkoppeling, anders de koppeling op papierformaat. Geeft `null` als
|
|
43
|
+
* er niets gekoppeld is.
|
|
35
44
|
*/
|
|
36
|
-
export declare function printerVoorDocumenttype(documenttype: DocumentType | string, papierformaat?: string): Promise<string | null>;
|
|
45
|
+
export declare function printerVoorDocumenttype(documenttype: DocumentType | string, papierformaat?: string, werkplek?: string): Promise<string | null>;
|
|
37
46
|
export interface PrintPdfInput {
|
|
38
47
|
/** Documentsoort, alleen voor overzicht en printerkeuze. */
|
|
39
48
|
documenttype: DocumentType | string;
|
|
@@ -46,8 +55,12 @@ export interface PrintPdfInput {
|
|
|
46
55
|
* layout of het papierformaat van de documentsoort.
|
|
47
56
|
*/
|
|
48
57
|
printerId?: string;
|
|
58
|
+
/** Optioneel: werkplek/computernaam; bepaalt mee welke printer wordt gekozen. */
|
|
59
|
+
werkplek?: string;
|
|
49
60
|
kopieen?: number;
|
|
50
61
|
papierformaat?: string;
|
|
62
|
+
/** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
|
|
63
|
+
herkomst?: string;
|
|
51
64
|
payload?: Record<string, unknown>;
|
|
52
65
|
isHerprint?: boolean;
|
|
53
66
|
}
|
|
@@ -67,6 +80,8 @@ export interface PrintHtmlInput {
|
|
|
67
80
|
/** Verplicht: zonder layout kan de wachtrij zelf geen printer afleiden. */
|
|
68
81
|
printerId: string;
|
|
69
82
|
kopieen?: number;
|
|
83
|
+
/** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
|
|
84
|
+
herkomst?: string;
|
|
70
85
|
payload?: Record<string, unknown>;
|
|
71
86
|
isHerprint?: boolean;
|
|
72
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"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"}
|
package/dist-lib/lib/printApi.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
// Andere modules gebruiken uitsluitend deze functies; zij hoeven de tabellen
|
|
5
5
|
// van deze module niet te kennen.
|
|
6
6
|
import { supabase } from "./supabaseClient.js";
|
|
7
|
+
import { printerVoorWerkplekDocument } from "./documentRoutering.js";
|
|
8
|
+
import { bronVoorDocument } from "./documentBron.js";
|
|
7
9
|
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
8
10
|
/** Zoekt de te gebruiken layout: expliciet, anders standaard, anders de nieuwste. */
|
|
9
11
|
async function bepaalLayout(documenttype, layoutId) {
|
|
@@ -25,16 +27,26 @@ async function bepaalLayout(documenttype, layoutId) {
|
|
|
25
27
|
.limit(1);
|
|
26
28
|
return arr(data)[0] ?? null;
|
|
27
29
|
}
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Kiest een printer: uitzondering voor de werkplek, anders koppeling op layout,
|
|
32
|
+
* anders koppeling op documentsoort + formaat.
|
|
33
|
+
*/
|
|
34
|
+
async function bepaalPrinter(documenttype, layoutId, papierformaat, werkplek) {
|
|
35
|
+
if (werkplek) {
|
|
36
|
+
const viaWerkplek = await printerVoorWerkplekDocument(documenttype, werkplek);
|
|
37
|
+
if (viaWerkplek)
|
|
38
|
+
return viaWerkplek;
|
|
39
|
+
}
|
|
40
|
+
if (layoutId) {
|
|
41
|
+
const { data: mappings } = await supabase
|
|
42
|
+
.from("printer_mappings")
|
|
43
|
+
.select("printer_id, prioriteit")
|
|
44
|
+
.eq("layout_id", layoutId)
|
|
45
|
+
.order("prioriteit");
|
|
46
|
+
const viaLayout = arr(mappings)[0]?.printer_id;
|
|
47
|
+
if (viaLayout)
|
|
48
|
+
return viaLayout;
|
|
49
|
+
}
|
|
38
50
|
if (papierformaat) {
|
|
39
51
|
const { data } = await supabase
|
|
40
52
|
.from("document_formaat_printers")
|
|
@@ -48,6 +60,29 @@ async function bepaalPrinter(documenttype, layoutId, papierformaat) {
|
|
|
48
60
|
}
|
|
49
61
|
return null;
|
|
50
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Kenmerk waarmee de wachtrij twee opdrachten van elkaar kan onderscheiden.
|
|
65
|
+
* Aanleverende modules horen altijd een order-kenmerk mee te geven
|
|
66
|
+
* (`queue_item_id`, `order_id` of `ordernummer` in de payload); zonder zo'n
|
|
67
|
+
* kenmerk valt de dubbelbescherming terug op het document zelf.
|
|
68
|
+
*/
|
|
69
|
+
function orderKenmerk(payload) {
|
|
70
|
+
const p = payload ?? {};
|
|
71
|
+
for (const sleutel of ["queue_item_id", "order_id", "ordernummer", "order_number", "orderId"]) {
|
|
72
|
+
const w = p[sleutel];
|
|
73
|
+
if (typeof w === "string" && w.trim())
|
|
74
|
+
return w.trim();
|
|
75
|
+
if (typeof w === "number" && Number.isFinite(w))
|
|
76
|
+
return String(w);
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
function waarschuwZonderKenmerk(documentnaam, payload) {
|
|
81
|
+
if (orderKenmerk(payload))
|
|
82
|
+
return;
|
|
83
|
+
console.warn(`[layout-maker] Printopdracht "${documentnaam}" heeft geen order-kenmerk in de payload ` +
|
|
84
|
+
`(queue_item_id / order_id / ordernummer). De dubbelbescherming valt terug op het document zelf.`);
|
|
85
|
+
}
|
|
51
86
|
/** Rij in de wachtrij zetten. Geeft null als de dubbelbeveiliging hem tegenhield. */
|
|
52
87
|
async function zetInWachtrij(rij) {
|
|
53
88
|
const { data, error } = await supabase
|
|
@@ -76,18 +111,26 @@ export class DubbeleAanvraagFout extends Error {
|
|
|
76
111
|
* modules binnen dezelfde shell en database.
|
|
77
112
|
*/
|
|
78
113
|
export async function printDocument(input) {
|
|
79
|
-
const
|
|
114
|
+
const regel = await bronVoorDocument(input.documenttype, input.herkomst);
|
|
115
|
+
const layoutKeuze = input.layoutId ?? (regel?.bron === "eigen_layout" ? (regel.layout_id ?? undefined) : undefined);
|
|
116
|
+
const layout = await bepaalLayout(input.documenttype, layoutKeuze);
|
|
80
117
|
if (!layout)
|
|
81
118
|
throw new Error(`Geen layout gevonden voor documenttype "${input.documenttype}"`);
|
|
82
119
|
const printerId = input.printerId ??
|
|
83
|
-
(await bepaalPrinter(input.documenttype, layout.id, layout.papierformaat ?? null));
|
|
120
|
+
(await bepaalPrinter(input.documenttype, layout.id, layout.papierformaat ?? null, input.werkplek ?? null));
|
|
121
|
+
waarschuwZonderKenmerk(input.documentnaam, input.payload);
|
|
84
122
|
const jobId = await zetInWachtrij({
|
|
85
123
|
layout_id: layout.id,
|
|
86
124
|
printer_id: printerId,
|
|
87
125
|
documenttype: input.documenttype,
|
|
88
126
|
documentnaam: input.documentnaam,
|
|
89
127
|
kopieen: input.kopieen ?? 1,
|
|
90
|
-
payload:
|
|
128
|
+
payload: {
|
|
129
|
+
...(input.payload ?? {}),
|
|
130
|
+
...(input.werkplek ? { werkplek: input.werkplek } : {}),
|
|
131
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
132
|
+
},
|
|
133
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
91
134
|
is_herprint: input.isHerprint ?? false,
|
|
92
135
|
});
|
|
93
136
|
if (!jobId)
|
|
@@ -95,24 +138,14 @@ export async function printDocument(input) {
|
|
|
95
138
|
return { jobId, layoutId: layout.id, printerId };
|
|
96
139
|
}
|
|
97
140
|
/**
|
|
98
|
-
* De printer die aan een documentsoort hangt: eerst de
|
|
99
|
-
*
|
|
100
|
-
* de koppeling op papierformaat. Geeft `null` als
|
|
141
|
+
* De printer die aan een documentsoort hangt: eerst de uitzondering voor de
|
|
142
|
+
* werkplek, dan de standaard (of nieuwste actieve) layout voor die soort met
|
|
143
|
+
* zijn printerkoppeling, anders de koppeling op papierformaat. Geeft `null` als
|
|
144
|
+
* er niets gekoppeld is.
|
|
101
145
|
*/
|
|
102
|
-
export async function printerVoorDocumenttype(documenttype, papierformaat) {
|
|
146
|
+
export async function printerVoorDocumenttype(documenttype, papierformaat, werkplek) {
|
|
103
147
|
const layout = await bepaalLayout(documenttype);
|
|
104
|
-
|
|
105
|
-
if (!papierformaat)
|
|
106
|
-
return null;
|
|
107
|
-
const { data } = await supabase
|
|
108
|
-
.from("document_formaat_printers")
|
|
109
|
-
.select("printer_id")
|
|
110
|
-
.eq("documenttype", documenttype)
|
|
111
|
-
.eq("formaat_code", papierformaat)
|
|
112
|
-
.maybeSingle();
|
|
113
|
-
return data?.printer_id ?? null;
|
|
114
|
-
}
|
|
115
|
-
return bepaalPrinter(documenttype, layout.id, papierformaat ?? layout.papierformaat ?? null);
|
|
148
|
+
return bepaalPrinter(documenttype, layout?.id ?? null, papierformaat ?? layout?.papierformaat ?? null, werkplek ?? null);
|
|
116
149
|
}
|
|
117
150
|
/**
|
|
118
151
|
* Print een kant-en-klare PDF (klantsticker, Floriday-document, factuur van een
|
|
@@ -123,18 +156,41 @@ export async function printPdf(input) {
|
|
|
123
156
|
const base64 = (input.pdfBase64 ?? "").replace(/^data:application\/pdf;base64,/i, "").trim();
|
|
124
157
|
if (!base64 && !input.pdfUrl)
|
|
125
158
|
throw new Error("Geef een PDF mee via pdfBase64 of pdfUrl.");
|
|
159
|
+
// Is ingesteld dat deze herkomst altijd een eigen ontwerp krijgt, dan wordt de
|
|
160
|
+
// meegestuurde PDF genegeerd en het document zelf opgemaakt.
|
|
161
|
+
const regel = await bronVoorDocument(input.documenttype, input.herkomst);
|
|
162
|
+
if (regel?.bron === "eigen_layout") {
|
|
163
|
+
const res = await printDocument({
|
|
164
|
+
documenttype: input.documenttype,
|
|
165
|
+
documentnaam: input.documentnaam,
|
|
166
|
+
layoutId: regel.layout_id ?? undefined,
|
|
167
|
+
printerId: input.printerId,
|
|
168
|
+
werkplek: input.werkplek,
|
|
169
|
+
kopieen: input.kopieen,
|
|
170
|
+
herkomst: input.herkomst,
|
|
171
|
+
payload: input.payload,
|
|
172
|
+
isHerprint: input.isHerprint,
|
|
173
|
+
});
|
|
174
|
+
return { jobId: res.jobId };
|
|
175
|
+
}
|
|
126
176
|
const printerId = input.printerId ??
|
|
127
|
-
(await printerVoorDocumenttype(input.documenttype, input.papierformaat));
|
|
177
|
+
(await printerVoorDocumenttype(input.documenttype, input.papierformaat, input.werkplek));
|
|
128
178
|
if (!printerId) {
|
|
129
179
|
throw new Error(`Geen printer gekoppeld voor ${input.documenttype} — stel dit in bij Layouts en printers.`);
|
|
130
180
|
}
|
|
181
|
+
waarschuwZonderKenmerk(input.documentnaam, input.payload);
|
|
131
182
|
const jobId = await zetInWachtrij({
|
|
132
183
|
layout_id: null,
|
|
133
184
|
printer_id: printerId,
|
|
134
185
|
documenttype: input.documenttype,
|
|
135
186
|
documentnaam: input.documentnaam,
|
|
136
187
|
kopieen: input.kopieen ?? 1,
|
|
137
|
-
payload:
|
|
188
|
+
payload: {
|
|
189
|
+
...(input.payload ?? {}),
|
|
190
|
+
...(input.werkplek ? { werkplek: input.werkplek } : {}),
|
|
191
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
192
|
+
},
|
|
193
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
138
194
|
is_herprint: input.isHerprint ?? false,
|
|
139
195
|
...(base64 ? { pdf_base64: base64 } : {}),
|
|
140
196
|
...(input.pdfUrl ? { pdf_url: input.pdfUrl } : {}),
|
|
@@ -152,13 +208,18 @@ export async function printHtml(input) {
|
|
|
152
208
|
throw new Error("Er is geen opmaak meegegeven.");
|
|
153
209
|
if (!input.printerId)
|
|
154
210
|
throw new Error("Kies een printer: een HTML-opdracht heeft geen layout.");
|
|
211
|
+
waarschuwZonderKenmerk(input.documentnaam, input.payload);
|
|
155
212
|
const jobId = await zetInWachtrij({
|
|
156
213
|
layout_id: null,
|
|
157
214
|
printer_id: input.printerId,
|
|
158
215
|
documenttype: input.documenttype,
|
|
159
216
|
documentnaam: input.documentnaam,
|
|
160
217
|
kopieen: input.kopieen ?? 1,
|
|
161
|
-
payload:
|
|
218
|
+
payload: {
|
|
219
|
+
...(input.payload ?? {}),
|
|
220
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
221
|
+
},
|
|
222
|
+
...(input.herkomst ? { herkomst: input.herkomst } : {}),
|
|
162
223
|
is_herprint: input.isHerprint ?? false,
|
|
163
224
|
render_html: input.html,
|
|
164
225
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAc5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAeD,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAc5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAeD,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AA8E9D;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BnF;AAmFD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoHzF;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AAyKD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBtF"}
|