@flowselections/floriday-klanten-module 1.0.10 → 1.0.12

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 (31) hide show
  1. package/dist-lib/components/klanten/GroupedKlantDetail.js +1 -1
  2. package/dist-lib/components/klanten/GroupedKlantDetailRoute.d.ts +2 -0
  3. package/dist-lib/components/klanten/GroupedKlantDetailRoute.d.ts.map +1 -0
  4. package/dist-lib/components/klanten/GroupedKlantDetailRoute.js +8 -0
  5. package/dist-lib/components/klanten/KlantDetail.js +1 -1
  6. package/dist-lib/components/klanten/KlantDetailRoute.d.ts +2 -0
  7. package/dist-lib/components/klanten/KlantDetailRoute.d.ts.map +1 -0
  8. package/dist-lib/components/klanten/KlantDetailRoute.js +8 -0
  9. package/dist-lib/components/klanten/KlantenOverzicht.js +1 -1
  10. package/dist-lib/index.d.ts +2 -0
  11. package/dist-lib/index.d.ts.map +1 -1
  12. package/dist-lib/index.js +2 -0
  13. package/dist-lib/integrations/supabase/auth-middleware.d.ts +227 -0
  14. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  15. package/dist-lib/integrations/supabase/client.d.ts +227 -0
  16. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  17. package/dist-lib/integrations/supabase/client.server.d.ts +227 -0
  18. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  19. package/dist-lib/integrations/supabase/types.d.ts +235 -0
  20. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  21. package/dist-lib/lib/accounting.functions.d.ts +681 -0
  22. package/dist-lib/lib/accounting.functions.d.ts.map +1 -1
  23. package/dist-lib/lib/customer-analytics.functions.d.ts +227 -0
  24. package/dist-lib/lib/customer-analytics.functions.d.ts.map +1 -1
  25. package/dist-lib/lib/customers.functions.d.ts +1589 -0
  26. package/dist-lib/lib/customers.functions.d.ts.map +1 -1
  27. package/dist-lib/lib/delivery-locations.functions.d.ts +908 -0
  28. package/dist-lib/lib/delivery-locations.functions.d.ts.map +1 -1
  29. package/dist-lib/lib/external-customers.functions.d.ts +908 -0
  30. package/dist-lib/lib/external-customers.functions.d.ts.map +1 -1
  31. package/package.json +25 -1
@@ -40,7 +40,7 @@ export function GroupedKlantDetail({ groupKey }) {
40
40
  provider: providerMap.get(s.provider)?.label ?? s.provider,
41
41
  }))
42
42
  .sort((a, b) => +new Date(b.created_at) - +new Date(a.created_at));
43
- return (_jsxs("main", { className: "p-6 max-w-7xl mx-auto space-y-4", children: [_jsx("div", { className: "flex items-center justify-between", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate({ to: "/klanten" }), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }), " Terug naar klanten"] }) }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-[340px_1fr]", children: [_jsx(ProfileCard, { profile: profile }), _jsxs("div", { className: "space-y-4 min-w-0", children: [_jsx(KpiStrip, { counts: {
43
+ return (_jsxs("main", { className: "p-6 space-y-4", children: [_jsx("div", { className: "flex items-center justify-between", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate({ to: "/klanten" }), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }), " Terug naar klanten"] }) }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-[340px_1fr]", children: [_jsx(ProfileCard, { profile: profile }), _jsxs("div", { className: "space-y-4 min-w-0", children: [_jsx(KpiStrip, { counts: {
44
44
  contacts: contacts.length,
45
45
  locations: locations.length,
46
46
  assortment: 0,
@@ -0,0 +1,2 @@
1
+ export declare function GroupedKlantDetailRoute(): import("react").JSX.Element;
2
+ //# sourceMappingURL=GroupedKlantDetailRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupedKlantDetailRoute.d.ts","sourceRoot":"","sources":["../../../src/components/klanten/GroupedKlantDetailRoute.tsx"],"names":[],"mappings":"AAKA,wBAAgB,uBAAuB,gCAGtC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getRouteApi } from "@tanstack/react-router";
3
+ import { GroupedKlantDetail } from "./GroupedKlantDetail";
4
+ const route = getRouteApi("/_authenticated/klanten/groep/$groupKey");
5
+ export function GroupedKlantDetailRoute() {
6
+ const { groupKey } = route.useParams();
7
+ return _jsx(GroupedKlantDetail, { groupKey: groupKey });
8
+ }
@@ -33,7 +33,7 @@ export function KlantDetail({ id }) {
33
33
  if (!data)
34
34
  return _jsx("main", { className: "p-6", children: "Klant niet gevonden" });
35
35
  const c = data.customer;
36
- return (_jsxs("main", { className: "p-6 max-w-7xl mx-auto space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate({ to: "/klanten" }), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }), " Terug naar klanten"] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: () => toggleActive.mutate(!c.is_active), children: [_jsx(Power, { className: "h-4 w-4 mr-2" }), c.is_active ? "Op inactief zetten" : "Activeren"] }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", children: [_jsx(Trash2, { className: "h-4 w-4 mr-2" }), " Verwijderen"] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Klant verwijderen?" }), _jsxs(AlertDialogDescription, { children: ["Weet je zeker dat je ", _jsx("strong", { children: c.company_name }), " wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { onClick: () => delMut.mutate(), children: "Verwijderen" })] })] })] })] })] }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-[340px_1fr]", children: [_jsx(ProfileCard, { profile: adaptLocalToProfile(c, data.contacts) }), _jsxs("div", { className: "space-y-4 min-w-0", children: [_jsx(KpiStrip, { counts: {
36
+ return (_jsxs("main", { className: "p-6 space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => navigate({ to: "/klanten" }), children: [_jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }), " Terug naar klanten"] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: () => toggleActive.mutate(!c.is_active), children: [_jsx(Power, { className: "h-4 w-4 mr-2" }), c.is_active ? "Op inactief zetten" : "Activeren"] }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", children: [_jsx(Trash2, { className: "h-4 w-4 mr-2" }), " Verwijderen"] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Klant verwijderen?" }), _jsxs(AlertDialogDescription, { children: ["Weet je zeker dat je ", _jsx("strong", { children: c.company_name }), " wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { onClick: () => delMut.mutate(), children: "Verwijderen" })] })] })] })] })] }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-[340px_1fr]", children: [_jsx(ProfileCard, { profile: adaptLocalToProfile(c, data.contacts) }), _jsxs("div", { className: "space-y-4 min-w-0", children: [_jsx(KpiStrip, { counts: {
37
37
  contacts: data.contacts.length,
38
38
  locations: data.delivery_locations.length,
39
39
  assortment: data.assortment.length,
@@ -0,0 +1,2 @@
1
+ export declare function KlantDetailRoute(): import("react").JSX.Element;
2
+ //# sourceMappingURL=KlantDetailRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KlantDetailRoute.d.ts","sourceRoot":"","sources":["../../../src/components/klanten/KlantDetailRoute.tsx"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,gCAG/B"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getRouteApi } from "@tanstack/react-router";
3
+ import { KlantDetail } from "./KlantDetail";
4
+ const route = getRouteApi("/_authenticated/klanten/$id");
5
+ export function KlantDetailRoute() {
6
+ const { id } = route.useParams();
7
+ return _jsx(KlantDetail, { id: id });
8
+ }
@@ -119,7 +119,7 @@ export function KlantenOverzicht() {
119
119
  activeFilterChips.push({ key: "co", label: `Land: ${country}`, clear: () => setCountry("__all__") });
120
120
  const toggleSort = (col) => setSort((s) => (s.col === col ? { col, dir: s.dir === "asc" ? "desc" : "asc" } : { col, dir: "asc" }));
121
121
  const lastUpdated = externalData?.last_fetched_at ?? null;
122
- return (_jsxs("main", { className: "p-6 space-y-5 max-w-[1400px] mx-auto", children: [_jsxs("div", { className: "flex items-start justify-between gap-4 flex-wrap", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: "Klanten" }), _jsxs("p", { className: "text-sm text-muted-foreground mt-1", children: ["Beheer en doorzoek al je klanten.", lastUpdated && (_jsxs("span", { className: "ml-2 text-xs", children: ["\u00B7 Bijgewerkt ", relativeTime(lastUpdated)] }))] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => navigate({ to: "/klanten/netwerk" }), children: [_jsx(Network, { className: "h-4 w-4 mr-2" }), " Klanten toevoegen uit netwerk"] }), _jsxs(Button, { onClick: () => navigate({ to: "/klanten/nieuw" }), children: [_jsx(Plus, { className: "h-4 w-4 mr-2" }), " Nieuwe klant"] })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3 max-w-md", children: [_jsx(StatCard, { icon: _jsx(Users, { className: "h-4 w-4" }), label: "Totaal", value: totals.all ?? 0, active: view === "all", onClick: () => setView("all") }), _jsx(StatCard, { icon: _jsx(UserCheck, { className: "h-4 w-4" }), label: "Actief", value: totals.active ?? 0, active: view === "active", onClick: () => setView("active") })] }), _jsx(Tabs, { value: view, onValueChange: (v) => setView(v), children: _jsxs(TabsList, { className: "flex-wrap", children: [_jsxs(TabsTrigger, { value: "all", children: ["Alle (", totals.all ?? 0, ")"] }), _jsxs(TabsTrigger, { value: "active", children: ["Actief (", totals.active ?? 0, ")"] })] }) }), _jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsxs("div", { className: "relative flex-1 min-w-[240px] max-w-md", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx(Input, { placeholder: "Zoek op bedrijf, contactpersoon of e-mail...", value: search, onChange: (e) => setSearch(e.target.value), className: "pl-9" })] }), _jsxs(Select, { value: customerClass, onValueChange: setCustomerClass, children: [_jsx(SelectTrigger, { className: "w-40", children: _jsx(SelectValue, { placeholder: "Klasse" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__all__", children: "Alle klassen" }), (classData?.classes ?? []).map((c) => (_jsx(SelectItem, { value: c, children: c }, c)))] })] }), _jsxs(Select, { value: country, onValueChange: setCountry, children: [_jsx(SelectTrigger, { className: "w-36", children: _jsx(SelectValue, { placeholder: "Land" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__all__", children: "Alle landen" }), countries.map((c) => (_jsx(SelectItem, { value: c, children: c }, c)))] })] }), _jsxs("div", { className: "flex items-center gap-2 ml-auto", children: [_jsx(Switch, { id: "show-inactive", checked: showInactive, onCheckedChange: setShowInactive }), _jsx(Label, { htmlFor: "show-inactive", className: "text-sm cursor-pointer", children: "Toon inactieve klanten" })] })] }), activeFilterChips.length > 0 && (_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [activeFilterChips.map((chip) => (_jsxs("button", { type: "button", onClick: chip.clear, className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/50 px-3 py-1 text-xs hover:bg-muted", children: [chip.label, " ", _jsx(X, { className: "h-3 w-3" })] }, chip.key))), _jsx("button", { type: "button", onClick: () => { setSearch(""); setCustomerClass("__all__"); setCountry("__all__"); }, className: "text-xs text-muted-foreground hover:text-foreground underline", children: "Alles wissen" })] })), _jsx("div", { className: "text-sm text-muted-foreground", children: isLoading ? "Laden..." : `${customers.length} ${customers.length === 1 ? "klant" : "klanten"} gevonden` }), _jsx(Card, { children: _jsx(CardContent, { className: "p-0", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: _jsx(SortHeader, { label: "Bedrijf", col: "company_name", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: "Contact" }), _jsx(TableHead, { children: _jsx(SortHeader, { label: "Klasse", col: "customer_class", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: _jsx(SortHeader, { label: "Land", col: "country", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: "Status" })] }) }), _jsx(TableBody, { children: isLoading ? (Array.from({ length: 6 }).map((_, i) => (_jsx(TableRow, { children: Array.from({ length: 5 }).map((__, j) => (_jsx(TableCell, { className: "py-4", children: _jsx(Skeleton, { className: "h-4 w-full max-w-[160px]" }) }, j))) }, i)))) : customers.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 5, children: _jsx(EmptyState, { onAdd: () => navigate({ to: "/klanten/nieuw" }) }) }) })) : customers.map((c) => {
122
+ return (_jsxs("main", { className: "p-6 space-y-5", children: [_jsxs("div", { className: "flex items-start justify-between gap-4 flex-wrap", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: "Klanten" }), _jsxs("p", { className: "text-sm text-muted-foreground mt-1", children: ["Beheer en doorzoek al je klanten.", lastUpdated && (_jsxs("span", { className: "ml-2 text-xs", children: ["\u00B7 Bijgewerkt ", relativeTime(lastUpdated)] }))] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => navigate({ to: "/klanten/netwerk" }), children: [_jsx(Network, { className: "h-4 w-4 mr-2" }), " Klanten toevoegen uit netwerk"] }), _jsxs(Button, { onClick: () => navigate({ to: "/klanten/nieuw" }), children: [_jsx(Plus, { className: "h-4 w-4 mr-2" }), " Nieuwe klant"] })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3 max-w-md", children: [_jsx(StatCard, { icon: _jsx(Users, { className: "h-4 w-4" }), label: "Totaal", value: totals.all ?? 0, active: view === "all", onClick: () => setView("all") }), _jsx(StatCard, { icon: _jsx(UserCheck, { className: "h-4 w-4" }), label: "Actief", value: totals.active ?? 0, active: view === "active", onClick: () => setView("active") })] }), _jsx(Tabs, { value: view, onValueChange: (v) => setView(v), children: _jsxs(TabsList, { className: "flex-wrap", children: [_jsxs(TabsTrigger, { value: "all", children: ["Alle (", totals.all ?? 0, ")"] }), _jsxs(TabsTrigger, { value: "active", children: ["Actief (", totals.active ?? 0, ")"] })] }) }), _jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsxs("div", { className: "relative flex-1 min-w-[240px] max-w-md", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx(Input, { placeholder: "Zoek op bedrijf, contactpersoon of e-mail...", value: search, onChange: (e) => setSearch(e.target.value), className: "pl-9" })] }), _jsxs(Select, { value: customerClass, onValueChange: setCustomerClass, children: [_jsx(SelectTrigger, { className: "w-40", children: _jsx(SelectValue, { placeholder: "Klasse" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__all__", children: "Alle klassen" }), (classData?.classes ?? []).map((c) => (_jsx(SelectItem, { value: c, children: c }, c)))] })] }), _jsxs(Select, { value: country, onValueChange: setCountry, children: [_jsx(SelectTrigger, { className: "w-36", children: _jsx(SelectValue, { placeholder: "Land" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__all__", children: "Alle landen" }), countries.map((c) => (_jsx(SelectItem, { value: c, children: c }, c)))] })] }), _jsxs("div", { className: "flex items-center gap-2 ml-auto", children: [_jsx(Switch, { id: "show-inactive", checked: showInactive, onCheckedChange: setShowInactive }), _jsx(Label, { htmlFor: "show-inactive", className: "text-sm cursor-pointer", children: "Toon inactieve klanten" })] })] }), activeFilterChips.length > 0 && (_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [activeFilterChips.map((chip) => (_jsxs("button", { type: "button", onClick: chip.clear, className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/50 px-3 py-1 text-xs hover:bg-muted", children: [chip.label, " ", _jsx(X, { className: "h-3 w-3" })] }, chip.key))), _jsx("button", { type: "button", onClick: () => { setSearch(""); setCustomerClass("__all__"); setCountry("__all__"); }, className: "text-xs text-muted-foreground hover:text-foreground underline", children: "Alles wissen" })] })), _jsx("div", { className: "text-sm text-muted-foreground", children: isLoading ? "Laden..." : `${customers.length} ${customers.length === 1 ? "klant" : "klanten"} gevonden` }), _jsx(Card, { children: _jsx(CardContent, { className: "p-0", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: _jsx(SortHeader, { label: "Bedrijf", col: "company_name", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: "Contact" }), _jsx(TableHead, { children: _jsx(SortHeader, { label: "Klasse", col: "customer_class", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: _jsx(SortHeader, { label: "Land", col: "country", sort: sort, onClick: toggleSort }) }), _jsx(TableHead, { children: "Status" })] }) }), _jsx(TableBody, { children: isLoading ? (Array.from({ length: 6 }).map((_, i) => (_jsx(TableRow, { children: Array.from({ length: 5 }).map((__, j) => (_jsx(TableCell, { className: "py-4", children: _jsx(Skeleton, { className: "h-4 w-full max-w-[160px]" }) }, j))) }, i)))) : customers.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 5, children: _jsx(EmptyState, { onAdd: () => navigate({ to: "/klanten/nieuw" }) }) }) })) : customers.map((c) => {
123
123
  const secondary = c.commercial_name && c.commercial_name !== c.company_name
124
124
  ? c.commercial_name
125
125
  : c.city ?? c.email ?? null;
@@ -5,5 +5,7 @@ export { KlantDetail } from "./components/klanten/KlantDetail";
5
5
  export { GroupedKlantDetail } from "./components/klanten/GroupedKlantDetail";
6
6
  export { NetwerkPagina } from "./components/klanten/NetwerkPagina";
7
7
  export { NieuweKlant } from "./components/klanten/NieuweKlant";
8
+ export { KlantDetailRoute } from "./components/klanten/KlantDetailRoute";
9
+ export { GroupedKlantDetailRoute } from "./components/klanten/GroupedKlantDetailRoute";
8
10
  export declare const floridayKlantenModule: FlowModule;
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,eAAO,MAAM,qBAAqB,EAAE,UAYnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAEvF,eAAO,MAAM,qBAAqB,EAAE,UAYnC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -21,6 +21,8 @@ export { KlantDetail } from "./components/klanten/KlantDetail";
21
21
  export { GroupedKlantDetail } from "./components/klanten/GroupedKlantDetail";
22
22
  export { NetwerkPagina } from "./components/klanten/NetwerkPagina";
23
23
  export { NieuweKlant } from "./components/klanten/NieuweKlant";
24
+ export { KlantDetailRoute } from "./components/klanten/KlantDetailRoute";
25
+ export { GroupedKlantDetailRoute } from "./components/klanten/GroupedKlantDetailRoute";
24
26
  export const floridayKlantenModule = {
25
27
  id: "customers",
26
28
  name: "Klanten",
@@ -2734,6 +2734,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2734
2734
  };
2735
2735
  floricode_sync_state: {
2736
2736
  Row: {
2737
+ cursor_skip: number;
2737
2738
  error_message: string | null;
2738
2739
  last_change_date_time: string | null;
2739
2740
  last_sequence_number: number;
@@ -2743,6 +2744,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2743
2744
  updated_at: string;
2744
2745
  };
2745
2746
  Insert: {
2747
+ cursor_skip?: number;
2746
2748
  error_message?: string | null;
2747
2749
  last_change_date_time?: string | null;
2748
2750
  last_sequence_number?: number;
@@ -2752,6 +2754,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2752
2754
  updated_at?: string;
2753
2755
  };
2754
2756
  Update: {
2757
+ cursor_skip?: number;
2755
2758
  error_message?: string | null;
2756
2759
  last_change_date_time?: string | null;
2757
2760
  last_sequence_number?: number;
@@ -5099,6 +5102,93 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
5099
5102
  };
5100
5103
  Relationships: [];
5101
5104
  };
5105
+ manufacture_product_components: {
5106
+ Row: {
5107
+ component_type: string;
5108
+ created_at: string;
5109
+ id: string;
5110
+ manufacture_product_id: string;
5111
+ product_group_id: string | null;
5112
+ quantity: number;
5113
+ trade_item_id: string | null;
5114
+ unit: string;
5115
+ };
5116
+ Insert: {
5117
+ component_type: string;
5118
+ created_at?: string;
5119
+ id?: string;
5120
+ manufacture_product_id: string;
5121
+ product_group_id?: string | null;
5122
+ quantity?: number;
5123
+ trade_item_id?: string | null;
5124
+ unit?: string;
5125
+ };
5126
+ Update: {
5127
+ component_type?: string;
5128
+ created_at?: string;
5129
+ id?: string;
5130
+ manufacture_product_id?: string;
5131
+ product_group_id?: string | null;
5132
+ quantity?: number;
5133
+ trade_item_id?: string | null;
5134
+ unit?: string;
5135
+ };
5136
+ Relationships: [{
5137
+ foreignKeyName: "manufacture_product_components_manufacture_product_id_fkey";
5138
+ columns: ["manufacture_product_id"];
5139
+ isOneToOne: false;
5140
+ referencedRelation: "manufacture_product_possible_stock_view";
5141
+ referencedColumns: ["manufacture_product_id"];
5142
+ }, {
5143
+ foreignKeyName: "manufacture_product_components_manufacture_product_id_fkey";
5144
+ columns: ["manufacture_product_id"];
5145
+ isOneToOne: false;
5146
+ referencedRelation: "manufacture_products";
5147
+ referencedColumns: ["id"];
5148
+ }, {
5149
+ foreignKeyName: "manufacture_product_components_product_group_id_fkey";
5150
+ columns: ["product_group_id"];
5151
+ isOneToOne: false;
5152
+ referencedRelation: "product_groups";
5153
+ referencedColumns: ["id"];
5154
+ }];
5155
+ };
5156
+ manufacture_products: {
5157
+ Row: {
5158
+ created_at: string;
5159
+ description: string | null;
5160
+ id: string;
5161
+ is_active: boolean;
5162
+ name: string;
5163
+ produced_stock: number;
5164
+ product_code: string;
5165
+ tenant_id: string;
5166
+ updated_at: string;
5167
+ };
5168
+ Insert: {
5169
+ created_at?: string;
5170
+ description?: string | null;
5171
+ id?: string;
5172
+ is_active?: boolean;
5173
+ name: string;
5174
+ produced_stock?: number;
5175
+ product_code: string;
5176
+ tenant_id: string;
5177
+ updated_at?: string;
5178
+ };
5179
+ Update: {
5180
+ created_at?: string;
5181
+ description?: string | null;
5182
+ id?: string;
5183
+ is_active?: boolean;
5184
+ name?: string;
5185
+ produced_stock?: number;
5186
+ product_code?: string;
5187
+ tenant_id?: string;
5188
+ updated_at?: string;
5189
+ };
5190
+ Relationships: [];
5191
+ };
5102
5192
  monteurs: {
5103
5193
  Row: {
5104
5194
  avatar_url: string | null;
@@ -6059,6 +6149,66 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
6059
6149
  };
6060
6150
  Relationships: [];
6061
6151
  };
6152
+ product_group_items: {
6153
+ Row: {
6154
+ created_at: string;
6155
+ id: string;
6156
+ product_group_id: string;
6157
+ quantity: number;
6158
+ trade_item_id: string;
6159
+ };
6160
+ Insert: {
6161
+ created_at?: string;
6162
+ id?: string;
6163
+ product_group_id: string;
6164
+ quantity?: number;
6165
+ trade_item_id: string;
6166
+ };
6167
+ Update: {
6168
+ created_at?: string;
6169
+ id?: string;
6170
+ product_group_id?: string;
6171
+ quantity?: number;
6172
+ trade_item_id?: string;
6173
+ };
6174
+ Relationships: [{
6175
+ foreignKeyName: "product_group_items_product_group_id_fkey";
6176
+ columns: ["product_group_id"];
6177
+ isOneToOne: false;
6178
+ referencedRelation: "product_groups";
6179
+ referencedColumns: ["id"];
6180
+ }];
6181
+ };
6182
+ product_groups: {
6183
+ Row: {
6184
+ created_at: string;
6185
+ description: string | null;
6186
+ id: string;
6187
+ is_active: boolean;
6188
+ name: string;
6189
+ tenant_id: string;
6190
+ updated_at: string;
6191
+ };
6192
+ Insert: {
6193
+ created_at?: string;
6194
+ description?: string | null;
6195
+ id?: string;
6196
+ is_active?: boolean;
6197
+ name: string;
6198
+ tenant_id: string;
6199
+ updated_at?: string;
6200
+ };
6201
+ Update: {
6202
+ created_at?: string;
6203
+ description?: string | null;
6204
+ id?: string;
6205
+ is_active?: boolean;
6206
+ name?: string;
6207
+ tenant_id?: string;
6208
+ updated_at?: string;
6209
+ };
6210
+ Relationships: [];
6211
+ };
6062
6212
  products: {
6063
6213
  Row: {
6064
6214
  barcode: string | null;
@@ -7220,6 +7370,48 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
7220
7370
  };
7221
7371
  Relationships: [];
7222
7372
  };
7373
+ trade_item_stock: {
7374
+ Row: {
7375
+ connection_id: string;
7376
+ created_at: string;
7377
+ id: string;
7378
+ incoming_stock: number;
7379
+ minimum_stock: number;
7380
+ notes: string | null;
7381
+ physical_stock: number;
7382
+ reserved_stock: number;
7383
+ trade_item_key: string;
7384
+ updated_at: string;
7385
+ user_id: string;
7386
+ };
7387
+ Insert: {
7388
+ connection_id: string;
7389
+ created_at?: string;
7390
+ id?: string;
7391
+ incoming_stock?: number;
7392
+ minimum_stock?: number;
7393
+ notes?: string | null;
7394
+ physical_stock?: number;
7395
+ reserved_stock?: number;
7396
+ trade_item_key: string;
7397
+ updated_at?: string;
7398
+ user_id: string;
7399
+ };
7400
+ Update: {
7401
+ connection_id?: string;
7402
+ created_at?: string;
7403
+ id?: string;
7404
+ incoming_stock?: number;
7405
+ minimum_stock?: number;
7406
+ notes?: string | null;
7407
+ physical_stock?: number;
7408
+ reserved_stock?: number;
7409
+ trade_item_key?: string;
7410
+ updated_at?: string;
7411
+ user_id?: string;
7412
+ };
7413
+ Relationships: [];
7414
+ };
7223
7415
  twinfield_connections: {
7224
7416
  Row: {
7225
7417
  access_token: string | null;
@@ -8404,6 +8596,35 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
8404
8596
  };
8405
8597
  Relationships: [];
8406
8598
  };
8599
+ manufacture_product_possible_stock_view: {
8600
+ Row: {
8601
+ component_count: number | null;
8602
+ manufacture_product_id: string | null;
8603
+ possible_stock: number | null;
8604
+ };
8605
+ Relationships: [];
8606
+ };
8607
+ product_group_stock_view: {
8608
+ Row: {
8609
+ item_count: number | null;
8610
+ product_group_id: string | null;
8611
+ total_stock: number | null;
8612
+ };
8613
+ Relationships: [{
8614
+ foreignKeyName: "product_group_items_product_group_id_fkey";
8615
+ columns: ["product_group_id"];
8616
+ isOneToOne: false;
8617
+ referencedRelation: "product_groups";
8618
+ referencedColumns: ["id"];
8619
+ }];
8620
+ };
8621
+ trade_item_stock_view: {
8622
+ Row: {
8623
+ stock: number | null;
8624
+ trade_item_id: string | null;
8625
+ };
8626
+ Relationships: [];
8627
+ };
8407
8628
  v_external_customers_exact: {
8408
8629
  Row: {
8409
8630
  account_number: string | null;
@@ -8974,6 +9195,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
8974
9195
  row_count: number;
8975
9196
  }[];
8976
9197
  };
9198
+ refresh_floricode_derived_for_product: {
9199
+ Args: {
9200
+ p_product_code: string;
9201
+ };
9202
+ Returns: number;
9203
+ };
8977
9204
  reset_floriday_sync_cursor: {
8978
9205
  Args: {
8979
9206
  p_connection_id: string;