@flowselections/floriday-verkoop-module 1.0.60 → 1.0.61

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 (140) hide show
  1. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +9 -0
  2. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -0
  3. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.js +26 -0
  4. package/dist-lib/components/karindeling/AfmetingenTab.d.ts +6 -0
  5. package/dist-lib/components/karindeling/AfmetingenTab.d.ts.map +1 -0
  6. package/dist-lib/components/karindeling/AfmetingenTab.js +128 -0
  7. package/dist-lib/components/karindeling/KarindelingPage.d.ts +2 -0
  8. package/dist-lib/components/karindeling/KarindelingPage.d.ts.map +1 -0
  9. package/dist-lib/components/karindeling/KarindelingPage.js +102 -0
  10. package/dist-lib/components/ui/dropdown-menu.d.ts +9 -0
  11. package/dist-lib/components/ui/dropdown-menu.d.ts.map +1 -0
  12. package/dist-lib/components/ui/dropdown-menu.js +14 -0
  13. package/dist-lib/components/verkoop/AnalyticsCards.d.ts +1 -1
  14. package/dist-lib/components/verkoop/AnalyticsCards.d.ts.map +1 -1
  15. package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts +1 -1
  16. package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts.map +1 -1
  17. package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts +1 -1
  18. package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts.map +1 -1
  19. package/dist-lib/components/verkoop/CartLayersDialog.d.ts +1 -1
  20. package/dist-lib/components/verkoop/CartLayersDialog.d.ts.map +1 -1
  21. package/dist-lib/components/verkoop/CreateOrderDialog.d.ts +5 -0
  22. package/dist-lib/components/verkoop/CreateOrderDialog.d.ts.map +1 -0
  23. package/dist-lib/components/verkoop/CreateOrderDialog.js +33 -0
  24. package/dist-lib/components/verkoop/CreateOrderPage.d.ts +1 -1
  25. package/dist-lib/components/verkoop/CreateOrderPage.d.ts.map +1 -1
  26. package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts +1 -1
  27. package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts.map +1 -1
  28. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts +1 -1
  29. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -1
  30. package/dist-lib/components/verkoop/EngineBufferCard.d.ts +1 -1
  31. package/dist-lib/components/verkoop/EngineBufferCard.d.ts.map +1 -1
  32. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts +1 -1
  33. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts.map +1 -1
  34. package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts +1 -1
  35. package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts.map +1 -1
  36. package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts +1 -1
  37. package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts.map +1 -1
  38. package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts +1 -1
  39. package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts.map +1 -1
  40. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts +1 -1
  41. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
  42. package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts +1 -1
  43. package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts.map +1 -1
  44. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts +1 -1
  45. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts.map +1 -1
  46. package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts +1 -1
  47. package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts.map +1 -1
  48. package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts +1 -1
  49. package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
  50. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +1 -1
  51. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
  52. package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts +1 -1
  53. package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts.map +1 -1
  54. package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts +1 -1
  55. package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts.map +1 -1
  56. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +1 -2
  57. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
  58. package/dist-lib/components/verkoop/SearchableSelect.d.ts +1 -1
  59. package/dist-lib/components/verkoop/SearchableSelect.d.ts.map +1 -1
  60. package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts +1 -1
  61. package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts.map +1 -1
  62. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts +1 -1
  63. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
  64. package/dist-lib/components/verkoop/WeekCalendar.d.ts +1 -1
  65. package/dist-lib/components/verkoop/WeekCalendar.d.ts.map +1 -1
  66. package/dist-lib/integrations/supabase/auth-middleware.d.ts +280 -0
  67. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  68. package/dist-lib/integrations/supabase/client.server.d.ts +280 -0
  69. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  70. package/dist-lib/integrations/supabase/types.d.ts +280 -0
  71. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  72. package/dist-lib/lib/buffer-events.functions.d.ts +280 -0
  73. package/dist-lib/lib/buffer-events.functions.d.ts.map +1 -1
  74. package/dist-lib/lib/cart-layers.functions.d.ts +1124 -36
  75. package/dist-lib/lib/cart-layers.functions.d.ts.map +1 -1
  76. package/dist-lib/lib/cart-lock.functions.d.ts +280 -0
  77. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  78. package/dist-lib/lib/cart-planning-settings.functions.d.ts +3080 -0
  79. package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
  80. package/dist-lib/lib/cart-replan.functions.d.ts +840 -0
  81. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  82. package/dist-lib/lib/create-order.functions.d.ts +4777 -102
  83. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  84. package/dist-lib/lib/cron/push-order-statuses.d.ts +4 -0
  85. package/dist-lib/lib/cron/push-order-statuses.d.ts.map +1 -0
  86. package/dist-lib/lib/cron/push-order-statuses.js +23 -0
  87. package/dist-lib/lib/floriday/floriday.server.d.ts +14 -0
  88. package/dist-lib/lib/floriday/floriday.server.d.ts.map +1 -0
  89. package/dist-lib/lib/floriday/floriday.server.js +92 -0
  90. package/dist-lib/lib/floriday/sales-orders.functions.d.ts +4736 -0
  91. package/dist-lib/lib/floriday/sales-orders.functions.d.ts.map +1 -0
  92. package/dist-lib/lib/floriday/sales-orders.functions.js +193 -0
  93. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +13288 -2362
  94. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
  95. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +560 -0
  96. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  97. package/dist-lib/lib/floriday-mirror.functions.d.ts +280 -0
  98. package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
  99. package/dist-lib/lib/floriday-mirror.functions.js +282 -117
  100. package/dist-lib/lib/floriday-public.functions.d.ts +1960 -0
  101. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  102. package/dist-lib/lib/floriday-status-sync.server.d.ts +14 -0
  103. package/dist-lib/lib/floriday-status-sync.server.d.ts.map +1 -0
  104. package/dist-lib/lib/floriday-status-sync.server.js +130 -0
  105. package/dist-lib/lib/floriday-writes.functions.d.ts +560 -0
  106. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  107. package/dist-lib/lib/invoice-timing.functions.d.ts +1120 -0
  108. package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
  109. package/dist-lib/lib/load-carriers.functions.d.ts +280 -0
  110. package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
  111. package/dist-lib/lib/logistics-engine.functions.d.ts +1405 -15
  112. package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
  113. package/dist-lib/lib/logistics-stock.functions.d.ts +560 -0
  114. package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
  115. package/dist-lib/lib/order-addresses.functions.d.ts +280 -0
  116. package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
  117. package/dist-lib/lib/order-buffers.functions.d.ts +840 -0
  118. package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
  119. package/dist-lib/lib/order-carrier.functions.d.ts +560 -0
  120. package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
  121. package/dist-lib/lib/order-fulfill.functions.d.ts +280 -0
  122. package/dist-lib/lib/order-fulfill.functions.d.ts.map +1 -1
  123. package/dist-lib/lib/order-pickup.functions.d.ts +560 -0
  124. package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
  125. package/dist-lib/lib/order-shipments.functions.d.ts +1120 -0
  126. package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
  127. package/dist-lib/lib/product-dimensions.functions.d.ts +560 -0
  128. package/dist-lib/lib/product-dimensions.functions.d.ts.map +1 -1
  129. package/dist-lib/lib/salesorders-list.functions.d.ts +560 -0
  130. package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
  131. package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
  132. package/dist-lib/lib/salesorders-list.server.js +62 -3
  133. package/dist-lib/lib/salesorders.functions.d.ts +1680 -0
  134. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  135. package/dist-lib/lib/salesorders.functions.js +6 -1
  136. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +560 -0
  137. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
  138. package/dist-lib/lib/tradeitems.functions.d.ts +280 -0
  139. package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
  140. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ environment: "staging" | "live";
3
+ resources: string[];
4
+ /** Max minuten dat een sync mag achterlopen voordat de banner verschijnt. */
5
+ staleAfterMinutes?: number;
6
+ }
7
+ export declare function FlorydaySyncHealthBanner({ environment, resources, staleAfterMinutes, }: Props): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
9
+ //# sourceMappingURL=FlorydaySyncHealthBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlorydaySyncHealthBanner.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydaySyncHealthBanner.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EACvC,WAAW,EACX,SAAS,EACT,iBAAsB,GACvB,EAAE,KAAK,kDAmCP"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useServerFn } from "@tanstack/react-start";
4
+ import { AlertTriangle } from "lucide-react";
5
+ import { getFlorydaySyncHealth } from "../../lib/floriday-public.functions";
6
+ export function FlorydaySyncHealthBanner({ environment, resources, staleAfterMinutes = 30, }) {
7
+ const fetchHealth = useServerFn(getFlorydaySyncHealth);
8
+ const { data } = useQuery({
9
+ queryKey: ["floriday", "sync-health", environment, resources.join(",")],
10
+ queryFn: () => fetchHealth({ data: { environment, resources } }),
11
+ staleTime: 60000,
12
+ refetchInterval: 120000,
13
+ });
14
+ if (!data || !data.resources)
15
+ return null;
16
+ const now = Date.now();
17
+ const stale = data.resources.filter((r) => {
18
+ if (!r.lastSyncedAt)
19
+ return true;
20
+ const age = (now - new Date(r.lastSyncedAt).getTime()) / 60000;
21
+ return age > staleAfterMinutes || Boolean(r.lastError);
22
+ });
23
+ if (stale.length === 0)
24
+ return null;
25
+ return (_jsxs("div", { className: "flex items-start gap-3 rounded-md border border-amber-300 bg-amber-50 px-4 py-3 text-sm text-amber-900", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "font-medium", children: "Floriday-data is mogelijk verouderd" }), _jsx("ul", { className: "space-y-0.5 text-xs", children: stale.map((r) => (_jsxs("li", { children: [_jsx("strong", { children: r.resource }), ":", " ", r.lastSyncedAt ? `laatste sync ${new Date(r.lastSyncedAt).toLocaleString("nl-NL")}` : "nooit gesynchroniseerd", r.lastError ? ` — ${r.lastError}` : ""] }, r.resource))) })] })] }));
26
+ }
@@ -0,0 +1,6 @@
1
+ import { type CartType, type CrateType } from "../../lib/cart-planning-settings.functions";
2
+ export declare function AfmetingenTab({ cartTypes, crateTypes, }: {
3
+ cartTypes: CartType[];
4
+ crateTypes: CrateType[];
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=AfmetingenTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AfmetingenTab.d.ts","sourceRoot":"","sources":["../../../src/components/karindeling/AfmetingenTab.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAQL,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,wCAAwC,CAAC;AAMhD,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,UAAU,GACX,EAAE;IACD,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,2CA+BA"}
@@ -0,0 +1,128 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
+ import { useServerFn } from "@tanstack/react-start";
5
+ import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, Separator, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, toast, } from "@flowselections/core";
6
+ import { Star, Trash2 } from "lucide-react";
7
+ import { deleteCartType, deleteCrateType, listUsedCartCarriers, listUsedCratePackages, setDefaultCartType, upsertCartType, upsertCrateType, } from "../../lib/cart-planning-settings.functions";
8
+ function areaM2(lengthCm, widthCm) {
9
+ return ((lengthCm * widthCm) / 10000).toFixed(2);
10
+ }
11
+ export function AfmetingenTab({ cartTypes, crateTypes, }) {
12
+ return (_jsxs("div", { className: "space-y-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Karren / containers" }), _jsxs(CardDescription, { children: ["Stel per kar-type de laag-afmetingen in. Fusten per laag =", " ", _jsx("em", { children: "laag-oppervlakte / fust-oppervlakte" }), ". \u00C9\u00E9n type is de standaard en wordt gebruikt door de planner."] })] }), _jsx(CardContent, { className: "space-y-4", children: _jsx(CartTypesEditor, { cartTypes: cartTypes }) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Fusten" }), _jsx(CardDescription, { children: "Stel per fust-type de afmetingen in. Wordt gecombineerd met het gekozen kar-type om te bepalen hoeveel fusten er op een laag passen (ook bij menging)." })] }), _jsx(CardContent, { className: "space-y-4", children: _jsx(CrateTypesEditor, { crateTypes: crateTypes }) })] })] }));
13
+ }
14
+ function CartTypesEditor({ cartTypes }) {
15
+ const qc = useQueryClient();
16
+ const upsert = useServerFn(upsertCartType);
17
+ const remove = useServerFn(deleteCartType);
18
+ const setDefault = useServerFn(setDefaultCartType);
19
+ const fetchCarriers = useServerFn(listUsedCartCarriers);
20
+ const { data: carriers = [] } = useQuery({
21
+ queryKey: ["used-cart-carriers"],
22
+ queryFn: () => fetchCarriers(),
23
+ });
24
+ const [name, setName] = useState("");
25
+ const [len, setLen] = useState(135);
26
+ const [wid, setWid] = useState(56);
27
+ const [layers, setLayers] = useState(4);
28
+ const invalidate = () => qc.invalidateQueries({ queryKey: ["cart-planning-bundle"] });
29
+ const addMut = useMutation({
30
+ mutationFn: () => upsert({
31
+ data: {
32
+ name: name.trim(),
33
+ layer_length_cm: len,
34
+ layer_width_cm: wid,
35
+ layers_per_cart: layers,
36
+ is_default: cartTypes.length === 0,
37
+ },
38
+ }),
39
+ onSuccess: () => {
40
+ toast.success("Kar-type opgeslagen");
41
+ setName("");
42
+ setLen(135);
43
+ setWid(56);
44
+ setLayers(4);
45
+ invalidate();
46
+ },
47
+ onError: (e) => toast.error(e?.message ?? "Fout"),
48
+ });
49
+ const delMut = useMutation({
50
+ mutationFn: (id) => remove({ data: { id } }),
51
+ onSuccess: invalidate,
52
+ });
53
+ const defMut = useMutation({
54
+ mutationFn: (id) => setDefault({ data: { id } }),
55
+ onSuccess: () => {
56
+ toast.success("Standaard bijgewerkt");
57
+ invalidate();
58
+ },
59
+ });
60
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid gap-3 rounded-md border p-3 lg:grid-cols-5", children: [_jsxs("div", { className: "space-y-2 lg:col-span-2", children: [_jsx(Label, { children: "Naam" }), _jsx(Input, { list: "used-cart-carriers", value: name, onChange: (e) => {
61
+ const v = e.target.value;
62
+ setName(v);
63
+ const match = carriers.find((c) => c.label === v || c.name === v);
64
+ if (match) {
65
+ if (match.layer_length_cm)
66
+ setLen(match.layer_length_cm);
67
+ if (match.layer_width_cm)
68
+ setWid(match.layer_width_cm);
69
+ if (match.layers_per_cart)
70
+ setLayers(match.layers_per_cart);
71
+ }
72
+ }, placeholder: carriers.length > 0
73
+ ? "Kies uit lijst of typ zelf"
74
+ : "bv. Deense container" }), _jsx("datalist", { id: "used-cart-carriers", children: carriers.map((c) => (_jsx("option", { value: c.label, children: c.usage_count > 0 ? `${c.usage_count}× gebruikt` : "niet in gebruik" }, c.key))) }), carriers.length > 0 && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [carriers.length, " kar-types bekend uit Floriday; afmetingen worden automatisch ingevuld."] }))] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Lengte (cm)" }), _jsx(Input, { type: "number", min: 1, value: len, onChange: (e) => setLen(Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Breedte (cm)" }), _jsx(Input, { type: "number", min: 1, value: wid, onChange: (e) => setWid(Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Lagen / kar" }), _jsx(Input, { type: "number", min: 1, value: layers, onChange: (e) => setLayers(Number(e.target.value)) })] }), _jsx("div", { className: "lg:col-span-5", children: _jsx(Button, { disabled: !name.trim() || addMut.isPending, onClick: () => addMut.mutate(), children: "Toevoegen" }) })] }), _jsx(Separator, {}), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { className: "text-right", children: "Lengte" }), _jsx(TableHead, { className: "text-right", children: "Breedte" }), _jsx(TableHead, { className: "text-right", children: "Oppervlakte (m\u00B2)" }), _jsx(TableHead, { children: "Standaard" }), _jsx(TableHead, { className: "w-16" })] }) }), _jsx(TableBody, { children: cartTypes.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 6, className: "text-sm text-muted-foreground", children: "Nog geen kar-types." }) })) : (cartTypes.map((c) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: c.name }), _jsxs(TableCell, { className: "text-right", children: [c.layer_length_cm, " cm"] }), _jsxs(TableCell, { className: "text-right", children: [c.layer_width_cm, " cm"] }), _jsx(TableCell, { className: "text-right", children: areaM2(c.layer_length_cm, c.layer_width_cm) }), _jsx(TableCell, { children: c.is_default ? (_jsx(Badge, { children: "Standaard" })) : (_jsxs(Button, { size: "sm", variant: "ghost", onClick: () => defMut.mutate(c.id), disabled: defMut.isPending, children: [_jsx(Star, { className: "mr-1 h-4 w-4" }), " Maak standaard"] })) }), _jsx(TableCell, { children: _jsx(Button, { variant: "ghost", size: "sm", onClick: () => delMut.mutate(c.id), children: _jsx(Trash2, { className: "h-4 w-4" }) }) })] }, c.id)))) })] })] }));
75
+ }
76
+ function CrateTypesEditor({ crateTypes }) {
77
+ const qc = useQueryClient();
78
+ const upsert = useServerFn(upsertCrateType);
79
+ const remove = useServerFn(deleteCrateType);
80
+ const fetchUsed = useServerFn(listUsedCratePackages);
81
+ const { data: usedPackages = [] } = useQuery({
82
+ queryKey: ["used-crate-packages"],
83
+ queryFn: () => fetchUsed(),
84
+ });
85
+ const [name, setName] = useState("");
86
+ const [len, setLen] = useState(60);
87
+ const [wid, setWid] = useState(40);
88
+ const [plants, setPlants] = useState(1);
89
+ const invalidate = () => qc.invalidateQueries({ queryKey: ["cart-planning-bundle"] });
90
+ const addMut = useMutation({
91
+ mutationFn: () => upsert({
92
+ data: {
93
+ name: name.trim(),
94
+ length_cm: len,
95
+ width_cm: wid,
96
+ plants_per_crate: plants,
97
+ },
98
+ }),
99
+ onSuccess: () => {
100
+ toast.success("Fust-type opgeslagen");
101
+ setName("");
102
+ setLen(60);
103
+ setWid(40);
104
+ setPlants(1);
105
+ invalidate();
106
+ },
107
+ onError: (e) => toast.error(e?.message ?? "Fout"),
108
+ });
109
+ const delMut = useMutation({
110
+ mutationFn: (id) => remove({ data: { id } }),
111
+ onSuccess: invalidate,
112
+ });
113
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid gap-3 rounded-md border p-3 lg:grid-cols-5", children: [_jsxs("div", { className: "space-y-2 lg:col-span-2", children: [_jsx(Label, { children: "Naam" }), _jsx(Input, { list: "used-crate-packages", value: name, onChange: (e) => {
114
+ const v = e.target.value;
115
+ setName(v);
116
+ const match = usedPackages.find((p) => p.label === v);
117
+ if (match) {
118
+ if (match.pieces_per_package)
119
+ setPlants(match.pieces_per_package);
120
+ if (match.length_cm)
121
+ setLen(match.length_cm);
122
+ if (match.width_cm)
123
+ setWid(match.width_cm);
124
+ }
125
+ }, placeholder: usedPackages.length > 0
126
+ ? "Kies uit lijst of typ zelf"
127
+ : "bv. Fust 40x60" }), _jsx("datalist", { id: "used-crate-packages", children: usedPackages.map((p) => (_jsx("option", { value: p.label, children: p.usage_count > 0 ? `${p.usage_count}× gebruikt` : "niet in gebruik" }, p.key))) }), usedPackages.length > 0 && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [usedPackages.length, " fusten bekend uit VBN-lijst; afmetingen worden automatisch ingevuld."] }))] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Lengte (cm)" }), _jsx(Input, { type: "number", min: 1, value: len, onChange: (e) => setLen(Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Breedte (cm)" }), _jsx(Input, { type: "number", min: 1, value: wid, onChange: (e) => setWid(Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Planten / fust" }), _jsx(Input, { type: "number", min: 1, value: plants, onChange: (e) => setPlants(Number(e.target.value)) })] }), _jsx("div", { className: "lg:col-span-5", children: _jsx(Button, { disabled: !name.trim() || addMut.isPending, onClick: () => addMut.mutate(), children: "Toevoegen" }) })] }), _jsx(Separator, {}), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { className: "text-right", children: "Lengte" }), _jsx(TableHead, { className: "text-right", children: "Breedte" }), _jsx(TableHead, { className: "text-right", children: "Oppervlakte (m\u00B2)" }), _jsx(TableHead, { className: "text-right", children: "Planten / fust" }), _jsx(TableHead, { className: "w-16" })] }) }), _jsx(TableBody, { children: crateTypes.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 6, className: "text-sm text-muted-foreground", children: "Nog geen fust-types." }) })) : (crateTypes.map((c) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: c.name }), _jsxs(TableCell, { className: "text-right", children: [c.length_cm, " cm"] }), _jsxs(TableCell, { className: "text-right", children: [c.width_cm, " cm"] }), _jsx(TableCell, { className: "text-right", children: areaM2(c.length_cm, c.width_cm) }), _jsx(TableCell, { className: "text-right", children: c.plants_per_crate }), _jsx(TableCell, { children: _jsx(Button, { variant: "ghost", size: "sm", onClick: () => delMut.mutate(c.id), children: _jsx(Trash2, { className: "h-4 w-4" }) }) })] }, c.id)))) })] })] }));
128
+ }
@@ -0,0 +1,2 @@
1
+ export declare function KarindelingPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=KarindelingPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KarindelingPage.d.ts","sourceRoot":"","sources":["../../../src/components/karindeling/KarindelingPage.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,eAAe,4CAuD9B"}
@@ -0,0 +1,102 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
+ import { useServerFn } from "@tanstack/react-start";
5
+ import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Checkbox, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Separator, Switch, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, toast, } from "@flowselections/core";
6
+ import { Trash2 } from "lucide-react";
7
+ import { deletePickTime, getCartPlanningBundle, updateCartPlanningSettings, upsertPickTime, } from "../../lib/cart-planning-settings.functions";
8
+ import { rebufferAllOrders } from "../../lib/order-buffers.functions";
9
+ import { AfmetingenTab } from "./AfmetingenTab";
10
+ export function KarindelingPage() {
11
+ const fetchBundle = useServerFn(getCartPlanningBundle);
12
+ const { data, isLoading } = useQuery({
13
+ queryKey: ["cart-planning-bundle"],
14
+ queryFn: () => fetchBundle(),
15
+ });
16
+ return (_jsxs("div", { className: "p-6 space-y-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Karindeling" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Bepaal hoe de karplanner orders indeelt op karren." })] }), _jsxs(Tabs, { defaultValue: "regels", className: "space-y-4", children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "regels", children: "Regels" }), _jsx(TabsTrigger, { value: "afmetingen", children: "Afmetingen" }), _jsx(TabsTrigger, { value: "picktijden", children: "Picktijden" }), _jsx(TabsTrigger, { value: "combineren", children: "Combineren" }), _jsx(TabsTrigger, { value: "orderbuffer", children: "Orderbuffer" }), _jsx(TabsTrigger, { value: "pickstation", children: "Pickstation" })] }), isLoading || !data ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Laden\u2026" })) : (_jsxs(_Fragment, { children: [_jsx(TabsContent, { value: "regels", children: _jsx(RegelsTab, { settings: data.settings }) }), _jsx(TabsContent, { value: "afmetingen", children: _jsx(AfmetingenTab, { cartTypes: data.cartTypes, crateTypes: data.crateTypes }) }), _jsx(TabsContent, { value: "picktijden", children: _jsx(PicktijdenTab, { settings: data.settings, pickTimes: data.pickTimes }) }), _jsx(TabsContent, { value: "combineren", children: _jsx(CombinerenTab, { settings: data.settings }) }), _jsx(TabsContent, { value: "orderbuffer", children: _jsx(OrderbufferTab, { settings: data.settings }) }), _jsx(TabsContent, { value: "pickstation", children: _jsx(PickstationTab, { settings: data.settings }) })] }))] })] }));
17
+ }
18
+ function useSaveSettings() {
19
+ const qc = useQueryClient();
20
+ const save = useServerFn(updateCartPlanningSettings);
21
+ return useMutation({
22
+ mutationFn: (input) => save({ data: input }),
23
+ onSuccess: () => {
24
+ toast.success("Opgeslagen");
25
+ qc.invalidateQueries({ queryKey: ["cart-planning-bundle"] });
26
+ },
27
+ onError: (e) => toast.error(e?.message ?? "Opslaan mislukt"),
28
+ });
29
+ }
30
+ function stripId(s) {
31
+ const { id: _id, ...rest } = s;
32
+ return rest;
33
+ }
34
+ function RegelsTab({ settings }) {
35
+ const [s, setS] = useState(settings);
36
+ const mut = useSaveSettings();
37
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Globale planner-regels" }), _jsx(CardDescription, { children: "Deze regels gelden voor alle orders die automatisch op karren worden ingedeeld." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Max % per partij per laag" }), _jsx(Input, { type: "number", min: 1, max: 100, value: s.max_party_share_per_layer_pct, onChange: (e) => setS({ ...s, max_party_share_per_layer_pct: Number(e.target.value) }) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Hoeveel van \u00E9\u00E9n laag mag door \u00E9\u00E9n partij bezet worden. Standaard 50%." })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Max verschillende beladingen per laag" }), _jsx(Input, { type: "number", min: 1, max: 999, value: s.max_beladingen_per_layer >= 999 ? "" : s.max_beladingen_per_layer, disabled: s.max_beladingen_per_layer >= 999, onChange: (e) => setS({ ...s, max_beladingen_per_layer: Number(e.target.value) }) }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: s.max_beladingen_per_layer >= 999, onCheckedChange: (v) => setS({ ...s, max_beladingen_per_layer: v ? 999 : 2 }) }), "Onbeperkt aantal soorten per belading"] }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Hoeveel verschillende artikelen samen in \u00E9\u00E9n laag mogen. Standaard 2." })] }), _jsxs("div", { className: "space-y-2 lg:col-span-2", children: [_jsx(Label, { children: "Optimalisatie-strategie" }), _jsxs(Select, { value: s.optimization_strategy, onValueChange: (v) => setS({ ...s, optimization_strategy: v }), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "min_carts", children: "Minimaal aantal karren" }), _jsx(SelectItem, { value: "min_mixing", children: "Minimaal mengen (voorkeur voor pure karren)" })] })] })] })] }), _jsx(Button, { disabled: mut.isPending, onClick: () => mut.mutate(stripId(s)), children: "Opslaan" })] })] }));
38
+ }
39
+ function PicktijdenTab({ settings, pickTimes, }) {
40
+ const qc = useQueryClient();
41
+ const upsert = useServerFn(upsertPickTime);
42
+ const remove = useServerFn(deletePickTime);
43
+ const [potSize, setPotSize] = useState("");
44
+ const [minutes, setMinutes] = useState(0);
45
+ const saveSettings = useSaveSettings();
46
+ const addMut = useMutation({
47
+ mutationFn: () => upsert({ data: { pot_size: potSize.trim(), seconds_per_cart: Math.round(minutes * 60) } }),
48
+ onSuccess: () => {
49
+ toast.success("Toegevoegd");
50
+ setPotSize("");
51
+ setMinutes(0);
52
+ qc.invalidateQueries({ queryKey: ["cart-planning-bundle"] });
53
+ },
54
+ onError: (e) => toast.error(e?.message ?? "Fout"),
55
+ });
56
+ const delMut = useMutation({
57
+ mutationFn: (id) => remove({ data: { id } }),
58
+ onSuccess: () => qc.invalidateQueries({ queryKey: ["cart-planning-bundle"] }),
59
+ });
60
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Picktijden" }), _jsx(CardDescription, { children: "Kies hoe je de picksnelheid meet: per potmaat (minuten per kar) of als planten per uur." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Meetmethode" }), _jsxs(Select, { value: settings.pick_time_mode, onValueChange: (v) => saveSettings.mutate({ ...stripId(settings), pick_time_mode: v }), children: [_jsx(SelectTrigger, { className: "max-w-md", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "per_pot_size", children: "Minuten per kar per potmaat" }), _jsx(SelectItem, { value: "plants_per_hour", children: "Planten per uur" }), _jsx(SelectItem, { value: "plants_per_day", children: "Planten per dag" })] })] })] }), settings.pick_time_mode === "plants_per_hour" ? (_jsx(PlantsPerHourEditor, { settings: settings })) : settings.pick_time_mode === "plants_per_day" ? (_jsx(PlantsPerDayEditor, { settings: settings })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-end gap-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Potmaat" }), _jsx(Input, { value: potSize, onChange: (e) => setPotSize(e.target.value), placeholder: "bv. P12" })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Minuten per kar per medewerker" }), _jsx(Input, { type: "number", min: 0, step: 0.5, value: minutes, onChange: (e) => setMinutes(Number(e.target.value)) })] }), _jsx(Button, { disabled: addMut.isPending || !potSize.trim(), onClick: () => addMut.mutate(), children: "Toevoegen / bijwerken" })] }), _jsx(Separator, {}), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Potmaat" }), _jsx(TableHead, { className: "text-right", children: "Minuten / kar / medewerker" }), _jsx(TableHead, { className: "w-16" })] }) }), _jsx(TableBody, { children: pickTimes.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 3, className: "text-sm text-muted-foreground", children: "Nog geen picktijden ingesteld." }) })) : (pickTimes.map((pt) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: pt.pot_size }), _jsx(TableCell, { className: "text-right", children: (pt.seconds_per_cart / 60).toLocaleString("nl-NL", { maximumFractionDigits: 2 }) }), _jsx(TableCell, { children: _jsx(Button, { variant: "ghost", size: "sm", onClick: () => delMut.mutate(pt.id), children: _jsx(Trash2, { className: "h-4 w-4" }) }) })] }, pt.id)))) })] })] }))] })] }));
61
+ }
62
+ function PlantsPerHourEditor({ settings }) {
63
+ const [pph, setPph] = useState(settings.plants_per_hour);
64
+ const save = useSaveSettings();
65
+ return (_jsxs("div", { className: "flex items-end gap-2 rounded-md border p-3", children: [_jsxs("div", { className: "space-y-2 flex-1 max-w-md", children: [_jsx(Label, { children: "Planten per uur per medewerker" }), _jsx(Input, { type: "number", min: 0, value: pph, onChange: (e) => setPph(Number(e.target.value)) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Wordt gebruikt om de totale picktijd te schatten op basis van het aantal planten." })] }), _jsx(Button, { disabled: save.isPending, onClick: () => save.mutate({ ...stripId(settings), plants_per_hour: pph }), children: "Opslaan" })] }));
66
+ }
67
+ function PlantsPerDayEditor({ settings }) {
68
+ const [ppd, setPpd] = useState(settings.plants_per_day ?? 0);
69
+ const save = useSaveSettings();
70
+ return (_jsxs("div", { className: "flex items-end gap-2 rounded-md border p-3", children: [_jsxs("div", { className: "space-y-2 flex-1 max-w-md", children: [_jsx(Label, { children: "Planten per dag per medewerker" }), _jsx(Input, { type: "number", min: 0, value: ppd, onChange: (e) => setPpd(Number(e.target.value)) }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Wordt gebruikt om de totale picktijd te schatten op basis van het aantal planten per dag." })] }), _jsx(Button, { disabled: save.isPending, onClick: () => save.mutate({ ...stripId(settings), plants_per_day: ppd }), children: "Opslaan" })] }));
71
+ }
72
+ function CombinerenTab({ settings }) {
73
+ const [s, setS] = useState(settings);
74
+ const mut = useSaveSettings();
75
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Orders combineren op \u00E9\u00E9n kar" }), _jsx(CardDescription, { children: "Wanneer mogen order_items van verschillende (Floriday-)orders op dezelfde kar samengebracht worden?" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between rounded-md border p-3", children: [_jsxs("div", { children: [_jsx(Label, { children: "Floriday-orders combineren" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Aan = de planner mag Floriday-orders bundelen; uit = elke order krijgt zijn eigen karren." })] }), _jsx(Switch, { checked: s.combine_floriday_orders, onCheckedChange: (v) => setS({ ...s, combine_floriday_orders: v }) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Combineer-venster" }), _jsxs(Select, { value: s.combine_floriday_orders_window, onValueChange: (v) => setS({ ...s, combine_floriday_orders_window: v }), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "same_day", children: "Zelfde leverdag" }), _jsx(SelectItem, { value: "same_delivery_slot", children: "Zelfde levermoment" }), _jsx(SelectItem, { value: "same_week", children: "Zelfde week" })] })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Bereik" }), _jsxs(Select, { value: s.combine_orders_scope, onValueChange: (v) => setS({ ...s, combine_orders_scope: v }), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "same_customer", children: "Alleen zelfde klant" }), _jsx(SelectItem, { value: "same_delivery_location", children: "Zelfde leverlocatie" }), _jsx(SelectItem, { value: "never", children: "Nooit combineren" })] })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Vanaf hoeveel lagen krijgt een klant een eigen kar?" }), _jsx(Input, { type: "number", min: 1, value: s.own_cart_from_layers, onChange: (e) => setS({ ...s, own_cart_from_layers: Number(e.target.value) }) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Maximaal aantal klanten op \u00E9\u00E9n kar" }), _jsx(Input, { type: "number", min: 1, value: s.max_customers_per_cart, onChange: (e) => setS({ ...s, max_customers_per_cart: Number(e.target.value) }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Klanten per laag" }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: s.max_one_customer_per_layer ? "outline" : "default", onClick: () => setS({ ...s, max_one_customer_per_layer: false }), children: "Meerdere klanten op \u00E9\u00E9n laag" }), _jsx(Button, { variant: s.max_one_customer_per_layer ? "default" : "outline", onClick: () => setS({ ...s, max_one_customer_per_layer: true }), children: "Max \u00E9\u00E9n klant per laag" })] })] }), _jsxs("div", { className: "grid gap-3 lg:grid-cols-2", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: s.require_same_carrier, onCheckedChange: (v) => setS({ ...s, require_same_carrier: !!v }) }), "Alleen dezelfde vervoerder"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: s.require_same_delivery_location, onCheckedChange: (v) => setS({ ...s, require_same_delivery_location: !!v }) }), "Alleen dezelfde afleverlocatie"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: s.require_same_crate_type, onCheckedChange: (v) => setS({ ...s, require_same_crate_type: !!v }) }), "Alleen hetzelfde fusttype"] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: s.require_same_delivery_date, onCheckedChange: (v) => setS({ ...s, require_same_delivery_date: !!v }) }), "Alleen dezelfde leverdatum"] })] }), _jsx(Button, { disabled: mut.isPending, onClick: () => mut.mutate(stripId(s)), children: "Opslaan" })] })] }));
76
+ }
77
+ function PickstationTab({ settings }) {
78
+ const [s, setS] = useState(settings);
79
+ const mut = useSaveSettings();
80
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Na verzending naar pickstation" }), _jsx(CardDescription, { children: "Wanneer een kar-pakbon eenmaal geprint is voor het pickstation, mag de karindeling dan nog wijzigen?" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between rounded-md border p-3", children: [_jsxs("div", { children: [_jsx(Label, { children: "Wijzigen na pickstation-print toestaan" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Standaard uit: zodra de pakbon geprint is wordt de karindeling vergrendeld." })] }), _jsx(Switch, { checked: s.allow_editing_after_pickstation_send, onCheckedChange: (v) => setS({ ...s, allow_editing_after_pickstation_send: v }) })] }), _jsx(Badge, { variant: "outline", children: s.allow_editing_after_pickstation_send ? "Bewerken toegestaan" : "Vergrendeld na print" }), _jsx("div", { children: _jsx(Button, { disabled: mut.isPending, onClick: () => mut.mutate(stripId(s)), children: "Opslaan" }) })] })] }));
81
+ }
82
+ function OrderbufferTab({ settings }) {
83
+ const [s, setS] = useState(settings);
84
+ const mut = useSaveSettings();
85
+ const rebuffer = useServerFn(rebufferAllOrders);
86
+ const [rebuffering, setRebuffering] = useState(false);
87
+ const save = async () => {
88
+ await mut.mutateAsync(stripId(s));
89
+ setRebuffering(true);
90
+ try {
91
+ const res = await rebuffer();
92
+ toast.success(`Buffer bijgewerkt · ${res.processed} order(s) hergegroepeerd`);
93
+ }
94
+ catch (err) {
95
+ toast.error(`Herbufferen faalde: ${err.message}`);
96
+ }
97
+ finally {
98
+ setRebuffering(false);
99
+ }
100
+ };
101
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Orderbuffer" }), _jsx(CardDescription, { children: "Bepaal wanneer orders in dezelfde buffer worden geplaatst voordat ze op karren worden ingedeeld." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Wanneer horen orders in dezelfde buffer?" }), _jsxs(Select, { value: s.buffer_grouping_mode, onValueChange: (v) => setS({ ...s, buffer_grouping_mode: v }), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "same_pickup_and_location", children: "Zelfde ophaalmoment \u00E9n zelfde afleverlocatie (aanbevolen)" }), _jsx(SelectItem, { value: "same_pickup", children: "Alleen zelfde ophaalmoment" }), _jsx(SelectItem, { value: "same_location", children: "Alleen zelfde afleverlocatie" }), _jsx(SelectItem, { value: "same_customer", children: "Alleen zelfde klant" }), _jsx(SelectItem, { value: "never", children: "Nooit samenvoegen \u2014 elke order eigen buffer" })] })] }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Na opslaan worden alle bestaande orders opnieuw in de juiste buffer geplaatst. De karindeling per buffer wordt bij de eerstvolgende (her)berekening opnieuw uitgevoerd." })] }), _jsx(Button, { disabled: mut.isPending || rebuffering, onClick: save, children: rebuffering ? "Bezig met herbufferen…" : "Opslaan" })] })] }));
102
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
3
+ declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
4
+ declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, };
9
+ //# sourceMappingURL=dropdown-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dropdown-menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAGvE,QAAA,MAAM,YAAY,mDAA6B,CAAC;AAChD,QAAA,MAAM,mBAAmB,0HAAgC,CAAC;AAE1D,QAAA,MAAM,mBAAmB,0KAgBvB,CAAC;AAGH,QAAA,MAAM,gBAAgB,uKAapB,CAAC;AAGH,QAAA,MAAM,qBAAqB,4KASzB,CAAC;AAGH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
5
+ import { cn } from "@flowselections/core";
6
+ const DropdownMenu = DropdownMenuPrimitive.Root;
7
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
8
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { ref: ref, sideOffset: sideOffset, className: cn("z-50 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props }) })));
9
+ DropdownMenuContent.displayName = "DropdownMenuContent";
10
+ const DropdownMenuItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Item, { ref: ref, className: cn("relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors", "focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className), ...props })));
11
+ DropdownMenuItem.displayName = "DropdownMenuItem";
12
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Separator, { ref: ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props })));
13
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
14
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, };
@@ -5,5 +5,5 @@ export declare function AnalyticsCards({ totals, loading, }: {
5
5
  orderCount: number;
6
6
  };
7
7
  loading?: boolean;
8
- }): import("react").JSX.Element;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
9
  //# sourceMappingURL=AnalyticsCards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsCards.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/AnalyticsCards.tsx"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,+BAwBA"}
1
+ {"version":3,"file":"AnalyticsCards.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/AnalyticsCards.tsx"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,2CAwBA"}
@@ -1,4 +1,4 @@
1
1
  export declare function AutoFulfillmentStatusCard({ salesOrderId }: {
2
2
  salesOrderId: string;
3
- }): import("react").JSX.Element | null;
3
+ }): import("react/jsx-runtime").JSX.Element | null;
4
4
  //# sourceMappingURL=AutoFulfillmentStatusCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoFulfillmentStatusCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/AutoFulfillmentStatusCard.tsx"],"names":[],"mappings":"AAyDA,wBAAgB,yBAAyB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,sCA6FnF"}
1
+ {"version":3,"file":"AutoFulfillmentStatusCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/AutoFulfillmentStatusCard.tsx"],"names":[],"mappings":"AAyDA,wBAAgB,yBAAyB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,kDA6FnF"}
@@ -2,5 +2,5 @@ export declare function CartAssignmentWizard({ orderId, open, onClose, }: {
2
2
  orderId: string | null;
3
3
  open: boolean;
4
4
  onClose: () => void;
5
- }): import("react").JSX.Element;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=CartAssignmentWizard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CartAssignmentWizard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CartAssignmentWizard.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EAAE,IAAI,EAAE,OAAO,GACvB,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,+BA4ThE"}
1
+ {"version":3,"file":"CartAssignmentWizard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CartAssignmentWizard.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EAAE,IAAI,EAAE,OAAO,GACvB,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,2CA4ThE"}
@@ -4,6 +4,6 @@ interface Props {
4
4
  open: boolean;
5
5
  onOpenChange: (open: boolean) => void;
6
6
  }
7
- export declare function CartLayersDialog({ cartId, cartNumber, open, onOpenChange }: Props): import("react").JSX.Element;
7
+ export declare function CartLayersDialog({ cartId, cartNumber, open, onOpenChange }: Props): import("react/jsx-runtime").JSX.Element;
8
8
  export {};
9
9
  //# sourceMappingURL=CartLayersDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CartLayersDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CartLayersDialog.tsx"],"names":[],"mappings":"AA4BA,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AA2ID,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,+BAyMjF"}
1
+ {"version":3,"file":"CartLayersDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CartLayersDialog.tsx"],"names":[],"mappings":"AA4BA,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AA2ID,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,2CAyMjF"}
@@ -0,0 +1,5 @@
1
+ export declare function CreateOrderDialog({ open, onOpenChange, }: {
2
+ open: boolean;
3
+ onOpenChange: (v: boolean) => void;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=CreateOrderDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateOrderDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CreateOrderDialog.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,GACb,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,2CAgFA"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, Label, toast, } from "@flowselections/core";
4
+ import { useServerFn } from "@tanstack/react-start";
5
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
6
+ import { createSalesOrder } from "../../lib/floriday/sales-orders.functions";
7
+ export function CreateOrderDialog({ open, onOpenChange, }) {
8
+ const queryClient = useQueryClient();
9
+ const createFn = useServerFn(createSalesOrder);
10
+ const [customerOrganizationId, setCustomerId] = useState("");
11
+ const [tradeItemId, setTradeItemId] = useState("");
12
+ const [deliveryDateTime, setDelivery] = useState("");
13
+ const [numberOfPieces, setPieces] = useState(1);
14
+ const [pricePerPiece, setPrice] = useState(0);
15
+ const [reference, setReference] = useState("");
16
+ const m = useMutation({
17
+ mutationFn: createFn,
18
+ onSuccess: () => {
19
+ toast.success("Verkooporder aangemaakt");
20
+ queryClient.invalidateQueries({ queryKey: ["floriday", "sales-orders"] });
21
+ onOpenChange(false);
22
+ },
23
+ onError: (e) => toast.error(e?.message ?? "Aanmaken mislukt"),
24
+ });
25
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-lg", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Bestelling aanmaken" }), _jsx(DialogDescription, { children: "Maak een nieuwe verkooporder aan in Floriday." })] }), _jsxs("div", { className: "grid gap-3 py-2", children: [_jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "ref", children: "Referentie" }), _jsx(Input, { id: "ref", value: reference, onChange: (e) => setReference(e.target.value), placeholder: "ORD-2026-\u2026" })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "cust", children: "Klant organisatie ID" }), _jsx(Input, { id: "cust", value: customerOrganizationId, onChange: (e) => setCustomerId(e.target.value), placeholder: "GLN of organization id" })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "item", children: "Artikel (tradeItemId)" }), _jsx(Input, { id: "item", value: tradeItemId, onChange: (e) => setTradeItemId(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-3 gap-3", children: [_jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "qty", children: "Aantal stuks" }), _jsx(Input, { id: "qty", type: "number", min: 1, value: numberOfPieces, onChange: (e) => setPieces(Number(e.target.value)) })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "price", children: "Prijs/stuk (\u20AC)" }), _jsx(Input, { id: "price", type: "number", step: "0.01", min: 0, value: pricePerPiece, onChange: (e) => setPrice(Number(e.target.value)) })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "del", children: "Levering" }), _jsx(Input, { id: "del", type: "datetime-local", value: deliveryDateTime, onChange: (e) => setDelivery(e.target.value) })] })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), disabled: m.isPending, children: "Annuleren" }), _jsx(Button, { onClick: () => m.mutate({
26
+ data: {
27
+ customerOrganizationId,
28
+ deliveryDateTime: deliveryDateTime ? new Date(deliveryDateTime).toISOString() : "",
29
+ reference: reference || undefined,
30
+ lines: [{ tradeItemId, numberOfPieces, pricePerPiece }],
31
+ },
32
+ }), disabled: m.isPending || !customerOrganizationId || !tradeItemId || !deliveryDateTime, children: m.isPending ? "Aanmaken…" : "Aanmaken" })] })] }) }));
33
+ }
@@ -1,2 +1,2 @@
1
- export declare function CreateOrderPage(): import("react").JSX.Element;
1
+ export declare function CreateOrderPage(): import("react/jsx-runtime").JSX.Element;
2
2
  //# sourceMappingURL=CreateOrderPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrderPage.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CreateOrderPage.tsx"],"names":[],"mappings":"AAuEA,wBAAgB,eAAe,gCAqwB9B"}
1
+ {"version":3,"file":"CreateOrderPage.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CreateOrderPage.tsx"],"names":[],"mappings":"AAuEA,wBAAgB,eAAe,4CAqwB9B"}
@@ -1,5 +1,5 @@
1
1
  export declare function DiagnoseConnectionDialog({ open, onOpenChange, }: {
2
2
  open: boolean;
3
3
  onOpenChange: (v: boolean) => void;
4
- }): import("react").JSX.Element;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
5
  //# sourceMappingURL=DiagnoseConnectionDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiagnoseConnectionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/DiagnoseConnectionDialog.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,YAAY,GACb,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,+BAoMA"}
1
+ {"version":3,"file":"DiagnoseConnectionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/DiagnoseConnectionDialog.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,YAAY,GACb,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,2CAoMA"}
@@ -2,5 +2,5 @@ export declare function EditLocalOrderDialog({ orderId, open, onOpenChange, }: {
2
2
  orderId: string;
3
3
  open: boolean;
4
4
  onOpenChange: (o: boolean) => void;
5
- }): import("react").JSX.Element | null;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
6
  //# sourceMappingURL=EditLocalOrderDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditLocalOrderDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/EditLocalOrderDialog.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,IAAI,EACJ,YAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,sCA6gBA"}
1
+ {"version":3,"file":"EditLocalOrderDialog.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/EditLocalOrderDialog.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,IAAI,EACJ,YAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,kDA6gBA"}
@@ -4,5 +4,5 @@
4
4
  */
5
5
  export declare function EngineBufferCard({ orderId }: {
6
6
  orderId: string | null;
7
- }): import("react").JSX.Element | null;
7
+ }): import("react/jsx-runtime").JSX.Element | null;
8
8
  //# sourceMappingURL=EngineBufferCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EngineBufferCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/EngineBufferCard.tsx"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAqJvE"}
1
+ {"version":3,"file":"EngineBufferCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/EngineBufferCard.tsx"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,kDAqJvE"}
@@ -1,3 +1,3 @@
1
- export declare function InvoiceTimingSettingsCard(): import("react").JSX.Element;
1
+ export declare function InvoiceTimingSettingsCard(): import("react/jsx-runtime").JSX.Element;
2
2
  export default InvoiceTimingSettingsCard;
3
3
  //# sourceMappingURL=InvoiceTimingSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvoiceTimingSettings.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/InvoiceTimingSettings.tsx"],"names":[],"mappings":"AA+GA,wBAAgB,yBAAyB,gCA2GxC;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"InvoiceTimingSettings.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/InvoiceTimingSettings.tsx"],"names":[],"mappings":"AA+GA,wBAAgB,yBAAyB,4CA2GxC;AAED,eAAe,yBAAyB,CAAC"}
@@ -2,5 +2,5 @@ export declare function OrderAfleverbrievenCard({ salesOrderId, orderNumber, wer
2
2
  salesOrderId: string;
3
3
  orderNumber?: string;
4
4
  werkplek?: string;
5
- }): import("react").JSX.Element;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=OrderAfleverbrievenCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderAfleverbrievenCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderAfleverbrievenCard.tsx"],"names":[],"mappings":"AAuCA,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,+BAwMA"}
1
+ {"version":3,"file":"OrderAfleverbrievenCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderAfleverbrievenCard.tsx"],"names":[],"mappings":"AAuCA,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,2CAwMA"}
@@ -9,5 +9,5 @@ export declare function OrderCarrierPicker({ orderId, applyToBuffer, compact, lo
9
9
  applyToBuffer?: boolean;
10
10
  compact?: boolean;
11
11
  locked?: boolean;
12
- }): import("react").JSX.Element;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
13
  //# sourceMappingURL=OrderCarrierPicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderCarrierPicker.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderCarrierPicker.tsx"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,aAAqB,EACrB,OAAe,EACf,MAAc,GACf,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,+BA4EA"}
1
+ {"version":3,"file":"OrderCarrierPicker.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderCarrierPicker.tsx"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,aAAqB,EACrB,OAAe,EACf,MAAc,GACf,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CA4EA"}
@@ -2,5 +2,5 @@ export declare function OrderControlStatusCard({ floridayId, isControlled, contr
2
2
  floridayId: string;
3
3
  isControlled: boolean;
4
4
  controlledAt: string | null;
5
- }): import("react").JSX.Element;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=OrderControlStatusCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderControlStatusCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderControlStatusCard.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,YAAY,EACZ,YAAY,GACb,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,+BA2DA"}
1
+ {"version":3,"file":"OrderControlStatusCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderControlStatusCard.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,YAAY,EACZ,YAAY,GACb,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,2CA2DA"}
@@ -1,5 +1,5 @@
1
1
  import type { SalesOrderDTO } from "../../lib/salesorders-mapping";
2
2
  export declare function OrderKarindelingCard({ order }: {
3
3
  order: SalesOrderDTO;
4
- }): import("react").JSX.Element;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
5
  //# sourceMappingURL=OrderKarindelingCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderKarindelingCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderKarindelingCard.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAwE/D,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,+BA0NvE"}
1
+ {"version":3,"file":"OrderKarindelingCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderKarindelingCard.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAwE/D,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,2CA0NvE"}
@@ -6,5 +6,5 @@ export declare function OrderPickupMomentPicker({ orderId, readOnly, compact, }:
6
6
  orderId: string;
7
7
  readOnly?: boolean;
8
8
  compact?: boolean;
9
- }): import("react").JSX.Element;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
10
  //# sourceMappingURL=OrderPickupMomentPicker.d.ts.map