@flowselections/floriday-afhandeling-module 1.0.25 → 1.0.26
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/afhandeling/CapacityWarning.d.ts +10 -0
- package/dist-lib/components/afhandeling/CapacityWarning.d.ts.map +1 -0
- package/dist-lib/components/afhandeling/CapacityWarning.js +12 -0
- package/dist-lib/components/afhandeling/ControlePage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/ControlePage.js +7 -2
- package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/DagDetailDialog.js +158 -62
- package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/LeveringenPage.js +2 -10
- package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/PickAgendaView.js +4 -11
- package/dist-lib/components/afhandeling/VervoerdersPage.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/VervoerdersPage.js +2 -5
- package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts +14 -0
- package/dist-lib/components/afhandeling/VerzetOrderDialog.d.ts.map +1 -0
- package/dist-lib/components/afhandeling/VerzetOrderDialog.js +203 -0
- package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -1
- package/dist-lib/components/afhandeling/WeekAgendaView.js +7 -3
- package/dist-lib/components/pickstation/PickstationPage.d.ts.map +1 -1
- package/dist-lib/components/pickstation/PickstationPage.js +1 -0
- package/dist-lib/components/settings/VervoerdersSettingsCard.d.ts.map +1 -1
- package/dist-lib/components/settings/VervoerdersSettingsCard.js +2 -5
- package/dist-lib/hooks/useCapacityCheck.d.ts +10 -0
- package/dist-lib/hooks/useCapacityCheck.d.ts.map +1 -0
- package/dist-lib/hooks/useCapacityCheck.js +22 -0
- package/dist-lib/hooks/useEngineTasks.d.ts +14 -0
- package/dist-lib/hooks/useEngineTasks.d.ts.map +1 -0
- package/dist-lib/hooks/useEngineTasks.js +49 -0
- package/dist-lib/hooks/useOrderPlanning.d.ts +8 -2
- package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
- package/dist-lib/hooks/useOrderPlanning.js +95 -93
- package/dist-lib/index.d.ts +0 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -5
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +9010 -5433
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +9184 -5544
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/afhandelingSettings.functions.d.ts +7186 -32
- package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -1
- package/dist-lib/lib/carriers.functions.d.ts +17965 -80
- package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartAssignments.functions.d.ts +17965 -80
- package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.d.ts +35962 -170
- package/dist-lib/lib/cartControl.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartControl.functions.js +103 -13
- package/dist-lib/lib/floriday.functions.d.ts +9010 -5433
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsEngine/capacity.d.ts +19 -0
- package/dist-lib/lib/logisticsEngine/capacity.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/capacity.js +91 -0
- package/dist-lib/lib/logisticsEngine/engine.d.ts +99 -0
- package/dist-lib/lib/logisticsEngine/engine.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/engine.js +102 -0
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts +65 -0
- package/dist-lib/lib/logisticsEngine/reschedule.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/reschedule.js +86 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts +37 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.d.ts.map +1 -0
- package/dist-lib/lib/logisticsEngine/staffPlanning.js +100 -0
- package/dist-lib/lib/serverFnError.d.ts +10 -0
- package/dist-lib/lib/serverFnError.d.ts.map +1 -0
- package/dist-lib/lib/serverFnError.js +29 -0
- package/dist-lib/lib/serverRoutes/index.d.ts +0 -1
- package/dist-lib/lib/serverRoutes/index.d.ts.map +1 -1
- package/dist-lib/lib/serverRoutes/index.js +0 -1
- package/dist-lib/lib/timezone.d.ts +27 -0
- package/dist-lib/lib/timezone.d.ts.map +1 -0
- package/dist-lib/lib/timezone.js +68 -0
- package/package.json +6 -21
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts +0 -2
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.d.ts.map +0 -1
- package/dist-lib/components/engine/CapaciteitsmaatregelenPage.js +0 -40
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts +0 -2
- package/dist-lib/components/engine/CapaciteitsmonitorPage.d.ts.map +0 -1
- package/dist-lib/components/engine/CapaciteitsmonitorPage.js +0 -49
- package/dist-lib/components/engine/FormulesPage.d.ts +0 -2
- package/dist-lib/components/engine/FormulesPage.d.ts.map +0 -1
- package/dist-lib/components/engine/FormulesPage.js +0 -252
- package/dist-lib/components/engine/PlaceholderPage.d.ts +0 -6
- package/dist-lib/components/engine/PlaceholderPage.d.ts.map +0 -1
- package/dist-lib/components/engine/PlaceholderPage.js +0 -6
- package/dist-lib/components/engine/StrategieenPage.d.ts +0 -2
- package/dist-lib/components/engine/StrategieenPage.d.ts.map +0 -1
- package/dist-lib/components/engine/StrategieenPage.js +0 -80
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts +0 -64978
- package/dist-lib/lib/logisticsEngine/capacity.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/capacity.functions.js +0 -90
- package/dist-lib/lib/logisticsEngine/config.d.ts +0 -140
- package/dist-lib/lib/logisticsEngine/config.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/config.js +0 -488
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts +0 -29
- package/dist-lib/lib/logisticsEngine/enginePickTime.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/enginePickTime.js +0 -136
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts +0 -16278
- package/dist-lib/lib/logisticsEngine/evaluate.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/evaluate.functions.js +0 -104
- package/dist-lib/lib/logisticsEngine/expression.d.ts +0 -21
- package/dist-lib/lib/logisticsEngine/expression.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/expression.js +0 -263
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts +0 -32512
- package/dist-lib/lib/logisticsEngine/formulas.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/formulas.functions.js +0 -58
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts +0 -83
- package/dist-lib/lib/logisticsEngine/safetyLayer.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/safetyLayer.js +0 -182
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts +0 -129961
- package/dist-lib/lib/logisticsEngine/strategies.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/strategies.functions.js +0 -176
- package/dist-lib/lib/logisticsEngine/variables.d.ts +0 -29
- package/dist-lib/lib/logisticsEngine/variables.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/variables.js +0 -144
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts +0 -64976
- package/dist-lib/lib/logisticsEngine/wizard.functions.d.ts.map +0 -1
- package/dist-lib/lib/logisticsEngine/wizard.functions.js +0 -175
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts +0 -3
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.d.ts.map +0 -1
- package/dist-lib/lib/serverRoutes/logisticsTick.handler.js +0 -42
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import { Link } from "@tanstack/react-router";
|
|
4
|
-
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
5
|
-
import { useServerFn } from "@tanstack/react-start";
|
|
6
|
-
import { Card, CardContent, CardHeader, CardTitle, CardDescription, Button, Input, Label, Textarea, Badge, Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, toast, } from "@flowselections/core";
|
|
7
|
-
import { Plus, Power, PowerOff, Pencil, Trash2, CalendarRange, Sigma } from "lucide-react";
|
|
8
|
-
import { listStrategies, saveStrategy, deleteStrategy, activateStrategy, deactivateAllStrategies, listSchedules, saveSchedule, deleteSchedule, } from "../../lib/logisticsEngine/strategies.functions";
|
|
9
|
-
export function StrategieenPage() {
|
|
10
|
-
const qc = useQueryClient();
|
|
11
|
-
const fetchStrategies = useServerFn(listStrategies);
|
|
12
|
-
const fetchSchedules = useServerFn(listSchedules);
|
|
13
|
-
const saveStrat = useServerFn(saveStrategy);
|
|
14
|
-
const activate = useServerFn(activateStrategy);
|
|
15
|
-
const deactivateAll = useServerFn(deactivateAllStrategies);
|
|
16
|
-
const delStrat = useServerFn(deleteStrategy);
|
|
17
|
-
const saveSched = useServerFn(saveSchedule);
|
|
18
|
-
const delSched = useServerFn(deleteSchedule);
|
|
19
|
-
const strategiesQ = useQuery({
|
|
20
|
-
queryKey: ["logistics", "strategies"],
|
|
21
|
-
queryFn: async () => (await fetchStrategies()).strategies,
|
|
22
|
-
});
|
|
23
|
-
const schedulesQ = useQuery({
|
|
24
|
-
queryKey: ["logistics", "schedules"],
|
|
25
|
-
queryFn: async () => (await fetchSchedules()).schedules,
|
|
26
|
-
});
|
|
27
|
-
const [editOpen, setEditOpen] = useState(false);
|
|
28
|
-
const [editing, setEditing] = useState(null);
|
|
29
|
-
const [schedOpen, setSchedOpen] = useState(false);
|
|
30
|
-
const [schedStrategy, setSchedStrategy] = useState(null);
|
|
31
|
-
const invalidate = () => {
|
|
32
|
-
void qc.invalidateQueries({ queryKey: ["logistics", "strategies"] });
|
|
33
|
-
void qc.invalidateQueries({ queryKey: ["logistics", "schedules"] });
|
|
34
|
-
};
|
|
35
|
-
const saveMut = useMutation({
|
|
36
|
-
mutationFn: (p) => saveStrat({ data: p }),
|
|
37
|
-
onSuccess: () => { invalidate(); setEditOpen(false); toast.success("Strategie opgeslagen"); },
|
|
38
|
-
onError: (e) => toast.error(e.message),
|
|
39
|
-
});
|
|
40
|
-
const activateMut = useMutation({
|
|
41
|
-
mutationFn: (id) => activate({ data: { id } }),
|
|
42
|
-
onSuccess: () => { invalidate(); toast.success("Strategie geactiveerd"); },
|
|
43
|
-
});
|
|
44
|
-
const delMut = useMutation({
|
|
45
|
-
mutationFn: (id) => delStrat({ data: { id } }),
|
|
46
|
-
onSuccess: () => { invalidate(); toast.success("Verwijderd"); },
|
|
47
|
-
});
|
|
48
|
-
const deactivateMut = useMutation({
|
|
49
|
-
mutationFn: () => deactivateAll(),
|
|
50
|
-
onSuccess: () => { invalidate(); toast.success("Alle strategieën gepauzeerd"); },
|
|
51
|
-
});
|
|
52
|
-
return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Logistieke Strategie\u00EBn" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Iedere strategie bevat zijn eigen complete instellingen. Er mag altijd maximaal \u00E9\u00E9n strategie actief zijn." })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => deactivateMut.mutate(), children: [_jsx(PowerOff, { className: "w-4 h-4 mr-2" }), " Alles pauzeren"] }), _jsxs(Button, { onClick: () => { setEditing({ name: "", priority: 100, color: "#3b82f6" }); setEditOpen(true); }, children: [_jsx(Plus, { className: "w-4 h-4 mr-2" }), " Nieuwe strategie"] })] })] }), _jsxs("div", { className: "grid gap-3 md:grid-cols-2", children: [(strategiesQ.data ?? []).map((s) => (_jsxs(Card, { className: s.is_active ? "border-primary" : "", children: [_jsxs(CardHeader, { className: "flex-row items-start justify-between gap-2 space-y-0", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-4 h-4 rounded", style: { background: s.color } }), _jsxs("div", { children: [_jsx(CardTitle, { className: "text-base", children: s.name }), _jsxs(CardDescription, { children: ["prio ", s.priority, " \u00B7 v", s.version, " \u00B7 gewijzigd ", new Date(s.updated_at).toLocaleString("nl-NL")] })] })] }), s.is_active && _jsx(Badge, { children: "Actief" })] }), _jsxs(CardContent, { className: "space-y-3", children: [s.description && _jsx("p", { className: "text-sm text-muted-foreground", children: s.description }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { size: "sm", variant: s.is_active ? "outline" : "default", onClick: () => activateMut.mutate(s.id), children: [_jsx(Power, { className: "w-4 h-4 mr-2" }), " ", s.is_active ? "Opnieuw activeren" : "Activeren"] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => { setEditing(s); setEditOpen(true); }, children: [_jsx(Pencil, { className: "w-4 h-4 mr-2" }), " Bewerken"] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => { setSchedStrategy(s); setSchedOpen(true); }, children: [_jsx(CalendarRange, { className: "w-4 h-4 mr-2" }), " Planner"] }), _jsx(Button, { size: "sm", variant: "outline", asChild: true, children: _jsxs(Link, { to: "/afhandeling/engine/formules", search: { strategy: s.id }, children: [_jsx(Sigma, { className: "w-4 h-4 mr-2" }), " Formules"] }) }), _jsx(Button, { size: "sm", variant: "ghost", className: "text-destructive", onClick: () => {
|
|
53
|
-
if (confirm(`Verwijder strategie "${s.name}"?`))
|
|
54
|
-
delMut.mutate(s.id);
|
|
55
|
-
}, children: _jsx(Trash2, { className: "w-4 h-4" }) })] })] })] }, s.id))), (strategiesQ.data ?? []).length === 0 && !strategiesQ.isLoading && (_jsx(Card, { children: _jsx(CardContent, { className: "py-8 text-center text-muted-foreground", children: "Nog geen strategie\u00EBn. Klik op \"Nieuwe strategie\" om te starten." }) }))] }), _jsx(Dialog, { open: editOpen, onOpenChange: setEditOpen, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: editing?.id ? "Strategie bewerken" : "Nieuwe strategie" }) }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx(Label, { children: "Naam" }), _jsx(Input, { value: editing?.name ?? "", onChange: (e) => setEditing({ ...editing, name: e.target.value }) })] }), _jsxs("div", { children: [_jsx(Label, { children: "Omschrijving" }), _jsx(Textarea, { rows: 3, value: editing?.description ?? "", onChange: (e) => setEditing({ ...editing, description: e.target.value }) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx(Label, { children: "Prioriteit" }), _jsx(Input, { type: "number", value: editing?.priority ?? 100, onChange: (e) => setEditing({ ...editing, priority: Number(e.target.value) }) })] }), _jsxs("div", { children: [_jsx(Label, { children: "Kleur" }), _jsx(Input, { type: "color", value: editing?.color ?? "#3b82f6", onChange: (e) => setEditing({ ...editing, color: e.target.value }) })] })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => setEditOpen(false), children: "Annuleren" }), _jsx(Button, { onClick: () => saveMut.mutate({
|
|
56
|
-
id: editing?.id, name: editing?.name ?? "",
|
|
57
|
-
description: editing?.description ?? null,
|
|
58
|
-
priority: editing?.priority, color: editing?.color,
|
|
59
|
-
}), children: "Opslaan" })] })] }) }), _jsx(SchedulesDialog, { open: schedOpen, onOpenChange: setSchedOpen, strategy: schedStrategy, schedules: (schedulesQ.data ?? []).filter((x) => x.strategy_id === schedStrategy?.id), onSave: (p) => saveSched({ data: p }).then(invalidate), onDelete: (id) => delSched({ data: { id } }).then(invalidate) })] }));
|
|
60
|
-
}
|
|
61
|
-
function SchedulesDialog(props) {
|
|
62
|
-
const [draft, setDraft] = useState({ rule_type: "date_range", start_date: "", end_date: "", condition_expression: "", priority: 100 });
|
|
63
|
-
if (!props.strategy)
|
|
64
|
-
return null;
|
|
65
|
-
return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { className: "max-w-2xl", children: [_jsx(DialogHeader, { children: _jsxs(DialogTitle, { children: ["Planner \u2014 ", props.strategy.name] }) }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [props.schedules.length === 0 && (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen automatische regels. Voeg er een toe:" })), props.schedules.map((s) => (_jsxs("div", { className: "flex items-center justify-between border rounded p-2 text-sm", children: [_jsxs("div", { children: [_jsx(Badge, { variant: "outline", children: s.rule_type === "date_range" ? "Datum" : "Conditie" }), " ", s.rule_type === "date_range"
|
|
66
|
-
? `${s.start_date ?? "…"} → ${s.end_date ?? "…"}`
|
|
67
|
-
: _jsx("code", { className: "bg-muted px-1 rounded", children: s.condition_expression }), _jsxs("span", { className: "text-muted-foreground ml-2", children: ["prio ", s.priority] })] }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => props.onDelete(s.id), children: _jsx(Trash2, { className: "w-4 h-4" }) })] }, s.id)))] }), _jsxs("div", { className: "border rounded p-3 space-y-3", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { size: "sm", variant: draft.rule_type === "date_range" ? "default" : "outline", onClick: () => setDraft({ ...draft, rule_type: "date_range" }), children: "Datumreeks" }), _jsx(Button, { size: "sm", variant: draft.rule_type === "condition" ? "default" : "outline", onClick: () => setDraft({ ...draft, rule_type: "condition" }), children: "Conditie" })] }), draft.rule_type === "date_range" ? (_jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsxs("div", { children: [_jsx(Label, { children: "Van" }), _jsx(Input, { type: "date", value: draft.start_date, onChange: (e) => setDraft({ ...draft, start_date: e.target.value }) })] }), _jsxs("div", { children: [_jsx(Label, { children: "Tot" }), _jsx(Input, { type: "date", value: draft.end_date, onChange: (e) => setDraft({ ...draft, end_date: e.target.value }) })] })] })) : (_jsxs("div", { children: [_jsxs(Label, { children: ["Conditie-formule (bv. ", _jsx("code", { children: "openCarts > 40" }), ")"] }), _jsx(Input, { value: draft.condition_expression, onChange: (e) => setDraft({ ...draft, condition_expression: e.target.value }) })] })), _jsxs("div", { children: [_jsx(Label, { children: "Prioriteit" }), _jsx(Input, { type: "number", value: draft.priority, onChange: (e) => setDraft({ ...draft, priority: Number(e.target.value) }) })] }), _jsxs(Button, { size: "sm", onClick: async () => {
|
|
68
|
-
await props.onSave({
|
|
69
|
-
strategy_id: props.strategy.id,
|
|
70
|
-
rule_type: draft.rule_type,
|
|
71
|
-
start_date: draft.rule_type === "date_range" ? draft.start_date || null : null,
|
|
72
|
-
end_date: draft.rule_type === "date_range" ? draft.end_date || null : null,
|
|
73
|
-
condition_expression: draft.rule_type === "condition" ? draft.condition_expression : null,
|
|
74
|
-
priority: draft.priority,
|
|
75
|
-
is_enabled: true,
|
|
76
|
-
});
|
|
77
|
-
setDraft({ rule_type: "date_range", start_date: "", end_date: "", condition_expression: "", priority: 100 });
|
|
78
|
-
toast.success("Regel toegevoegd");
|
|
79
|
-
}, children: [_jsx(Plus, { className: "w-4 h-4 mr-2" }), " Regel toevoegen"] })] })] }), _jsx(DialogFooter, { children: _jsx(Button, { variant: "outline", onClick: () => props.onOpenChange(false), children: "Sluiten" }) })] }) }));
|
|
80
|
-
}
|