@flowselections/floriday-afhandeling-module 1.0.8 → 1.0.10

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 (94) hide show
  1. package/dist-lib/components/afhandeling/DagDetailDialog.d.ts +9 -0
  2. package/dist-lib/components/afhandeling/DagDetailDialog.d.ts.map +1 -0
  3. package/dist-lib/components/afhandeling/DagDetailDialog.js +145 -0
  4. package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
  5. package/dist-lib/components/afhandeling/LeveringenPage.js +17 -69
  6. package/dist-lib/components/afhandeling/PickAgendaView.d.ts +6 -0
  7. package/dist-lib/components/afhandeling/PickAgendaView.d.ts.map +1 -0
  8. package/dist-lib/components/afhandeling/PickAgendaView.js +40 -0
  9. package/dist-lib/components/afhandeling/PickingPage.d.ts +2 -0
  10. package/dist-lib/components/afhandeling/PickingPage.d.ts.map +1 -0
  11. package/dist-lib/components/afhandeling/PickingPage.js +5 -0
  12. package/dist-lib/components/afhandeling/PlanningAgendaPage.d.ts +9 -0
  13. package/dist-lib/components/afhandeling/PlanningAgendaPage.d.ts.map +1 -0
  14. package/dist-lib/components/afhandeling/PlanningAgendaPage.js +7 -0
  15. package/dist-lib/components/afhandeling/ServiceAreaSelect.d.ts +12 -0
  16. package/dist-lib/components/afhandeling/ServiceAreaSelect.d.ts.map +1 -0
  17. package/dist-lib/components/afhandeling/ServiceAreaSelect.js +79 -0
  18. package/dist-lib/components/afhandeling/VervoerderForm.d.ts.map +1 -1
  19. package/dist-lib/components/afhandeling/VervoerderForm.js +73 -12
  20. package/dist-lib/components/afhandeling/VervoerdersPage.d.ts.map +1 -1
  21. package/dist-lib/components/afhandeling/VervoerdersPage.js +23 -5
  22. package/dist-lib/components/afhandeling/WeekAgendaView.d.ts +13 -0
  23. package/dist-lib/components/afhandeling/WeekAgendaView.d.ts.map +1 -0
  24. package/dist-lib/components/afhandeling/WeekAgendaView.js +142 -0
  25. package/dist-lib/components/pickstation/LanguagePicker.d.ts +5 -0
  26. package/dist-lib/components/pickstation/LanguagePicker.d.ts.map +1 -0
  27. package/dist-lib/components/pickstation/LanguagePicker.js +5 -0
  28. package/dist-lib/components/pickstation/PakbonTemplate.d.ts +20 -0
  29. package/dist-lib/components/pickstation/PakbonTemplate.d.ts.map +1 -0
  30. package/dist-lib/components/pickstation/PakbonTemplate.js +76 -0
  31. package/dist-lib/components/pickstation/printDocuments.d.ts +3 -0
  32. package/dist-lib/components/pickstation/printDocuments.d.ts.map +1 -0
  33. package/dist-lib/components/pickstation/printDocuments.js +53 -0
  34. package/dist-lib/components/settings/AfhandelingSettingsCard.d.ts +2 -0
  35. package/dist-lib/components/settings/AfhandelingSettingsCard.d.ts.map +1 -0
  36. package/dist-lib/components/settings/AfhandelingSettingsCard.js +72 -0
  37. package/dist-lib/components/settings/VervoerdersSettingsCard.d.ts +2 -0
  38. package/dist-lib/components/settings/VervoerdersSettingsCard.d.ts.map +1 -0
  39. package/dist-lib/components/settings/VervoerdersSettingsCard.js +30 -0
  40. package/dist-lib/hooks/useOrderPlanning.d.ts +17 -0
  41. package/dist-lib/hooks/useOrderPlanning.d.ts.map +1 -0
  42. package/dist-lib/hooks/useOrderPlanning.js +131 -0
  43. package/dist-lib/index.d.ts +5 -0
  44. package/dist-lib/index.d.ts.map +1 -1
  45. package/dist-lib/index.js +16 -6
  46. package/dist-lib/integrations/supabase/auth-middleware.d.ts +2793 -137
  47. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  48. package/dist-lib/integrations/supabase/client.d.ts +2793 -137
  49. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  50. package/dist-lib/integrations/supabase/client.server.d.ts +2793 -137
  51. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  52. package/dist-lib/integrations/supabase/types.d.ts +2870 -131
  53. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  54. package/dist-lib/integrations/supabase/types.js +2 -0
  55. package/dist-lib/lib/afhandelingSettings.functions.d.ts +18597 -0
  56. package/dist-lib/lib/afhandelingSettings.functions.d.ts.map +1 -0
  57. package/dist-lib/lib/afhandelingSettings.functions.js +98 -0
  58. package/dist-lib/lib/carrierSignupMail.server.d.ts +56 -0
  59. package/dist-lib/lib/carrierSignupMail.server.d.ts.map +1 -0
  60. package/dist-lib/lib/carrierSignupMail.server.js +229 -0
  61. package/dist-lib/lib/carriers.functions.d.ts +34091 -14161
  62. package/dist-lib/lib/carriers.functions.d.ts.map +1 -1
  63. package/dist-lib/lib/carriers.functions.js +69 -6
  64. package/dist-lib/lib/cartAssignments.functions.d.ts +46479 -0
  65. package/dist-lib/lib/cartAssignments.functions.d.ts.map +1 -0
  66. package/dist-lib/lib/cartAssignments.functions.js +130 -0
  67. package/dist-lib/lib/cartMoveImpact.d.ts +8 -0
  68. package/dist-lib/lib/cartMoveImpact.d.ts.map +1 -0
  69. package/dist-lib/lib/cartMoveImpact.js +26 -0
  70. package/dist-lib/lib/floriday.functions.d.ts +2798 -137
  71. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  72. package/dist-lib/lib/floriday.functions.js +178 -93
  73. package/dist-lib/lib/geo/euServiceAreas.d.ts +30 -0
  74. package/dist-lib/lib/geo/euServiceAreas.d.ts.map +1 -0
  75. package/dist-lib/lib/geo/euServiceAreas.js +277 -0
  76. package/dist-lib/lib/invalidatePlanning.d.ts +11 -0
  77. package/dist-lib/lib/invalidatePlanning.d.ts.map +1 -0
  78. package/dist-lib/lib/invalidatePlanning.js +25 -0
  79. package/dist-lib/lib/pickDate.d.ts +21 -0
  80. package/dist-lib/lib/pickDate.d.ts.map +1 -0
  81. package/dist-lib/lib/pickDate.js +71 -0
  82. package/dist-lib/lib/pickstationI18n.d.ts +35 -0
  83. package/dist-lib/lib/pickstationI18n.d.ts.map +1 -0
  84. package/dist-lib/lib/pickstationI18n.js +171 -0
  85. package/dist-lib/lib/pickstationOrders.server.d.ts +9 -0
  86. package/dist-lib/lib/pickstationOrders.server.d.ts.map +1 -0
  87. package/dist-lib/lib/pickstationOrders.server.js +372 -0
  88. package/dist-lib/lib/pickstationTypes.d.ts +26 -0
  89. package/dist-lib/lib/pickstationTypes.d.ts.map +1 -0
  90. package/dist-lib/lib/pickstationTypes.js +1 -0
  91. package/dist-lib/lib/planning.d.ts +82 -0
  92. package/dist-lib/lib/planning.d.ts.map +1 -0
  93. package/dist-lib/lib/planning.js +243 -0
  94. package/package.json +12 -6
@@ -0,0 +1,130 @@
1
+ import { createServerFn } from "@tanstack/react-start";
2
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
3
+ function toISODate(d) {
4
+ const dt = typeof d === "string" ? new Date(d) : d;
5
+ const y = dt.getFullYear();
6
+ const m = String(dt.getMonth() + 1).padStart(2, "0");
7
+ const day = String(dt.getDate()).padStart(2, "0");
8
+ return `${y}-${m}-${day}`;
9
+ }
10
+ export const listCartOverrides = createServerFn({ method: "GET" })
11
+ .middleware([requireSupabaseAuth])
12
+ .handler(async ({ context }) => {
13
+ const supabase = context.supabase;
14
+ const { data, error } = await supabase
15
+ .from("cart_pick_overrides")
16
+ .select("id, order_id, order_source, cart_index, pick_date, moved_from_date, status, notes")
17
+ .limit(5000);
18
+ if (error)
19
+ throw new Error(error.message);
20
+ return { overrides: (data ?? []) };
21
+ });
22
+ export const moveCart = createServerFn({ method: "POST" })
23
+ .middleware([requireSupabaseAuth])
24
+ .inputValidator((d) => d)
25
+ .handler(async ({ data, context }) => {
26
+ const supabase = context.supabase;
27
+ const pickDate = toISODate(data.newDate);
28
+ const fromDate = data.fromDate ? toISODate(data.fromDate) : null;
29
+ const { data: row, error } = await supabase
30
+ .from("cart_pick_overrides")
31
+ .upsert({
32
+ order_id: data.orderId,
33
+ order_source: data.orderSource,
34
+ cart_index: data.cartIndex,
35
+ pick_date: pickDate,
36
+ moved_from_date: fromDate,
37
+ }, { onConflict: "order_id,order_source,cart_index" })
38
+ .select()
39
+ .single();
40
+ if (error)
41
+ throw new Error(error.message);
42
+ return { ok: true, override: row };
43
+ });
44
+ export const resetCartOverride = createServerFn({ method: "POST" })
45
+ .middleware([requireSupabaseAuth])
46
+ .inputValidator((d) => d)
47
+ .handler(async ({ data, context }) => {
48
+ const supabase = context.supabase;
49
+ const { error } = await supabase
50
+ .from("cart_pick_overrides")
51
+ .delete()
52
+ .eq("order_id", data.orderId)
53
+ .eq("order_source", data.orderSource)
54
+ .eq("cart_index", data.cartIndex);
55
+ if (error)
56
+ throw new Error(error.message);
57
+ return { ok: true };
58
+ });
59
+ export const resetAllCartOverrides = createServerFn({ method: "POST" })
60
+ .middleware([requireSupabaseAuth])
61
+ .handler(async ({ context }) => {
62
+ const supabase = context.supabase;
63
+ const { error, count } = await supabase
64
+ .from("cart_pick_overrides")
65
+ .delete({ count: "exact" })
66
+ .not("id", "is", null);
67
+ if (error)
68
+ throw new Error(error.message);
69
+ return { ok: true, deleted: count ?? 0 };
70
+ });
71
+ export const getOrderLines = createServerFn({ method: "GET" })
72
+ .middleware([requireSupabaseAuth])
73
+ .inputValidator((d) => d)
74
+ .handler(async ({ data, context }) => {
75
+ const supabase = context.supabase;
76
+ if (data.orderSource === "manual") {
77
+ const { data: items, error } = await supabase
78
+ .from("order_items")
79
+ .select("id, quantity, products(product, plants_per_crate, crates_per_layer, layers_per_cart)")
80
+ .eq("order_id", data.orderId);
81
+ if (error)
82
+ throw new Error(error.message);
83
+ const lines = (items ?? []).map((it) => {
84
+ const raw = it.products;
85
+ const p = Array.isArray(raw) ? raw[0] : raw;
86
+ const qty = Number(it.quantity ?? 0);
87
+ const perCrate = p?.plants_per_crate ? Number(p.plants_per_crate) : 0;
88
+ return {
89
+ id: it.id,
90
+ article: p?.product ?? "—",
91
+ plants: qty,
92
+ crates: perCrate > 0 ? Math.ceil(qty / perCrate) : null,
93
+ otherUnits: null,
94
+ };
95
+ });
96
+ return { lines };
97
+ }
98
+ // Floriday: salesorders_cache row contains one order; lines komen uit data JSON
99
+ const { data: row, error } = await supabase
100
+ .from("floriday_salesorders_cache")
101
+ .select("data")
102
+ .eq("floriday_id", data.orderId)
103
+ .maybeSingle();
104
+ if (error)
105
+ throw new Error(error.message);
106
+ const raw = (row?.data ?? {});
107
+ const items = raw.salesOrderLines ?? [];
108
+ const lines = items.map((l, idx) => ({
109
+ id: l.salesOrderLineId ?? `${data.orderId}-${idx}`,
110
+ article: l.tradeItemName ??
111
+ l.productName ??
112
+ "—",
113
+ plants: Number(l.numberOfPieces ?? l.quantity ?? 0),
114
+ crates: l.numberOfTradeUnits != null ? Number(l.numberOfTradeUnits) : null,
115
+ otherUnits: null,
116
+ }));
117
+ if (lines.length === 0) {
118
+ const pieces = Number(raw.numberOfPieces ?? 0);
119
+ if (pieces > 0) {
120
+ lines.push({
121
+ id: `${data.orderId}-0`,
122
+ article: raw.tradeItemName ?? "Bestelling",
123
+ plants: pieces,
124
+ crates: null,
125
+ otherUnits: null,
126
+ });
127
+ }
128
+ }
129
+ return { lines };
130
+ });
@@ -0,0 +1,8 @@
1
+ import { type OrderPlanning } from "./planning";
2
+ export interface CartMoveImpact {
3
+ ok: boolean;
4
+ blockers: string[];
5
+ warnings: string[];
6
+ }
7
+ export declare function evaluateCartMove(newDate: Date, currentDate: Date, planning: OrderPlanning | null): CartMoveImpact;
8
+ //# sourceMappingURL=cartMoveImpact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartMoveImpact.d.ts","sourceRoot":"","sources":["../../src/lib/cartMoveImpact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,IAAI,EACb,WAAW,EAAE,IAAI,EACjB,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,cAAc,CAyBhB"}
@@ -0,0 +1,26 @@
1
+ import { isWorkday } from "./planning";
2
+ export function evaluateCartMove(newDate, currentDate, planning) {
3
+ const blockers = [];
4
+ const warnings = [];
5
+ const d = new Date(newDate);
6
+ d.setHours(0, 0, 0, 0);
7
+ if (!isWorkday(d))
8
+ blockers.push("Gekozen datum is geen werkdag.");
9
+ if (planning) {
10
+ if (d.getTime() > planning.pickupDate.getTime()) {
11
+ blockers.push("Datum ligt na de ophaaldatum van deze order.");
12
+ }
13
+ if (d.getTime() < planning.pickStartDate.getTime()) {
14
+ warnings.push("Datum ligt vóór de berekende pick-startdatum — pickplanning wordt aangepast.");
15
+ }
16
+ if (d.getTime() > planning.pickStartDate.getTime()) {
17
+ warnings.push("Datum ligt later dan de oorspronkelijke pickplanning — controleer transportaanmelding.");
18
+ }
19
+ }
20
+ const sameDay = d.getFullYear() === currentDate.getFullYear() &&
21
+ d.getMonth() === currentDate.getMonth() &&
22
+ d.getDate() === currentDate.getDate();
23
+ if (sameDay)
24
+ blockers.push("Datum is gelijk aan de huidige pickdag.");
25
+ return { ok: blockers.length === 0, blockers, warnings };
26
+ }