@flowselections/floriday-voorraad 1.0.15 → 1.0.17

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 (84) hide show
  1. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +9 -0
  2. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -0
  3. package/dist-lib/components/voorraad/AdditionalPackagingDialog.js +51 -0
  4. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  5. package/dist-lib/components/voorraad/ArtikelWizard.js +411 -28
  6. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  7. package/dist-lib/components/voorraad/EditArtikelPage.js +78 -4
  8. package/dist-lib/components/voorraad/ExcelExportButton.d.ts +2 -1
  9. package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
  10. package/dist-lib/components/voorraad/ExcelExportButton.js +24 -5
  11. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +8 -0
  12. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -0
  13. package/dist-lib/components/voorraad/OrderHistoryCard.js +133 -0
  14. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +7 -0
  15. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -0
  16. package/dist-lib/components/voorraad/PriceStatusBadge.js +67 -0
  17. package/dist-lib/components/voorraad/ProductLinkCard.d.ts +13 -0
  18. package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -0
  19. package/dist-lib/components/voorraad/ProductLinkCard.js +159 -0
  20. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  21. package/dist-lib/components/voorraad/StockBulkButtons.js +88 -7
  22. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +2 -1
  23. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  24. package/dist-lib/components/voorraad/VoorraadStockCard.js +5 -4
  25. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  26. package/dist-lib/components/voorraad/VoorraadTable.js +6 -1
  27. package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
  28. package/dist-lib/hooks/useLocalTradeItems.js +4 -0
  29. package/dist-lib/hooks/useTradeItemSpec.d.ts.map +1 -1
  30. package/dist-lib/hooks/useTradeItemSpec.js +4 -1
  31. package/dist-lib/hooks/useTradeItemStock.d.ts +14 -1
  32. package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
  33. package/dist-lib/hooks/useTradeItemStock.js +76 -17
  34. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +21 -0
  35. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -0
  36. package/dist-lib/hooks/useTradeItemSupplyLine.js +49 -0
  37. package/dist-lib/hooks/useVoorraadData.d.ts +5 -4
  38. package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
  39. package/dist-lib/hooks/useVoorraadData.js +73 -7
  40. package/dist-lib/index.d.ts +1 -0
  41. package/dist-lib/index.d.ts.map +1 -1
  42. package/dist-lib/index.js +1 -0
  43. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1307 -94
  44. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  45. package/dist-lib/integrations/supabase/client.d.ts +1307 -94
  46. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  47. package/dist-lib/integrations/supabase/client.server.d.ts +1307 -94
  48. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  49. package/dist-lib/integrations/supabase/types.d.ts +1328 -87
  50. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  51. package/dist-lib/lib/ensure-article-codes.d.ts +8 -0
  52. package/dist-lib/lib/ensure-article-codes.d.ts.map +1 -0
  53. package/dist-lib/lib/ensure-article-codes.js +78 -0
  54. package/dist-lib/lib/floricode-required-features.functions.d.ts +1313 -94
  55. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
  56. package/dist-lib/lib/floricode-required-features.functions.js +20 -2
  57. package/dist-lib/lib/floriday-client.d.ts +6 -0
  58. package/dist-lib/lib/floriday-client.d.ts.map +1 -1
  59. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +11264 -0
  60. package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -0
  61. package/dist-lib/lib/floriday-customer-offer.functions.js +175 -0
  62. package/dist-lib/lib/floriday-gateway.functions.d.ts +16129 -17
  63. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
  64. package/dist-lib/lib/floriday-gateway.functions.js +150 -0
  65. package/dist-lib/lib/floriday-gateway.server.d.ts +22 -0
  66. package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
  67. package/dist-lib/lib/floriday-gateway.server.js +3 -0
  68. package/dist-lib/lib/floriday-payload.d.ts +76 -8
  69. package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
  70. package/dist-lib/lib/floriday-payload.js +209 -39
  71. package/dist-lib/lib/floriday-supply-line.d.ts +53 -0
  72. package/dist-lib/lib/floriday-supply-line.d.ts.map +1 -0
  73. package/dist-lib/lib/floriday-supply-line.js +109 -0
  74. package/dist-lib/lib/floriday-warehouse.functions.d.ts +33638 -0
  75. package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -0
  76. package/dist-lib/lib/floriday-warehouse.functions.js +98 -0
  77. package/dist-lib/lib/floriday-writes.functions.d.ts +2707 -281
  78. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  79. package/dist-lib/lib/floriday-writes.functions.js +39 -6
  80. package/dist-lib/lib/vrs-catalog.d.ts +27 -0
  81. package/dist-lib/lib/vrs-catalog.d.ts.map +1 -0
  82. package/dist-lib/lib/vrs-catalog.js +98 -0
  83. package/package.json +3 -2
  84. package/public/flowselections-assets/Voorraad/floriday-logo.png +0 -0
@@ -19,14 +19,37 @@ function applyStock(item, s) {
19
19
  economicQuantity: available + s.incoming_stock,
20
20
  };
21
21
  }
22
+ function erpToTradeItem(row) {
23
+ const key = row.trade_item_key ?? `product:${row.id}`;
24
+ return {
25
+ id: `erp:${row.id}`,
26
+ productId: row.id,
27
+ tradeItemKey: key,
28
+ source: "erp",
29
+ name: row.product || "(naamloos product)",
30
+ articleNumber: row.barcode || "",
31
+ imageUrl: row.image_url,
32
+ quantity: 0,
33
+ minQuantity: 0,
34
+ reservedQuantity: 0,
35
+ availableQuantity: 0,
36
+ incomingQuantity: 0,
37
+ economicQuantity: 0,
38
+ raw: row,
39
+ published: false,
40
+ linkStatus: "unlinked",
41
+ };
42
+ }
22
43
  /**
23
- * Reads trade items from the shared `floriday_trade_items_cache` (gepubliceerd,
24
- * gevuld door de Auth-module elke 5 min) en merget lokale, niet-gepubliceerde
25
- * producten uit `trade_item_drafts`. Voorraadwaarden uit `trade_item_stock`
26
- * overschrijven de cache-waarden (lokale bron van waarheid voor stock).
44
+ * Reads trade items from three sources and merges them into one voorraad list:
45
+ * 1. `products` rows tied to a `product:<id>` key (pure ERP items).
46
+ * 2. `trade_item_drafts` (lokaal concept, mogelijk in publiceerflow).
47
+ * 3. `floriday_trade_items_cache` (gepubliceerd artikel).
48
+ * Voorraadwaarden komen uit `trade_item_stock` en overschrijven cache-defaults.
27
49
  */
28
50
  export function useVoorraadData(connectionId) {
29
51
  const [publishedItems, setPublishedItems] = useState([]);
52
+ const [erpItems, setErpItems] = useState([]);
30
53
  const [stockMap, setStockMap] = useState(new Map());
31
54
  const [loading, setLoading] = useState(false);
32
55
  const [error, setError] = useState(null);
@@ -34,33 +57,43 @@ export function useVoorraadData(connectionId) {
34
57
  const loadPublished = useCallback(async () => {
35
58
  if (!connectionId) {
36
59
  setPublishedItems([]);
60
+ setErpItems([]);
37
61
  setStockMap(new Map());
38
62
  return;
39
63
  }
40
64
  setLoading(true);
41
65
  setError(null);
42
66
  try {
43
- const [pubRes, stock] = await Promise.all([
67
+ const [pubRes, erpRes, stock] = await Promise.all([
44
68
  supabase
45
69
  .from("floriday_trade_items_cache")
46
70
  .select("data,floriday_id,is_deleted")
47
71
  .eq("connection_id", connectionId)
48
72
  .eq("is_deleted", false)
49
73
  .limit(1000),
74
+ supabase
75
+ .from("products")
76
+ .select("id,product,barcode,image_url,trade_item_key")
77
+ .or("trade_item_key.is.null,trade_item_key.like.product:%")
78
+ .limit(1000),
50
79
  fetchStockMap(connectionId),
51
80
  ]);
52
81
  if (pubRes.error)
53
82
  throw pubRes.error;
83
+ if (erpRes.error)
84
+ throw erpRes.error;
54
85
  const normalised = (pubRes.data ?? [])
55
86
  .map((row) => normaliseTradeItem({ ...row.data, id: row.floriday_id }))
56
87
  .filter((i) => i.id)
57
- .map((i) => ({ ...i, published: true }));
88
+ .map((i) => ({ ...i, published: true, source: "published", tradeItemKey: i.id }));
58
89
  setPublishedItems(normalised);
90
+ setErpItems((erpRes.data ?? []).map((r) => erpToTradeItem(r)));
59
91
  setStockMap(stock);
60
92
  }
61
93
  catch (e) {
62
94
  setError(e.message);
63
95
  setPublishedItems([]);
96
+ setErpItems([]);
64
97
  }
65
98
  finally {
66
99
  setLoading(false);
@@ -69,11 +102,44 @@ export function useVoorraadData(connectionId) {
69
102
  useEffect(() => {
70
103
  loadPublished();
71
104
  }, [loadPublished]);
105
+ // Realtime: refresh stock map whenever any trade_item_stock row for this
106
+ // connection changes (insert/update/delete). Keeps Voorraad in sync with
107
+ // reservations, order completions, wizard saves, imports, etc.
108
+ useEffect(() => {
109
+ if (!connectionId)
110
+ return;
111
+ const channel = supabase
112
+ .channel(`voorraad-stock-${connectionId}`)
113
+ .on("postgres_changes", {
114
+ event: "*",
115
+ schema: "public",
116
+ table: "trade_item_stock",
117
+ filter: `connection_id=eq.${connectionId}`,
118
+ }, () => {
119
+ fetchStockMap(connectionId).then(setStockMap).catch(() => { });
120
+ })
121
+ .on("postgres_changes", { event: "*", schema: "public", table: "products" }, () => {
122
+ loadPublished();
123
+ })
124
+ .on("postgres_changes", { event: "*", schema: "public", table: "floriday_trade_items_cache", filter: `connection_id=eq.${connectionId}` }, () => {
125
+ loadPublished();
126
+ })
127
+ .subscribe();
128
+ return () => {
129
+ supabase.removeChannel(channel);
130
+ };
131
+ }, [connectionId, loadPublished]);
72
132
  const reload = useCallback(async () => {
73
133
  await Promise.all([loadPublished(), reloadLocal()]);
74
134
  }, [loadPublished, reloadLocal]);
135
+ const linkedProductIds = new Set(localItems
136
+ .map((i) => i.productId)
137
+ .filter((id) => Boolean(id)));
75
138
  const merged = [
76
- ...localItems.map((i) => applyStock(i, stockMap.get(i.localId ? `draft:${i.localId}` : ""))),
139
+ ...erpItems
140
+ .filter((i) => !i.productId || !linkedProductIds.has(i.productId))
141
+ .map((i) => applyStock(i, stockMap.get(i.tradeItemKey ?? ""))),
142
+ ...localItems.map((i) => applyStock(i, stockMap.get(i.tradeItemKey ?? (i.localId ? `draft:${i.localId}` : "")))),
77
143
  ...publishedItems.map((i) => applyStock(i, stockMap.get(i.id))),
78
144
  ];
79
145
  return {
@@ -5,5 +5,6 @@ export { NieuwArtikelPage } from './components/voorraad/NieuwArtikelPage';
5
5
  export { EditArtikelPage } from './components/voorraad/EditArtikelPage';
6
6
  export { ValidationPage } from './components/voorraad/ValidationPage';
7
7
  export { ArtikelWizard } from './components/voorraad/ArtikelWizard';
8
+ export { ProductLinkCard } from './components/voorraad/ProductLinkCard';
8
9
  export declare const floridayVoorraadModule: FlowModule;
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,eAAO,MAAM,sBAAsB,EAAE,UAUpC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,eAAO,MAAM,sBAAsB,EAAE,UAUpC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -8,6 +8,7 @@ export { NieuwArtikelPage } from './components/voorraad/NieuwArtikelPage';
8
8
  export { EditArtikelPage } from './components/voorraad/EditArtikelPage';
9
9
  export { ValidationPage } from './components/voorraad/ValidationPage';
10
10
  export { ArtikelWizard } from './components/voorraad/ArtikelWizard';
11
+ export { ProductLinkCard } from './components/voorraad/ProductLinkCard';
11
12
  export const floridayVoorraadModule = {
12
13
  id: "voorraad",
13
14
  name: "Voorraad",