@flowselections/layout-maker 1.22.1 → 1.22.3

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 CHANGED
@@ -1,139 +1,139 @@
1
- # Layout maker (pakbonnen, verzendbrieven, ectra)
2
-
3
- blank project start
4
-
5
- This project was built with [Lovable](https://lovable.dev).
6
-
7
- ## Build with Lovable
8
-
9
- Continue developing this project in the [Lovable editor](https://lovable.dev/projects/4735fccb-b385-4b48-b4f8-ef135f63f4f7).
10
-
11
- - **Ship faster**: describe what you want to build and Lovable handles the code.
12
- - **Stay in sync**: every change made in Lovable is committed straight to this repository.
13
- - **Full ownership**: this code is yours. Push to `main` on GitHub and your changes sync back into Lovable, ready for your next prompt.
14
-
15
- ## Development
16
-
17
- Prefer working locally? You need Node.js and npm — [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
18
-
19
- ```sh
20
- git clone <this-repository-url>
21
- cd <repository-name>
22
- npm i
23
- npm run dev
24
- ```
25
-
26
- ## Installeren in een andere shell
27
-
28
- 1. Draai `sql/print-schema.sql` één keer in de Supabase-database van die shell
29
- (SQL editor). Het script is idempotent en zet tabellen, rechten, RLS,
30
- functies, de geplande taken én de opslagmap `layout-logos` voor de Logo
31
- Bibliotheek klaar. Zorg dat de extensies `pg_cron` en `pg_net` aan staan.
32
-
33
- 2. Zet in de omgeving van de shell:
34
- - `SUPABASE_URL` en `SERVICE_ROLE_KEY` — nodig voor achtergrondprinten
35
- - `CENTRAL_AUTH_URL` en `CENTRAL_AUTH_SECRET` — nodig voor de printdienst
36
- 3. Zorg dat de shell het tick-eindpunt host. De setup-CLI doet dit automatisch
37
- op basis van `flowselections.serverRoutes` in `package.json`. Handmatig
38
- opgezette shells maken zelf dit bestand aan:
39
-
40
- ```ts
41
- // src/routes/api/public/print/queue-tick.ts
42
- import { createFileRoute } from "@tanstack/react-router";
43
- import { behandelQueueTick } from "@flowselections/layout-maker/print";
44
-
45
- export const Route = createFileRoute("/api/public/print/queue-tick")({
46
- server: {
47
- handlers: {
48
- POST: async ({ request }) => {
49
- // De shell levert de databaseverbinding; de module maakt er nooit zelf een.
50
- const { supabaseAdmin } = await import(
51
- "../../../../integrations/supabase/client.server"
52
- );
53
- return behandelQueueTick(request, supabaseAdmin);
54
- },
55
- },
56
- },
57
- });
58
- ```
59
-
60
- Het eindpunt accepteert drie toegangsbewijzen: een runner-sleutel uit
61
- `print_queue_runners.tick_sleutel`, `SUPABASE_PUBLISHABLE_KEY` (de cron) of
62
- het sessietoken van een ingelogde gebruiker (de knop in de Printwachtrij).
63
-
64
-
65
- 4. Klaar. Zodra de module in de shell draait meldt hij zichzelf aan als
66
- verwerker van de printwachtrij. Een nieuwe printopdracht wordt meteen
67
- opgepakt; daarnaast verwerkt de geplande taak `print-queue-tick` elke minuut
68
- de wachtende opdrachten. Reageert een shell een uur lang niet, dan wordt hij
69
- automatisch op inactief gezet. De taak `print-queue-cleanup` ruimt dagelijks
70
- oude opdrachten en bestanden op.
71
-
72
- ## Printen vanuit een andere module
73
-
74
- Andere modules in dezelfde shell gebruiken uitsluitend de print-API van deze
75
- module; zij hoeven de printtabellen niet te kennen en mogen er ook niet zelf in
76
- schrijven (dan blijft de opdracht wachten tot de volgende cronronde).
77
-
78
- ```ts
79
- import {
80
- printDocument, printPdf, printHtml,
81
- printerVoorWerkplek, printerVoorDocumenttype, volgJobStatus,
82
- } from "@flowselections/layout-maker";
83
-
84
- // 1. Document dat via een ontwerp uit deze module wordt opgemaakt
85
- const { jobId } = await printDocument({
86
- documenttype: "pakbon", // moet een bestaande documentsoort zijn
87
- documentnaam: "PB-2601284",
88
- payload: { order, order_id: order.id }, // order_id: verplicht kenmerk
89
- });
90
-
91
- // 2. Kant-en-klare PDF (Floriday-document, klantsticker, externe factuur)
92
- // Zonder printerId wordt de printer bepaald via de gekoppelde layout van
93
- // de documentsoort (of de koppeling op papierformaat).
94
- await printPdf({
95
- documenttype: "factuur",
96
- documentnaam: "F-2026-00123",
97
- pdfBase64, // met of zonder data:-voorvoegsel
98
- payload: { order_id: factuur.id },
99
- });
100
-
101
- // Geef in payload altijd een order-kenmerk mee: queue_item_id, order_id of
102
- // ordernummer. De wachtrij gebruikt dat om dubbele aanvragen te herkennen;
103
- // zonder kenmerk kunnen twee orders met dezelfde documentnaam binnen tien
104
- // minuten als dubbel worden gezien.
105
-
106
-
107
- // Of expliciet per werkplek:
108
- const printerId = await printerVoorWerkplek("PICKSTATION-1", "A4");
109
- await printPdf({
110
- documenttype: "afleverbrief",
111
- documentnaam: "AFL-12345",
112
- pdfBase64,
113
- printerId: printerId!,
114
- });
115
-
116
-
117
- // 3. Eigen opmaak afdrukken (geen layout, anders wint de layout)
118
- await printHtml({
119
- documenttype: "controlelijst",
120
- documentnaam: "Controlelijst kar 12",
121
- html,
122
- printerId: printerId!,
123
- });
124
-
125
- // Status live volgen (realtime staat aan op print_jobs)
126
- const stop = volgJobStatus(jobId, (s) => console.log(s.status, s.foutmelding));
127
- ```
128
-
129
- Belangrijk:
130
-
131
- - **Documentsoorten** liggen vast in de database: pakbon, factuur, offerte,
132
- orderbevestiging, etiket, verzendlabel, productlabel, barcode_label,
133
- magazijnlijst, controlelijst, transportdocument, sticker, productiebon,
134
- veilingbon, afleverbrief, veilingbrief en vrij.
135
- - **Beslisvolgorde bij het afdrukken**: kant-en-klare PDF > gekoppelde layout >
136
- meegestuurde opmaak > actieve layout van de documentsoort.
137
- - **Dubbelbeveiliging**: een identieke aanvraag binnen 10 minuten wordt
138
- genegeerd; de aanroep werpt dan `DubbeleAanvraagFout`. Geef bij bulkprints per
139
- document een eigen `documentnaam` zodat elke opdracht uniek is.
1
+ # Layout maker (pakbonnen, verzendbrieven, ectra)
2
+
3
+ blank project start
4
+
5
+ This project was built with [Lovable](https://lovable.dev).
6
+
7
+ ## Build with Lovable
8
+
9
+ Continue developing this project in the [Lovable editor](https://lovable.dev/projects/4735fccb-b385-4b48-b4f8-ef135f63f4f7).
10
+
11
+ - **Ship faster**: describe what you want to build and Lovable handles the code.
12
+ - **Stay in sync**: every change made in Lovable is committed straight to this repository.
13
+ - **Full ownership**: this code is yours. Push to `main` on GitHub and your changes sync back into Lovable, ready for your next prompt.
14
+
15
+ ## Development
16
+
17
+ Prefer working locally? You need Node.js and npm — [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
18
+
19
+ ```sh
20
+ git clone <this-repository-url>
21
+ cd <repository-name>
22
+ npm i
23
+ npm run dev
24
+ ```
25
+
26
+ ## Installeren in een andere shell
27
+
28
+ 1. Draai `sql/print-schema.sql` één keer in de Supabase-database van die shell
29
+ (SQL editor). Het script is idempotent en zet tabellen, rechten, RLS,
30
+ functies, de geplande taken én de opslagmap `layout-logos` voor de Logo
31
+ Bibliotheek klaar. Zorg dat de extensies `pg_cron` en `pg_net` aan staan.
32
+
33
+ 2. Zet in de omgeving van de shell:
34
+ - `SUPABASE_URL` en `SERVICE_ROLE_KEY` — nodig voor achtergrondprinten
35
+ - `CENTRAL_AUTH_URL` en `CENTRAL_AUTH_SECRET` — nodig voor de printdienst
36
+ 3. Zorg dat de shell het tick-eindpunt host. De setup-CLI doet dit automatisch
37
+ op basis van `flowselections.serverRoutes` in `package.json`. Handmatig
38
+ opgezette shells maken zelf dit bestand aan:
39
+
40
+ ```ts
41
+ // src/routes/api/public/print/queue-tick.ts
42
+ import { createFileRoute } from "@tanstack/react-router";
43
+ import { behandelQueueTick } from "@flowselections/layout-maker/print";
44
+
45
+ export const Route = createFileRoute("/api/public/print/queue-tick")({
46
+ server: {
47
+ handlers: {
48
+ POST: async ({ request }) => {
49
+ // De shell levert de databaseverbinding; de module maakt er nooit zelf een.
50
+ const { supabaseAdmin } = await import(
51
+ "../../../../integrations/supabase/client.server"
52
+ );
53
+ return behandelQueueTick(request, supabaseAdmin);
54
+ },
55
+ },
56
+ },
57
+ });
58
+ ```
59
+
60
+ Het eindpunt accepteert drie toegangsbewijzen: een runner-sleutel uit
61
+ `print_queue_runners.tick_sleutel`, `SUPABASE_PUBLISHABLE_KEY` (de cron) of
62
+ het sessietoken van een ingelogde gebruiker (de knop in de Printwachtrij).
63
+
64
+
65
+ 4. Klaar. Zodra de module in de shell draait meldt hij zichzelf aan als
66
+ verwerker van de printwachtrij. Een nieuwe printopdracht wordt meteen
67
+ opgepakt; daarnaast verwerkt de geplande taak `print-queue-tick` elke minuut
68
+ de wachtende opdrachten. Reageert een shell een uur lang niet, dan wordt hij
69
+ automatisch op inactief gezet. De taak `print-queue-cleanup` ruimt dagelijks
70
+ oude opdrachten en bestanden op.
71
+
72
+ ## Printen vanuit een andere module
73
+
74
+ Andere modules in dezelfde shell gebruiken uitsluitend de print-API van deze
75
+ module; zij hoeven de printtabellen niet te kennen en mogen er ook niet zelf in
76
+ schrijven (dan blijft de opdracht wachten tot de volgende cronronde).
77
+
78
+ ```ts
79
+ import {
80
+ printDocument, printPdf, printHtml,
81
+ printerVoorWerkplek, printerVoorDocumenttype, volgJobStatus,
82
+ } from "@flowselections/layout-maker";
83
+
84
+ // 1. Document dat via een ontwerp uit deze module wordt opgemaakt
85
+ const { jobId } = await printDocument({
86
+ documenttype: "pakbon", // moet een bestaande documentsoort zijn
87
+ documentnaam: "PB-2601284",
88
+ payload: { order, order_id: order.id }, // order_id: verplicht kenmerk
89
+ });
90
+
91
+ // 2. Kant-en-klare PDF (Floriday-document, klantsticker, externe factuur)
92
+ // Zonder printerId wordt de printer bepaald via de gekoppelde layout van
93
+ // de documentsoort (of de koppeling op papierformaat).
94
+ await printPdf({
95
+ documenttype: "factuur",
96
+ documentnaam: "F-2026-00123",
97
+ pdfBase64, // met of zonder data:-voorvoegsel
98
+ payload: { order_id: factuur.id },
99
+ });
100
+
101
+ // Geef in payload altijd een order-kenmerk mee: queue_item_id, order_id of
102
+ // ordernummer. De wachtrij gebruikt dat om dubbele aanvragen te herkennen;
103
+ // zonder kenmerk kunnen twee orders met dezelfde documentnaam binnen tien
104
+ // minuten als dubbel worden gezien.
105
+
106
+
107
+ // Of expliciet per werkplek:
108
+ const printerId = await printerVoorWerkplek("PICKSTATION-1", "A4");
109
+ await printPdf({
110
+ documenttype: "afleverbrief",
111
+ documentnaam: "AFL-12345",
112
+ pdfBase64,
113
+ printerId: printerId!,
114
+ });
115
+
116
+
117
+ // 3. Eigen opmaak afdrukken (geen layout, anders wint de layout)
118
+ await printHtml({
119
+ documenttype: "controlelijst",
120
+ documentnaam: "Controlelijst kar 12",
121
+ html,
122
+ printerId: printerId!,
123
+ });
124
+
125
+ // Status live volgen (realtime staat aan op print_jobs)
126
+ const stop = volgJobStatus(jobId, (s) => console.log(s.status, s.foutmelding));
127
+ ```
128
+
129
+ Belangrijk:
130
+
131
+ - **Documentsoorten** liggen vast in de database: pakbon, factuur, offerte,
132
+ orderbevestiging, etiket, verzendlabel, productlabel, barcode_label,
133
+ magazijnlijst, controlelijst, transportdocument, sticker, productiebon,
134
+ veilingbon, afleverbrief, veilingbrief en vrij.
135
+ - **Beslisvolgorde bij het afdrukken**: kant-en-klare PDF > gekoppelde layout >
136
+ meegestuurde opmaak > actieve layout van de documentsoort.
137
+ - **Dubbelbeveiliging**: een identieke aanvraag binnen 10 minuten wordt
138
+ genegeerd; de aanroep werpt dan `DubbeleAanvraagFout`. Geef bij bulkprints per
139
+ document een eigen `documentnaam` zodat elke opdracht uniek is.
@@ -144,7 +144,7 @@ export function PrinterSetupWizard({ open, onOpenChange, onKlaar, computerFilter
144
144
  const [testStatus, setTestStatus] = useState("leeg");
145
145
  const testpagina = async () => {
146
146
  setTestStatus("bezig");
147
- const html = `<div style="padding:20mm;font-size:14pt"><h1 style="font-size:20pt">Testpagina</h1>
147
+ const html = `<div style="padding:20mm;font-size:14pt"><h1 style="font-size:20pt">Testpagina</h1>
148
148
  <p>Deze pagina hoort uit: <strong>${naam}</strong></p></div>`;
149
149
  const opdracht = {
150
150
  documenttype: "pakbon",
@@ -1,2 +1,2 @@
1
- export declare function PrintersRedirectPage(): import("react").JSX.Element;
1
+ export declare function PrintersRedirectPage(): import("react").JSX.Element;
2
2
  //# sourceMappingURL=PrintersRedirectPage.d.ts.map
@@ -1,14 +1,14 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // ============================================================================
3
- // src/components/PrintersRedirectPage.tsx — oude URL /layouts-printers/printers
4
- // stuurt door naar de samengevoegde pagina Printplekken.
5
- // ============================================================================
6
- import { useEffect } from "react";
7
- import { useNavigate } from "@tanstack/react-router";
8
- export function PrintersRedirectPage() {
9
- const navigate = useNavigate();
10
- useEffect(() => {
11
- void navigate({ to: "/layouts-printers/printplekken", replace: true });
12
- }, [navigate]);
13
- return _jsx("p", { className: "text-muted-foreground p-6 text-sm", children: "Doorsturen naar Printplekken\u2026" });
14
- }
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // ============================================================================
3
+ // src/components/PrintersRedirectPage.tsx — oude URL /layouts-printers/printers
4
+ // stuurt door naar de samengevoegde pagina Printplekken.
5
+ // ============================================================================
6
+ import { useEffect } from "react";
7
+ import { useNavigate } from "@tanstack/react-router";
8
+ export function PrintersRedirectPage() {
9
+ const navigate = useNavigate();
10
+ useEffect(() => {
11
+ void navigate({ to: "/layouts-printers/printplekken", replace: true });
12
+ }, [navigate]);
13
+ return _jsx("p", { className: "text-muted-foreground p-6 text-sm", children: "Doorsturen naar Printplekken\u2026" });
14
+ }
@@ -10691,6 +10691,222 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
10691
10691
  };
10692
10692
  Relationships: [];
10693
10693
  };
10694
+ maps_addresses: {
10695
+ Row: {
10696
+ address_hash: string;
10697
+ created_at: string;
10698
+ error_reason: string | null;
10699
+ formatted_address: string | null;
10700
+ id: string;
10701
+ lat: number | null;
10702
+ lng: number | null;
10703
+ place_id: string | null;
10704
+ raw_address: string;
10705
+ resolved_at: string | null;
10706
+ status: string;
10707
+ updated_at: string;
10708
+ };
10709
+ Insert: {
10710
+ address_hash: string;
10711
+ created_at?: string;
10712
+ error_reason?: string | null;
10713
+ formatted_address?: string | null;
10714
+ id?: string;
10715
+ lat?: number | null;
10716
+ lng?: number | null;
10717
+ place_id?: string | null;
10718
+ raw_address: string;
10719
+ resolved_at?: string | null;
10720
+ status?: string;
10721
+ updated_at?: string;
10722
+ };
10723
+ Update: {
10724
+ address_hash?: string;
10725
+ created_at?: string;
10726
+ error_reason?: string | null;
10727
+ formatted_address?: string | null;
10728
+ id?: string;
10729
+ lat?: number | null;
10730
+ lng?: number | null;
10731
+ place_id?: string | null;
10732
+ raw_address?: string;
10733
+ resolved_at?: string | null;
10734
+ status?: string;
10735
+ updated_at?: string;
10736
+ };
10737
+ Relationships: [];
10738
+ };
10739
+ maps_request_queue: {
10740
+ Row: {
10741
+ attempts: number;
10742
+ created_at: string;
10743
+ destination_hash: string | null;
10744
+ id: string;
10745
+ kind: string;
10746
+ last_error: string | null;
10747
+ mode: string;
10748
+ origin_hash: string | null;
10749
+ processed_at: string | null;
10750
+ raw_destination: string | null;
10751
+ raw_origin: string | null;
10752
+ requested_by: string | null;
10753
+ status: string;
10754
+ updated_at: string;
10755
+ };
10756
+ Insert: {
10757
+ attempts?: number;
10758
+ created_at?: string;
10759
+ destination_hash?: string | null;
10760
+ id?: string;
10761
+ kind: string;
10762
+ last_error?: string | null;
10763
+ mode?: string;
10764
+ origin_hash?: string | null;
10765
+ processed_at?: string | null;
10766
+ raw_destination?: string | null;
10767
+ raw_origin?: string | null;
10768
+ requested_by?: string | null;
10769
+ status?: string;
10770
+ updated_at?: string;
10771
+ };
10772
+ Update: {
10773
+ attempts?: number;
10774
+ created_at?: string;
10775
+ destination_hash?: string | null;
10776
+ id?: string;
10777
+ kind?: string;
10778
+ last_error?: string | null;
10779
+ mode?: string;
10780
+ origin_hash?: string | null;
10781
+ processed_at?: string | null;
10782
+ raw_destination?: string | null;
10783
+ raw_origin?: string | null;
10784
+ requested_by?: string | null;
10785
+ status?: string;
10786
+ updated_at?: string;
10787
+ };
10788
+ Relationships: [];
10789
+ };
10790
+ maps_settings: {
10791
+ Row: {
10792
+ allow_estimate_fallback: boolean;
10793
+ cache_ttl_days: number;
10794
+ created_at: string;
10795
+ daily_call_limit: number;
10796
+ id: string;
10797
+ last_error: string | null;
10798
+ last_error_at: string | null;
10799
+ last_success_at: string | null;
10800
+ updated_at: string;
10801
+ };
10802
+ Insert: {
10803
+ allow_estimate_fallback?: boolean;
10804
+ cache_ttl_days?: number;
10805
+ created_at?: string;
10806
+ daily_call_limit?: number;
10807
+ id?: string;
10808
+ last_error?: string | null;
10809
+ last_error_at?: string | null;
10810
+ last_success_at?: string | null;
10811
+ updated_at?: string;
10812
+ };
10813
+ Update: {
10814
+ allow_estimate_fallback?: boolean;
10815
+ cache_ttl_days?: number;
10816
+ created_at?: string;
10817
+ daily_call_limit?: number;
10818
+ id?: string;
10819
+ last_error?: string | null;
10820
+ last_error_at?: string | null;
10821
+ last_success_at?: string | null;
10822
+ updated_at?: string;
10823
+ };
10824
+ Relationships: [];
10825
+ };
10826
+ maps_travel_times: {
10827
+ Row: {
10828
+ created_at: string;
10829
+ destination_id: string;
10830
+ distance_m: number | null;
10831
+ duration_sec: number;
10832
+ expires_at: string;
10833
+ id: string;
10834
+ mode: string;
10835
+ origin_id: string;
10836
+ source: string;
10837
+ updated_at: string;
10838
+ };
10839
+ Insert: {
10840
+ created_at?: string;
10841
+ destination_id: string;
10842
+ distance_m?: number | null;
10843
+ duration_sec: number;
10844
+ expires_at?: string;
10845
+ id?: string;
10846
+ mode?: string;
10847
+ origin_id: string;
10848
+ source?: string;
10849
+ updated_at?: string;
10850
+ };
10851
+ Update: {
10852
+ created_at?: string;
10853
+ destination_id?: string;
10854
+ distance_m?: number | null;
10855
+ duration_sec?: number;
10856
+ expires_at?: string;
10857
+ id?: string;
10858
+ mode?: string;
10859
+ origin_id?: string;
10860
+ source?: string;
10861
+ updated_at?: string;
10862
+ };
10863
+ Relationships: [{
10864
+ foreignKeyName: "maps_travel_times_destination_id_fkey";
10865
+ columns: ["destination_id"];
10866
+ isOneToOne: false;
10867
+ referencedRelation: "maps_addresses";
10868
+ referencedColumns: ["id"];
10869
+ }, {
10870
+ foreignKeyName: "maps_travel_times_origin_id_fkey";
10871
+ columns: ["origin_id"];
10872
+ isOneToOne: false;
10873
+ referencedRelation: "maps_addresses";
10874
+ referencedColumns: ["id"];
10875
+ }];
10876
+ };
10877
+ maps_usage_log: {
10878
+ Row: {
10879
+ cache_hits: number;
10880
+ call_type: string;
10881
+ created_at: string;
10882
+ day: string;
10883
+ detail: string | null;
10884
+ elements: number;
10885
+ id: string;
10886
+ outcome: string;
10887
+ };
10888
+ Insert: {
10889
+ cache_hits?: number;
10890
+ call_type: string;
10891
+ created_at?: string;
10892
+ day?: string;
10893
+ detail?: string | null;
10894
+ elements?: number;
10895
+ id?: string;
10896
+ outcome?: string;
10897
+ };
10898
+ Update: {
10899
+ cache_hits?: number;
10900
+ call_type?: string;
10901
+ created_at?: string;
10902
+ day?: string;
10903
+ detail?: string | null;
10904
+ elements?: number;
10905
+ id?: string;
10906
+ outcome?: string;
10907
+ };
10908
+ Relationships: [];
10909
+ };
10694
10910
  material_usage: {
10695
10911
  Row: {
10696
10912
  created_at: string;
@@ -18620,6 +18836,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
18620
18836
  werkbon_package_items: {
18621
18837
  Row: {
18622
18838
  article_number: string | null;
18839
+ artikel_id: string | null;
18623
18840
  created_at: string;
18624
18841
  gtin: string | null;
18625
18842
  id: string;
@@ -18637,6 +18854,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
18637
18854
  };
18638
18855
  Insert: {
18639
18856
  article_number?: string | null;
18857
+ artikel_id?: string | null;
18640
18858
  created_at?: string;
18641
18859
  gtin?: string | null;
18642
18860
  id?: string;
@@ -18654,6 +18872,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
18654
18872
  };
18655
18873
  Update: {
18656
18874
  article_number?: string | null;
18875
+ artikel_id?: string | null;
18657
18876
  created_at?: string;
18658
18877
  gtin?: string | null;
18659
18878
  id?: string;
@@ -18670,6 +18889,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
18670
18889
  updated_at?: string;
18671
18890
  };
18672
18891
  Relationships: [{
18892
+ foreignKeyName: "werkbon_package_items_artikel_id_fkey";
18893
+ columns: ["artikel_id"];
18894
+ isOneToOne: false;
18895
+ referencedRelation: "artikelen_cache";
18896
+ referencedColumns: ["id"];
18897
+ }, {
18673
18898
  foreignKeyName: "werkbon_package_items_package_id_fkey";
18674
18899
  columns: ["package_id"];
18675
18900
  isOneToOne: false;
@@ -19892,6 +20117,20 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
19892
20117
  referencedColumns: ["id"];
19893
20118
  }];
19894
20119
  };
20120
+ v_werkbon_totalen: {
20121
+ Row: {
20122
+ packages_cents: number | null;
20123
+ packages_minutes: number | null;
20124
+ werkbon_id: string | null;
20125
+ };
20126
+ Relationships: [{
20127
+ foreignKeyName: "werkbon_package_lines_werkbon_id_fkey";
20128
+ columns: ["werkbon_id"];
20129
+ isOneToOne: false;
20130
+ referencedRelation: "werkbonnen";
20131
+ referencedColumns: ["id"];
20132
+ }];
20133
+ };
19895
20134
  };
19896
20135
  Functions: {
19897
20136
  _floriday_schedule_job: {
@@ -21828,6 +22067,25 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
21828
22067
  };
21829
22068
  Returns: string;
21830
22069
  };
22070
+ pakket_suggesties_voor_tekst: {
22071
+ Args: {
22072
+ _tekst: string;
22073
+ };
22074
+ Returns: {
22075
+ hit_type: string;
22076
+ package_id: string;
22077
+ priority: number;
22078
+ }[];
22079
+ };
22080
+ pakket_voor_reistijd: {
22081
+ Args: {
22082
+ _minuten: number;
22083
+ };
22084
+ Returns: {
22085
+ package_id: string;
22086
+ priority: number;
22087
+ }[];
22088
+ };
21831
22089
  pick_active_printers: {
21832
22090
  Args: never;
21833
22091
  Returns: {
@@ -22036,6 +22294,10 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22036
22294
  omschrijving: string;
22037
22295
  }[];
22038
22296
  };
22297
+ pick_reference_data_status: {
22298
+ Args: never;
22299
+ Returns: import("./types.js").Json;
22300
+ };
22039
22301
  pick_release_expired_locks: {
22040
22302
  Args: never;
22041
22303
  Returns: number;
@@ -22100,6 +22362,10 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22100
22362
  isSetofReturn: false;
22101
22363
  };
22102
22364
  };
22365
+ pick_seed_reference_data: {
22366
+ Args: never;
22367
+ Returns: import("./types.js").Json;
22368
+ };
22103
22369
  pick_set_station_print_plek: {
22104
22370
  Args: {
22105
22371
  _print_plek_id: string;
@@ -22878,6 +23144,18 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22878
23144
  Args: never;
22879
23145
  Returns: string;
22880
23146
  };
23147
+ werkbon_totalen: {
23148
+ Args: {
23149
+ _werkbon_id: string;
23150
+ };
23151
+ Returns: {
23152
+ materials_cents: number;
23153
+ packages_cents: number;
23154
+ packages_minutes: number;
23155
+ total_cents: number;
23156
+ total_minutes: number;
23157
+ }[];
23158
+ };
22881
23159
  wo_create_from_source: {
22882
23160
  Args: {
22883
23161
  _payload?: import("./types.js").Json;