@flowselections/layout-maker 1.8.1 → 1.8.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 +132 -132
- package/dist-lib/components/PrinterSetupWizard.js +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +189 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +189 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +196 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +189 -0
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.server.js +9 -9
- package/dist-lib/lib/browserPrint.js +5 -5
- package/dist-lib/lib/layoutPreview.js +7 -7
- package/dist-lib/lib/pakbonHtml.js +50 -50
- package/dist-lib/lib/printService.functions.d.ts +756 -0
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/productiebonHtml.js +15 -15
- package/dist-lib/lib/profielHtml.js +18 -18
- package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
- package/dist-lib/lib/supabaseAdmin.server.js +43 -43
- package/dist-lib/lib/testpagina.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,132 +1,132 @@
|
|
|
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 }, // gegevens voor de layout
|
|
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
|
-
});
|
|
99
|
-
|
|
100
|
-
// Of expliciet per werkplek:
|
|
101
|
-
const printerId = await printerVoorWerkplek("PICKSTATION-1", "A4");
|
|
102
|
-
await printPdf({
|
|
103
|
-
documenttype: "afleverbrief",
|
|
104
|
-
documentnaam: "AFL-12345",
|
|
105
|
-
pdfBase64,
|
|
106
|
-
printerId: printerId!,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// 3. Eigen opmaak afdrukken (geen layout, anders wint de layout)
|
|
111
|
-
await printHtml({
|
|
112
|
-
documenttype: "controlelijst",
|
|
113
|
-
documentnaam: "Controlelijst kar 12",
|
|
114
|
-
html,
|
|
115
|
-
printerId: printerId!,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Status live volgen (realtime staat aan op print_jobs)
|
|
119
|
-
const stop = volgJobStatus(jobId, (s) => console.log(s.status, s.foutmelding));
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Belangrijk:
|
|
123
|
-
|
|
124
|
-
- **Documentsoorten** liggen vast in de database: pakbon, factuur, offerte,
|
|
125
|
-
orderbevestiging, etiket, verzendlabel, productlabel, barcode_label,
|
|
126
|
-
magazijnlijst, controlelijst, transportdocument, sticker, productiebon,
|
|
127
|
-
veilingbon, afleverbrief, veilingbrief en vrij.
|
|
128
|
-
- **Beslisvolgorde bij het afdrukken**: kant-en-klare PDF > gekoppelde layout >
|
|
129
|
-
meegestuurde opmaak > actieve layout van de documentsoort.
|
|
130
|
-
- **Dubbelbeveiliging**: een identieke aanvraag binnen 10 minuten wordt
|
|
131
|
-
genegeerd; de aanroep werpt dan `DubbeleAanvraagFout`. Geef bij bulkprints per
|
|
132
|
-
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 }, // gegevens voor de layout
|
|
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
|
+
});
|
|
99
|
+
|
|
100
|
+
// Of expliciet per werkplek:
|
|
101
|
+
const printerId = await printerVoorWerkplek("PICKSTATION-1", "A4");
|
|
102
|
+
await printPdf({
|
|
103
|
+
documenttype: "afleverbrief",
|
|
104
|
+
documentnaam: "AFL-12345",
|
|
105
|
+
pdfBase64,
|
|
106
|
+
printerId: printerId!,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
// 3. Eigen opmaak afdrukken (geen layout, anders wint de layout)
|
|
111
|
+
await printHtml({
|
|
112
|
+
documenttype: "controlelijst",
|
|
113
|
+
documentnaam: "Controlelijst kar 12",
|
|
114
|
+
html,
|
|
115
|
+
printerId: printerId!,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Status live volgen (realtime staat aan op print_jobs)
|
|
119
|
+
const stop = volgJobStatus(jobId, (s) => console.log(s.status, s.foutmelding));
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Belangrijk:
|
|
123
|
+
|
|
124
|
+
- **Documentsoorten** liggen vast in de database: pakbon, factuur, offerte,
|
|
125
|
+
orderbevestiging, etiket, verzendlabel, productlabel, barcode_label,
|
|
126
|
+
magazijnlijst, controlelijst, transportdocument, sticker, productiebon,
|
|
127
|
+
veilingbon, afleverbrief, veilingbrief en vrij.
|
|
128
|
+
- **Beslisvolgorde bij het afdrukken**: kant-en-klare PDF > gekoppelde layout >
|
|
129
|
+
meegestuurde opmaak > actieve layout van de documentsoort.
|
|
130
|
+
- **Dubbelbeveiliging**: een identieke aanvraag binnen 10 minuten wordt
|
|
131
|
+
genegeerd; de aanroep werpt dan `DubbeleAanvraagFout`. Geef bij bulkprints per
|
|
132
|
+
document een eigen `documentnaam` zodat elke opdracht uniek is.
|
|
@@ -145,7 +145,7 @@ export function PrinterSetupWizard({ open, onOpenChange, onKlaar, computerFilter
|
|
|
145
145
|
const [testStatus, setTestStatus] = useState("leeg");
|
|
146
146
|
const testpagina = async () => {
|
|
147
147
|
setTestStatus("bezig");
|
|
148
|
-
const html = `<div style="padding:20mm;font-size:14pt"><h1 style="font-size:20pt">Testpagina</h1>
|
|
148
|
+
const html = `<div style="padding:20mm;font-size:14pt"><h1 style="font-size:20pt">Testpagina</h1>
|
|
149
149
|
<p>Deze pagina hoort uit: <strong>${naam}</strong></p></div>`;
|
|
150
150
|
const opdracht = {
|
|
151
151
|
documenttype: "pakbon",
|
|
@@ -5045,6 +5045,42 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
5045
5045
|
};
|
|
5046
5046
|
Relationships: [];
|
|
5047
5047
|
};
|
|
5048
|
+
facturen: {
|
|
5049
|
+
Row: {
|
|
5050
|
+
bedrag_incl_btw: number;
|
|
5051
|
+
created_at: string;
|
|
5052
|
+
datum: string;
|
|
5053
|
+
factuurnummer: string;
|
|
5054
|
+
id: string;
|
|
5055
|
+
klantnaam: string;
|
|
5056
|
+
status: string;
|
|
5057
|
+
updated_at: string;
|
|
5058
|
+
user_id: string;
|
|
5059
|
+
};
|
|
5060
|
+
Insert: {
|
|
5061
|
+
bedrag_incl_btw: number;
|
|
5062
|
+
created_at?: string;
|
|
5063
|
+
datum?: string;
|
|
5064
|
+
factuurnummer: string;
|
|
5065
|
+
id?: string;
|
|
5066
|
+
klantnaam: string;
|
|
5067
|
+
status?: string;
|
|
5068
|
+
updated_at?: string;
|
|
5069
|
+
user_id?: string;
|
|
5070
|
+
};
|
|
5071
|
+
Update: {
|
|
5072
|
+
bedrag_incl_btw?: number;
|
|
5073
|
+
created_at?: string;
|
|
5074
|
+
datum?: string;
|
|
5075
|
+
factuurnummer?: string;
|
|
5076
|
+
id?: string;
|
|
5077
|
+
klantnaam?: string;
|
|
5078
|
+
status?: string;
|
|
5079
|
+
updated_at?: string;
|
|
5080
|
+
user_id?: string;
|
|
5081
|
+
};
|
|
5082
|
+
Relationships: [];
|
|
5083
|
+
};
|
|
5048
5084
|
floricode_connection_settings: {
|
|
5049
5085
|
Row: {
|
|
5050
5086
|
catalog_key: string | null;
|
|
@@ -7908,6 +7944,9 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
7908
7944
|
omschrijving: string;
|
|
7909
7945
|
rejected_at: string | null;
|
|
7910
7946
|
sent_at: string | null;
|
|
7947
|
+
source_number: string | null;
|
|
7948
|
+
source_ref: string | null;
|
|
7949
|
+
source_type: string;
|
|
7911
7950
|
status: string;
|
|
7912
7951
|
subtotal_cents: number;
|
|
7913
7952
|
total_cents: number;
|
|
@@ -7938,6 +7977,9 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
7938
7977
|
omschrijving?: string;
|
|
7939
7978
|
rejected_at?: string | null;
|
|
7940
7979
|
sent_at?: string | null;
|
|
7980
|
+
source_number?: string | null;
|
|
7981
|
+
source_ref?: string | null;
|
|
7982
|
+
source_type?: string;
|
|
7941
7983
|
status?: string;
|
|
7942
7984
|
subtotal_cents?: number;
|
|
7943
7985
|
total_cents?: number;
|
|
@@ -7968,6 +8010,9 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
7968
8010
|
omschrijving?: string;
|
|
7969
8011
|
rejected_at?: string | null;
|
|
7970
8012
|
sent_at?: string | null;
|
|
8013
|
+
source_number?: string | null;
|
|
8014
|
+
source_ref?: string | null;
|
|
8015
|
+
source_type?: string;
|
|
7971
8016
|
status?: string;
|
|
7972
8017
|
subtotal_cents?: number;
|
|
7973
8018
|
total_cents?: number;
|
|
@@ -13841,6 +13886,66 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
13841
13886
|
};
|
|
13842
13887
|
Relationships: [];
|
|
13843
13888
|
};
|
|
13889
|
+
profile_modules: {
|
|
13890
|
+
Row: {
|
|
13891
|
+
created_at: string;
|
|
13892
|
+
id: string;
|
|
13893
|
+
module_id: string;
|
|
13894
|
+
profile_id: string;
|
|
13895
|
+
};
|
|
13896
|
+
Insert: {
|
|
13897
|
+
created_at?: string;
|
|
13898
|
+
id?: string;
|
|
13899
|
+
module_id: string;
|
|
13900
|
+
profile_id: string;
|
|
13901
|
+
};
|
|
13902
|
+
Update: {
|
|
13903
|
+
created_at?: string;
|
|
13904
|
+
id?: string;
|
|
13905
|
+
module_id?: string;
|
|
13906
|
+
profile_id?: string;
|
|
13907
|
+
};
|
|
13908
|
+
Relationships: [{
|
|
13909
|
+
foreignKeyName: "profile_modules_profile_id_fkey";
|
|
13910
|
+
columns: ["profile_id"];
|
|
13911
|
+
isOneToOne: false;
|
|
13912
|
+
referencedRelation: "profiles_org";
|
|
13913
|
+
referencedColumns: ["id"];
|
|
13914
|
+
}];
|
|
13915
|
+
};
|
|
13916
|
+
profile_roles: {
|
|
13917
|
+
Row: {
|
|
13918
|
+
created_at: string;
|
|
13919
|
+
id: string;
|
|
13920
|
+
profile_id: string;
|
|
13921
|
+
role_id: string;
|
|
13922
|
+
};
|
|
13923
|
+
Insert: {
|
|
13924
|
+
created_at?: string;
|
|
13925
|
+
id?: string;
|
|
13926
|
+
profile_id: string;
|
|
13927
|
+
role_id: string;
|
|
13928
|
+
};
|
|
13929
|
+
Update: {
|
|
13930
|
+
created_at?: string;
|
|
13931
|
+
id?: string;
|
|
13932
|
+
profile_id?: string;
|
|
13933
|
+
role_id?: string;
|
|
13934
|
+
};
|
|
13935
|
+
Relationships: [{
|
|
13936
|
+
foreignKeyName: "profile_roles_profile_id_fkey";
|
|
13937
|
+
columns: ["profile_id"];
|
|
13938
|
+
isOneToOne: false;
|
|
13939
|
+
referencedRelation: "profiles_org";
|
|
13940
|
+
referencedColumns: ["id"];
|
|
13941
|
+
}, {
|
|
13942
|
+
foreignKeyName: "profile_roles_role_id_fkey";
|
|
13943
|
+
columns: ["role_id"];
|
|
13944
|
+
isOneToOne: false;
|
|
13945
|
+
referencedRelation: "roles";
|
|
13946
|
+
referencedColumns: ["id"];
|
|
13947
|
+
}];
|
|
13948
|
+
};
|
|
13844
13949
|
profiles: {
|
|
13845
13950
|
Row: {
|
|
13846
13951
|
address: string | null;
|
|
@@ -13886,6 +13991,39 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
13886
13991
|
referencedColumns: ["id"];
|
|
13887
13992
|
}];
|
|
13888
13993
|
};
|
|
13994
|
+
profiles_org: {
|
|
13995
|
+
Row: {
|
|
13996
|
+
created_at: string;
|
|
13997
|
+
id: string;
|
|
13998
|
+
is_default: boolean;
|
|
13999
|
+
name: string;
|
|
14000
|
+
tenant_id: string | null;
|
|
14001
|
+
updated_at: string;
|
|
14002
|
+
};
|
|
14003
|
+
Insert: {
|
|
14004
|
+
created_at?: string;
|
|
14005
|
+
id?: string;
|
|
14006
|
+
is_default?: boolean;
|
|
14007
|
+
name: string;
|
|
14008
|
+
tenant_id?: string | null;
|
|
14009
|
+
updated_at?: string;
|
|
14010
|
+
};
|
|
14011
|
+
Update: {
|
|
14012
|
+
created_at?: string;
|
|
14013
|
+
id?: string;
|
|
14014
|
+
is_default?: boolean;
|
|
14015
|
+
name?: string;
|
|
14016
|
+
tenant_id?: string | null;
|
|
14017
|
+
updated_at?: string;
|
|
14018
|
+
};
|
|
14019
|
+
Relationships: [{
|
|
14020
|
+
foreignKeyName: "profiles_org_tenant_id_fkey";
|
|
14021
|
+
columns: ["tenant_id"];
|
|
14022
|
+
isOneToOne: false;
|
|
14023
|
+
referencedRelation: "tenants";
|
|
14024
|
+
referencedColumns: ["id"];
|
|
14025
|
+
}];
|
|
14026
|
+
};
|
|
13889
14027
|
projects: {
|
|
13890
14028
|
Row: {
|
|
13891
14029
|
contact_name: string | null;
|
|
@@ -21378,6 +21516,37 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
21378
21516
|
};
|
|
21379
21517
|
Returns: undefined;
|
|
21380
21518
|
};
|
|
21519
|
+
quote_create_from_source: {
|
|
21520
|
+
Args: {
|
|
21521
|
+
_payload?: import("./types.js").Json;
|
|
21522
|
+
_source_id: string;
|
|
21523
|
+
_source_type: string;
|
|
21524
|
+
};
|
|
21525
|
+
Returns: string;
|
|
21526
|
+
};
|
|
21527
|
+
quote_get_billable_lines: {
|
|
21528
|
+
Args: {
|
|
21529
|
+
_quotation_id: string;
|
|
21530
|
+
};
|
|
21531
|
+
Returns: import("./types.js").Json;
|
|
21532
|
+
};
|
|
21533
|
+
quote_get_summary: {
|
|
21534
|
+
Args: {
|
|
21535
|
+
_quotation_id: string;
|
|
21536
|
+
};
|
|
21537
|
+
Returns: import("./types.js").Json;
|
|
21538
|
+
};
|
|
21539
|
+
quote_list_packages: {
|
|
21540
|
+
Args: never;
|
|
21541
|
+
Returns: import("./types.js").Json;
|
|
21542
|
+
};
|
|
21543
|
+
quote_list_sources: {
|
|
21544
|
+
Args: {
|
|
21545
|
+
_limit?: number;
|
|
21546
|
+
_source_type?: string;
|
|
21547
|
+
};
|
|
21548
|
+
Returns: import("./types.js").Json;
|
|
21549
|
+
};
|
|
21381
21550
|
recompute_all_reserved_stock: {
|
|
21382
21551
|
Args: never;
|
|
21383
21552
|
Returns: undefined;
|
|
@@ -21992,6 +22161,26 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
21992
22161
|
Args: never;
|
|
21993
22162
|
Returns: string;
|
|
21994
22163
|
};
|
|
22164
|
+
wo_create_from_source: {
|
|
22165
|
+
Args: {
|
|
22166
|
+
_payload?: import("./types.js").Json;
|
|
22167
|
+
_source_id: string;
|
|
22168
|
+
_source_type: string;
|
|
22169
|
+
};
|
|
22170
|
+
Returns: string;
|
|
22171
|
+
};
|
|
22172
|
+
wo_get_billable_lines: {
|
|
22173
|
+
Args: {
|
|
22174
|
+
_work_order_id: string;
|
|
22175
|
+
};
|
|
22176
|
+
Returns: import("./types.js").Json;
|
|
22177
|
+
};
|
|
22178
|
+
wo_get_summary: {
|
|
22179
|
+
Args: {
|
|
22180
|
+
_work_order_id: string;
|
|
22181
|
+
};
|
|
22182
|
+
Returns: import("./types.js").Json;
|
|
22183
|
+
};
|
|
21995
22184
|
};
|
|
21996
22185
|
Enums: {
|
|
21997
22186
|
ai_import_status: "nieuw" | "verwerken" | "bevestigen" | "klaar" | "mislukt";
|