@flowselections/floriday-verkoop-module 1.0.51 → 1.0.53

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.
@@ -1 +1 @@
1
- {"version":3,"file":"SalesOrderDetailPage.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/SalesOrderDetailPage.tsx"],"names":[],"mappings":"AA8FA,wBAAgB,oBAAoB,4CAqNnC"}
1
+ {"version":3,"file":"SalesOrderDetailPage.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/SalesOrderDetailPage.tsx"],"names":[],"mappings":"AA8FA,wBAAgB,oBAAoB,4CA8NnC"}
@@ -107,7 +107,16 @@ export function SalesOrderDetailPage() {
107
107
  const rawLocalId = isLocal && salesOrderId.startsWith("local:")
108
108
  ? salesOrderId.slice("local:".length)
109
109
  : null;
110
- return (_jsxs("main", { className: "space-y-5 p-6", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsxs(Link, { to: "/floriday-verkoop/verkooporders", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Terug naar verkooporders"] }) }), rawLocalId && (_jsxs(Button, { variant: "outline", size: "sm", onClick: () => setEditOpen(true), children: [_jsx(Pencil, { className: "mr-2 h-4 w-4" }), "Bestelling bewerken"] }))] }), isLoading && (_jsx("div", { className: "rounded-lg border border-border bg-card p-8 text-sm text-muted-foreground", children: "Laden\u2026" })), error && (_jsx("div", { className: "rounded-lg border border-destructive/30 bg-destructive/5 p-4 text-sm text-destructive", children: error.message })), !isLoading && !error && !primary && (_jsx("div", { className: "rounded-lg border border-border bg-card p-8 text-sm text-muted-foreground", children: "Order niet gevonden." })), primary && isBuffer && (_jsxs("div", { className: "rounded-lg border border-primary/30 bg-primary/5 p-4", children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx(Layers, { className: "h-4 w-4 text-primary" }), _jsx("span", { className: "text-sm font-semibold text-foreground", children: "Orderbuffer" }), _jsxs(Badge, { variant: "outline", className: "border-primary/40 text-primary", children: [bufferOrders.length, " orders samengevoegd"] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3 text-sm md:grid-cols-4", children: [_jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Totale omzet" }), _jsx("div", { className: "font-semibold text-foreground", children: eur.format(totals.revenue) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Karren" }), _jsx("div", { className: "font-semibold text-foreground", children: formatLoadUnits(totals.karren, totals.cartType) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Fusten" }), _jsx("div", { className: "font-semibold text-foreground", children: formatLoadUnits(totals.fusten, totals.crateType) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Klant" }), _jsx("div", { className: "font-semibold text-foreground", children: primary.customer.name })] })] }), _jsx(BufferAddresses, { orderId: primary.id }), _jsxs("div", { className: "mt-4 border-t border-primary/20 pt-3 text-sm", children: [_jsxs("div", { className: "mb-1 flex items-center gap-1.5 text-muted-foreground", children: [_jsx(Truck, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Vervoerder" })] }), _jsx(OrderCarrierPicker, { orderId: primary.id, applyToBuffer: true, locked: bufferOrders.every((o) => !!o.isReservation) }), _jsxs("div", { className: "mt-3 mb-1 flex items-center gap-1.5 text-muted-foreground", children: [_jsx(Clock, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Ophaalmoment" })] }), _jsx(OrderPickupMomentPicker, { orderId: primary.id, readOnly: true, compact: true })] }), _jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: bufferOrders.map((o) => (_jsx(Badge, { variant: "outline", className: "text-xs", children: o.orderNumber || o.id.slice(0, 8) }, o.id))) })] })), rawLocalId && _jsx(EngineBufferCard, { orderId: rawLocalId }), primary && !isBuffer && (_jsx(SalesOrderDetailView, { order: primary, sellerFallback: sellerFallback })), primary && isBuffer && (_jsxs("div", { className: "grid grid-cols-1 gap-6 xl:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]", children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "text-sm font-semibold text-foreground", children: ["Orders in deze buffer (", bufferOrders.length, ")"] }), bufferOrders.map((o) => (_jsx(BufferOrderRow, { order: o, sellerFallback: sellerFallback }, o.id)))] }), _jsxs("div", { className: "space-y-3 xl:sticky xl:top-4 xl:self-start", children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: "Gecombineerde karindeling" }), _jsx(OrderKarindelingCard, { order: primary })] })] })), rawLocalId && (_jsx(EditLocalOrderDialog, { orderId: rawLocalId, open: editOpen, onOpenChange: setEditOpen }))] }));
110
+ return (_jsxs("main", { className: "space-y-5 p-6", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsxs(Link, { to: "/floriday-verkoop/verkooporders", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Terug naar verkooporders"] }) }), rawLocalId && (_jsxs(Button, { variant: "outline", size: "sm", onClick: () => setEditOpen(true), children: [_jsx(Pencil, { className: "mr-2 h-4 w-4" }), "Bestelling bewerken"] }))] }), isLoading && (_jsx("div", { className: "rounded-lg border border-border bg-card p-8 text-sm text-muted-foreground", children: "Laden\u2026" })), error && (_jsx("div", { className: "rounded-lg border border-destructive/30 bg-destructive/5 p-4 text-sm text-destructive", children: error.message })), !isLoading && !error && !primary && (_jsx("div", { className: "rounded-lg border border-border bg-card p-8 text-sm text-muted-foreground", children: "Order niet gevonden." })), primary && isBuffer && (_jsxs("div", { className: "rounded-lg border border-primary/30 bg-primary/5 p-4", children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx(Layers, { className: "h-4 w-4 text-primary" }), _jsx("span", { className: "text-sm font-semibold text-foreground", children: "Orderbuffer" }), _jsxs(Badge, { variant: "outline", className: "border-primary/40 text-primary", children: [bufferOrders.length, " orders samengevoegd"] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3 text-sm md:grid-cols-4", children: [_jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Totale omzet" }), _jsx("div", { className: "font-semibold text-foreground", children: eur.format(totals.revenue) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Karren" }), _jsx("div", { className: "font-semibold text-foreground", children: formatLoadUnits(totals.karren, totals.cartType) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Fusten" }), _jsx("div", { className: "font-semibold text-foreground", children: formatLoadUnits(totals.fusten, totals.crateType) })] }), _jsxs("div", { children: [_jsx("div", { className: "text-muted-foreground", children: "Klant" }), _jsx("div", { className: "font-semibold text-foreground", children: primary.customer.name })] })] }), _jsx(BufferAddresses, { orderId: primary.id }), _jsxs("div", { className: "mt-4 border-t border-primary/20 pt-3 text-sm", children: [_jsxs("div", { className: "mb-1 flex items-center gap-1.5 text-muted-foreground", children: [_jsx(Truck, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Vervoerder" })] }), _jsx(OrderCarrierPicker, { orderId: primary.id, applyToBuffer: true, locked: bufferOrders.every((o) => !!o.isReservation) }), _jsxs("div", { className: "mt-3 mb-1 flex items-center gap-1.5 text-muted-foreground", children: [_jsx(Clock, { className: "h-3.5 w-3.5" }), _jsx("span", { children: "Ophaalmoment" })] }), _jsx(OrderPickupMomentPicker, { orderId: primary.id, readOnly: true, compact: true })] }), _jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: bufferOrders.map((o) => {
111
+ // Een Floriday-order hoort altijd een centraal ordernummer te
112
+ // hebben. Ontbreekt het, dan tonen we bewust géén chip: liever
113
+ // zichtbaar missend dan een verzonnen uuid-fragment.
114
+ if (!o.orderNumber) {
115
+ console.warn("[Orderbuffer] order zonder ordernummer:", o.id);
116
+ return null;
117
+ }
118
+ return (_jsx(Badge, { variant: "outline", className: "text-xs", children: o.orderNumber }, o.id));
119
+ }) })] })), rawLocalId && _jsx(EngineBufferCard, { orderId: rawLocalId }), primary && !isBuffer && (_jsx(SalesOrderDetailView, { order: primary, sellerFallback: sellerFallback })), primary && isBuffer && (_jsxs("div", { className: "grid grid-cols-1 gap-6 xl:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]", children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "text-sm font-semibold text-foreground", children: ["Orders in deze buffer (", bufferOrders.length, ")"] }), bufferOrders.map((o) => (_jsx(BufferOrderRow, { order: o, sellerFallback: sellerFallback }, o.id)))] }), _jsxs("div", { className: "space-y-3 xl:sticky xl:top-4 xl:self-start", children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: "Gecombineerde karindeling" }), _jsx(OrderKarindelingCard, { order: primary })] })] })), rawLocalId && (_jsx(EditLocalOrderDialog, { orderId: rawLocalId, open: editOpen, onOpenChange: setEditOpen }))] }));
111
120
  }
112
121
  function BufferOrderRow({ order, sellerFallback, }) {
113
122
  const [open, setOpen] = useState(false);
@@ -8,6 +8,13 @@ export interface PlannerInputItem {
8
8
  plants_per_crate: number | null | undefined;
9
9
  crates_per_layer: number | null | undefined;
10
10
  layers_per_cart: number | null | undefined;
11
+ /**
12
+ * Ladingdrager van de regel (Floriday-code, bv. DANISH_TROLLEY).
13
+ * Uitsluitend informatief binnen de planner: partitioneren op ladingdrager
14
+ * gebeurt door de aanroeper (één planner-run per ladingdrager), zodat een
15
+ * veilingstapelwagen en een Deense container nooit op één kar komen.
16
+ */
17
+ load_carrier?: string | null;
11
18
  }
12
19
  export interface PlannedCartItem {
13
20
  order_item_id: string;
@@ -52,6 +59,8 @@ export interface PlannerOptions {
52
59
  maxBeladingenPerLayer?: number;
53
60
  /** Product-ids die nooit gemengd mogen worden. */
54
61
  neverMixProductIds?: Set<string>;
62
+ /** Eerste karnummer van deze run (voor doorlopende nummering over partities). */
63
+ startCartNumber?: number;
55
64
  }
56
65
  export declare function planCarts(inputs: PlannerInputItem[], options?: PlannerOptions): PlannerResult;
57
66
  //# sourceMappingURL=cart-planner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cart-planner.d.ts","sourceRoot":"","sources":["../../src/lib/cart-planner.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C;AAGD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,eAAe,GAAG,sBAAsB,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uDAAuD;IACvD,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClC;AA+JD,wBAAgB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAqJ7F"}
1
+ {"version":3,"file":"cart-planner.d.ts","sourceRoot":"","sources":["../../src/lib/cart-planner.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAGD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,eAAe,GAAG,sBAAsB,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uDAAuD;IACvD,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA+JD,wBAAgB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAqJ7F"}
@@ -133,7 +133,7 @@ export function planCarts(inputs, options) {
133
133
  const warnings = [];
134
134
  const blocked = [];
135
135
  const carts = [];
136
- let cartNumber = 1;
136
+ let cartNumber = Math.max(1, Math.round(options?.startCartNumber ?? 1));
137
137
  const num = (v) => {
138
138
  if (v === null || v === undefined)
139
139
  return null;