@flowselections/logistiek-engine 1.0.175 → 1.0.180

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 (48) hide show
  1. package/db/schema/logistiek-engine.sql +2112 -0
  2. package/dist-lib/components/BeheerPage.d.ts.map +1 -1
  3. package/dist-lib/components/BeheerPage.js +2 -1
  4. package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
  5. package/dist-lib/components/BeladingIndelingCard.js +2 -0
  6. package/dist-lib/components/DocumentkeuzeCard.d.ts +2 -0
  7. package/dist-lib/components/DocumentkeuzeCard.d.ts.map +1 -0
  8. package/dist-lib/components/DocumentkeuzeCard.js +18 -0
  9. package/dist-lib/index.d.ts +1 -0
  10. package/dist-lib/index.d.ts.map +1 -1
  11. package/dist-lib/index.js +1 -0
  12. package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +11 -5
  13. package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
  14. package/dist-lib/integrations/supabase/previewAuthStorage.js +38 -21
  15. package/dist-lib/integrations/supabase/types.d.ts +376 -15
  16. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  17. package/dist-lib/lib/beladingRegels.d.ts +78 -0
  18. package/dist-lib/lib/beladingRegels.d.ts.map +1 -0
  19. package/dist-lib/lib/beladingRegels.js +143 -0
  20. package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +2 -2
  21. package/dist-lib/lib/controlScan.server.js +1 -1
  22. package/dist-lib/lib/eigenTraysticker.d.ts +17 -0
  23. package/dist-lib/lib/eigenTraysticker.d.ts.map +1 -0
  24. package/dist-lib/lib/eigenTraysticker.js +32 -0
  25. package/dist-lib/lib/layoutPrint.server.d.ts +10 -1
  26. package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
  27. package/dist-lib/lib/layoutPrint.server.js +19 -1
  28. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +35 -3
  29. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
  30. package/dist-lib/lib/loadCarrierPlanning.server.js +251 -89
  31. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  32. package/dist-lib/lib/modulePrompts.js +233 -0
  33. package/dist-lib/lib/moduleVersion.d.ts +1 -1
  34. package/dist-lib/lib/moduleVersion.js +1 -1
  35. package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
  36. package/dist-lib/lib/planQueue.server.js +26 -2
  37. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  38. package/dist-lib/lib/ruleEngineSchema.js +4 -38
  39. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
  40. package/dist-lib/lib/ruleEngineWizard.js +0 -2
  41. package/dist-lib/lib/shippingNoteQueue.server.js +1 -1
  42. package/dist-lib/lib/stickerQueue.server.d.ts +25 -0
  43. package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
  44. package/dist-lib/lib/stickerQueue.server.js +150 -22
  45. package/dist-lib/lib/stickerRules.d.ts +17 -0
  46. package/dist-lib/lib/stickerRules.d.ts.map +1 -1
  47. package/dist-lib/lib/stickerRules.js +30 -0
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AA0JA,wBAAgB,UAAU,gCAezB"}
1
+ {"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AA2JA,wBAAgB,UAAU,gCAgBzB"}
@@ -17,6 +17,7 @@ import { OpruimlijstKarrenCard } from "./OpruimlijstKarrenCard.js";
17
17
  import { HerindelingMeldingCard } from "./HerindelingMeldingCard.js";
18
18
  import { GeblokkeerdeStickersCard } from "./GeblokkeerdeStickersCard.js";
19
19
  import { BeladingVerstuurderCard } from "./BeladingVerstuurderCard.js";
20
+ import { DocumentkeuzeCard } from "./DocumentkeuzeCard.js";
20
21
  import { MinuutrondeStartMelding } from "./MinuutrondeStartMelding.js";
21
22
  import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
22
23
  function HerindelenBeheer() {
@@ -76,5 +77,5 @@ function HerindelenBeheer() {
76
77
  : `${voor?.geprintOfGepickt ?? 0} order(s) die al geprint of gepickt zijn, blijven ongemoeid.` })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsxs(AlertDialogAction, { onClick: () => void voerUit(), disabled: (voor?.aantal ?? 0) === 0, children: ["Ja, ", voor?.aantal ?? 0, " order(s) opnieuw indelen"] })] })] }) })] }));
77
78
  }
78
79
  export function BeheerPage() {
79
- return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(HerindelenBeheer, {}), _jsx(HerindelingMeldingCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
80
+ return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(HerindelenBeheer, {}), _jsx(HerindelingMeldingCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(DocumentkeuzeCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
80
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BeladingIndelingCard.d.ts","sourceRoot":"","sources":["../../src/components/BeladingIndelingCard.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,oBAAoB,gCAmJnC"}
1
+ {"version":3,"file":"BeladingIndelingCard.d.ts","sourceRoot":"","sources":["../../src/components/BeladingIndelingCard.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,oBAAoB,gCAoJnC"}
@@ -48,6 +48,8 @@ export function BeladingIndelingCard() {
48
48
  setWarnings(Array.isArray(result?.warnings) ? result.warnings : []);
49
49
  if (result?.skipped === "locked")
50
50
  toast.info("Deze buffer is vergrendeld en wordt niet herplaatst.");
51
+ if (result?.skipped === "busy")
52
+ toast.info("Deze buffer wordt op dit moment al ingedeeld; probeer het zo opnieuw.");
51
53
  else
52
54
  toast.success(`${list.length} ladingdragers berekend`);
53
55
  }
@@ -0,0 +1,2 @@
1
+ export declare function DocumentkeuzeCard(): import("react").JSX.Element;
2
+ //# sourceMappingURL=DocumentkeuzeCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentkeuzeCard.d.ts","sourceRoot":"","sources":["../../src/components/DocumentkeuzeCard.tsx"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,gCAsBhC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Alleen-lezen: hoe de Engine het document per order kiest (1.0.176). GEEN <Header />.
3
+ import { useEffect, useState } from "react";
4
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@flowselections/core";
5
+ import { supabase } from "../integrations/supabase/moduleClient.js";
6
+ export function DocumentkeuzeCard() {
7
+ const [melding, setMelding] = useState(null);
8
+ const [bijgewerkt, setBijgewerkt] = useState(null);
9
+ useEffect(() => {
10
+ void (async () => {
11
+ const { data, error } = await supabase.rpc("logistics_document_selection_status");
12
+ const d = (!error && data && typeof data === "object" ? data : null);
13
+ setBijgewerkt(d ? d["layouts_bijgewerkt"] === true : null);
14
+ setMelding(d && typeof d["melding"] === "string" ? d["melding"] : "Stand onbekend.");
15
+ })();
16
+ }, []);
17
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Documentkeuze" }), _jsx(CardDescription, { children: "Het document wordt automatisch bepaald uit de order." })] }), _jsx(CardContent, { children: _jsx("p", { className: bijgewerkt === false ? "text-sm text-destructive" : "text-sm", children: melding ?? "Even laden…" }) })] }));
18
+ }
@@ -77,4 +77,5 @@ export * from './hooks/useAfrondWachtrij.js';
77
77
  export * from './lib/shellAdres.js';
78
78
  export * from './hooks/useShellAdres.js';
79
79
  export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
80
+ export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
80
81
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist-lib/index.js CHANGED
@@ -91,3 +91,4 @@ export * from './hooks/useAfrondWachtrij.js';
91
91
  export * from './lib/shellAdres.js';
92
92
  export * from './hooks/useShellAdres.js';
93
93
  export { BeladingVerstuurderCard } from "./components/BeladingVerstuurderCard.js";
94
+ export { DocumentkeuzeCard } from "./components/DocumentkeuzeCard.js";
@@ -1,6 +1,12 @@
1
- export declare function brokeredPreviewStorage(): Storage | {
2
- getItem: (key: string) => Promise<string | null>;
3
- setItem: (key: string, value: string) => Promise<void>;
4
- removeItem: (key: string) => Promise<undefined>;
5
- } | undefined;
1
+ /** Storage accepted by Supabase's `auth.storage` option; `localStorage` and the editor broker both satisfy it. */
2
+ export interface PreviewAuthStorage {
3
+ getItem: (key: string) => string | null | Promise<string | null>;
4
+ setItem: (key: string, value: string) => void | Promise<void>;
5
+ removeItem: (key: string) => void | Promise<void>;
6
+ }
7
+ /**
8
+ * On a Lovable preview surface, broker the auth session to the editor over
9
+ * postMessage so the project's preview surfaces share one login; else localStorage.
10
+ */
11
+ export declare function brokeredPreviewStorage(): PreviewAuthStorage | undefined;
6
12
  //# sourceMappingURL=previewAuthStorage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"previewAuthStorage.d.ts","sourceRoot":"","sources":["../../../src/integrations/supabase/previewAuthStorage.ts"],"names":[],"mappings":"AAIA,wBAAgB,sBAAsB;mBA6Db,MAAM;mBAwBZ,MAAM,SAAS,MAAM;sBASlB,MAAM;cAM3B"}
1
+ {"version":3,"file":"previewAuthStorage.d.ts","sourceRoot":"","sources":["../../../src/integrations/supabase/previewAuthStorage.ts"],"names":[],"mappings":"AAEA,kHAAkH;AAClH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AA6BD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,GAAG,SAAS,CAsGvE"}
@@ -1,6 +1,21 @@
1
1
  // This file is automatically generated. Do not edit it directly.
2
- // On a Lovable preview surface, broker the auth session to the editor over
3
- // postMessage so the project's preview surfaces share one login; else localStorage.
2
+ const RESULT = 'lovable-preview-auth:result';
3
+ function readBrokerReply(data, requestId) {
4
+ if (typeof data !== 'object' || data === null)
5
+ return null;
6
+ if (!('type' in data) || data.type !== RESULT)
7
+ return null;
8
+ if (!('requestId' in data) || data.requestId !== requestId)
9
+ return null;
10
+ return {
11
+ ok: 'ok' in data && Boolean(data.ok),
12
+ value: 'value' in data && typeof data.value === 'string' ? data.value : null,
13
+ };
14
+ }
15
+ /**
16
+ * On a Lovable preview surface, broker the auth session to the editor over
17
+ * postMessage so the project's preview surfaces share one login; else localStorage.
18
+ */
4
19
  export function brokeredPreviewStorage() {
5
20
  if (typeof window === 'undefined')
6
21
  return undefined;
@@ -11,10 +26,13 @@ export function brokeredPreviewStorage() {
11
26
  // preview--<name> host can't smuggle another project's id.
12
27
  const UUID = '[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}';
13
28
  const projectId = onPreviewZone
14
- ? (host.match(new RegExp('^(?:id-preview(?:-[a-z0-9]+)?|project)--(' + UUID + ')(?:-dev)?(?=\\.|$)', 'i'))?.[1]
15
- ?? host.match(new RegExp('^(' + UUID + ')(?=[.-])', 'i'))?.[1])
29
+ ? (new RegExp('^(?:id-preview(?:-[a-z0-9]+)?|project)--(' + UUID + ')(?:-dev)?(?=\\.|$)', 'i').exec(host)?.[1]
30
+ ?? new RegExp('^(' + UUID + ')(?=[.-])', 'i').exec(host)?.[1])
16
31
  : undefined;
17
- const framed = window.parent && window.parent !== window;
32
+ // lib.dom types window.parent and location.ancestorOrigins as always set, but a
33
+ // detached frame has no parent and not every browser implements ancestorOrigins.
34
+ const parentWindow = window.parent;
35
+ const framed = parentWindow !== null && parentWindow !== window;
18
36
  if (!projectId || !framed)
19
37
  return localStorage;
20
38
  // Post only to the real editor ancestor, validated as a Lovable origin, so the
@@ -23,40 +41,39 @@ export function brokeredPreviewStorage() {
23
41
  const EDITOR = dev
24
42
  ? /^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$|^http:\/\/localhost:3000$/
25
43
  : /^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$/;
26
- const ancestor = (location.ancestorOrigins && location.ancestorOrigins[0]) || (document.referrer ? new URL(document.referrer).origin : '');
44
+ const ancestorOrigins = location.ancestorOrigins;
45
+ const ancestor = ancestorOrigins?.[0] ?? (document.referrer ? new URL(document.referrer).origin : '');
27
46
  const editorOrigins = ancestor && EDITOR.test(ancestor)
28
47
  ? [ancestor]
29
48
  : (dev ? ['https://lovable.dev', 'http://localhost:3000'] : ['https://lovable.dev']);
30
- const RESULT = 'lovable-preview-auth:result';
31
49
  const TIMEOUT = 2000;
32
50
  const newId = () => Math.random().toString(36).slice(2) + Date.now().toString(36);
33
51
  const request = (type, key, value) => new Promise((resolve) => {
34
52
  const requestId = newId();
35
53
  let done = false;
36
- let timer;
37
- const finish = (r) => {
54
+ const finish = (reply) => {
38
55
  if (done)
39
56
  return;
40
57
  done = true;
41
58
  clearTimeout(timer);
42
59
  window.removeEventListener('message', onMessage);
43
- resolve(r);
60
+ resolve(reply);
44
61
  };
45
62
  const onMessage = (e) => {
46
- if (editorOrigins.indexOf(e.origin) < 0)
63
+ if (!editorOrigins.includes(e.origin))
47
64
  return;
48
- const d = e.data;
49
- if (d && d.type === RESULT && d.requestId === requestId)
50
- finish(d);
65
+ const reply = readBrokerReply(e.data, requestId);
66
+ if (reply)
67
+ finish(reply);
51
68
  };
52
69
  window.addEventListener('message', onMessage);
70
+ const timer = setTimeout(() => { finish(null); }, TIMEOUT);
53
71
  const msg = { type, requestId, projectId, key };
54
72
  if (value !== undefined)
55
- msg['value'] = value;
73
+ msg.value = value;
56
74
  // targetOrigin per trusted editor origin, so a session token never reaches an arbitrary embedder.
57
75
  for (const origin of editorOrigins)
58
76
  window.parent.postMessage(msg, origin);
59
- timer = setTimeout(() => finish(null), TIMEOUT);
60
77
  });
61
78
  // The editor may not be listening yet at the first getItem, so retry once.
62
79
  let firstGet = true;
@@ -74,13 +91,13 @@ export function brokeredPreviewStorage() {
74
91
  const local = readLocal(key);
75
92
  let res = await request('lovable-preview-auth:get', key, local ?? undefined);
76
93
  if (!res && firstGet) {
77
- await new Promise((r) => setTimeout(r, RETRY_DELAY));
94
+ await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY));
78
95
  res = await request('lovable-preview-auth:get', key, local ?? undefined);
79
96
  }
80
97
  firstGet = false;
81
98
  // '' is the logout tombstone: clear the local copy too so it can't resurrect if
82
- // the broker later goes silent. A null reply means never-synced -> keep local.
83
- if (res && res.ok && typeof res.value === 'string') {
99
+ // the broker later goes silent. A null value means never-synced -> keep local.
100
+ if (res?.ok && res.value !== null) {
84
101
  if (res.value === '') {
85
102
  if (local !== undefined && readLocal(key) === local)
86
103
  localStorage.removeItem(key);
@@ -100,7 +117,7 @@ export function brokeredPreviewStorage() {
100
117
  setItem: (key, value) => {
101
118
  localStorage.setItem(key, value);
102
119
  return request('lovable-preview-auth:set', key, value).then((res) => {
103
- if (res && res.ok && typeof res.value === 'string' && localStorage.getItem(key) === value) {
120
+ if (res?.ok && res.value !== null && localStorage.getItem(key) === value) {
104
121
  if (res.value === '')
105
122
  localStorage.removeItem(key);
106
123
  else
@@ -111,7 +128,7 @@ export function brokeredPreviewStorage() {
111
128
  removeItem: (key) => {
112
129
  const local = readLocal(key);
113
130
  localStorage.removeItem(key);
114
- return request('lovable-preview-auth:remove', key, local ?? undefined).then(() => undefined);
131
+ return request('lovable-preview-auth:remove', key, local ?? undefined).then(() => { });
115
132
  },
116
133
  };
117
134
  }