@flowselections/floriday-voorraad 1.0.101 → 1.0.103
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/voorraad/FloridayConnectionNotice.d.ts +12 -0
- package/dist-lib/components/voorraad/FloridayConnectionNotice.d.ts.map +1 -0
- package/dist-lib/components/voorraad/FloridayConnectionNotice.js +16 -0
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.js +19 -10
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.js +2 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.js +5 -3
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.js +5 -2
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.js +5 -1
- package/dist-lib/hooks/useFloridayConnection.d.ts +7 -1
- package/dist-lib/hooks/useFloridayConnection.d.ts.map +1 -1
- package/dist-lib/hooks/useFloridayConnection.js +51 -18
- package/dist-lib/hooks/useTradeItemStock.d.ts +1 -1
- package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemStock.js +14 -6
- package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
- package/dist-lib/hooks/useVoorraadData.js +12 -21
- package/dist-lib/integrations/supabase/types.d.ts +92 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/stock-scope.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/stock-scope.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/stock-scope.test.js +44 -0
- package/dist-lib/lib/floriday-client.d.ts +2 -0
- package/dist-lib/lib/floriday-client.d.ts.map +1 -1
- package/dist-lib/lib/stock-scope.d.ts +25 -0
- package/dist-lib/lib/stock-scope.d.ts.map +1 -0
- package/dist-lib/lib/stock-scope.js +37 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-scope.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/stock-scope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { buildScopedStockMap, connectionStatusOf, noConnectionText } from "../stock-scope.js";
|
|
3
|
+
const row = (connection_id, key, physical_stock) => ({
|
|
4
|
+
connection_id,
|
|
5
|
+
trade_item_key: key,
|
|
6
|
+
physical_stock,
|
|
7
|
+
});
|
|
8
|
+
describe("connectionStatusOf", () => {
|
|
9
|
+
it("lege RPC-uitkomst = geen koppeling", () => {
|
|
10
|
+
expect(connectionStatusOf({ loading: false, error: null, connectionId: null })).toBe("geen_koppeling");
|
|
11
|
+
});
|
|
12
|
+
it("RPC-fout = fout", () => {
|
|
13
|
+
expect(connectionStatusOf({ loading: false, error: "kapot", connectionId: null })).toBe("fout");
|
|
14
|
+
});
|
|
15
|
+
it("rij met id = actief", () => {
|
|
16
|
+
expect(connectionStatusOf({ loading: false, error: null, connectionId: "c1" })).toBe("actief");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe("noConnectionText", () => {
|
|
20
|
+
it("noemt de omgeving alleen als die bekend is", () => {
|
|
21
|
+
expect(noConnectionText("live")).toContain("omgeving live");
|
|
22
|
+
expect(noConnectionText(null)).toContain("de gekozen omgeving");
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("buildScopedStockMap", () => {
|
|
26
|
+
it("geen koppeling: eigen rij telt mee", () => {
|
|
27
|
+
const m = buildScopedStockMap([row(null, "product:a", 12)], null);
|
|
28
|
+
expect(m.get("product:a")?.physical_stock).toBe(12);
|
|
29
|
+
});
|
|
30
|
+
it("geen koppeling: rijen met een koppeling tellen niet", () => {
|
|
31
|
+
const m = buildScopedStockMap([row("c1", "product:a", 5), row("c2", "product:b", 7)], null);
|
|
32
|
+
expect(m.size).toBe(0);
|
|
33
|
+
});
|
|
34
|
+
it("koppeling + eigen rij: één regel, geen dubbele telling", () => {
|
|
35
|
+
const m = buildScopedStockMap([row(null, "product:a", 3), row("c1", "product:a", 9), row("c1", "product:b", 4), row(null, "product:c", 2)], "c1");
|
|
36
|
+
expect(m.size).toBe(3);
|
|
37
|
+
expect(m.get("product:a")?.physical_stock).toBe(9);
|
|
38
|
+
expect(m.get("product:c")?.physical_stock).toBe(2);
|
|
39
|
+
});
|
|
40
|
+
it("koppeling: rijen van een andere koppeling tellen niet", () => {
|
|
41
|
+
const m = buildScopedStockMap([row("c2", "product:a", 50)], "c1");
|
|
42
|
+
expect(m.size).toBe(0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
@@ -34,6 +34,8 @@ export interface TradeItem {
|
|
|
34
34
|
availableQuantity: number;
|
|
35
35
|
incomingQuantity: number;
|
|
36
36
|
economicQuantity: number;
|
|
37
|
+
/** Er is (binnen de getoonde koppeling of eigen voorraad) geen voorraadrij. */
|
|
38
|
+
stockMissing?: boolean;
|
|
37
39
|
raw: unknown;
|
|
38
40
|
/** Of dit product actief op Floriday staat. Volledig los van of het product bruikbaar is binnen ERP. */
|
|
39
41
|
floridayActive?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-client.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"floriday-client.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welke voorraadrijen tellen mee, en wat is de stand van de Floriday-koppeling.
|
|
3
|
+
* Pure functies (geen Supabase), zodat ze zonder database getest kunnen worden.
|
|
4
|
+
*/
|
|
5
|
+
export type ConnectionStatus = "laden" | "actief" | "geen_koppeling" | "fout";
|
|
6
|
+
export declare function connectionStatusOf(input: {
|
|
7
|
+
loading: boolean;
|
|
8
|
+
error: string | null;
|
|
9
|
+
connectionId: string | null;
|
|
10
|
+
}): ConnectionStatus;
|
|
11
|
+
/** Uitleg bij elke plek waar voorraad opslaan zonder koppeling uit staat. */
|
|
12
|
+
export declare const STOCK_WRITE_NEEDS_CONNECTION = "Voorraad opslaan kan pas met een Floriday-koppeling; dit komt in een volgende versie.";
|
|
13
|
+
export declare function noConnectionText(environment: string | null): string;
|
|
14
|
+
export interface ScopedStockRow {
|
|
15
|
+
connection_id: string | null;
|
|
16
|
+
trade_item_key: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Zonder koppeling: alleen eigen rijen (connection_id leeg).
|
|
20
|
+
* Met koppeling: rijen van de actieve koppeling plus eigen rijen; bestaat
|
|
21
|
+
* dezelfde sleutel in beide, dan telt alleen de rij van de koppeling
|
|
22
|
+
* (nooit optellen, anders dubbel). Rijen van andere koppelingen tellen niet.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildScopedStockMap<T extends ScopedStockRow>(rows: T[], activeConnectionId: string | null): Map<string, T>;
|
|
25
|
+
//# sourceMappingURL=stock-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-scope.d.ts","sourceRoot":"","sources":["../../src/lib/stock-scope.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAE9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,gBAAgB,CAInB;AAED,6EAA6E;AAC7E,eAAO,MAAM,4BAA4B,0FACgD,CAAC;AAE1F,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKnE;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,cAAc,EAC1D,IAAI,EAAE,CAAC,EAAE,EACT,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAChC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAShB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welke voorraadrijen tellen mee, en wat is de stand van de Floriday-koppeling.
|
|
3
|
+
* Pure functies (geen Supabase), zodat ze zonder database getest kunnen worden.
|
|
4
|
+
*/
|
|
5
|
+
export function connectionStatusOf(input) {
|
|
6
|
+
if (input.loading)
|
|
7
|
+
return "laden";
|
|
8
|
+
if (input.error)
|
|
9
|
+
return "fout";
|
|
10
|
+
return input.connectionId ? "actief" : "geen_koppeling";
|
|
11
|
+
}
|
|
12
|
+
/** Uitleg bij elke plek waar voorraad opslaan zonder koppeling uit staat. */
|
|
13
|
+
export const STOCK_WRITE_NEEDS_CONNECTION = "Voorraad opslaan kan pas met een Floriday-koppeling; dit komt in een volgende versie.";
|
|
14
|
+
export function noConnectionText(environment) {
|
|
15
|
+
const env = environment === "live" ? "live" : environment === "staging" ? "test" : null;
|
|
16
|
+
return env
|
|
17
|
+
? `Geen actieve Floriday-koppeling voor omgeving ${env} – alleen eigen artikelen mogelijk.`
|
|
18
|
+
: "Geen actieve Floriday-koppeling voor de gekozen omgeving – alleen eigen artikelen mogelijk.";
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Zonder koppeling: alleen eigen rijen (connection_id leeg).
|
|
22
|
+
* Met koppeling: rijen van de actieve koppeling plus eigen rijen; bestaat
|
|
23
|
+
* dezelfde sleutel in beide, dan telt alleen de rij van de koppeling
|
|
24
|
+
* (nooit optellen, anders dubbel). Rijen van andere koppelingen tellen niet.
|
|
25
|
+
*/
|
|
26
|
+
export function buildScopedStockMap(rows, activeConnectionId) {
|
|
27
|
+
const map = new Map();
|
|
28
|
+
for (const r of rows) {
|
|
29
|
+
if (r.connection_id !== null && r.connection_id !== activeConnectionId)
|
|
30
|
+
continue;
|
|
31
|
+
const existing = map.get(r.trade_item_key);
|
|
32
|
+
if (existing && existing.connection_id !== null && r.connection_id === null)
|
|
33
|
+
continue;
|
|
34
|
+
map.set(r.trade_item_key, r);
|
|
35
|
+
}
|
|
36
|
+
return map;
|
|
37
|
+
}
|