@flowselections/floriday-voorraad 1.0.143 → 1.0.147

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 (91) hide show
  1. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +3 -1
  2. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  3. package/dist-lib/components/voorraad/ArtikelWizard.js +57 -53
  4. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  5. package/dist-lib/components/voorraad/EditArtikelPage.js +3 -4
  6. package/dist-lib/components/voorraad/FustAdministratie.d.ts +12 -0
  7. package/dist-lib/components/voorraad/FustAdministratie.d.ts.map +1 -0
  8. package/dist-lib/components/voorraad/FustAdministratie.js +69 -0
  9. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
  10. package/dist-lib/components/voorraad/FustenPage.js +9 -14
  11. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts +6 -0
  12. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts.map +1 -0
  13. package/dist-lib/components/voorraad/KoppelingStatusPanel.js +47 -0
  14. package/dist-lib/components/voorraad/NieuwArtikelPage.js +2 -2
  15. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
  16. package/dist-lib/components/voorraad/ProductCustomFieldsCard.js +29 -13
  17. package/dist-lib/components/voorraad/ProductSalePriceField.d.ts.map +1 -1
  18. package/dist-lib/components/voorraad/ProductSalePriceField.js +9 -8
  19. package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
  20. package/dist-lib/components/voorraad/StepSamenstelling.js +35 -10
  21. package/dist-lib/components/voorraad/TelmomentButton.d.ts +8 -0
  22. package/dist-lib/components/voorraad/TelmomentButton.d.ts.map +1 -0
  23. package/dist-lib/components/voorraad/TelmomentButton.js +65 -0
  24. package/dist-lib/components/voorraad/TrayStickerCard.d.ts +5 -1
  25. package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -1
  26. package/dist-lib/components/voorraad/TrayStickerCard.js +64 -66
  27. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +0 -5
  28. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  29. package/dist-lib/components/voorraad/ValidationOverviewTable.js +10 -4
  30. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  31. package/dist-lib/components/voorraad/ValidationPage.js +2 -1
  32. package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -13
  33. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  34. package/dist-lib/components/voorraad/VoorraadPage.js +103 -140
  35. package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts +6 -0
  36. package/dist-lib/components/voorraad/VoorraadSturingCard.d.ts.map +1 -0
  37. package/dist-lib/components/voorraad/VoorraadSturingCard.js +47 -0
  38. package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts +5 -0
  39. package/dist-lib/components/voorraad/artikel/ArtikelPagina.d.ts.map +1 -0
  40. package/dist-lib/components/voorraad/artikel/ArtikelPagina.js +263 -0
  41. package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts +7 -0
  42. package/dist-lib/components/voorraad/artikel/TwijfelKiezen.d.ts.map +1 -0
  43. package/dist-lib/components/voorraad/artikel/TwijfelKiezen.js +54 -0
  44. package/dist-lib/components/voorraad/artikel/opslaan-context.d.ts +21 -0
  45. package/dist-lib/components/voorraad/artikel/opslaan-context.d.ts.map +1 -0
  46. package/dist-lib/components/voorraad/artikel/opslaan-context.js +15 -0
  47. package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts +5 -0
  48. package/dist-lib/components/voorraad/lijst/ImporteerKnop.d.ts.map +1 -0
  49. package/dist-lib/components/voorraad/lijst/ImporteerKnop.js +20 -0
  50. package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts +6 -0
  51. package/dist-lib/components/voorraad/lijst/LijstExportKnop.d.ts.map +1 -0
  52. package/dist-lib/components/voorraad/lijst/LijstExportKnop.js +43 -0
  53. package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts +16 -0
  54. package/dist-lib/components/voorraad/lijst/SnelActieDialogen.d.ts.map +1 -0
  55. package/dist-lib/components/voorraad/lijst/SnelActieDialogen.js +95 -0
  56. package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts +21 -0
  57. package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.d.ts.map +1 -0
  58. package/dist-lib/components/voorraad/lijst/VoorraadLijstTabel.js +38 -0
  59. package/dist-lib/hooks/useVoorraadLijst.d.ts +21 -0
  60. package/dist-lib/hooks/useVoorraadLijst.d.ts.map +1 -0
  61. package/dist-lib/hooks/useVoorraadLijst.js +71 -0
  62. package/dist-lib/index.d.ts.map +1 -1
  63. package/dist-lib/index.js +2 -0
  64. package/dist-lib/integrations/supabase/types.d.ts +989 -0
  65. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  66. package/dist-lib/lib/artikel-pagina.d.ts +57 -0
  67. package/dist-lib/lib/artikel-pagina.d.ts.map +1 -0
  68. package/dist-lib/lib/artikel-pagina.js +93 -0
  69. package/dist-lib/lib/count-stock.d.ts +17 -0
  70. package/dist-lib/lib/count-stock.d.ts.map +1 -0
  71. package/dist-lib/lib/count-stock.js +26 -0
  72. package/dist-lib/lib/floriday-import-validator.d.ts +9 -0
  73. package/dist-lib/lib/floriday-import-validator.d.ts.map +1 -1
  74. package/dist-lib/lib/floriday-import-validator.js +13 -0
  75. package/dist-lib/lib/fust-administratie.d.ts +29 -0
  76. package/dist-lib/lib/fust-administratie.d.ts.map +1 -0
  77. package/dist-lib/lib/fust-administratie.js +63 -0
  78. package/dist-lib/lib/fusten.d.ts +4 -0
  79. package/dist-lib/lib/fusten.d.ts.map +1 -1
  80. package/dist-lib/lib/pending-photos.d.ts +20 -0
  81. package/dist-lib/lib/pending-photos.d.ts.map +1 -0
  82. package/dist-lib/lib/pending-photos.js +90 -0
  83. package/dist-lib/lib/voorraad-custom-fields.d.ts +16 -1
  84. package/dist-lib/lib/voorraad-custom-fields.d.ts.map +1 -1
  85. package/dist-lib/lib/voorraad-custom-fields.js +12 -6
  86. package/dist-lib/lib/voorraad-lijst.d.ts +91 -0
  87. package/dist-lib/lib/voorraad-lijst.d.ts.map +1 -0
  88. package/dist-lib/lib/voorraad-lijst.js +82 -0
  89. package/package.json +1 -1
  90. package/sql/AGENTS.md +7 -0
  91. package/sql/floriday-voorraad-schema.sql +1627 -62
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voorraad-lijst.d.ts","sourceRoot":"","sources":["../../src/lib/voorraad-lijst.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Voorraadlijst (redesign deel A, 1.0.146). Zoeken, filteren, sorteren, tellen en
3
+ * pagineren gebeuren op de server in `voorraad_lijst`; dit bestand bevat alleen de
4
+ * vaste vocabulaire en pure hulpjes, zodat ze los te testen zijn.
5
+ */
6
+ /** Volgorde van de tellerregel. "Niet gekoppeld" alleen als de shell een Floriday-koppeling heeft. */
7
+ export function zichtbareFilters(heeftKoppeling) {
8
+ const all = ["alles", "onder_minimum", "verpakking", "niet_gekoppeld", "prijs", "twijfel", "gearchiveerd"];
9
+ return heeftKoppeling ? all : all.filter((f) => f !== "niet_gekoppeld");
10
+ }
11
+ export const FILTER_LABEL = {
12
+ alles: "Alles",
13
+ onder_minimum: "Onder minimum",
14
+ verpakking: "Verpakking ontbreekt",
15
+ niet_gekoppeld: "Niet gekoppeld",
16
+ prijs: "Prijs ontbreekt",
17
+ twijfel: "Twijfelgevallen",
18
+ gearchiveerd: "Gearchiveerd",
19
+ };
20
+ /** Eén statusicoon per regel met de belangrijkste actie. */
21
+ export const STATUS_INFO = {
22
+ ok: { label: "In orde", actie: null, tab: null },
23
+ verpakking: { label: "Verpakking ontbreekt", actie: "Verpakking invullen", tab: "verpakking" },
24
+ niet_gekoppeld: { label: "Niet gekoppeld aan Floriday", actie: "Op Floriday zetten", tab: "koppelingen" },
25
+ prijs: { label: "Prijs ontbreekt", actie: "Verkoopprijs per stuk invullen", tab: "voorraad" },
26
+ gearchiveerd: { label: "Gearchiveerd", actie: null, tab: null },
27
+ };
28
+ /** Floriday-label in de lijst: alleen als de omgeving een koppeling heeft én het artikel gekoppeld is. */
29
+ export function toonFloridayLabel(rij, heeftKoppeling) {
30
+ return heeftKoppeling && isGekoppeld(rij);
31
+ }
32
+ /** Label "Floriday" alleen bij een echte koppeling (Floriday-id op het artikel). */
33
+ export function isGekoppeld(rij) {
34
+ return typeof rij.floriday_id === "string" && rij.floriday_id.trim() !== "";
35
+ }
36
+ /** Rood in de kolom "vrij" alleen als er een minimum is en vrij daaronder zit. */
37
+ export function onderMinimum(rij) {
38
+ return rij.minimum > 0 && rij.vrij < rij.minimum;
39
+ }
40
+ /** Klik op een kolom: zelfde kolom keert de richting om, andere kolom begint oplopend (aantallen aflopend). */
41
+ export function volgendeSortering(huidig, kolom) {
42
+ if (huidig.sort === kolom)
43
+ return { sort: kolom, oplopend: !huidig.oplopend };
44
+ return { sort: kolom, oplopend: kolom === "naam" || kolom === "artikelnummer" };
45
+ }
46
+ /** Meldingenregel: samengevat, één regel; klik zet het bijbehorende filter. */
47
+ export function meldingen(a) {
48
+ const out = [];
49
+ if (a.meldingen.telmoment_ontbreekt)
50
+ out.push({ tekst: "Telmoment ontbreekt", filter: null });
51
+ const o = a.meldingen.onderdelen_zonder_prijs;
52
+ if (o > 0)
53
+ out.push({ tekst: `${o} onderde${o === 1 ? "el" : "len"} zonder prijs`, filter: "prijs" });
54
+ const g = a.meldingen.orders_gearchiveerd ?? [];
55
+ if (g.length > 0) {
56
+ const r = g.reduce((n, x) => n + Number(x.regels || 0), 0);
57
+ out.push({ tekst: `${r} open orderregel${r === 1 ? "" : "s"} voor ${g.length === 1 ? `gearchiveerd artikel ${g[0].naam}` : `${g.length} gearchiveerde artikelen`}`, filter: "gearchiveerd" });
58
+ }
59
+ if ((a.tellers.twijfel ?? 0) > 0)
60
+ out.push({ tekst: `${a.tellers.twijfel} twijfelgeval${a.tellers.twijfel === 1 ? "" : "len"} bij koppelen`, filter: "twijfel" });
61
+ return out;
62
+ }
63
+ export const EXPORT_PORTIE = 500;
64
+ /** Haalt alle pagina's op in porties (server rekent, browser plakt aan elkaar). */
65
+ export async function allePorties(haal, portie = EXPORT_PORTIE) {
66
+ const out = [];
67
+ for (let pagina = 1;; pagina++) {
68
+ const a = await haal(pagina, portie);
69
+ out.push(...a.rijen);
70
+ if (a.rijen.length < portie || out.length >= a.totaal)
71
+ break;
72
+ }
73
+ return out;
74
+ }
75
+ export function geld(v) {
76
+ if (v == null)
77
+ return "—";
78
+ return new Intl.NumberFormat("nl-NL", { style: "currency", currency: "EUR" }).format(Number(v));
79
+ }
80
+ export function aantal(v) {
81
+ return new Intl.NumberFormat("nl-NL").format(Number(v ?? 0));
82
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-voorraad",
3
- "version": "1.0.143",
3
+ "version": "1.0.147",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist-lib/index.js",
package/sql/AGENTS.md CHANGED
@@ -9,3 +9,10 @@
9
9
  - `sql/floriday-voorraad-schema.sql` must name the newest `supabase/migrations` file in its "Laatste migratie" header and contain the required objects; `scripts/check-schema-version.mjs` (prepublishOnly + test) blocks publishing otherwise; the header version is informational and never higher than package.json, because 1.0.139 shipped a stale schema and the dashboard bumps versions without schema changes.
10
10
  - Default data only via `voorraad_ensure_defaults()` (system data upserted by code keeping `naam_aangepast`, retired codes set inactive; customer settings only inserted when missing, with column defaults equal to reader fallbacks); bump `voorraad_defaults_versie()` on every list change, because new shells get the schema without data and the fast exit compares that version.
11
11
  - Load carrier → Engine code only via the Engine's `logistics_ladingdrager_resolve`; no own mapping list or fallback, because two lists drift.
12
+ - Floriday trade items become own articles only via `voorraad_floriday_artikelen_aanmaken` (match GTIN → article code → name; ambiguity goes to `voorraad_koppel_twijfel`, never guessed; reuses the existing stock row keyed by the Floriday id); the cache trigger only enqueues and wakes a self-unscheduling drain, with an hourly safety net from `voorraad_ensure_defaults`, because inline creation slowed Floriday-auth syncs.
13
+ - Floriday order lines resolve their article only from source metadata (`voorraad_orderregel_trade_item`, sales order id → trade item), overriding name matches; existing empty lines only via `voorraad_correctie_1144` (unambiguous, not shipped/cancelled/processed, batched), because name matches linked the wrong article.
14
+ - Fust balance counts only bookings from the start moment (`fust_startmoment`, global or per fust) plus the opening count; earlier bookings stay visible but outside the balance, and an automatic start moment is set only when none exists and `fust_stock_mutations` is empty, because existing shells must choose their own start.
15
+ - The stock list reads only `voorraad_lijst` (search/filter/sort/count/page on the server, max 500 per page, archived rows only under filter `gearchiveerd`); quick stock changes from the list go through `voorraad_voorraad_corrigeren` (delta + reason, row-locked), because client-side merging hit silent 1,000-row limits and absolute saves could overwrite concurrent order consumption.
16
+ - Order-line autolink only fills an empty `order_items.product_id`; a filled one (Engine or user choice) is never overwritten, a differing Floriday answer is only logged (`orderregel_afwijkend_behouden`), because the Engine owns linking and users pick articles deliberately.
17
+ - A price change re-queues Floriday stock rows only when `voorraad_floriday_volgt(product)` (ERP leading and mode not DISABLED), because local-steered articles must never gain queue rows.
18
+ - Custom fields and tray sticker save only via `voorraad_eigen_velden_opslaan` / `voorraad_traysticker_opslaan` (compare against the state at opening), because direct table writes overwrote concurrent edits.