@flowselections/floriday-verkoop-module 1.0.60 → 1.0.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +9 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.js +26 -0
- package/dist-lib/components/karindeling/AfmetingenTab.d.ts +6 -0
- package/dist-lib/components/karindeling/AfmetingenTab.d.ts.map +1 -0
- package/dist-lib/components/karindeling/AfmetingenTab.js +128 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts +2 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts.map +1 -0
- package/dist-lib/components/karindeling/KarindelingPage.js +102 -0
- package/dist-lib/components/ui/dropdown-menu.d.ts +9 -0
- package/dist-lib/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist-lib/components/ui/dropdown-menu.js +14 -0
- package/dist-lib/components/verkoop/AnalyticsCards.d.ts +1 -1
- package/dist-lib/components/verkoop/AnalyticsCards.d.ts.map +1 -1
- package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts +1 -1
- package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts +1 -1
- package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CartLayersDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/CartLayersDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CreateOrderDialog.d.ts +5 -0
- package/dist-lib/components/verkoop/CreateOrderDialog.d.ts.map +1 -0
- package/dist-lib/components/verkoop/CreateOrderDialog.js +33 -0
- package/dist-lib/components/verkoop/CreateOrderPage.d.ts +1 -1
- package/dist-lib/components/verkoop/CreateOrderPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/EngineBufferCard.d.ts +1 -1
- package/dist-lib/components/verkoop/EngineBufferCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts +1 -1
- package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts +1 -1
- package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +1 -2
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SearchableSelect.d.ts +1 -1
- package/dist-lib/components/verkoop/SearchableSelect.d.ts.map +1 -1
- package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts +1 -1
- package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.js +18 -5
- package/dist-lib/components/verkoop/WeekCalendar.d.ts +1 -1
- package/dist-lib/components/verkoop/WeekCalendar.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1061 -15
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1061 -15
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1061 -10
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/buffer-events.functions.d.ts +1061 -15
- package/dist-lib/lib/buffer-events.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-layers.functions.d.ts +4188 -36
- package/dist-lib/lib/cart-layers.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-lock.functions.d.ts +1061 -15
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +11506 -0
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +3139 -1
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.js +8 -47
- package/dist-lib/lib/create-order.functions.d.ts +17799 -102
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/create-order.functions.js +3 -16
- package/dist-lib/lib/cron/push-order-statuses.d.ts +4 -0
- package/dist-lib/lib/cron/push-order-statuses.d.ts.map +1 -0
- package/dist-lib/lib/cron/push-order-statuses.js +23 -0
- package/dist-lib/lib/cron/replan-carts.d.ts +1 -1
- package/dist-lib/lib/cron/replan-carts.d.ts.map +1 -1
- package/dist-lib/lib/cron/replan-carts.js +10 -15
- package/dist-lib/lib/floriday/floriday.server.d.ts +14 -0
- package/dist-lib/lib/floriday/floriday.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday/floriday.server.js +92 -0
- package/dist-lib/lib/floriday/sales-orders.functions.d.ts +4736 -0
- package/dist-lib/lib/floriday/sales-orders.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday/sales-orders.functions.js +193 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +13288 -2362
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +2092 -0
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts +1061 -15
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.js +282 -117
- package/dist-lib/lib/floriday-public.functions.d.ts +7322 -0
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-status-sync.server.d.ts +14 -0
- package/dist-lib/lib/floriday-status-sync.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-status-sync.server.js +130 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts +2092 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.d.ts +4184 -0
- package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
- package/dist-lib/lib/load-carriers.functions.d.ts +1061 -15
- package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +5235 -15
- package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.server.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.server.js +2 -9
- package/dist-lib/lib/logistics-stock.functions.d.ts +2092 -0
- package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.d.ts +1061 -15
- package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.d.ts +3147 -3
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.js +3 -12
- package/dist-lib/lib/order-carrier.functions.d.ts +2092 -0
- package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-fulfill.functions.d.ts +1061 -15
- package/dist-lib/lib/order-fulfill.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-pickup.functions.d.ts +2092 -0
- package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-shipments.functions.d.ts +4184 -0
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/product-dimensions.functions.d.ts +2092 -0
- package/dist-lib/lib/product-dimensions.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.functions.d.ts +2092 -0
- package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.js +62 -3
- package/dist-lib/lib/salesorders.functions.d.ts +6303 -17
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.js +22 -22
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +2092 -0
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +1061 -15
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- 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 @@
|
|
|
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, };
|
|
@@ -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
|
|
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 +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,
|
|
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
|
|
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
|
|
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 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"CreateOrderPage.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/CreateOrderPage.tsx"],"names":[],"mappings":"AAuEA,wBAAgB,eAAe,4CAqwB9B"}
|
|
@@ -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
|
|
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,
|
|
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"}
|
|
@@ -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,
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|