@flowselections/floriday-afhandeling-module 1.0.61 → 1.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist-lib/components/afhandeling/AutoSendStatus.d.ts +9 -2
  2. package/dist-lib/components/afhandeling/AutoSendStatus.d.ts.map +1 -1
  3. package/dist-lib/components/afhandeling/AutoSendStatus.js +70 -6
  4. package/dist-lib/components/afhandeling/DagDetailDialog.js +39 -24
  5. package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
  6. package/dist-lib/components/afhandeling/LeveringenPage.js +3 -1
  7. package/dist-lib/components/afhandeling/NuVersturenButton.d.ts.map +1 -1
  8. package/dist-lib/components/afhandeling/NuVersturenButton.js +4 -4
  9. package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -1
  10. package/dist-lib/components/afhandeling/PickAgendaView.js +9 -7
  11. package/dist-lib/components/afhandeling/ScanControleView.d.ts.map +1 -1
  12. package/dist-lib/components/afhandeling/ScanControleView.js +2 -2
  13. package/dist-lib/components/afhandeling/VerzetOrderDialog.js +3 -3
  14. package/dist-lib/components/afhandeling/WeekAgendaView.js +5 -2
  15. package/dist-lib/components/settings/AfhandelingSettingsCard.js +1 -1
  16. package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -1
  17. package/dist-lib/hooks/useOrderPlanning.js +7 -6
  18. package/dist-lib/hooks/usePickAgenda.d.ts +4 -0
  19. package/dist-lib/hooks/usePickAgenda.d.ts.map +1 -1
  20. package/dist-lib/hooks/usePickAgenda.js +36 -5
  21. package/dist-lib/integrations/supabase/types.d.ts +225 -0
  22. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  23. package/dist-lib/lib/cartAssignments.functions.d.ts +4 -0
  24. package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -1
  25. package/dist-lib/lib/cartAssignments.functions.js +5 -1
  26. package/dist-lib/lib/floridayLoading.functions.d.ts +7 -0
  27. package/dist-lib/lib/floridayLoading.functions.d.ts.map +1 -1
  28. package/dist-lib/lib/floridayLoading.functions.js +11 -4
  29. package/dist-lib/lib/printing.js +1 -1
  30. package/dist-lib/lib/serverRoutes/autoSend.handler.d.ts +2 -1
  31. package/dist-lib/lib/serverRoutes/autoSend.handler.d.ts.map +1 -1
  32. package/dist-lib/lib/serverRoutes/autoSend.handler.js +26 -5
  33. package/dist-lib/lib/serverRoutes/index.d.ts +1 -0
  34. package/dist-lib/lib/serverRoutes/index.d.ts.map +1 -1
  35. package/dist-lib/lib/serverRoutes/index.js +1 -0
  36. package/package.json +12 -1
@@ -47,5 +47,5 @@ export function AfhandelingSettingsCard() {
47
47
  toast.error(e instanceof Error ? e.message : "Opslaan mislukt");
48
48
  },
49
49
  });
50
- return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(CalendarClock, { className: "h-5 w-5 text-primary" }), _jsx(CardTitle, { children: "Afhandeling \u2014 Planning" })] }), _jsx(CardDescription, { children: "De pickplanning (pickdagen, picktijd en verdeling over de week) wordt volledig bepaald door de Logistics Engine. Hieronder staan alleen de instellingen van deze module zelf." })] }), _jsxs(CardContent, { className: "space-y-5", children: [_jsxs("div", { className: "rounded-md border p-4 space-y-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Mail, { className: "h-4 w-4 text-primary" }), _jsx(Label, { htmlFor: "mailEnabled", className: "font-semibold", children: "Aanmeldmail vervoerders" })] }), _jsx("p", { className: "text-xs text-muted-foreground max-w-prose", children: "Verstuurt automatisch een mail met de te verwachten karren naar de vervoerder v\u00F3\u00F3r de aanmelddeadline van het ophaalmoment. E\u00E9n mail per ophaaldag/-moment per vervoerder." })] }), _jsx(Switch, { id: "mailEnabled", checked: mailEnabled, onCheckedChange: setMailEnabled })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "mailLead", children: "Minuten v\u00F3\u00F3r aanmelddeadline versturen" }), _jsx(Input, { id: "mailLead", type: "number", min: 0, max: 1440, value: mailLead, disabled: !mailEnabled, onChange: (e) => setMailLead(Math.max(0, Math.min(1440, Math.floor(Number(e.target.value)) || 0))) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "mailPurpose", children: "E-mail-doeleinde (purpose)" }), _jsx(Input, { id: "mailPurpose", value: mailPurpose, disabled: !mailEnabled, onChange: (e) => setMailPurpose(e.target.value) }), _jsxs("p", { className: "text-xs text-muted-foreground", children: ["Koppel dit doeleinde in de module ", _jsx("strong", { children: "E-mailkoppeling" }), " aan een actief send-adres. Standaard: ", _jsx("code", { children: "afhandeling_carrier_signup" }), "."] })] })] }), _jsxs("div", { className: "rounded-md bg-muted/50 p-3 text-xs text-muted-foreground", children: [_jsx("strong", { children: "Ophaaltijd" }), " en ", _jsx("strong", { children: "Aanmeldtijd" }), " stel je per vervoerder in (werkdagen v\u00F3\u00F3r bezorgdag). De vervoerder die als ", _jsx("strong", { children: "standaard" }), " is gemarkeerd, wordt gebruikt voor orders zonder eigen vervoerder."] }), _jsx(Button, { onClick: () => mutation.mutate(), disabled: mutation.isPending, children: mutation.isPending ? "Opslaan…" : "Opslaan" })] })] }));
50
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(CalendarClock, { className: "h-5 w-5 text-primary" }), _jsx(CardTitle, { children: "Afhandeling \u2014 Planning" })] }), _jsx(CardDescription, { children: "De pickplanning (pickdagen, picktijd en verdeling over de week) wordt volledig bepaald door de planning. Hieronder staan alleen de instellingen van deze module zelf." })] }), _jsxs(CardContent, { className: "space-y-5", children: [_jsxs("div", { className: "rounded-md border p-4 space-y-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Mail, { className: "h-4 w-4 text-primary" }), _jsx(Label, { htmlFor: "mailEnabled", className: "font-semibold", children: "Aanmeldmail vervoerders" })] }), _jsx("p", { className: "text-xs text-muted-foreground max-w-prose", children: "Verstuurt automatisch een mail met de te verwachten karren naar de vervoerder v\u00F3\u00F3r de aanmelddeadline van het ophaalmoment. E\u00E9n mail per ophaaldag/-moment per vervoerder." })] }), _jsx(Switch, { id: "mailEnabled", checked: mailEnabled, onCheckedChange: setMailEnabled })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "mailLead", children: "Minuten v\u00F3\u00F3r aanmelddeadline versturen" }), _jsx(Input, { id: "mailLead", type: "number", min: 0, max: 1440, value: mailLead, disabled: !mailEnabled, onChange: (e) => setMailLead(Math.max(0, Math.min(1440, Math.floor(Number(e.target.value)) || 0))) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "mailPurpose", children: "E-mail-doeleinde (purpose)" }), _jsx(Input, { id: "mailPurpose", value: mailPurpose, disabled: !mailEnabled, onChange: (e) => setMailPurpose(e.target.value) }), _jsxs("p", { className: "text-xs text-muted-foreground", children: ["Koppel dit doeleinde in de module ", _jsx("strong", { children: "E-mailkoppeling" }), " aan een actief send-adres. Standaard: ", _jsx("code", { children: "afhandeling_carrier_signup" }), "."] })] })] }), _jsxs("div", { className: "rounded-md bg-muted/50 p-3 text-xs text-muted-foreground", children: [_jsx("strong", { children: "Ophaaltijd" }), " en ", _jsx("strong", { children: "Aanmeldtijd" }), " stel je per vervoerder in (werkdagen v\u00F3\u00F3r bezorgdag). De vervoerder die als ", _jsx("strong", { children: "standaard" }), " is gemarkeerd, wordt gebruikt voor orders zonder eigen vervoerder."] }), _jsx(Button, { onClick: () => mutation.mutate(), disabled: mutation.isPending, children: mutation.isPending ? "Opslaan…" : "Opslaan" })] })] }));
51
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useOrderPlanning.d.ts","sourceRoot":"","sources":["../../src/hooks/useOrderPlanning.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/D,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAYtG;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,qEAAqE;IACrE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,cAAc,EAAE,OAAO,CAAC;IACxB,iDAAiD;IACjD,KAAK,EAAE,aAAa,CAAC;IACrB,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,wEAAwE;IACxE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,wDAAwD;IACxD,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAGD,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,sBAAsB,CAkTxF"}
1
+ {"version":3,"file":"useOrderPlanning.d.ts","sourceRoot":"","sources":["../../src/hooks/useOrderPlanning.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/D,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAYtG;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,qEAAqE;IACrE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,cAAc,EAAE,OAAO,CAAC;IACxB,iDAAiD;IACjD,KAAK,EAAE,aAAa,CAAC;IACrB,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,wEAAwE;IACxE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,wDAAwD;IACxD,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAGD,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,sBAAsB,CAmTxF"}
@@ -11,7 +11,7 @@ import { useCartIndex } from "./useCartIndex";
11
11
  import { emitEngineEvent, listComposeTaskRefs } from "../lib/logisticsEngine/engine";
12
12
  import { orderRefsFor } from "../lib/orderRefs";
13
13
  import { isOpenOrderStatus } from "../lib/orderStatus";
14
- import { MAX_ATTEMPTS, emitQueueStatus, markInFlight, markResult, resetEmitQueue, selectEmitBatch, } from "../lib/logisticsEngine/emitQueue";
14
+ import { emitQueueStatus, markInFlight, markResult, resetEmitQueue, selectEmitBatch, } from "../lib/logisticsEngine/emitQueue";
15
15
  export function useOrderPlanning(range) {
16
16
  const from = range?.from ?? null;
17
17
  const to = range?.to ?? null;
@@ -34,7 +34,8 @@ export function useOrderPlanning(range) {
34
34
  let message = "Onbekende fout";
35
35
  if (e instanceof Response) {
36
36
  const text = await e.clone().text().catch(() => "");
37
- message = `Floriday-aanvraag mislukt (${e.status}): ${text.slice(0, 200) || e.statusText}`;
37
+ message = "Floriday reageert nu niet goed. Probeer het over een paar minuten opnieuw.";
38
+ console.warn(`Floriday-aanvraag mislukt (${e.status}): ${text.slice(0, 200) || e.statusText}`);
38
39
  }
39
40
  else if (e instanceof Error) {
40
41
  message = e.message;
@@ -182,7 +183,7 @@ export function useOrderPlanning(range) {
182
183
  cartIndexes: Array.from({ length: carrierCount }, (_, i) => i),
183
184
  },
184
185
  ],
185
- reason: `Ingepland door de Logistics Engine (taak ${(pickTask ?? task).task_type}, regelversie ${(pickTask ?? task).rule_version ?? "-"}).`,
186
+ reason: `Ingepland door de planning (taak ${(pickTask ?? task).task_type}, regelversie ${(pickTask ?? task).rule_version ?? "-"}).`,
186
187
  carrierName: carrier?.name ?? base.carrierName,
187
188
  };
188
189
  return { order, planning, engineTask: task, awaitingEngine: false, state: "planned", hasComposeTask: true };
@@ -223,7 +224,7 @@ export function useOrderPlanning(range) {
223
224
  if (!batch.length) {
224
225
  const status = emitQueueStatus(refs);
225
226
  if (status.gaveUp.length) {
226
- setSignalError(`Melden bij de Logistics Engine is na ${MAX_ATTEMPTS} pogingen gestopt voor ${status.gaveUp.length} order(s): ${status.gaveUp.slice(0, 5).join(", ")}${status.gaveUp.length > 5 ? "…" : ""}. ${status.lastError ?? ""}`.trim());
227
+ setSignalError(`${status.gaveUp.length} order(s) konden niet automatisch worden ingepland. Open de order en kies ‘Opnieuw inplannen’.`);
227
228
  }
228
229
  return;
229
230
  }
@@ -257,8 +258,8 @@ export function useOrderPlanning(range) {
257
258
  else {
258
259
  const status = emitQueueStatus(refs);
259
260
  setSignalError(status.gaveUp.length
260
- ? `Melden bij de Logistics Engine is na ${MAX_ATTEMPTS} pogingen gestopt voor ${status.gaveUp.length} order(s): ${status.gaveUp.slice(0, 5).join(", ")}${status.gaveUp.length > 5 ? "…" : ""}. ${status.lastError ?? ""}`.trim()
261
- : `Melding aan de Logistics Engine is mislukt (nieuwe poging volgt automatisch). ${result.error ?? ""}`.trim());
261
+ ? `${status.gaveUp.length} order(s) konden niet automatisch worden ingepland. Open de order en kies ‘Opnieuw inplannen’.`
262
+ : "Inplannen lukt nog niet; er volgt automatisch een nieuwe poging.");
262
263
  }
263
264
  }
264
265
  })();
@@ -6,6 +6,10 @@ export interface PickAgendaOrder {
6
6
  carts: number;
7
7
  plants: number;
8
8
  shifted: boolean;
9
+ /** Orders in deze (buffer)taak; leeg = alleen orderRef. */
10
+ bufferOrders: string[];
11
+ /** Unieke kar-id's van deze taak. */
12
+ cartIds: string[];
9
13
  /** Verkoop-module zegt: deze order is afgehandeld (verzonden/geleverd). */
10
14
  fulfilled?: boolean;
11
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usePickAgenda.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickAgenda.ts"],"names":[],"mappings":"AAQA,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAwCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;;;;;EA8GnE"}
1
+ {"version":3,"file":"usePickAgenda.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickAgenda.ts"],"names":[],"mappings":"AAQA,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AA4CD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;;;;;EAoInE"}
@@ -16,6 +16,10 @@ function toOrders(value) {
16
16
  carts: Number(r.carts ?? 0),
17
17
  plants: Number(r.plants ?? 0),
18
18
  shifted: Boolean(r.shifted),
19
+ bufferOrders: Array.isArray(r.bufferOrders) ? r.bufferOrders.map(String).filter(Boolean) : [],
20
+ cartIds: Array.isArray(r.cartList)
21
+ ? r.cartList.map((c) => c?.cartId).filter((x) => typeof x === "string" && !!x)
22
+ : [],
19
23
  };
20
24
  });
21
25
  }
@@ -110,16 +114,43 @@ export function usePickAgenda(from, to) {
110
114
  if (to && pickDate > to)
111
115
  continue;
112
116
  // "Afgehandeld" volgt uitsluitend de Engine (taak afgemeld), niet de Verkoop-status.
113
- const doneCount = orders.filter((o) => o.status === "done" || o.status === "completed").length;
114
- const ready = orders.filter((o) => o.status === "ready" || o.status === "done").length;
117
+ // Tellen per losse order (ook elke order in een buffer) en per unieke kar-id,
118
+ // gelijk aan Dagdetails. "Afgehandeld" = taak afgemeld of Verkoop-status afgehandeld,
119
+ // gelijk aan Planning en leveringen.
120
+ const refsOf = (o) => (o.bufferOrders.length ? o.bufferOrders : [o.orderRef]);
121
+ const allRefs = new Set();
122
+ const doneRefs = new Set();
123
+ const readyRefs = new Set();
124
+ for (const o of orders) {
125
+ for (const r of refsOf(o)) {
126
+ if (isCancelledRef(r))
127
+ continue;
128
+ allRefs.add(r);
129
+ const engineDone = o.status === "done" || o.status === "completed";
130
+ if (engineDone || isFulfilledRef(r))
131
+ doneRefs.add(r);
132
+ if (o.status === "ready" || engineDone || isFulfilledRef(r))
133
+ readyRefs.add(r);
134
+ }
135
+ }
136
+ const cartIds = new Set();
137
+ let cartsWithoutId = 0;
138
+ for (const o of orders) {
139
+ if (o.cartIds.length)
140
+ o.cartIds.forEach((c) => cartIds.add(c));
141
+ else
142
+ cartsWithoutId += o.carts || 0;
143
+ }
144
+ const doneCount = doneRefs.size;
145
+ const ready = readyRefs.size;
115
146
  out.push({
116
147
  pickDate,
117
148
  orders,
118
- orderCount: orders.length,
119
- cartCount: orders.reduce((s, o) => s + (o.carts || 0), 0),
149
+ orderCount: allRefs.size,
150
+ cartCount: cartIds.size + cartsWithoutId,
120
151
  plantCount: orders.reduce((s, o) => s + (o.plants || 0), 0),
121
152
  ready,
122
- inPreparation: Math.max(0, orders.length - ready),
153
+ inPreparation: Math.max(0, allRefs.size - ready),
123
154
  shiftedCount: orders.filter((o) => o.shifted).length,
124
155
  doneCount,
125
156
  });
@@ -11618,6 +11618,7 @@ export type Database = {
11618
11618
  logistics_auto_send: {
11619
11619
  Row: {
11620
11620
  attempts: number;
11621
+ buffer_id: string | null;
11621
11622
  cart_ids: string[];
11622
11623
  created_at: string;
11623
11624
  id: string;
@@ -11627,13 +11628,16 @@ export type Database = {
11627
11628
  max_attempts: number;
11628
11629
  next_attempt_at: string;
11629
11630
  order_id: string;
11631
+ order_ids: string[];
11630
11632
  reason: string | null;
11631
11633
  sent_at: string | null;
11634
+ sent_how: string | null;
11632
11635
  status: string;
11633
11636
  updated_at: string;
11634
11637
  };
11635
11638
  Insert: {
11636
11639
  attempts?: number;
11640
+ buffer_id?: string | null;
11637
11641
  cart_ids?: string[];
11638
11642
  created_at?: string;
11639
11643
  id?: string;
@@ -11643,13 +11647,16 @@ export type Database = {
11643
11647
  max_attempts?: number;
11644
11648
  next_attempt_at?: string;
11645
11649
  order_id: string;
11650
+ order_ids?: string[];
11646
11651
  reason?: string | null;
11647
11652
  sent_at?: string | null;
11653
+ sent_how?: string | null;
11648
11654
  status?: string;
11649
11655
  updated_at?: string;
11650
11656
  };
11651
11657
  Update: {
11652
11658
  attempts?: number;
11659
+ buffer_id?: string | null;
11653
11660
  cart_ids?: string[];
11654
11661
  created_at?: string;
11655
11662
  id?: string;
@@ -11659,8 +11666,10 @@ export type Database = {
11659
11666
  max_attempts?: number;
11660
11667
  next_attempt_at?: string;
11661
11668
  order_id?: string;
11669
+ order_ids?: string[];
11662
11670
  reason?: string | null;
11663
11671
  sent_at?: string | null;
11672
+ sent_how?: string | null;
11664
11673
  status?: string;
11665
11674
  updated_at?: string;
11666
11675
  };
@@ -16800,6 +16809,44 @@ export type Database = {
16800
16809
  };
16801
16810
  Relationships: [];
16802
16811
  };
16812
+ order_review_dismissals: {
16813
+ Row: {
16814
+ dismissed_at: string;
16815
+ dismissed_by: string | null;
16816
+ id: string;
16817
+ kind: string;
16818
+ note: string | null;
16819
+ order_id: string;
16820
+ review_reason: string;
16821
+ };
16822
+ Insert: {
16823
+ dismissed_at?: string;
16824
+ dismissed_by?: string | null;
16825
+ id?: string;
16826
+ kind: string;
16827
+ note?: string | null;
16828
+ order_id: string;
16829
+ review_reason: string;
16830
+ };
16831
+ Update: {
16832
+ dismissed_at?: string;
16833
+ dismissed_by?: string | null;
16834
+ id?: string;
16835
+ kind?: string;
16836
+ note?: string | null;
16837
+ order_id?: string;
16838
+ review_reason?: string;
16839
+ };
16840
+ Relationships: [
16841
+ {
16842
+ foreignKeyName: "order_review_dismissals_order_id_fkey";
16843
+ columns: ["order_id"];
16844
+ isOneToOne: false;
16845
+ referencedRelation: "orders";
16846
+ referencedColumns: ["id"];
16847
+ }
16848
+ ];
16849
+ };
16803
16850
  order_shipment_items: {
16804
16851
  Row: {
16805
16852
  created_at: string;
@@ -28494,6 +28541,12 @@ export type Database = {
28494
28541
  };
28495
28542
  Returns: Json;
28496
28543
  };
28544
+ _scan_kar_voortgang: {
28545
+ Args: {
28546
+ p_cart_id: string;
28547
+ };
28548
+ Returns: Json;
28549
+ };
28497
28550
  _stock_import_caller: {
28498
28551
  Args: {
28499
28552
  p_owner: string;
@@ -29217,6 +29270,13 @@ export type Database = {
29217
29270
  status: string;
29218
29271
  }[];
29219
29272
  };
29273
+ control_mark_cart_delivered_by_cart: {
29274
+ Args: {
29275
+ p_afmeld_bron?: string;
29276
+ p_cart_id: string;
29277
+ };
29278
+ Returns: Json;
29279
+ };
29220
29280
  control_mark_carts_delivered: {
29221
29281
  Args: {
29222
29282
  p_carts: Json;
@@ -29236,6 +29296,13 @@ export type Database = {
29236
29296
  outcome: string;
29237
29297
  }[];
29238
29298
  };
29299
+ control_post_mark_cart_delivered: {
29300
+ Args: {
29301
+ p_cart_id: string;
29302
+ p_slug: string;
29303
+ };
29304
+ Returns: Json;
29305
+ };
29239
29306
  count_distinct_regulatory_products: {
29240
29307
  Args: never;
29241
29308
  Returns: number;
@@ -30715,6 +30782,7 @@ export type Database = {
30715
30782
  };
30716
30783
  Returns: {
30717
30784
  attempts: number;
30785
+ buffer_id: string | null;
30718
30786
  cart_ids: string[];
30719
30787
  created_at: string;
30720
30788
  id: string;
@@ -30724,8 +30792,10 @@ export type Database = {
30724
30792
  max_attempts: number;
30725
30793
  next_attempt_at: string;
30726
30794
  order_id: string;
30795
+ order_ids: string[];
30727
30796
  reason: string | null;
30728
30797
  sent_at: string | null;
30798
+ sent_how: string | null;
30729
30799
  status: string;
30730
30800
  updated_at: string;
30731
30801
  }[];
@@ -30753,12 +30823,28 @@ export type Database = {
30753
30823
  };
30754
30824
  Returns: Json;
30755
30825
  };
30826
+ logistics_auto_send_route_missing: {
30827
+ Args: never;
30828
+ Returns: boolean;
30829
+ };
30830
+ logistics_auto_send_sent_elsewhere: {
30831
+ Args: {
30832
+ p_order_id: string;
30833
+ };
30834
+ Returns: string;
30835
+ };
30756
30836
  logistics_auto_send_status: {
30757
30837
  Args: {
30758
30838
  p_order_id: string;
30759
30839
  };
30760
30840
  Returns: Json;
30761
30841
  };
30842
+ logistics_auto_send_status_core: {
30843
+ Args: {
30844
+ p_order_id: string;
30845
+ };
30846
+ Returns: Json;
30847
+ };
30762
30848
  logistics_backorder_allowed: {
30763
30849
  Args: {
30764
30850
  p_strategy_id?: string;
@@ -30943,6 +31029,12 @@ export type Database = {
30943
31029
  Args: never;
30944
31030
  Returns: Json;
30945
31031
  };
31032
+ logistics_cart_fixed_numbering: {
31033
+ Args: {
31034
+ p_cart_id: string;
31035
+ };
31036
+ Returns: Json;
31037
+ };
30946
31038
  logistics_cart_handled: {
30947
31039
  Args: {
30948
31040
  p_cart_index: number;
@@ -30994,10 +31086,22 @@ export type Database = {
30994
31086
  };
30995
31087
  Returns: boolean;
30996
31088
  };
31089
+ logistics_cart_json_fixed: {
31090
+ Args: {
31091
+ p_cart: Json;
31092
+ };
31093
+ Returns: Json;
31094
+ };
30997
31095
  logistics_cart_layout_method: {
30998
31096
  Args: never;
30999
31097
  Returns: Json;
31000
31098
  };
31099
+ logistics_cart_order_ids: {
31100
+ Args: {
31101
+ p_cart_id: string;
31102
+ };
31103
+ Returns: string[];
31104
+ };
31001
31105
  logistics_cart_order_refs: {
31002
31106
  Args: {
31003
31107
  p_cart_id: string;
@@ -31041,6 +31145,12 @@ export type Database = {
31041
31145
  };
31042
31146
  Returns: boolean;
31043
31147
  };
31148
+ logistics_cart_scanned: {
31149
+ Args: {
31150
+ p_cart_id: string;
31151
+ };
31152
+ Returns: boolean;
31153
+ };
31044
31154
  logistics_cart_seq: {
31045
31155
  Args: {
31046
31156
  p_order_uuid?: string;
@@ -31097,6 +31207,12 @@ export type Database = {
31097
31207
  unit_ref: string;
31098
31208
  }[];
31099
31209
  };
31210
+ logistics_cart_wait_until: {
31211
+ Args: {
31212
+ p_cart_id: string;
31213
+ };
31214
+ Returns: string;
31215
+ };
31100
31216
  logistics_carts_per_print: {
31101
31217
  Args: never;
31102
31218
  Returns: number;
@@ -31379,6 +31495,13 @@ export type Database = {
31379
31495
  };
31380
31496
  Returns: number;
31381
31497
  };
31498
+ logistics_control_scan_record_afmelding_cart: {
31499
+ Args: {
31500
+ p_bron: string;
31501
+ p_cart_id: string;
31502
+ };
31503
+ Returns: number;
31504
+ };
31382
31505
  logistics_control_scan_retry: {
31383
31506
  Args: {
31384
31507
  _id: string;
@@ -31806,6 +31929,23 @@ export type Database = {
31806
31929
  };
31807
31930
  Returns: number;
31808
31931
  };
31932
+ logistics_local_hhmi: {
31933
+ Args: {
31934
+ p_ts: string;
31935
+ };
31936
+ Returns: string;
31937
+ };
31938
+ logistics_local_today: {
31939
+ Args: never;
31940
+ Returns: string;
31941
+ };
31942
+ logistics_mark_cart_delivered_core: {
31943
+ Args: {
31944
+ p_bron: string;
31945
+ p_cart_id: string;
31946
+ };
31947
+ Returns: Json;
31948
+ };
31809
31949
  logistics_merge_decision: {
31810
31950
  Args: {
31811
31951
  p_lines: Json;
@@ -31864,6 +32004,12 @@ export type Database = {
31864
32004
  };
31865
32005
  Returns: boolean;
31866
32006
  };
32007
+ logistics_order_all_carts_scanned: {
32008
+ Args: {
32009
+ p_order_id: string;
32010
+ };
32011
+ Returns: boolean;
32012
+ };
31867
32013
  logistics_order_backlog_info: {
31868
32014
  Args: {
31869
32015
  p_order_id: string;
@@ -31891,6 +32037,12 @@ export type Database = {
31891
32037
  };
31892
32038
  Returns: number;
31893
32039
  };
32040
+ logistics_order_cart_ids: {
32041
+ Args: {
32042
+ p_order_id: string;
32043
+ };
32044
+ Returns: string[];
32045
+ };
31894
32046
  logistics_order_changed: {
31895
32047
  Args: {
31896
32048
  p_order_id: string;
@@ -32177,6 +32329,10 @@ export type Database = {
32177
32329
  };
32178
32330
  Returns: string;
32179
32331
  };
32332
+ logistics_partial_wait_minutes: {
32333
+ Args: never;
32334
+ Returns: number;
32335
+ };
32180
32336
  logistics_payload_is_floriday: {
32181
32337
  Args: {
32182
32338
  _payload: Json;
@@ -32219,6 +32375,14 @@ export type Database = {
32219
32375
  Args: never;
32220
32376
  Returns: string;
32221
32377
  };
32378
+ logistics_pick_queue_close: {
32379
+ Args: {
32380
+ p_ids: string[];
32381
+ p_mode: string;
32382
+ p_reason: string;
32383
+ };
32384
+ Returns: number;
32385
+ };
32222
32386
  logistics_pick_start_estimate: {
32223
32387
  Args: {
32224
32388
  p_order: Json;
@@ -33341,6 +33505,22 @@ export type Database = {
33341
33505
  };
33342
33506
  Returns: Json;
33343
33507
  };
33508
+ logistics_tz: {
33509
+ Args: never;
33510
+ Returns: string;
33511
+ };
33512
+ logistics_unit_all_carts_scanned: {
33513
+ Args: {
33514
+ p_order_id: string;
33515
+ };
33516
+ Returns: boolean;
33517
+ };
33518
+ logistics_unit_order_ids: {
33519
+ Args: {
33520
+ p_order_id: string;
33521
+ };
33522
+ Returns: string[];
33523
+ };
33344
33524
  logistics_upsert_task: {
33345
33525
  Args: {
33346
33526
  p_buffer_ref: string;
@@ -34277,6 +34457,13 @@ export type Database = {
34277
34457
  };
34278
34458
  Returns: Json;
34279
34459
  };
34460
+ pickstation_auto_send_status: {
34461
+ Args: {
34462
+ p_order_id: string;
34463
+ p_slug: string;
34464
+ };
34465
+ Returns: Json;
34466
+ };
34280
34467
  pickstation_cart_sticker_state: {
34281
34468
  Args: {
34282
34469
  p_cart_id: string;
@@ -35092,6 +35279,14 @@ export type Database = {
35092
35279
  };
35093
35280
  Returns: Json;
35094
35281
  };
35282
+ scan_kar_voortgang: {
35283
+ Args: {
35284
+ p_cart_id: string;
35285
+ p_scanner_id?: string;
35286
+ p_slug?: string;
35287
+ };
35288
+ Returns: Json;
35289
+ };
35095
35290
  scan_log_code: {
35096
35291
  Args: {
35097
35292
  p_code: string;
@@ -35109,6 +35304,12 @@ export type Database = {
35109
35304
  };
35110
35305
  Returns: Json;
35111
35306
  };
35307
+ scan_order_klant: {
35308
+ Args: {
35309
+ p_order_id: string;
35310
+ };
35311
+ Returns: Json;
35312
+ };
35112
35313
  scan_pakbon_lookup: {
35113
35314
  Args: {
35114
35315
  p_barcode: string;
@@ -35215,6 +35416,10 @@ export type Database = {
35215
35416
  };
35216
35417
  Returns: Json;
35217
35418
  };
35419
+ scan_tijdzone: {
35420
+ Args: never;
35421
+ Returns: string;
35422
+ };
35218
35423
  scan_verzendbrief_regels: {
35219
35424
  Args: {
35220
35425
  p_sessie_id: string;
@@ -35543,6 +35748,26 @@ export type Database = {
35543
35748
  trade_item_key: string;
35544
35749
  updated_at: string;
35545
35750
  }[];
35751
+ } | {
35752
+ Args: {
35753
+ p_change_source?: string;
35754
+ p_incoming_stock?: number;
35755
+ p_minimum_stock?: number;
35756
+ p_notes?: string;
35757
+ p_physical_stock: number;
35758
+ p_product_id: string;
35759
+ };
35760
+ Returns: {
35761
+ connection_id: string;
35762
+ incoming_stock: number;
35763
+ minimum_stock: number;
35764
+ notes: string;
35765
+ physical_stock: number;
35766
+ product_id: string;
35767
+ reserved_stock: number;
35768
+ trade_item_key: string;
35769
+ updated_at: string;
35770
+ }[];
35546
35771
  };
35547
35772
  show_limit: {
35548
35773
  Args: never;