@flowselections/pick-schermen-kwekers 1.0.41 → 1.0.46
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/PickstationsPage.js +1 -1
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +194 -37
- package/dist-lib/components/pick/QueueTable.d.ts +10 -1
- package/dist-lib/components/pick/QueueTable.d.ts.map +1 -1
- package/dist-lib/components/pick/QueueTable.js +57 -16
- package/dist-lib/components/pick/ReferentiedataBanner.js +1 -1
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +22 -4
- package/dist-lib/integrations/supabase/types.d.ts +725 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pick142.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pick142.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pick142.test.js +80 -0
- package/dist-lib/lib/__tests__/pick143.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pick143.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pick143.test.js +61 -0
- package/dist-lib/lib/__tests__/pick144.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pick144.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pick144.test.js +23 -0
- package/dist-lib/lib/__tests__/pick145.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pick145.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pick145.test.js +35 -0
- package/dist-lib/lib/pick142.d.ts +58 -0
- package/dist-lib/lib/pick142.d.ts.map +1 -0
- package/dist-lib/lib/pick142.js +235 -0
- package/dist-lib/lib/pick143.d.ts +31 -0
- package/dist-lib/lib/pick143.d.ts.map +1 -0
- package/dist-lib/lib/pick143.js +93 -0
- package/dist-lib/lib/pick144.d.ts +17 -0
- package/dist-lib/lib/pick144.d.ts.map +1 -0
- package/dist-lib/lib/pick144.js +53 -0
- package/dist-lib/lib/pick145.d.ts +23 -0
- package/dist-lib/lib/pick145.d.ts.map +1 -0
- package/dist-lib/lib/pick145.js +88 -0
- package/dist-lib/lib/pickApi.d.ts +17 -0
- package/dist-lib/lib/pickApi.d.ts.map +1 -1
- package/dist-lib/lib/pickApi.js +37 -6
- package/dist-lib/lib/pickCartResults.d.ts +1 -1
- package/dist-lib/lib/pickCartResults.d.ts.map +1 -1
- package/dist-lib/lib/pickCartResults.js +2 -2
- package/dist-lib/lib/pickI18n.js +6 -6
- package/dist-lib/lib/pickPrintJobText.js +2 -2
- package/dist-lib/lib/pickRowState.d.ts +1 -1
- package/dist-lib/lib/pickRowState.d.ts.map +1 -1
- package/dist-lib/lib/pickRowState.js +6 -2
- package/dist-lib/lib/pickTypes.d.ts +31 -1
- package/dist-lib/lib/pickTypes.d.ts.map +1 -1
- package/dist-lib/lib/pickTypes.js +42 -8
- package/dist-lib/lib/pickUiText.d.ts.map +1 -1
- package/dist-lib/lib/pickUiText.js +10 -0
- package/dist-lib/lib/shippingNoteStatus.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Pickschermen 1.0.43: wachtende deelkar (printbaar/wachtTot op regel- en
|
|
2
|
+
// karplanniveau), afgesloten regels, vaste foutcodes van de printfuncties en
|
|
3
|
+
// geprinte, nog niet gescande karren van eerdere pickdagen.
|
|
4
|
+
import { formatSiteTime } from "./pick142";
|
|
5
|
+
function recordOf(value) {
|
|
6
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
7
|
+
? value
|
|
8
|
+
: null;
|
|
9
|
+
}
|
|
10
|
+
function textOf(value) {
|
|
11
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
12
|
+
}
|
|
13
|
+
/** Leest printbaar/wachtTot/wachtReden uit een payload of de karplanroot. */
|
|
14
|
+
export function rowWaitOf(source) {
|
|
15
|
+
const r = recordOf(source) ?? {};
|
|
16
|
+
const raw = r["printbaar"];
|
|
17
|
+
const until = textOf(r["wachtTot"] ?? r["wacht_tot"]);
|
|
18
|
+
return {
|
|
19
|
+
printable: !(raw === false || raw === "false"),
|
|
20
|
+
until: until && !Number.isNaN(new Date(until).getTime()) ? until : null,
|
|
21
|
+
reason: textOf(r["wachtReden"] ?? r["wacht_reden"]),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Afgesloten regel (gescand/afgemeld of vervallen). */
|
|
25
|
+
export function isRowClosed(item) {
|
|
26
|
+
return !!item.cancelled_at || !!item.completed_at;
|
|
27
|
+
}
|
|
28
|
+
/** Mag deze regel geclaimd/geprint worden? Nooit bij printbaar = false of afgesloten. */
|
|
29
|
+
export function isRowPrintable(item) {
|
|
30
|
+
if (isRowClosed(item))
|
|
31
|
+
return false;
|
|
32
|
+
return rowWaitOf(item.payload).printable;
|
|
33
|
+
}
|
|
34
|
+
export const WAIT_ROW_GENERIC = "Deelkar wacht op mogelijke aanvulling";
|
|
35
|
+
/** Grijze regeltekst voor een wachtende deelkar. */
|
|
36
|
+
export function rowWaitMessage(wait, timeZone) {
|
|
37
|
+
return wait.until
|
|
38
|
+
? `Deelkar wacht tot ${formatSiteTime(wait.until, timeZone)} op mogelijke aanvulling`
|
|
39
|
+
: WAIT_ROW_GENERIC;
|
|
40
|
+
}
|
|
41
|
+
/** Melding als een printactie lokaal al geweigerd wordt; null = mag. */
|
|
42
|
+
export function printBlockMessage(item, timeZone) {
|
|
43
|
+
if (item.completed_at)
|
|
44
|
+
return CLOSED_ROW_MESSAGE;
|
|
45
|
+
const wait = rowWaitOf(item.payload);
|
|
46
|
+
if (!wait.printable)
|
|
47
|
+
return waitRefusalMessage(wait.until, timeZone);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/* ---------- Vaste foutcodes van de databasefuncties ---------- */
|
|
51
|
+
export const CLOSED_ROW_MESSAGE = "Deze kar is al gescand en afgemeld.";
|
|
52
|
+
export function waitRefusalMessage(until, timeZone) {
|
|
53
|
+
return until
|
|
54
|
+
? `Deze kar wacht nog tot ${formatSiteTime(until, timeZone)} op mogelijke aanvulling en kan nog niet geprint worden.`
|
|
55
|
+
: "Deze kar wacht nog op mogelijke aanvulling en kan nog niet geprint worden.";
|
|
56
|
+
}
|
|
57
|
+
let knownZone = null;
|
|
58
|
+
/** Door het scherm gezet zodra de tijdzone van de vestiging bekend is. */
|
|
59
|
+
export function setKnownSiteZone(tz) {
|
|
60
|
+
knownZone = tz;
|
|
61
|
+
}
|
|
62
|
+
/** PICK_DEELKAR_WACHT / PICK_REGEL_AFGESLOTEN → gewone zin; anders null. */
|
|
63
|
+
export function pickRefusalText(raw, timeZone = knownZone) {
|
|
64
|
+
if (!raw)
|
|
65
|
+
return null;
|
|
66
|
+
if (raw.includes("PICK_REGEL_AFGESLOTEN"))
|
|
67
|
+
return CLOSED_ROW_MESSAGE;
|
|
68
|
+
const m = /PICK_DEELKAR_WACHT:\s*(\S+)/.exec(raw);
|
|
69
|
+
if (m || raw.includes("PICK_DEELKAR_WACHT")) {
|
|
70
|
+
const iso = m && m[1] !== "-" && !Number.isNaN(new Date(m[1]).getTime()) ? m[1] : null;
|
|
71
|
+
return waitRefusalMessage(iso, timeZone);
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/* ---------- pickMode is nu een object ---------- */
|
|
76
|
+
export function pickModeValue(raw) {
|
|
77
|
+
if (typeof raw === "string")
|
|
78
|
+
return raw.trim() ? raw : null;
|
|
79
|
+
const r = recordOf(raw);
|
|
80
|
+
return r ? textOf(r["pickMode"] ?? r["pick_mode"]) : null;
|
|
81
|
+
}
|
|
82
|
+
/* ---------- Eerdere pickdagen ---------- */
|
|
83
|
+
/** "ma 19 okt" voor een pickdag (YYYY-MM-DD). */
|
|
84
|
+
export function pickDayShortLabel(iso) {
|
|
85
|
+
if (!iso || !/^\d{4}-\d{2}-\d{2}$/.test(iso))
|
|
86
|
+
return "onbekende dag";
|
|
87
|
+
const d = new Date(`${iso}T12:00:00Z`);
|
|
88
|
+
const s = d.toLocaleDateString("nl-NL", { weekday: "short", day: "numeric", month: "short", timeZone: "UTC" });
|
|
89
|
+
return s.replace(/\./g, "");
|
|
90
|
+
}
|
|
91
|
+
export function pickDayOf(item) {
|
|
92
|
+
return textOf(recordOf(item.payload)?.["pickDate"]);
|
|
93
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PickQueueItem } from "./pickTypes";
|
|
2
|
+
export interface PlanStatusExtra {
|
|
3
|
+
reasonCode: string | null;
|
|
4
|
+
pickStartsAt: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function planStatusExtraOf(row: unknown): PlanStatusExtra;
|
|
7
|
+
/** Pickvenster nog niet begonnen? Code eerst, bestaande tekst als terugval. */
|
|
8
|
+
export declare function isPickWindowNotStarted(status: {
|
|
9
|
+
reason?: string | null;
|
|
10
|
+
reasonCode?: string | null;
|
|
11
|
+
} | null | undefined): boolean;
|
|
12
|
+
export declare function notStartedMessage(pickStartsAt: string | null, timeZone: string | null): string;
|
|
13
|
+
/** Fust van deze kar; zonder cartCrates alleen bij een losse order met één kar. */
|
|
14
|
+
export declare function cartCratesOf(item: PickQueueItem): number | null;
|
|
15
|
+
export declare function departureOf(item: PickQueueItem): string | null;
|
|
16
|
+
export declare const MARK_PRINTED_CONFIRM = "Is deze pakbon echt geprint? Hij wordt dan niet meer automatisch geprint.";
|
|
17
|
+
//# sourceMappingURL=pick144.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick144.d.ts","sourceRoot":"","sources":["../../src/lib/pick144.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAM/D;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIjI;AASD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9F;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAS/D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED,eAAO,MAAM,oBAAoB,8EAC4C,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Pickschermen 1.0.44: reden bij niet vrijgegeven, fust en vertrek per kar
|
|
2
|
+
// (Engine 1.0.153: pickStartsAt, reasonCode, cartCrates, departureAt).
|
|
3
|
+
import { formatSiteTime } from "./pick142";
|
|
4
|
+
import { pickDayShortLabel } from "./pick143";
|
|
5
|
+
function recordOf(v) {
|
|
6
|
+
return v && typeof v === "object" && !Array.isArray(v) ? v : null;
|
|
7
|
+
}
|
|
8
|
+
function isoOf(v) {
|
|
9
|
+
return typeof v === "string" && v.trim() && !Number.isNaN(new Date(v).getTime()) ? v : null;
|
|
10
|
+
}
|
|
11
|
+
export function planStatusExtraOf(row) {
|
|
12
|
+
const r = recordOf(row) ?? {};
|
|
13
|
+
return {
|
|
14
|
+
reasonCode: typeof r["reasonCode"] === "string" ? r["reasonCode"] : null,
|
|
15
|
+
pickStartsAt: isoOf(r["pickStartsAt"]),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Pickvenster nog niet begonnen? Code eerst, bestaande tekst als terugval. */
|
|
19
|
+
export function isPickWindowNotStarted(status) {
|
|
20
|
+
if (!status)
|
|
21
|
+
return false;
|
|
22
|
+
if (status.reasonCode)
|
|
23
|
+
return status.reasonCode === "pick_window_not_started";
|
|
24
|
+
return /pickvenster.*nog niet begonnen/i.test(status.reason ?? "");
|
|
25
|
+
}
|
|
26
|
+
function siteDayIso(iso, timeZone) {
|
|
27
|
+
const parts = new Intl.DateTimeFormat("en-CA", {
|
|
28
|
+
timeZone: timeZone ?? "UTC", year: "numeric", month: "2-digit", day: "2-digit",
|
|
29
|
+
}).format(new Date(iso));
|
|
30
|
+
return parts;
|
|
31
|
+
}
|
|
32
|
+
export function notStartedMessage(pickStartsAt, timeZone) {
|
|
33
|
+
if (!pickStartsAt)
|
|
34
|
+
return "Nog niet vrijgegeven: het picken is nog niet begonnen.";
|
|
35
|
+
return `Nog niet vrijgegeven: het picken begint ${pickDayShortLabel(siteDayIso(pickStartsAt, timeZone))} om ${formatSiteTime(pickStartsAt, timeZone)}`;
|
|
36
|
+
}
|
|
37
|
+
/** Fust van deze kar; zonder cartCrates alleen bij een losse order met één kar. */
|
|
38
|
+
export function cartCratesOf(item) {
|
|
39
|
+
const p = recordOf(item.payload) ?? {};
|
|
40
|
+
const own = Number(p["cartCrates"]);
|
|
41
|
+
if (p["cartCrates"] != null && Number.isFinite(own) && own > 0)
|
|
42
|
+
return own;
|
|
43
|
+
const total = Number(p["cartTotal"] ?? p["totalCarts"] ?? 1);
|
|
44
|
+
const isBuffer = !!p["bufferId"] || (Array.isArray(p["orderIds"]) && p["orderIds"].length > 1);
|
|
45
|
+
if (isBuffer || (Number.isFinite(total) && total > 1))
|
|
46
|
+
return null;
|
|
47
|
+
const crates = Number(p["crates"]);
|
|
48
|
+
return Number.isFinite(crates) && crates > 0 ? crates : null;
|
|
49
|
+
}
|
|
50
|
+
export function departureOf(item) {
|
|
51
|
+
return isoOf(recordOf(item.payload)?.["departureAt"]);
|
|
52
|
+
}
|
|
53
|
+
export const MARK_PRINTED_CONFIRM = "Is deze pakbon echt geprint? Hij wordt dan niet meer automatisch geprint.";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PickQueueItem } from "./pickTypes";
|
|
2
|
+
/** Kalenderdag (YYYY-MM-DD) in de tijdzone van de vestiging; zonder zone null. */
|
|
3
|
+
export declare function siteDayOf(iso: string, timeZone: string | null): string | null;
|
|
4
|
+
/** "21 fust van 50" of "21 fust"; null als er geen eigen kargetal is. */
|
|
5
|
+
export declare function crateLabelOf(item: PickQueueItem): string | null;
|
|
6
|
+
/** "Vertrek ma 19 okt 06:00", of zonder dag als die gelijk is aan de pickdag. */
|
|
7
|
+
export declare function departureLabel(iso: string | null, pickDay: string | null, timeZone: string | null): string | null;
|
|
8
|
+
export interface ReleaseInfo {
|
|
9
|
+
releaseAt: string | null;
|
|
10
|
+
releaseReason: string | null;
|
|
11
|
+
}
|
|
12
|
+
/** Vrijgavemoment: releaseAt (karplan) → pickStartsAt (kar/payload) → pickStartsAt (status). */
|
|
13
|
+
export declare function releaseInfoOf(rawPlan: unknown, cartId: string | null, item: PickQueueItem | null, status: {
|
|
14
|
+
pickStartsAt?: string | null;
|
|
15
|
+
} | null | undefined): ReleaseInfo;
|
|
16
|
+
export declare function releaseMessage(info: ReleaseInfo, timeZone: string | null): string;
|
|
17
|
+
/** Regel bewust vooruit gemaakt voor deze dag? */
|
|
18
|
+
export declare function isForcedFor(item: PickQueueItem, day: string | null): boolean;
|
|
19
|
+
/** lateSignup van de eigen kar (match op cartId), anders van de payload. */
|
|
20
|
+
export declare function lateSignupOf(item: PickQueueItem, rawPlan?: unknown): boolean;
|
|
21
|
+
/** Fouttekst van pick_sync_pick_day (bijv. niet-werkdag), of null. */
|
|
22
|
+
export declare function syncPickDayError(data: unknown): string | null;
|
|
23
|
+
//# sourceMappingURL=pick145.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick145.d.ts","sourceRoot":"","sources":["../../src/lib/pick145.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiBjD,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAO7E;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMjH;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,aAAa,GAAG,IAAI,EAC1B,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC1D,WAAW,CAcb;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIjF;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAG5E;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAO5E;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE7D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Pickschermen 1.0.45 (Engine 1.0.153, koppelprompt 47): fust "van x",
|
|
2
|
+
// vrijgavemoment, vertrekdag, vooruit printen en "Te laat aangemeld".
|
|
3
|
+
// Alles komt uit de Engine; ontbrekende waarde = niets tonen.
|
|
4
|
+
import { formatSiteTime } from "./pick142";
|
|
5
|
+
import { pickDayShortLabel } from "./pick143";
|
|
6
|
+
import { cartCratesOf } from "./pick144";
|
|
7
|
+
function recordOf(v) {
|
|
8
|
+
return v && typeof v === "object" && !Array.isArray(v) ? v : null;
|
|
9
|
+
}
|
|
10
|
+
function isoOf(v) {
|
|
11
|
+
return typeof v === "string" && v.trim() && !Number.isNaN(new Date(v).getTime()) ? v : null;
|
|
12
|
+
}
|
|
13
|
+
function textOf(v) {
|
|
14
|
+
return typeof v === "string" && v.trim() ? v : null;
|
|
15
|
+
}
|
|
16
|
+
function posNumber(v) {
|
|
17
|
+
if (v === null || v === undefined || v === "")
|
|
18
|
+
return null;
|
|
19
|
+
const n = Number(v);
|
|
20
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
21
|
+
}
|
|
22
|
+
/** Kalenderdag (YYYY-MM-DD) in de tijdzone van de vestiging; zonder zone null. */
|
|
23
|
+
export function siteDayOf(iso, timeZone) {
|
|
24
|
+
if (!timeZone)
|
|
25
|
+
return null;
|
|
26
|
+
try {
|
|
27
|
+
return new Intl.DateTimeFormat("en-CA", { timeZone, year: "numeric", month: "2-digit", day: "2-digit" }).format(new Date(iso));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** "21 fust van 50" of "21 fust"; null als er geen eigen kargetal is. */
|
|
34
|
+
export function crateLabelOf(item) {
|
|
35
|
+
const own = cartCratesOf(item);
|
|
36
|
+
if (own === null)
|
|
37
|
+
return null;
|
|
38
|
+
const total = posNumber(recordOf(item.payload)?.["bufferCrates"]);
|
|
39
|
+
return total !== null && total > own ? `${own} fust van ${total}` : `${own} fust`;
|
|
40
|
+
}
|
|
41
|
+
/** "Vertrek ma 19 okt 06:00", of zonder dag als die gelijk is aan de pickdag. */
|
|
42
|
+
export function departureLabel(iso, pickDay, timeZone) {
|
|
43
|
+
if (!isoOf(iso))
|
|
44
|
+
return null;
|
|
45
|
+
const day = siteDayOf(iso, timeZone);
|
|
46
|
+
const time = formatSiteTime(iso, timeZone);
|
|
47
|
+
if (!day || day === pickDay)
|
|
48
|
+
return `Vertrek ${time}`;
|
|
49
|
+
return `Vertrek ${pickDayShortLabel(day)} ${time}`;
|
|
50
|
+
}
|
|
51
|
+
/** Vrijgavemoment: releaseAt (karplan) → pickStartsAt (kar/payload) → pickStartsAt (status). */
|
|
52
|
+
export function releaseInfoOf(rawPlan, cartId, item, status) {
|
|
53
|
+
const root = recordOf(rawPlan);
|
|
54
|
+
const carts = Array.isArray(root?.["carts"]) ? root["carts"] : [];
|
|
55
|
+
const cart = recordOf(carts.find((c) => cartId && recordOf(c)?.["cartId"] === cartId) ?? (carts.length === 1 ? carts[0] : null));
|
|
56
|
+
const payload = recordOf(item?.payload);
|
|
57
|
+
return {
|
|
58
|
+
releaseAt: isoOf(cart?.["releaseAt"]) ?? isoOf(root?.["releaseAt"])
|
|
59
|
+
?? isoOf(cart?.["pickStartsAt"]) ?? isoOf(root?.["pickStartsAt"])
|
|
60
|
+
?? isoOf(payload?.["pickStartsAt"]) ?? isoOf(status?.pickStartsAt) ?? null,
|
|
61
|
+
releaseReason: textOf(cart?.["releaseReason"]) ?? textOf(root?.["releaseReason"]),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function releaseMessage(info, timeZone) {
|
|
65
|
+
if (!info.releaseAt)
|
|
66
|
+
return info.releaseReason ?? "Nog niet vrijgegeven.";
|
|
67
|
+
const day = siteDayOf(info.releaseAt, timeZone);
|
|
68
|
+
return `Wordt vrijgegeven ${day ? pickDayShortLabel(day) + " " : ""}om ${formatSiteTime(info.releaseAt, timeZone)}`;
|
|
69
|
+
}
|
|
70
|
+
/** Regel bewust vooruit gemaakt voor deze dag? */
|
|
71
|
+
export function isForcedFor(item, day) {
|
|
72
|
+
const forced = textOf(recordOf(item.payload)?.["forcedPickDay"]);
|
|
73
|
+
return !!forced && !!day && forced.slice(0, 10) === day;
|
|
74
|
+
}
|
|
75
|
+
/** lateSignup van de eigen kar (match op cartId), anders van de payload. */
|
|
76
|
+
export function lateSignupOf(item, rawPlan) {
|
|
77
|
+
const p = recordOf(item.payload) ?? {};
|
|
78
|
+
const cartId = textOf(p["cartId"] ?? p["cart_id"]);
|
|
79
|
+
const carts = Array.isArray(recordOf(rawPlan)?.["carts"]) ? recordOf(rawPlan)["carts"] : [];
|
|
80
|
+
const own = recordOf(carts.find((c) => cartId && recordOf(c)?.["cartId"] === cartId));
|
|
81
|
+
if (own && typeof own["lateSignup"] === "boolean")
|
|
82
|
+
return own["lateSignup"];
|
|
83
|
+
return p["lateSignup"] === true;
|
|
84
|
+
}
|
|
85
|
+
/** Fouttekst van pick_sync_pick_day (bijv. niet-werkdag), of null. */
|
|
86
|
+
export function syncPickDayError(data) {
|
|
87
|
+
return textOf(recordOf(data)?.["error"]);
|
|
88
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { supabase } from "@flowselections/core";
|
|
2
2
|
import type { PickCartPlan, PickCountry, PickDashboardRow, PickDocumentType, PickLock, PickActivePrinter, PickPrintJob, PickPrintPlek, PickStationPrintPlek, PickStationPrintPlekRow, PickPrinter, PickQueueItem, PickScreen, PickSortRule, PickStation, PickStationType, PickStatus, PickTask } from "./pickTypes";
|
|
3
|
+
import { type CartPlanMismatch } from "./pickTypes";
|
|
3
4
|
type PickDbClient = {
|
|
4
5
|
from: (t: string) => any;
|
|
5
6
|
rpc: (fn: string, args?: Record<string, unknown>) => Promise<{
|
|
@@ -17,10 +18,14 @@ export { db as pickDb };
|
|
|
17
18
|
export interface VerifiedRow {
|
|
18
19
|
id: string;
|
|
19
20
|
plan: PickCartPlan | null;
|
|
21
|
+
/** Karren met een totaal dat niet bij het plan past; leeg = in orde. */
|
|
22
|
+
mismatches?: CartPlanMismatch[];
|
|
20
23
|
status: {
|
|
21
24
|
ready: boolean;
|
|
22
25
|
released: boolean;
|
|
23
26
|
reason: string | null;
|
|
27
|
+
reasonCode?: string | null;
|
|
28
|
+
pickStartsAt?: string | null;
|
|
24
29
|
} | null;
|
|
25
30
|
error: string | null;
|
|
26
31
|
}
|
|
@@ -140,6 +145,11 @@ export declare const pickApi: {
|
|
|
140
145
|
}>;
|
|
141
146
|
/** Zoekt één wachtrijregel op barcode, documentnummer of ordernummer (voor de scanner). */
|
|
142
147
|
findByCode(code: string, stationId?: string): Promise<PickQueueItem | null>;
|
|
148
|
+
/** Geprint, nog niet gescand, van een pickdag vóór de gekozen dag (Engine 1.0.152). */
|
|
149
|
+
unscannedEarlier(args: {
|
|
150
|
+
stationId?: string;
|
|
151
|
+
beforeDay: string;
|
|
152
|
+
}): Promise<PickQueueItem[]>;
|
|
143
153
|
claimNext(args: {
|
|
144
154
|
stationId: string | null;
|
|
145
155
|
screenId: string | null;
|
|
@@ -197,6 +207,8 @@ export declare const pickApi: {
|
|
|
197
207
|
ready: boolean;
|
|
198
208
|
released: boolean;
|
|
199
209
|
reason: string | null;
|
|
210
|
+
reasonCode: string | null;
|
|
211
|
+
pickStartsAt: string | null;
|
|
200
212
|
}>;
|
|
201
213
|
/** Alleen lezen: is de order volgens de Engine vrijgegeven om te picken? Onbekend → null. */
|
|
202
214
|
orderReleased(orderRef: string | null | undefined): Promise<boolean | null>;
|
|
@@ -210,6 +222,11 @@ export declare const pickApi: {
|
|
|
210
222
|
ref: string | null;
|
|
211
223
|
}[]): Promise<VerifiedRow[]>;
|
|
212
224
|
queueCartPlan(queueItemId: string): Promise<PickCartPlan | null>;
|
|
225
|
+
/** Karplan plus de karren waarvan de nummers niet kloppen (alleen vaststellen). */
|
|
226
|
+
queueCartPlanChecked(queueItemId: string): Promise<{
|
|
227
|
+
plan: PickCartPlan | null;
|
|
228
|
+
mismatches: CartPlanMismatch[];
|
|
229
|
+
}>;
|
|
213
230
|
/** Zet één kar in de printopdracht en rondt alleen deze kar af. */
|
|
214
231
|
completePrintCart(itemId: string, sessionId: string, cartId: string): Promise<PickQueueItem>;
|
|
215
232
|
/** Zet alle gekozen karren transactioneel en in één netwerkronde in de printwachtrij. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EAEX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAA2C,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK7F,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IACzB,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;CAC5B,CAAC;AAGF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAUjE;AACD,QAAA,MAAM,EAAE,cAAwB,CAAC;AAEjC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,wEAAwE;IACxE,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACtI,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAaD,sEAAsE;AACtE,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,EACjC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC,CAiBxB;AAOD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAarE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAyBD,eAAO,MAAM,OAAO;;;;IAYlB,gEAAgE;;IAOhE,gDAAgD;;IAOhD,mEAAmE;gCACjC,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAM/E,6DAA6D;;IAO7D,yEAAyE;mCACpC,MAAM,eAAe,MAAM,GAAG,IAAI;;;;;wBAoB7C,MAAM;wBAMN,MAAM;kCAKI,MAAM;0BACN,MAAM;qBAAe,MAAM;oBAAc,MAAM,GAAG,IAAI;;sBAIlE,MAAM;;IAW9B,wEAAwE;sBAChD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM9C,6EAA6E;yBAClD,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAQrE,uEAAuE;qBAChD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C;;;;OAIG;IACH,yFAAyF;iBACtE,OAAO,CAAC,IAAI,CAAC;IAWhC,4FAA4F;oBACtE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;;;;;;wBAiB9D;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAmBnE,qDAAqD;kBACjC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;IAyCD,2FAA2F;qBACpE,MAAM,cAAc,MAAM;IAqBjD,uFAAuF;2BAC1D;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;oBAchD;QACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,uDAAuD;QACvD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB;gBAciB;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,gFAAgF;0BACpD,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAMjE;;;;;OAKG;8BAC6B,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjG;;;;;OAKG;yBACwB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOvE;;;;OAIG;gBACe,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI,CAAC;IAiBT;;;OAGG;wBACuB,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAYhK,6FAA6F;4BAC/D,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOjF;;;OAGG;IACH,2DAA2D;qBAC1C;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE;+BAIpB,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAItE,mFAAmF;sCAC3C,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAOvH,mEAAmE;8BACnC,MAAM,aAAa,MAAM,UAAU,MAAM;IAWzE,yFAAyF;+BACxD,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;IAU7E,4EAA4E;0BAChD,MAAM,aAAa,MAAM;IAUrD;;;;OAIG;oBACmB,MAAM,aAAa,MAAM;IAS/C,+DAA+D;wBACrC,MAAM,aAAa,MAAM,UAAU,MAAM;IAUnE,sEAAsE;0BAC1C,MAAM;IAMlC,qEAAqE;4BACvC,MAAM,EAAE;IAOtC,mEAAmE;uBAC1C,MAAM,aAAa,MAAM,WAAU,MAAM,GAAG,IAAI;IAUzE,yFAAyF;0BAC7D,MAAM,aAAa,MAAM,UAAU,MAAM,SAAS,MAAM;IAWpF,2EAA2E;2BAEjE,MAAM,aACH,MAAM,QACX,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhD,kEAAkE;2BACrC,MAAM,aAAa,MAAM;IAStD;;;OAGG;wBACuB,MAAM,aAAa,MAAM,WAAU,MAAM,GAAG,IAAI;wBAYhD,MAAM;uBAKP,MAAM;eAWd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAOlB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;;YAiB/E,MAAM;oBACE,MAAM;mBACP,MAAM,GAAG,IAAI;oBACZ,MAAM;sBACJ,MAAM;;;YAMhB,MAAM;gBACF,MAAM;oBACF,MAAM;iBACT,MAAM,GAAG,IAAI;uBACP,MAAM,GAAG,IAAI;oBAChB,MAAM,GAAG,IAAI;;kBAIT,MAAM,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;kBAMpC,MAAM,MAAM,MAAM;CAIvC,CAAC;AAEF,wBAAgB,YAAY,IAAI,MAAM,CASrC"}
|
package/dist-lib/lib/pickApi.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { planStatusExtraOf } from "./pick144";
|
|
1
2
|
import { supabase } from "@flowselections/core";
|
|
2
|
-
import { parsePickCartPlan } from "./pickTypes";
|
|
3
|
+
import { cartPlanMismatchesOf, parsePickCartPlan } from "./pickTypes";
|
|
3
4
|
import { safeArray } from "./pickTypes";
|
|
4
5
|
import { withRetry } from "./pickRetry";
|
|
5
6
|
const raw = supabase;
|
|
@@ -25,6 +26,7 @@ function parsePlanStatus(data) {
|
|
|
25
26
|
ready: row["ready"] === true,
|
|
26
27
|
released: row["released"] === true,
|
|
27
28
|
reason: typeof row["reason"] === "string" ? row["reason"] : null,
|
|
29
|
+
...planStatusExtraOf(row),
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
/** Eén aanroep per blok van max. 200 regels i.p.v. twee per regel. */
|
|
@@ -39,6 +41,7 @@ export async function verifyRowsWith(client, rows) {
|
|
|
39
41
|
out.push({
|
|
40
42
|
id: String(r["id"]),
|
|
41
43
|
plan: parsePickCartPlan(r["plan"]),
|
|
44
|
+
mismatches: cartPlanMismatchesOf(r["plan"]),
|
|
42
45
|
status: parsePlanStatus(r["status"]),
|
|
43
46
|
error: typeof r["error"] === "string" ? r["error"] : null,
|
|
44
47
|
});
|
|
@@ -68,7 +71,7 @@ export function parseSentElsewhere(raw) {
|
|
|
68
71
|
}
|
|
69
72
|
function parseBatchPrintResult(value) {
|
|
70
73
|
if (!value || typeof value !== "object")
|
|
71
|
-
throw new Error("
|
|
74
|
+
throw new Error("Het printen van meerdere karren is niet gelukt. Probeer het opnieuw.");
|
|
72
75
|
const record = value;
|
|
73
76
|
const item = record["item"];
|
|
74
77
|
const rawJobs = safeArray(record["jobs"]);
|
|
@@ -193,9 +196,14 @@ export const pickApi = {
|
|
|
193
196
|
},
|
|
194
197
|
/** Zet de orders van een gekozen pickdag alvast in het pickstation. */
|
|
195
198
|
async syncPickDay(day) {
|
|
196
|
-
const { error } = await db.rpc("pick_sync_pick_day", { _day: day });
|
|
199
|
+
const { data, error } = await db.rpc("pick_sync_pick_day", { _day: day });
|
|
197
200
|
if (error)
|
|
198
201
|
throw new Error(error.message);
|
|
202
|
+
// Engine 1.0.153: niet-werkdag geeft { error: '…' } als gewoon antwoord.
|
|
203
|
+
const engineError = data && typeof data === "object" && !Array.isArray(data)
|
|
204
|
+
? data["error"] : null;
|
|
205
|
+
if (typeof engineError === "string" && engineError.trim())
|
|
206
|
+
throw new Error(engineError);
|
|
199
207
|
},
|
|
200
208
|
/**
|
|
201
209
|
* Laat de Logistiek Engine de wachtrij bijwerken naar de actuele pickdag.
|
|
@@ -238,6 +246,7 @@ export const pickApi = {
|
|
|
238
246
|
.select("country_code")
|
|
239
247
|
.is("printed_at", null)
|
|
240
248
|
.is("cancelled_at", null)
|
|
249
|
+
.is("completed_at", null)
|
|
241
250
|
.limit(5000);
|
|
242
251
|
if (args.screenId)
|
|
243
252
|
q = q.eq("screen_id", args.screenId);
|
|
@@ -268,7 +277,7 @@ export const pickApi = {
|
|
|
268
277
|
q = q.eq("is_urgent", true);
|
|
269
278
|
if (params.pickDay)
|
|
270
279
|
q = q.eq("payload->>pickDate", params.pickDay);
|
|
271
|
-
q = q.is("cancelled_at", null);
|
|
280
|
+
q = q.is("cancelled_at", null).is("completed_at", null);
|
|
272
281
|
if (!params.includeDone)
|
|
273
282
|
q = q.is("printed_at", null);
|
|
274
283
|
if (params.search) {
|
|
@@ -317,6 +326,21 @@ export const pickApi = {
|
|
|
317
326
|
const rows = unwrap(await q);
|
|
318
327
|
return rows[0] ?? null;
|
|
319
328
|
},
|
|
329
|
+
/** Geprint, nog niet gescand, van een pickdag vóór de gekozen dag (Engine 1.0.152). */
|
|
330
|
+
async unscannedEarlier(args) {
|
|
331
|
+
let q = db
|
|
332
|
+
.from("pick_queue")
|
|
333
|
+
.select("*")
|
|
334
|
+
.not("printed_at", "is", null)
|
|
335
|
+
.is("cancelled_at", null)
|
|
336
|
+
.is("completed_at", null)
|
|
337
|
+
.lt("payload->>pickDate", args.beforeDay)
|
|
338
|
+
.order("printed_at", { ascending: true })
|
|
339
|
+
.limit(200);
|
|
340
|
+
if (args.stationId)
|
|
341
|
+
q = q.eq("station_id", args.stationId);
|
|
342
|
+
return unwrap(await q);
|
|
343
|
+
},
|
|
320
344
|
async claimNext(args) {
|
|
321
345
|
const { data, error } = await db.rpc("pick_claim_next_document", {
|
|
322
346
|
_station_id: args.stationId,
|
|
@@ -395,8 +419,10 @@ export const pickApi = {
|
|
|
395
419
|
const rawCount = row["cartsPerPrint"] ?? row["carts_per_print"];
|
|
396
420
|
const count = Number(rawCount);
|
|
397
421
|
const rawMode = row["pickMode"] ?? row["pick_mode"];
|
|
422
|
+
const modeObj = rawMode && typeof rawMode === "object" ? rawMode : null;
|
|
423
|
+
const modeText = modeObj ? modeObj["pickMode"] : rawMode;
|
|
398
424
|
return {
|
|
399
|
-
pickMode: typeof
|
|
425
|
+
pickMode: typeof modeText === "string" && modeText.trim() ? modeText : null,
|
|
400
426
|
showCartControl: (row["showCartControl"] ?? row["show_cart_control"]) === true,
|
|
401
427
|
cartsPerPrint: Number.isFinite(count) && count >= 1 ? Math.round(count) : null,
|
|
402
428
|
};
|
|
@@ -414,6 +440,7 @@ export const pickApi = {
|
|
|
414
440
|
ready: row["ready"] === true,
|
|
415
441
|
released: row["released"] === true,
|
|
416
442
|
reason: typeof row["reason"] === "string" ? row["reason"] : null,
|
|
443
|
+
...planStatusExtraOf(row),
|
|
417
444
|
};
|
|
418
445
|
},
|
|
419
446
|
/** Alleen lezen: is de order volgens de Engine vrijgegeven om te picken? Onbekend → null. */
|
|
@@ -434,10 +461,14 @@ export const pickApi = {
|
|
|
434
461
|
return verifyRowsWith(db, rows);
|
|
435
462
|
},
|
|
436
463
|
async queueCartPlan(queueItemId) {
|
|
464
|
+
return (await pickApi.queueCartPlanChecked(queueItemId)).plan;
|
|
465
|
+
},
|
|
466
|
+
/** Karplan plus de karren waarvan de nummers niet kloppen (alleen vaststellen). */
|
|
467
|
+
async queueCartPlanChecked(queueItemId) {
|
|
437
468
|
const { data, error } = await db.rpc("pick_queue_cart_plan", { _queue_item_id: queueItemId });
|
|
438
469
|
if (error)
|
|
439
470
|
throw new Error(error.message);
|
|
440
|
-
return parsePickCartPlan(data);
|
|
471
|
+
return { plan: parsePickCartPlan(data), mismatches: cartPlanMismatchesOf(data) };
|
|
441
472
|
},
|
|
442
473
|
/** Zet één kar in de printopdracht en rondt alleen deze kar af. */
|
|
443
474
|
async completePrintCart(itemId, sessionId, cartId) {
|
|
@@ -14,7 +14,7 @@ export interface CartPrintResult {
|
|
|
14
14
|
}
|
|
15
15
|
/** "Pakbon al verstuurd vanuit <herkomst> naar <printer> om <tijd>" (tijd in lokale tijd). */
|
|
16
16
|
export declare function sentElsewhereMessage(e: SentElsewhere): string;
|
|
17
|
-
export declare const CART_MISSING_MESSAGE = "
|
|
17
|
+
export declare const CART_MISSING_MESSAGE = "Deze kar is intussen gewijzigd. Klik op \u2018Wachtrij verversen\u2019.";
|
|
18
18
|
export declare class CartMissingError extends Error {
|
|
19
19
|
constructor();
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pickCartResults.d.ts","sourceRoot":"","sources":["../../src/lib/pickCartResults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAa,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yEAAyE;IACzE,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAS7D;AAED,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"pickCartResults.d.ts","sourceRoot":"","sources":["../../src/lib/pickCartResults.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export function sentElsewhereMessage(e) {
|
|
|
10
10
|
? `${base} (let op: andere kar-barcode ${e.barcode ?? "?"} dan ${e.ownBarcode ?? "?"})`
|
|
11
11
|
: base;
|
|
12
12
|
}
|
|
13
|
-
export const CART_MISSING_MESSAGE = "
|
|
13
|
+
export const CART_MISSING_MESSAGE = "Deze kar is intussen gewijzigd. Klik op ‘Wachtrij verversen’.";
|
|
14
14
|
export class CartMissingError extends Error {
|
|
15
15
|
constructor() {
|
|
16
16
|
super(CART_MISSING_MESSAGE);
|
|
@@ -56,7 +56,7 @@ export async function reprintCartsIndividually(carts, reprint) {
|
|
|
56
56
|
outcome: jobId ? "created" : "not_created",
|
|
57
57
|
jobId: jobId ?? null,
|
|
58
58
|
reprint: true,
|
|
59
|
-
reason: jobId ? null : "De
|
|
59
|
+
reason: jobId ? null : "De printopdracht is niet aangemaakt. Probeer het opnieuw.",
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
catch (e) {
|
package/dist-lib/lib/pickI18n.js
CHANGED
|
@@ -16,13 +16,13 @@ export const PICK_LANGUAGES = [
|
|
|
16
16
|
];
|
|
17
17
|
const nl = {
|
|
18
18
|
statusToPrint: "Nog printen",
|
|
19
|
-
statusPrinted: "
|
|
20
|
-
chooseLanguage: "Kies
|
|
21
|
-
chooseLanguageHint: "Kies
|
|
19
|
+
statusPrinted: "Naar printer gestuurd",
|
|
20
|
+
chooseLanguage: "Kies je taal",
|
|
21
|
+
chooseLanguageHint: "Kies je taal · Choose your language · Wählen Sie Ihre Sprache",
|
|
22
22
|
back: "Terug",
|
|
23
23
|
changeLanguage: "Taal wijzigen",
|
|
24
24
|
refresh: "Vernieuwen",
|
|
25
|
-
printNext: "Volgende
|
|
25
|
+
printNext: "Volgende printen",
|
|
26
26
|
offline: "Offline",
|
|
27
27
|
queueCount: "documenten in wachtrij",
|
|
28
28
|
loadingQueue: "Wachtrij laden...",
|
|
@@ -51,7 +51,7 @@ const nl = {
|
|
|
51
51
|
noDocument: "Geen document beschikbaar.",
|
|
52
52
|
notAvailable: "Dit document is niet meer beschikbaar.",
|
|
53
53
|
confirmPrintTitle: "Opdracht bevestigen",
|
|
54
|
-
confirmPrintBody: "
|
|
54
|
+
confirmPrintBody: "Wil je deze opdracht printen?",
|
|
55
55
|
confirm: "Bevestigen en printen",
|
|
56
56
|
cancel: "Annuleren",
|
|
57
57
|
};
|
|
@@ -59,7 +59,7 @@ const en = {
|
|
|
59
59
|
statusToPrint: "To print",
|
|
60
60
|
statusPrinted: "Printed",
|
|
61
61
|
chooseLanguage: "Choose your language",
|
|
62
|
-
chooseLanguageHint: "Kies
|
|
62
|
+
chooseLanguageHint: "Kies je taal · Choose your language · Wählen Sie Ihre Sprache",
|
|
63
63
|
back: "Back",
|
|
64
64
|
changeLanguage: "Change language",
|
|
65
65
|
refresh: "Refresh",
|
|
@@ -4,8 +4,8 @@ const nl = {
|
|
|
4
4
|
jobTitle: "Printopdracht",
|
|
5
5
|
queued: "Naar printer gestuurd",
|
|
6
6
|
running: "Bezig met printen",
|
|
7
|
-
done: "
|
|
8
|
-
failed: "
|
|
7
|
+
done: "Bij printer aangekomen",
|
|
8
|
+
failed: "Niet geprint",
|
|
9
9
|
cancelled: "Printopdracht geannuleerd",
|
|
10
10
|
unknown: "Status onbekend",
|
|
11
11
|
retry: "Opnieuw printen",
|
|
@@ -4,7 +4,7 @@ export declare const RELEASE_PENDING_MESSAGE = "Het pickvenster voor deze order
|
|
|
4
4
|
export declare const NO_ROW_IN_FILTER_MESSAGE = "Geen rij in het filter om te printen.";
|
|
5
5
|
/** Fout die betekent: deze rij of zijn kar bestaat niet meer (vervangen). */
|
|
6
6
|
export declare function isRowGoneError(e: unknown): boolean;
|
|
7
|
-
/** Fout van "Volgende
|
|
7
|
+
/** Fout van "Volgende printen" als de wachtrij volgens de database leeg is. */
|
|
8
8
|
export declare function isNoDocumentError(e: unknown): boolean;
|
|
9
9
|
/** De bovenste zichtbare rij die nog geprint moet worden (volgorde van de lijst). */
|
|
10
10
|
export declare function firstVisibleTarget(items: PickQueueItem[], lockedIds?: Set<string>): PickQueueItem | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pickRowState.d.ts","sourceRoot":"","sources":["../../src/lib/pickRowState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,gBAAgB,wFAAwF,CAAC;AACtH,eAAO,MAAM,uBAAuB,8GACyE,CAAC;AAC9G,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED
|
|
1
|
+
{"version":3,"file":"pickRowState.d.ts","sourceRoot":"","sources":["../../src/lib/pickRowState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,gBAAgB,wFAAwF,CAAC;AACtH,eAAO,MAAM,uBAAuB,8GACyE,CAAC;AAC9G,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAEhF,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,aAAa,GAAG,IAAI,CAYxG;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAQ3F;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUtH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -9,7 +9,7 @@ export function isRowGoneError(e) {
|
|
|
9
9
|
msg.includes("bestaat niet meer") ||
|
|
10
10
|
msg.includes("vervangen"));
|
|
11
11
|
}
|
|
12
|
-
/** Fout van "Volgende
|
|
12
|
+
/** Fout van "Volgende printen" als de wachtrij volgens de database leeg is. */
|
|
13
13
|
export function isNoDocumentError(e) {
|
|
14
14
|
const msg = (e instanceof Error ? e.message : String(e ?? "")).toLowerCase();
|
|
15
15
|
return msg.includes("geen documenten beschikbaar") || msg.includes("geen document beschikbaar");
|
|
@@ -17,7 +17,11 @@ export function isNoDocumentError(e) {
|
|
|
17
17
|
/** De bovenste zichtbare rij die nog geprint moet worden (volgorde van de lijst). */
|
|
18
18
|
export function firstVisibleTarget(items, lockedIds) {
|
|
19
19
|
const list = Array.isArray(items) ? items : [];
|
|
20
|
-
return list.find((item) => !item.printed_at
|
|
20
|
+
return (list.find((item) => !item.printed_at
|
|
21
|
+
&& !item.cancelled_at
|
|
22
|
+
&& !item.completed_at
|
|
23
|
+
&& !(item.payload && item.payload["printbaar"] === false)
|
|
24
|
+
&& !lockedIds?.has(item.id)) ?? null);
|
|
21
25
|
}
|
|
22
26
|
/** Kenmerk "kar xxxxxx" als meer rijen dezelfde documentnaam hebben. */
|
|
23
27
|
export function duplicateNameTag(items, item) {
|