@flowselections/layout-maker 1.58.1 → 1.59.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.
Files changed (43) hide show
  1. package/dist-lib/components/ComputersLijst.d.ts +1 -0
  2. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  3. package/dist-lib/components/ComputersLijst.js +9 -5
  4. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  5. package/dist-lib/components/PrintQueuePage.js +8 -5
  6. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  7. package/dist-lib/components/PrintplekDetailPage.js +4 -2
  8. package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
  9. package/dist-lib/components/PrintplekkenPage.js +10 -2
  10. package/dist-lib/components/TestprintDialog.d.ts.map +1 -1
  11. package/dist-lib/components/TestprintDialog.js +5 -1
  12. package/dist-lib/components/WerkplekkenTab.d.ts.map +1 -1
  13. package/dist-lib/components/WerkplekkenTab.js +4 -3
  14. package/dist-lib/integrations/supabase/types.d.ts +108 -0
  15. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  16. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  17. package/dist-lib/lib/orderData.server.js +26 -3
  18. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  19. package/dist-lib/lib/pakbonHtml.js +6 -1
  20. package/dist-lib/lib/printQueue.server.d.ts +6 -0
  21. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  22. package/dist-lib/lib/printQueue.server.js +25 -2
  23. package/dist-lib/lib/printRoutering.d.ts +3 -1
  24. package/dist-lib/lib/printRoutering.d.ts.map +1 -1
  25. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  26. package/dist-lib/lib/printService.functions.js +3 -1
  27. package/dist-lib/lib/printnodeStatus.d.ts.map +1 -1
  28. package/dist-lib/lib/printnodeStatus.js +4 -0
  29. package/dist-lib/lib/printnodeWebhook.d.ts +2 -0
  30. package/dist-lib/lib/printnodeWebhook.d.ts.map +1 -1
  31. package/dist-lib/lib/printnodeWebhook.js +31 -1
  32. package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts +2 -0
  33. package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts.map +1 -1
  34. package/dist-lib/lib/printnodeWebhookBeheer.server.js +12 -2
  35. package/dist-lib/lib/productiebonHtml.d.ts.map +1 -1
  36. package/dist-lib/lib/productiebonHtml.js +7 -1
  37. package/dist-lib/lib/testprint.d.ts +5 -1
  38. package/dist-lib/lib/testprint.d.ts.map +1 -1
  39. package/dist-lib/lib/testprint.js +55 -11
  40. package/dist-lib/lib/waaromPrinter.d.ts +2 -0
  41. package/dist-lib/lib/waaromPrinter.d.ts.map +1 -1
  42. package/dist-lib/lib/waaromPrinter.js +13 -0
  43. package/package.json +4 -4
@@ -9,6 +9,7 @@ export declare function useComputers(): {
9
9
  computers: ComputerModel[];
10
10
  loading: boolean;
11
11
  fout: string | null;
12
+ gecontroleerd: Date | null;
12
13
  reload: (stil?: boolean) => Promise<void>;
13
14
  };
14
15
  export declare function ComputersLijst({ computers, loading, fout, onVernieuw, onPrintersToevoegen, toevoegenOpen, onToevoegenOpenChange, alleenDialog, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"ComputersLijst.d.ts","sourceRoot":"","sources":["../../src/components/ComputersLijst.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY;;;;;EAiD3B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,OAAO,EACP,IAAI,EACJ,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,YAAoB,GACrB,EAAE;IACD,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,+BA0IA"}
1
+ {"version":3,"file":"ComputersLijst.d.ts","sourceRoot":"","sources":["../../src/components/ComputersLijst.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY;;;;;;EAuD3B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,OAAO,EACP,IAAI,EACJ,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,YAAoB,GACrB,EAAE;IACD,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,+BA0IA"}
@@ -13,6 +13,7 @@ export function useComputers() {
13
13
  const [computers, setComputers] = useState([]);
14
14
  const [loading, setLoading] = useState(true);
15
15
  const [fout, setFout] = useState(null);
16
+ const [gecontroleerd, setGecontroleerd] = useState(null);
16
17
  const load = useCallback(async (stil = false) => {
17
18
  if (!stil)
18
19
  setLoading(true);
@@ -26,8 +27,13 @@ export function useComputers() {
26
27
  const printers = p.ok && Array.isArray(p.printers) ? p.printers : [];
27
28
  const genegeerd = new Set((Array.isArray(g) ? g : []).map((x) => x.computer_naam));
28
29
  const lijst = (c.ok && Array.isArray(c.computers) ? c.computers : []).filter((comp) => !genegeerd.has(comp.naam));
29
- if (!c.ok)
30
- setFout(c.fout);
30
+ if (!c.ok) {
31
+ // PrintNode niet bereikbaar: vorige status laten staan en de reden tonen,
32
+ // in plaats van alle computers als "niet aangemeld" te tonen.
33
+ setFout(c.fout ?? "PrintNode gaf geen computerlijst terug.");
34
+ return;
35
+ }
36
+ setGecontroleerd(new Date());
31
37
  setComputers(lijst.map((comp) => ({
32
38
  id: String(comp.id),
33
39
  naam: comp.naam,
@@ -40,8 +46,6 @@ export function useComputers() {
40
46
  setFout(/401|unauthorized|authorization/i.test(melding)
41
47
  ? "Je sessie is verlopen. Log opnieuw in en probeer het nog eens."
42
48
  : "Er kon geen verbinding worden gemaakt met de printdienst.");
43
- if (!stil)
44
- setComputers([]);
45
49
  }
46
50
  finally {
47
51
  setLoading(false);
@@ -50,7 +54,7 @@ export function useComputers() {
50
54
  useEffect(() => {
51
55
  void load();
52
56
  }, [load]);
53
- return { computers, loading, fout, reload: load };
57
+ return { computers, loading, fout, gecontroleerd, reload: load };
54
58
  }
55
59
  export function ComputersLijst({ computers, loading, fout, onVernieuw, onPrintersToevoegen, toevoegenOpen, onToevoegenOpenChange, alleenDialog = false, }) {
56
60
  const [wachtOp, setWachtOp] = useState([]);
@@ -1 +1 @@
1
- {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAoFA,wBAAgB,cAAc,gCAqZ7B"}
1
+ {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAoFA,wBAAgB,cAAc,gCA4Z7B"}
@@ -78,15 +78,18 @@ export function PrintQueuePage() {
78
78
  return true;
79
79
  });
80
80
  // Echte tellingen over alle opdrachten (de lijst toont alleen de laatste 200).
81
- const [tellingen, setTellingen] = useState({});
81
+ const [tellingen, setTellingen] = useState(null);
82
+ const [tellingFout, setTellingFout] = useState(null);
82
83
  const herlaadTellingen = async () => {
83
84
  try {
84
85
  const t = await printTellingen();
85
- if (t && typeof t === "object")
86
+ if (t && typeof t === "object") {
86
87
  setTellingen(t);
88
+ setTellingFout(null);
89
+ }
87
90
  }
88
- catch {
89
- /* tellingen blijven staan */
91
+ catch (e) {
92
+ setTellingFout(e instanceof Error ? e.message : "Tellen is niet gelukt");
90
93
  }
91
94
  };
92
95
  const printerById = useMemo(() => new Map(printers.map((p) => [p.id, p])), [printers]);
@@ -182,7 +185,7 @@ export function PrintQueuePage() {
182
185
  setAnnuleertAlles(false);
183
186
  await reload(true);
184
187
  }
185
- }, children: [_jsx(XCircle, { className: "mr-2 h-4 w-4" }), annuleertAlles ? "Bezig…" : `Alles annuleren (${openJobs.length})`] })] })] }), _jsx(PrintStatusBanner, { fout: tickFout }), _jsx("div", { className: "grid gap-4 md:grid-cols-4", children: ["wachtend", "bezig", "voltooid", "mislukt"].map((s) => (_jsx(Card, { children: _jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { className: "capitalize", children: s }), _jsx(CardTitle, { className: "text-2xl", children: tellingen[s] ?? 0 })] }) }, s))) }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Opdrachten" }), _jsx(CardDescription, { children: loading ? "Laden…" : `${gefilterd.length} opdrachten` })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-3 md:grid-cols-4", children: [_jsxs("div", { className: "relative md:col-span-2", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek op document of gebruiker", value: zoek, onChange: (e) => setZoek(e.target.value) })] }), _jsxs(Select, { value: status, onValueChange: setStatus, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle statussen" }), ["wachtend", "bezig", "voltooid", "mislukt", "geannuleerd"].map((s) => (_jsx(SelectItem, { value: s, children: s }, s)))] })] }), _jsxs(Select, { value: plekFilter, onValueChange: setPlekFilter, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle printplekken" }), plekOpties.map((p) => (_jsx(SelectItem, { value: p, children: p }, p))), _jsx(SelectItem, { value: "\u2014", children: "Zonder printplek" })] })] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Document" }), _jsx(TableHead, { children: "Printplek" }), _jsx(TableHead, { children: "Layout (aangeleverd \u2192 gebruikt)" }), _jsx(TableHead, { children: "Printer" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { children: "Tijdstip" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsxs(TableBody, { children: [gefilterd.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 7, className: "py-10 text-center text-sm text-muted-foreground", children: "Geen printopdrachten." }) })), gefilterd.map((j) => (_jsxs(TableRow, { children: [_jsxs(TableCell, { children: [_jsx("span", { className: "font-medium", children: j.documentnaam ?? documentTypeLabel(j.documenttype) }), j.is_herprint && (_jsx(Badge, { variant: "outline", className: "ml-2", children: "herprint" })), !heeftOrderKenmerk(j) && (_jsx(Badge, { variant: "outline", className: "ml-2 text-amber-600", children: "geen orderkenmerk" })), j.foutmelding && (_jsx("span", { className: "block text-xs text-destructive", children: j.foutmelding }))] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: plekPerJob.get(j.id) || "—" }), _jsxs(TableCell, { className: "text-sm text-muted-foreground", children: [_jsx("span", { title: "Aangeleverd door de module", children: j.layout_id ? layoutNaam.get(j.layout_id) ?? "Onbekende layout" : "geen" }), _jsxs("span", { className: "block text-xs", children: ["\u2192", " ", _jsx("span", { title: "Layout die de wachtrij gebruikte", children: j.gebruikte_layout_id
188
+ }, children: [_jsx(XCircle, { className: "mr-2 h-4 w-4" }), annuleertAlles ? "Bezig…" : `Alles annuleren (${openJobs.length})`] })] })] }), _jsx(PrintStatusBanner, { fout: tickFout }), _jsx("div", { className: "grid gap-4 md:grid-cols-4", children: ["wachtend", "bezig", "voltooid", "mislukt"].map((s) => (_jsx(Card, { children: _jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { className: "capitalize", children: s }), _jsx(CardTitle, { className: "text-2xl", title: tellingFout ?? undefined, children: tellingFout && !tellingen ? "—" : tellingen ? (tellingen[s] ?? 0) : "laden…" }), tellingFout ? _jsx("p", { className: "text-destructive text-xs", children: tellingFout }) : null] }) }, s))) }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Opdrachten" }), _jsx(CardDescription, { children: loading ? "Laden…" : `${gefilterd.length} opdrachten` })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-3 md:grid-cols-4", children: [_jsxs("div", { className: "relative md:col-span-2", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek op document of gebruiker", value: zoek, onChange: (e) => setZoek(e.target.value) })] }), _jsxs(Select, { value: status, onValueChange: setStatus, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle statussen" }), ["wachtend", "bezig", "voltooid", "mislukt", "geannuleerd"].map((s) => (_jsx(SelectItem, { value: s, children: s }, s)))] })] }), _jsxs(Select, { value: plekFilter, onValueChange: setPlekFilter, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle printplekken" }), plekOpties.map((p) => (_jsx(SelectItem, { value: p, children: p }, p))), _jsx(SelectItem, { value: "\u2014", children: "Zonder printplek" })] })] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Document" }), _jsx(TableHead, { children: "Printplek" }), _jsx(TableHead, { children: "Layout (aangeleverd \u2192 gebruikt)" }), _jsx(TableHead, { children: "Printer" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { children: "Tijdstip" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsxs(TableBody, { children: [gefilterd.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 7, className: "py-10 text-center text-sm text-muted-foreground", children: "Geen printopdrachten." }) })), gefilterd.map((j) => (_jsxs(TableRow, { children: [_jsxs(TableCell, { children: [_jsx("span", { className: "font-medium", children: j.documentnaam ?? documentTypeLabel(j.documenttype) }), j.is_herprint && (_jsx(Badge, { variant: "outline", className: "ml-2", children: "herprint" })), !heeftOrderKenmerk(j) && (_jsx(Badge, { variant: "outline", className: "ml-2 text-amber-600", children: "geen orderkenmerk" })), j.foutmelding && (_jsx("span", { className: "block text-xs text-destructive", children: j.foutmelding }))] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: plekPerJob.get(j.id) || "—" }), _jsxs(TableCell, { className: "text-sm text-muted-foreground", children: [_jsx("span", { title: "Aangeleverd door de module", children: j.layout_id ? layoutNaam.get(j.layout_id) ?? "Onbekende layout" : "geen" }), _jsxs("span", { className: "block text-xs", children: ["\u2192", " ", _jsx("span", { title: "Layout die de wachtrij gebruikte", children: j.gebruikte_layout_id
186
189
  ? layoutNaam.get(j.gebruikte_layout_id) ?? "Onbekende layout"
187
190
  : j.gebruikte_bron
188
191
  ? "geen layout"
@@ -1 +1 @@
1
- {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AAiEA,wBAAgB,mBAAmB,gCAooBlC"}
1
+ {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AAkEA,wBAAgB,mBAAmB,gCA0oBlC"}
@@ -15,12 +15,13 @@ import { ComputerVerwijderenDialog } from "./ComputerVerwijderenDialog.js";
15
15
  import { usePrinters } from "../lib/useDocumentData.js";
16
16
  import { useNetwerkPrinters } from "../lib/useNetwerkPrinters.js";
17
17
  import { useComputers } from "./ComputersLijst.js";
18
- import { DOCUMENT_TYPES, documentTypeLabel } from "../lib/documentTypes.js";
18
+ import { DOCUMENT_TYPES, documentTypeLabel, isEtiketSoort } from "../lib/documentTypes.js";
19
19
  import { drukTestpaginaAf } from "../lib/testpagina.js";
20
20
  import { TestprintDialog } from "./TestprintDialog.js";
21
21
  import { leesbareFout } from "../lib/foutTekst.js";
22
22
  import { supabase } from "../lib/supabaseClient.js";
23
23
  import { useRouteringOverzicht } from "../lib/printRoutering.js";
24
+ import { routeringMeldingTekst } from "../lib/waaromPrinter.js";
24
25
  const BRON_LABEL = {
25
26
  werkplek_formaat: "Werkplek (papierformaat)",
26
27
  werkplek_afwijking: "Werkplek (afwijking)",
@@ -114,6 +115,7 @@ export function PrintplekDetailPage() {
114
115
  const { uitkomsten, laden: routeringLaden, reload: reloadRoutering } = useRouteringOverzicht(plekId, DOCUMENT_TYPES.map((d) => d.value), pcNamen);
115
116
  const uitkomstVoor = (t, pc) => uitkomsten[`${t}::${pc ?? ""}`] ?? null;
116
117
  const routeringZichtbaar = DOCUMENT_TYPES.filter((d) => alleDocumenten ||
118
+ isEtiketSoort(d.value) ||
117
119
  (pcNamen.length ? pcNamen : [null]).some((pc) => {
118
120
  const u = uitkomstVoor(d.value, pc);
119
121
  return !!u && (u.bron !== "geen" || u.overgeslagen.length > 0);
@@ -156,7 +158,7 @@ export function PrintplekDetailPage() {
156
158
  return _jsx("td", { colSpan: 3 });
157
159
  const n = printerNaam(u.printer_id);
158
160
  const status = !u.printer_id ? "geen" : n ? (printerOnline(u.printer_id) ? "online" : "offline") : "ontbreekt";
159
- return (_jsxs(_Fragment, { children: [_jsx("td", { className: "py-2 pr-3 text-xs text-muted-foreground", children: u.papierformaat ?? "—" }), _jsxs("td", { className: "py-2 pr-3", children: [_jsxs(Badge, { variant: u.bron === "geen" ? "destructive" : "secondary", "data-bron": u.bron, children: [BRON_LABEL[u.bron], u.bron === "werkplek" && u.werkplek ? ` (${u.werkplek})` : ""] }), u.overgeslagen.map((o) => (_jsxs("div", { className: "text-destructive mt-1 flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " ", BRON_LABEL[o.bron], " overgeslagen: printer", " ", o.reden === "ontbreekt" ? "ontbreekt" : o.reden === "inactief" ? "inactief" : "niet (meer) aan deze plek gekoppeld"] }, o.regel_id)))] }), _jsxs("td", { className: "py-2 pr-3", children: [u.printer_id ? (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${status === "online" ? "bg-emerald-500" : status === "offline" ? "bg-muted-foreground" : "bg-destructive"}` }), n ?? "Onbekende printer", _jsx("span", { className: "text-muted-foreground text-xs", children: status })] })) : (_jsx("span", { className: "text-destructive text-xs", children: "geen printer \u2014 opdrachten blijven wachten" })), _jsx("div", { children: _jsx(BronLink, { u: u }) })] })] }));
161
+ return (_jsxs(_Fragment, { children: [_jsx("td", { className: "py-2 pr-3 text-xs text-muted-foreground", children: u.papierformaat ?? "—" }), _jsxs("td", { className: "py-2 pr-3", children: [_jsxs(Badge, { variant: u.bron === "geen" ? "destructive" : "secondary", "data-bron": u.bron, children: [BRON_LABEL[u.bron], u.bron === "werkplek" && u.werkplek ? ` (${u.werkplek})` : ""] }), u.overgeslagen.map((o) => (_jsxs("div", { className: "text-destructive mt-1 flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " ", BRON_LABEL[o.bron], " overgeslagen: printer", " ", o.reden === "ontbreekt" ? "ontbreekt" : o.reden === "inactief" ? "inactief" : o.reden === "geen_labelprinter" ? "is geen labelprinter (etiketsoort)" : "niet (meer) aan deze plek gekoppeld"] }, o.regel_id))), routeringMeldingTekst(u.melding) ? (_jsxs("div", { className: "text-destructive mt-1 flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " ", routeringMeldingTekst(u.melding)] })) : null] }), _jsxs("td", { className: "py-2 pr-3", children: [u.printer_id ? (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${status === "online" ? "bg-emerald-500" : status === "offline" ? "bg-muted-foreground" : "bg-destructive"}` }), n ?? "Onbekende printer", _jsx("span", { className: "text-muted-foreground text-xs", children: status })] })) : (_jsx("span", { className: "text-destructive text-xs", children: "geen printer \u2014 opdrachten blijven wachten" })), _jsx("div", { children: _jsx(BronLink, { u: u }) })] })] }));
160
162
  }
161
163
  const bronnen = koppelingen.filter((k) => k.print_plek_id === plekId);
162
164
  const bestaandePlekIds = new Set(plekken.map((p) => p.id));
@@ -1 +1 @@
1
- {"version":3,"file":"PrintplekkenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekkenPage.tsx"],"names":[],"mappings":"AAsDA,wBAAgB,gBAAgB,CAAC,EAAE,OAAe,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,+BA6d/E"}
1
+ {"version":3,"file":"PrintplekkenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekkenPage.tsx"],"names":[],"mappings":"AAsDA,wBAAgB,gBAAgB,CAAC,EAAE,OAAe,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,+BA+e/E"}
@@ -22,7 +22,7 @@ import { bijgewerktTekst, useAutoRefresh } from "../lib/useAutoRefresh.js";
22
22
  import { documentTypeLabel } from "../lib/documentTypes.js";
23
23
  export function PrintplekkenPage({ ingebed = false } = {}) {
24
24
  const { plekken, computers: plekComputers, regels, koppelingen, fout, reload } = usePrintplekken();
25
- const { computers, loading: computersLaden, fout: computersFout, reload: herlaadComputers, } = useComputers();
25
+ const { computers, loading: computersLaden, fout: computersFout, gecontroleerd: computersGecontroleerd, reload: herlaadComputers, } = useComputers();
26
26
  const { printers, reload: herlaadPrinters } = usePrinters();
27
27
  const { gevonden, zoek } = useNetwerkPrinters();
28
28
  const { genegeerd, reload: herlaadGenegeerd } = useGenegeerdeComputers();
@@ -101,7 +101,15 @@ export function PrintplekkenPage({ ingebed = false } = {}) {
101
101
  const Wrapper = ingebed ? "div" : "main";
102
102
  return (_jsxs(Wrapper, { className: ingebed ? "space-y-6" : "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [!ingebed && (_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: "Printplekken" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Een printplek is een fysieke plek in het bedrijf, bijvoorbeeld een pickstation. Alle computers en printers op die plek horen bij elkaar." })] })), _jsxs("div", { className: "ml-auto flex items-center gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => setComputerToevoegen(true), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Computer aanmelden"] }), _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] })] })] }), _jsx(PrintStatusBanner, { fout: computersFout, offlineWerkplekken: computers.filter((c) => !c.online).map((c) => c.naam), toonWerkplekLink: false }), fout ? (_jsx("div", { className: "border-destructive/40 bg-destructive/10 text-destructive rounded-xl border p-3 text-sm", children: fout })) : null, _jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-xl border p-3", children: [_jsxs("div", { className: "relative min-w-[220px] flex-1", children: [_jsx(Search, { className: "text-muted-foreground absolute top-2.5 left-3 h-4 w-4" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek printplek of computer\u2026", value: zoekterm, onChange: (e) => setZoekterm(e.target.value) })] }), _jsxs("span", { className: "text-muted-foreground text-sm", children: [plekken.length, " plek", plekken.length === 1 ? "" : "ken", " \u00B7 ", computers.length, " computer", computers.length === 1 ? "" : "s", " (", computersOnline, " aan) \u00B7 ", totaalPrinters, " printer", totaalPrinters === 1 ? "" : "s"] }), _jsx("span", { className: "text-muted-foreground ml-auto text-xs", children: bijgewerktTekst(bijgewerkt) })] }), kaarten.length === 0 ? (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: plekken.length === 0 ? "Nog geen printplekken" : "Geen resultaten" }), _jsx(CardDescription, { children: plekken.length === 0
103
103
  ? 'Maak er één aan per plek waar geprint wordt, bijvoorbeeld "Pickstation 1".'
104
- : "Geen printplek of computer gevonden met deze zoekterm." })] }), _jsx(CardContent, { className: "flex flex-wrap gap-2", children: _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] }) })] })) : (_jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: kaarten.map((k) => (_jsxs("div", { className: "rounded-xl border p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MapPin, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "truncate font-medium", children: k.plek.naam }), _jsx("span", { className: `h-2.5 w-2.5 shrink-0 rounded-full ${k.klaar ? "bg-emerald-500" : "bg-destructive"}`, "aria-label": k.klaar ? "Klaar om te printen" : "Nog niet compleet" })] }), k.plek.omschrijving ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: k.plek.omschrijving })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-primary flex items-center text-xs", onClick: () => setTestprint({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Printer, { className: "mr-1 h-3.5 w-3.5" }), " Testprint"] }), _jsxs("button", { type: "button", className: "text-destructive flex items-center text-xs", onClick: () => setTeVerwijderen({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] }), _jsxs(Link, { to: "/layouts-printers/printplekken/$printplekId", params: { printplekId: k.plek.id }, className: "text-primary flex items-center text-xs", children: ["Instellen ", _jsx(ChevronRight, { className: "ml-1 h-3.5 w-3.5" })] })] })] }), _jsx("div", { className: "mt-3 space-y-2", children: k.computerLijst.length === 0 ? (_jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-2 rounded-lg border border-dashed p-3 text-sm", children: ["Nog geen computer gekoppeld", nietGekoppeld.length > 0 ? (_jsxs(Select, { onValueChange: (naam) => void koppel(k.plek.id, naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[190px]", children: _jsx(SelectValue, { placeholder: "Computer koppelen" }) }), _jsx(SelectContent, { children: nietGekoppeld.map((c) => (_jsx(SelectItem, { value: c.naam, children: c.naam }, c.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setComputerToevoegen(true), children: "Computer aanmelden" }))] })) : (k.computerLijst.map((c) => (_jsxs("div", { className: "bg-muted/40 flex flex-wrap items-center gap-3 rounded-lg px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.aangemeld ? (c.online ? "Aan" : "Uit") : "Niet aangemeld" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.ingesteld, " printer", c.ingesteld === 1 ? "" : "s", " \u00B7 ", c.gevonden, " gevonden"] }), _jsx(Button, { variant: "ghost", size: "sm", disabled: !c.id, onClick: () => naarComputer(c.id), children: "Printers toevoegen" })] }, c.koppelingId)))) }), _jsxs("div", { className: "text-muted-foreground mt-3 flex items-start gap-2 text-xs", children: [_jsx(Printer, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }), _jsx("span", { children: k.documentRegels.length === 0
104
+ : "Geen printplek of computer gevonden met deze zoekterm." })] }), _jsx(CardContent, { className: "flex flex-wrap gap-2", children: _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] }) })] })) : (_jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: kaarten.map((k) => (_jsxs("div", { className: "rounded-xl border p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MapPin, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "truncate font-medium", children: k.plek.naam }), _jsx("span", { className: `h-2.5 w-2.5 shrink-0 rounded-full ${k.klaar ? "bg-emerald-500" : "bg-destructive"}`, "aria-label": k.klaar ? "Klaar om te printen" : "Nog niet compleet" })] }), k.plek.omschrijving ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: k.plek.omschrijving })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-primary flex items-center text-xs", onClick: () => setTestprint({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Printer, { className: "mr-1 h-3.5 w-3.5" }), " Testprint"] }), _jsxs("button", { type: "button", className: "text-destructive flex items-center text-xs", onClick: () => setTeVerwijderen({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] }), _jsxs(Link, { to: "/layouts-printers/printplekken/$printplekId", params: { printplekId: k.plek.id }, className: "text-primary flex items-center text-xs", children: ["Instellen ", _jsx(ChevronRight, { className: "ml-1 h-3.5 w-3.5" })] })] })] }), _jsx("div", { className: "mt-3 space-y-2", children: k.computerLijst.length === 0 ? (_jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-2 rounded-lg border border-dashed p-3 text-sm", children: ["Nog geen computer gekoppeld", nietGekoppeld.length > 0 ? (_jsxs(Select, { onValueChange: (naam) => void koppel(k.plek.id, naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[190px]", children: _jsx(SelectValue, { placeholder: "Computer koppelen" }) }), _jsx(SelectContent, { children: nietGekoppeld.map((c) => (_jsx(SelectItem, { value: c.naam, children: c.naam }, c.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setComputerToevoegen(true), children: "Computer aanmelden" }))] })) : (k.computerLijst.map((c) => (_jsxs("div", { className: "bg-muted/40 flex flex-wrap items-center gap-3 rounded-lg px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.aangemeld
105
+ ? c.online
106
+ ? "Aan"
107
+ : "Uit"
108
+ : computersFout || !computersGecontroleerd
109
+ ? computersLaden && !computersFout
110
+ ? "Status laden…"
111
+ : "Status onbekend"
112
+ : "Niet aangemeld" }), !c.aangemeld && computersFout ? (_jsx("span", { className: "text-destructive text-xs", children: computersFout })) : null, computersGecontroleerd ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["PrintNode gecontroleerd om", " ", computersGecontroleerd.toLocaleTimeString("nl-NL", { hour: "2-digit", minute: "2-digit", second: "2-digit" })] })) : null, _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.ingesteld, " printer", c.ingesteld === 1 ? "" : "s", " \u00B7 ", c.gevonden, " gevonden"] }), _jsx(Button, { variant: "ghost", size: "sm", disabled: !c.id, onClick: () => naarComputer(c.id), children: "Printers toevoegen" })] }, c.koppelingId)))) }), _jsxs("div", { className: "text-muted-foreground mt-3 flex items-start gap-2 text-xs", children: [_jsx(Printer, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }), _jsx("span", { children: k.documentRegels.length === 0
105
113
  ? "Nog geen document aan een printer gekoppeld"
106
114
  : k.documentRegels
107
115
  .map((r) => `${documentTypeLabel(r.documenttype)} → ${printerNaam.get(r.printer_id ?? "") ?? "onbekende printer"}`)
@@ -1 +1 @@
1
- {"version":3,"file":"TestprintDialog.d.ts","sourceRoot":"","sources":["../../src/components/TestprintDialog.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,+BAoKA"}
1
+ {"version":3,"file":"TestprintDialog.d.ts","sourceRoot":"","sources":["../../src/components/TestprintDialog.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,+BAwKA"}
@@ -89,6 +89,10 @@ export function TestprintDialog({ open, onOpenChange, printplekId, printplekNaam
89
89
  ? "default"
90
90
  : st.status === "mislukt" || st.status === "geannuleerd"
91
91
  ? "destructive"
92
- : "secondary", children: [st.status === "voltooid" ? _jsx(Check, { className: "mr-1 h-3 w-3" }) : null, st.status === "mislukt" ? _jsx(X, { className: "mr-1 h-3 w-3" }) : null, STATUS_LABEL[st.status] ?? st.status] })) : null, _jsxs(Button, { size: "sm", variant: "outline", disabled: !r.printerId || st?.bezig || alles, onClick: () => void test(r.documenttype), children: [st?.bezig ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : null, "Test afdrukken"] })] })] }, r.documenttype));
92
+ : "secondary", children: [st.status === "voltooid" ? _jsx(Check, { className: "mr-1 h-3 w-3" }) : null, st.status === "mislukt" ? _jsx(X, { className: "mr-1 h-3 w-3" }) : null, st.status === "mislukt" && st.fout?.startsWith("FORMAAT_PAST_NIET")
93
+ ? "Geweigerd – past niet"
94
+ : st.status === "mislukt" && st.fout?.startsWith("GEEN_GELADEN_ETIKET")
95
+ ? "Geweigerd – geen etiket geladen"
96
+ : STATUS_LABEL[st.status] ?? st.status] })) : null, _jsxs(Button, { size: "sm", variant: "outline", disabled: !r.printerId || st?.bezig || alles, onClick: () => void test(r.documenttype), children: [st?.bezig ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : null, "Test afdrukken"] })] })] }, r.documenttype));
93
97
  }) }))] }) }));
94
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WerkplekkenTab.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekkenTab.tsx"],"names":[],"mappings":"AAcA,OAAO,EAUL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAM5B,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,+BAmC5G;AAqPD,wBAAgB,cAAc,gCA4E7B"}
1
+ {"version":3,"file":"WerkplekkenTab.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekkenTab.tsx"],"names":[],"mappings":"AAcA,OAAO,EAUL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAM5B,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,+BAyC5G;AAqPD,wBAAgB,cAAc,gCA4E7B"}
@@ -18,9 +18,10 @@ const selectKlasse = "border-input bg-background rounded-md border px-2 py-1 tex
18
18
  const db = supabase;
19
19
  export function GeladenEtiketKeuze({ printer, onGewijzigd }) {
20
20
  const opties = useMemo(() => etiketOpties(printer.ondersteunde_formaten), [printer.ondersteunde_formaten]);
21
- const huidig = printer.geladen_etiket?.naam ?? "";
21
+ // Namen uit PrintNode kunnen spaties aan begin of eind hebben: vergelijk getrimd.
22
+ const huidig = (printer.geladen_etiket?.naam ?? "").trim();
22
23
  return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm", id: `etiket-${printer.id}`, children: [_jsx("span", { className: "text-muted-foreground", children: "Geladen etiket:" }), _jsxs("select", { className: selectKlasse, value: huidig, onChange: async (e) => {
23
- const keuze = opties.find((o) => o.naam === e.target.value) ?? null;
24
+ const keuze = opties.find((o) => o.naam.trim() === e.target.value) ?? null;
24
25
  try {
25
26
  await zetPrinterVelden(printer.id, { geladen_etiket: keuze });
26
27
  toast.success("Geladen etiket opgeslagen");
@@ -29,7 +30,7 @@ export function GeladenEtiketKeuze({ printer, onGewijzigd }) {
29
30
  catch (err) {
30
31
  toast.error(leesbareFout(err, "Opslaan mislukt"));
31
32
  }
32
- }, children: [_jsx("option", { value: "", children: "\u2014 kies het etiket dat in de printer zit \u2014" }), opties.map((o) => (_jsxs("option", { value: o.naam, children: [o.naam.trim(), " (", maatTekst(o.breedte_mm, o.hoogte_mm), ")"] }, o.naam)))] }), !huidig ? (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), " Niet ingesteld: er wordt niets naar deze labelprinter geprint."] })) : null, !opties.length ? _jsx("span", { className: "text-muted-foreground text-xs", children: "PrintNode meldt nog geen formaten voor deze printer." }) : null] }));
33
+ }, children: [_jsx("option", { value: "", children: "\u2014 kies het etiket dat in de printer zit \u2014" }), huidig && !opties.some((o) => o.naam.trim() === huidig) && printer.geladen_etiket ? (_jsxs("option", { value: huidig, children: [huidig, " (", maatTekst(printer.geladen_etiket.breedte_mm, printer.geladen_etiket.hoogte_mm), ")"] })) : null, opties.map((o) => (_jsxs("option", { value: o.naam.trim(), children: [o.naam.trim(), " (", maatTekst(o.breedte_mm, o.hoogte_mm), ")"] }, o.naam)))] }), !huidig ? (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), " Niet ingesteld: er wordt niets naar deze labelprinter geprint."] })) : null, !opties.length ? _jsx("span", { className: "text-muted-foreground text-xs", children: "PrintNode meldt nog geen formaten voor deze printer." }) : null] }));
33
34
  }
34
35
  function PrinterSelect({ printers, value, onChange, leeg = "— geen —", }) {
35
36
  return (_jsxs("select", { className: selectKlasse, value: value ?? "", onChange: (e) => onChange(e.target.value || null), children: [_jsx("option", { value: "", children: leeg }), printers.map((p) => (_jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : "", p.online === false ? " (offline)" : ""] }, p.id)))] }));
@@ -18514,6 +18514,7 @@ export type Database = {
18514
18514
  created_at: string;
18515
18515
  default_end: string;
18516
18516
  default_start: string;
18517
+ eigen_vervoer: boolean;
18517
18518
  end_address: string | null;
18518
18519
  home_address: string | null;
18519
18520
  id: string;
@@ -18525,6 +18526,7 @@ export type Database = {
18525
18526
  created_at?: string;
18526
18527
  default_end?: string;
18527
18528
  default_start?: string;
18529
+ eigen_vervoer?: boolean;
18528
18530
  end_address?: string | null;
18529
18531
  home_address?: string | null;
18530
18532
  id?: string;
@@ -18536,6 +18538,7 @@ export type Database = {
18536
18538
  created_at?: string;
18537
18539
  default_end?: string;
18538
18540
  default_start?: string;
18541
+ eigen_vervoer?: boolean;
18539
18542
  end_address?: string | null;
18540
18543
  home_address?: string | null;
18541
18544
  id?: string;
@@ -26938,6 +26941,54 @@ export type Database = {
26938
26941
  };
26939
26942
  Relationships: [];
26940
26943
  };
26944
+ werkbon_standby_tijdvakken: {
26945
+ Row: {
26946
+ created_at: string;
26947
+ datum: string;
26948
+ eind_tijd: string;
26949
+ id: string;
26950
+ monteur_id: string;
26951
+ start_tijd: string;
26952
+ updated_at: string;
26953
+ werkbon_id: string;
26954
+ };
26955
+ Insert: {
26956
+ created_at?: string;
26957
+ datum: string;
26958
+ eind_tijd: string;
26959
+ id?: string;
26960
+ monteur_id: string;
26961
+ start_tijd: string;
26962
+ updated_at?: string;
26963
+ werkbon_id: string;
26964
+ };
26965
+ Update: {
26966
+ created_at?: string;
26967
+ datum?: string;
26968
+ eind_tijd?: string;
26969
+ id?: string;
26970
+ monteur_id?: string;
26971
+ start_tijd?: string;
26972
+ updated_at?: string;
26973
+ werkbon_id?: string;
26974
+ };
26975
+ Relationships: [
26976
+ {
26977
+ foreignKeyName: "werkbon_standby_tijdvakken_werkbon_id_fkey";
26978
+ columns: ["werkbon_id"];
26979
+ isOneToOne: false;
26980
+ referencedRelation: "werkbonnen";
26981
+ referencedColumns: ["id"];
26982
+ },
26983
+ {
26984
+ foreignKeyName: "werkbon_standby_tijdvakken_werkbon_id_fkey";
26985
+ columns: ["werkbon_id"];
26986
+ isOneToOne: false;
26987
+ referencedRelation: "wo_overview";
26988
+ referencedColumns: ["id"];
26989
+ }
26990
+ ];
26991
+ };
26941
26992
  werkbon_time_logs: {
26942
26993
  Row: {
26943
26994
  activity: string;
@@ -31942,6 +31993,10 @@ export type Database = {
31942
31993
  };
31943
31994
  Returns: Json;
31944
31995
  };
31996
+ logistics_orphan_carts_summary: {
31997
+ Args: never;
31998
+ Returns: Json;
31999
+ };
31945
32000
  logistics_packing_autofix: {
31946
32001
  Args: {
31947
32002
  p_limit?: number;
@@ -31999,6 +32054,16 @@ export type Database = {
31999
32054
  };
32000
32055
  Returns: boolean;
32001
32056
  };
32057
+ logistics_pakbon_old_order_row: {
32058
+ Args: {
32059
+ p_ids: string[];
32060
+ };
32061
+ Returns: boolean;
32062
+ };
32063
+ logistics_pakbon_oude_orderregels: {
32064
+ Args: never;
32065
+ Returns: Json;
32066
+ };
32002
32067
  logistics_parse_pickup: {
32003
32068
  Args: {
32004
32069
  p_value: string;
@@ -34246,6 +34311,10 @@ export type Database = {
34246
34311
  isSetofReturn: true;
34247
34312
  };
34248
34313
  };
34314
+ planning_mijn_eigen_vervoer: {
34315
+ Args: never;
34316
+ Returns: boolean;
34317
+ };
34249
34318
  planning_set_assistants: {
34250
34319
  Args: {
34251
34320
  _monteur_ids: string[];
@@ -34284,6 +34353,12 @@ export type Database = {
34284
34353
  };
34285
34354
  Returns: boolean;
34286
34355
  };
34356
+ print_is_labelprinter: {
34357
+ Args: {
34358
+ _printer_id: string;
34359
+ };
34360
+ Returns: boolean;
34361
+ };
34287
34362
  print_job_status_uitgebreid: {
34288
34363
  Args: {
34289
34364
  _job_id: string;
@@ -35836,6 +35911,12 @@ export type Database = {
35836
35911
  };
35837
35912
  Returns: undefined;
35838
35913
  };
35914
+ uren_overuren_intrekken: {
35915
+ Args: {
35916
+ _datum: string;
35917
+ };
35918
+ Returns: undefined;
35919
+ };
35839
35920
  uren_pagina_toegang_instellen: {
35840
35921
  Args: {
35841
35922
  _toegang: boolean;
@@ -36239,6 +36320,13 @@ export type Database = {
36239
36320
  Args: never;
36240
36321
  Returns: Json;
36241
36322
  };
36323
+ wo_boek_standby_tijdvakken: {
36324
+ Args: {
36325
+ _tijdvakken: Json;
36326
+ _werkbon_id: string;
36327
+ };
36328
+ Returns: Json;
36329
+ };
36242
36330
  wo_boek_standby_uren: {
36243
36331
  Args: {
36244
36332
  _datum: string;
@@ -36354,6 +36442,26 @@ export type Database = {
36354
36442
  };
36355
36443
  Returns: Json;
36356
36444
  };
36445
+ wo_standby_dag_herberekenen: {
36446
+ Args: {
36447
+ _datum: string;
36448
+ _monteur: string;
36449
+ };
36450
+ Returns: Json;
36451
+ };
36452
+ wo_standby_ov_dag: {
36453
+ Args: {
36454
+ _dienst: Json;
36455
+ _dow: number;
36456
+ _feest: boolean;
36457
+ _vakken: Json;
36458
+ };
36459
+ Returns: Json;
36460
+ };
36461
+ wo_standby_tijdzone: {
36462
+ Args: never;
36463
+ Returns: string;
36464
+ };
36357
36465
  };
36358
36466
  Enums: {
36359
36467
  ai_import_status: "nieuw" | "verwerken" | "bevestigen" | "klaar" | "mislukt";