@flowselections/logistiek-engine 1.0.1

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 (175) hide show
  1. package/README.md +24 -0
  2. package/dist-lib/_core-safelist.d.ts +2 -0
  3. package/dist-lib/_core-safelist.d.ts.map +1 -0
  4. package/dist-lib/_core-safelist.js +15 -0
  5. package/dist-lib/components/BeladingIndelingCard.d.ts +2 -0
  6. package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -0
  7. package/dist-lib/components/BeladingIndelingCard.js +77 -0
  8. package/dist-lib/components/BufferDebugCard.d.ts +19 -0
  9. package/dist-lib/components/BufferDebugCard.d.ts.map +1 -0
  10. package/dist-lib/components/BufferDebugCard.js +69 -0
  11. package/dist-lib/components/CapaciteitMeldingenCard.d.ts +2 -0
  12. package/dist-lib/components/CapaciteitMeldingenCard.d.ts.map +1 -0
  13. package/dist-lib/components/CapaciteitMeldingenCard.js +40 -0
  14. package/dist-lib/components/LadingdragersPage.d.ts +2 -0
  15. package/dist-lib/components/LadingdragersPage.d.ts.map +1 -0
  16. package/dist-lib/components/LadingdragersPage.js +102 -0
  17. package/dist-lib/components/LogistiekEngineLogo.d.ts +6 -0
  18. package/dist-lib/components/LogistiekEngineLogo.d.ts.map +1 -0
  19. package/dist-lib/components/LogistiekEngineLogo.js +4 -0
  20. package/dist-lib/components/LogistiekEnginePage.d.ts +2 -0
  21. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -0
  22. package/dist-lib/components/LogistiekEnginePage.js +53 -0
  23. package/dist-lib/components/ModulePromptsPage.d.ts +2 -0
  24. package/dist-lib/components/ModulePromptsPage.d.ts.map +1 -0
  25. package/dist-lib/components/ModulePromptsPage.js +58 -0
  26. package/dist-lib/components/RegiePage.d.ts +2 -0
  27. package/dist-lib/components/RegiePage.d.ts.map +1 -0
  28. package/dist-lib/components/RegiePage.js +82 -0
  29. package/dist-lib/components/RuleEnginePage.d.ts +7 -0
  30. package/dist-lib/components/RuleEnginePage.d.ts.map +1 -0
  31. package/dist-lib/components/RuleEnginePage.js +114 -0
  32. package/dist-lib/components/StrategieDialog.d.ts +11 -0
  33. package/dist-lib/components/StrategieDialog.d.ts.map +1 -0
  34. package/dist-lib/components/StrategieDialog.js +38 -0
  35. package/dist-lib/components/VertragingMeldingenCard.d.ts +2 -0
  36. package/dist-lib/components/VertragingMeldingenCard.d.ts.map +1 -0
  37. package/dist-lib/components/VertragingMeldingenCard.js +32 -0
  38. package/dist-lib/components/VoorraadMeldingenCard.d.ts +2 -0
  39. package/dist-lib/components/VoorraadMeldingenCard.d.ts.map +1 -0
  40. package/dist-lib/components/VoorraadMeldingenCard.js +26 -0
  41. package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts +12 -0
  42. package/dist-lib/components/rule-engine/CollapsibleGroup.d.ts.map +1 -0
  43. package/dist-lib/components/rule-engine/CollapsibleGroup.js +11 -0
  44. package/dist-lib/components/rule-engine/ConditionsEditor.d.ts +8 -0
  45. package/dist-lib/components/rule-engine/ConditionsEditor.d.ts.map +1 -0
  46. package/dist-lib/components/rule-engine/ConditionsEditor.js +31 -0
  47. package/dist-lib/components/rule-engine/FieldHelp.d.ts +14 -0
  48. package/dist-lib/components/rule-engine/FieldHelp.d.ts.map +1 -0
  49. package/dist-lib/components/rule-engine/FieldHelp.js +18 -0
  50. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +2 -0
  51. package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +1 -0
  52. package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +41 -0
  53. package/dist-lib/components/rule-engine/ImpactPanel.d.ts +5 -0
  54. package/dist-lib/components/rule-engine/ImpactPanel.d.ts.map +1 -0
  55. package/dist-lib/components/rule-engine/ImpactPanel.js +25 -0
  56. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts +9 -0
  57. package/dist-lib/components/rule-engine/RuleFieldInput.d.ts.map +1 -0
  58. package/dist-lib/components/rule-engine/RuleFieldInput.js +80 -0
  59. package/dist-lib/components/rule-engine/VersionsPanel.d.ts +10 -0
  60. package/dist-lib/components/rule-engine/VersionsPanel.d.ts.map +1 -0
  61. package/dist-lib/components/rule-engine/VersionsPanel.js +16 -0
  62. package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts +2 -0
  63. package/dist-lib/components/settings/LogistiekEngineSettingsCard.d.ts.map +1 -0
  64. package/dist-lib/components/settings/LogistiekEngineSettingsCard.js +22 -0
  65. package/dist-lib/hooks/useCapaciteitMeldingen.d.ts +20 -0
  66. package/dist-lib/hooks/useCapaciteitMeldingen.d.ts.map +1 -0
  67. package/dist-lib/hooks/useCapaciteitMeldingen.js +46 -0
  68. package/dist-lib/hooks/useDocumentLayouts.d.ts +13 -0
  69. package/dist-lib/hooks/useDocumentLayouts.d.ts.map +1 -0
  70. package/dist-lib/hooks/useDocumentLayouts.js +54 -0
  71. package/dist-lib/hooks/useLadingdragers.d.ts +16 -0
  72. package/dist-lib/hooks/useLadingdragers.d.ts.map +1 -0
  73. package/dist-lib/hooks/useLadingdragers.js +86 -0
  74. package/dist-lib/hooks/useLogistiekStrategieen.d.ts +29 -0
  75. package/dist-lib/hooks/useLogistiekStrategieen.d.ts.map +1 -0
  76. package/dist-lib/hooks/useLogistiekStrategieen.js +111 -0
  77. package/dist-lib/hooks/useLogistiekTaken.d.ts +89 -0
  78. package/dist-lib/hooks/useLogistiekTaken.d.ts.map +1 -0
  79. package/dist-lib/hooks/useLogistiekTaken.js +314 -0
  80. package/dist-lib/hooks/usePickstations.d.ts +10 -0
  81. package/dist-lib/hooks/usePickstations.d.ts.map +1 -0
  82. package/dist-lib/hooks/usePickstations.js +51 -0
  83. package/dist-lib/hooks/useRecalcJob.d.ts +24 -0
  84. package/dist-lib/hooks/useRecalcJob.d.ts.map +1 -0
  85. package/dist-lib/hooks/useRecalcJob.js +83 -0
  86. package/dist-lib/hooks/useRuleEngine.d.ts +48 -0
  87. package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -0
  88. package/dist-lib/hooks/useRuleEngine.js +222 -0
  89. package/dist-lib/hooks/useVertragingMeldingen.d.ts +29 -0
  90. package/dist-lib/hooks/useVertragingMeldingen.d.ts.map +1 -0
  91. package/dist-lib/hooks/useVertragingMeldingen.js +68 -0
  92. package/dist-lib/hooks/useVoorraadMeldingen.d.ts +30 -0
  93. package/dist-lib/hooks/useVoorraadMeldingen.d.ts.map +1 -0
  94. package/dist-lib/hooks/useVoorraadMeldingen.js +70 -0
  95. package/dist-lib/index.d.ts +36 -0
  96. package/dist-lib/index.d.ts.map +1 -0
  97. package/dist-lib/index.js +52 -0
  98. package/dist-lib/integrations/supabase/auth-attacher.d.ts +2 -0
  99. package/dist-lib/integrations/supabase/auth-attacher.d.ts.map +1 -0
  100. package/dist-lib/integrations/supabase/auth-attacher.js +12 -0
  101. package/dist-lib/integrations/supabase/auth-middleware.d.ts +19781 -0
  102. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -0
  103. package/dist-lib/integrations/supabase/auth-middleware.js +52 -0
  104. package/dist-lib/integrations/supabase/client.d.ts +19777 -0
  105. package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
  106. package/dist-lib/integrations/supabase/client.js +13 -0
  107. package/dist-lib/integrations/supabase/client.server.d.ts +19777 -0
  108. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -0
  109. package/dist-lib/integrations/supabase/client.server.js +30 -0
  110. package/dist-lib/integrations/supabase/types.d.ts +20355 -0
  111. package/dist-lib/integrations/supabase/types.d.ts.map +1 -0
  112. package/dist-lib/integrations/supabase/types.js +78 -0
  113. package/dist-lib/lib/bufferMatching.d.ts +26 -0
  114. package/dist-lib/lib/bufferMatching.d.ts.map +1 -0
  115. package/dist-lib/lib/bufferMatching.js +73 -0
  116. package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts +23 -0
  117. package/dist-lib/lib/bulkLoadCarrierPlanning.server.d.ts.map +1 -0
  118. package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +126 -0
  119. package/dist-lib/lib/floridayDocuments.functions.d.ts +59415 -0
  120. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -0
  121. package/dist-lib/lib/floridayDocuments.functions.js +68 -0
  122. package/dist-lib/lib/floridayDocuments.server.d.ts +51 -0
  123. package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -0
  124. package/dist-lib/lib/floridayDocuments.server.js +109 -0
  125. package/dist-lib/lib/loadCarrierPlanner.d.ts +71 -0
  126. package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -0
  127. package/dist-lib/lib/loadCarrierPlanner.js +374 -0
  128. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +98984 -0
  129. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -0
  130. package/dist-lib/lib/loadCarrierPlanning.functions.js +106 -0
  131. package/dist-lib/lib/loadCarrierPlanning.server.d.ts +46 -0
  132. package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -0
  133. package/dist-lib/lib/loadCarrierPlanning.server.js +515 -0
  134. package/dist-lib/lib/loadCarrierTaskSync.server.d.ts +3 -0
  135. package/dist-lib/lib/loadCarrierTaskSync.server.d.ts.map +1 -0
  136. package/dist-lib/lib/loadCarrierTaskSync.server.js +56 -0
  137. package/dist-lib/lib/loadCarrierTypes.d.ts +19 -0
  138. package/dist-lib/lib/loadCarrierTypes.d.ts.map +1 -0
  139. package/dist-lib/lib/loadCarrierTypes.js +41 -0
  140. package/dist-lib/lib/logisticsPlanner.d.ts +56 -0
  141. package/dist-lib/lib/logisticsPlanner.d.ts.map +1 -0
  142. package/dist-lib/lib/logisticsPlanner.js +273 -0
  143. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +39575 -0
  144. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -0
  145. package/dist-lib/lib/logisticsRecalcJob.functions.js +30 -0
  146. package/dist-lib/lib/logisticsRecalcJob.server.d.ts +32 -0
  147. package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -0
  148. package/dist-lib/lib/logisticsRecalcJob.server.js +116 -0
  149. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +19792 -0
  150. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -0
  151. package/dist-lib/lib/logisticsRecalculate.functions.js +35 -0
  152. package/dist-lib/lib/logisticsTasks.d.ts +23 -0
  153. package/dist-lib/lib/logisticsTasks.d.ts.map +1 -0
  154. package/dist-lib/lib/logisticsTasks.js +92 -0
  155. package/dist-lib/lib/modulePrompts.d.ts +31 -0
  156. package/dist-lib/lib/modulePrompts.d.ts.map +1 -0
  157. package/dist-lib/lib/modulePrompts.js +1195 -0
  158. package/dist-lib/lib/ruleEngineImpact.d.ts +27 -0
  159. package/dist-lib/lib/ruleEngineImpact.d.ts.map +1 -0
  160. package/dist-lib/lib/ruleEngineImpact.js +257 -0
  161. package/dist-lib/lib/ruleEngineSchema.d.ts +69 -0
  162. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -0
  163. package/dist-lib/lib/ruleEngineSchema.js +899 -0
  164. package/dist-lib/lib/ruleEngineWizard.d.ts +17 -0
  165. package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -0
  166. package/dist-lib/lib/ruleEngineWizard.js +204 -0
  167. package/dist-lib/lib/utils.d.ts +3 -0
  168. package/dist-lib/lib/utils.d.ts.map +1 -0
  169. package/dist-lib/lib/utils.js +5 -0
  170. package/dist-lib/lib/validationSchemas.d.ts +15 -0
  171. package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
  172. package/dist-lib/lib/validationSchemas.js +25 -0
  173. package/dist-lib/styles.css +1 -0
  174. package/package.json +113 -0
  175. package/public/logo.png +0 -0
@@ -0,0 +1,68 @@
1
+ // ============================================================================
2
+ // src/lib/floridayDocuments.functions.ts
3
+ // Server-functions rond de Floriday-gateway. Dunne wrapper: alleen imports en
4
+ // createServerFn-declaraties. Alle logica staat in floridayDocuments.server.ts.
5
+ // ============================================================================
6
+ import { createServerFn } from "@tanstack/react-start";
7
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
8
+ /** Actieve Floriday-koppeling voor de banner in het instellingenscherm. */
9
+ export const getFloridayConnection = createServerFn({ method: "GET" })
10
+ .middleware([requireSupabaseAuth])
11
+ .handler(async () => {
12
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
13
+ const { getFlorydayActiveConnection } = await import("./floridayDocuments.server");
14
+ return getFlorydayActiveConnection(supabaseAdmin);
15
+ });
16
+ /** Eén document voor een printtaak. ok:false is een printfout, geen crash. */
17
+ export const fetchLogisticsDocument = createServerFn({ method: "POST" })
18
+ .middleware([requireSupabaseAuth])
19
+ .inputValidator((input) => input)
20
+ .handler(async ({ data }) => {
21
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
22
+ const { getFlorydayDocument, claimDocumentPrint, finishDocumentPrint } = await import("./floridayDocuments.server");
23
+ const supabase = supabaseAdmin;
24
+ const claim = await claimDocumentPrint(supabase, {
25
+ orderRef: data.orderRef,
26
+ documentType: data.documentType,
27
+ trigger: data.trigger,
28
+ taskId: data.taskId ?? null,
29
+ });
30
+ if (!claim.fresh) {
31
+ return { ok: false, skipped: true, error: "Dit document is al geprint." };
32
+ }
33
+ const kind = data.kind ?? (data.documentType === "sticker" ? "customer-sticker" : "delivery-note");
34
+ const result = await getFlorydayDocument(supabase, {
35
+ kind,
36
+ fulfillmentOrderId: data.fulfillmentOrderId,
37
+ deliveryOrderId: data.deliveryOrderId,
38
+ salesOrderId: data.salesOrderId,
39
+ logisticLabelCode: data.logisticLabelCode,
40
+ stickerId: data.stickerId,
41
+ });
42
+ await finishDocumentPrint(supabase, claim.id, result.ok, result.ok ? null : result.error);
43
+ return result;
44
+ });
45
+ /** Meerdere regels van één kar/afmelding als één printjob. */
46
+ export const fetchMergedLogisticsDocuments = createServerFn({ method: "POST" })
47
+ .middleware([requireSupabaseAuth])
48
+ .inputValidator((input) => input)
49
+ .handler(async ({ data }) => {
50
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
51
+ const { getFlorydayMergedDocument, claimDocumentPrint, finishDocumentPrint } = await import("./floridayDocuments.server");
52
+ const supabase = supabaseAdmin;
53
+ const claim = await claimDocumentPrint(supabase, {
54
+ orderRef: data.orderRef,
55
+ documentType: data.documentType,
56
+ trigger: data.trigger,
57
+ mergedBatchId: data.mergedBatchId ?? null,
58
+ });
59
+ if (!claim.fresh) {
60
+ return { ok: false, skipped: true, error: "Deze printjob is al verstuurd." };
61
+ }
62
+ const result = await getFlorydayMergedDocument(supabase, {
63
+ items: data.items,
64
+ onError: "skip",
65
+ });
66
+ await finishDocumentPrint(supabase, claim.id, result.ok, result.ok ? null : result.error);
67
+ return result;
68
+ });
@@ -0,0 +1,51 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ import { type PdfInput, type PdfResult, type PdfBulkMergedItem, type PdfBulkMergedResult } from "@flowselections/floriday-authenticatie-module/gateway";
3
+ export type FloridayEnvironment = "staging" | "live";
4
+ export interface FloridayActiveConnection {
5
+ ok: true;
6
+ environment: FloridayEnvironment;
7
+ connection: {
8
+ id: string;
9
+ label: string | null;
10
+ organization_name: string | null;
11
+ gln_code: string | null;
12
+ is_active: boolean;
13
+ } | null;
14
+ }
15
+ export interface FloridayConnectionError {
16
+ ok: false;
17
+ error: string;
18
+ }
19
+ /**
20
+ * Actieve koppeling zoals de authenticatie-module hem kent.
21
+ * De omgeving komt uit de module zelf; de begeleidende gegevens komen uit de
22
+ * publieke RPC van diezelfde module. Nooit een eigen keuze, nooit een eigen
23
+ * lees-query op floriday_connections.
24
+ */
25
+ export declare function getFlorydayActiveConnection(supabase: SupabaseClient): Promise<FloridayActiveConnection | FloridayConnectionError>;
26
+ /** Eén Floriday-document. Geeft nooit een throw, altijd een union. */
27
+ export declare function getFlorydayDocument(supabase: SupabaseClient, input: Omit<PdfInput, "environment">): Promise<PdfResult>;
28
+ /** Meerdere documenten samengevoegd tot één printjob. */
29
+ export declare function getFlorydayMergedDocument(supabase: SupabaseClient, input: {
30
+ items: PdfBulkMergedItem[];
31
+ onError?: "skip" | "fail";
32
+ }): Promise<PdfBulkMergedResult>;
33
+ /** Fulfillment-order aanmaken in Floriday. */
34
+ export declare function sendFlorydayFulfillmentOrder(supabase: SupabaseClient, body: unknown, caller?: string): Promise<import("@flowselections/floriday-authenticatie-module/gateway").FulfillmentOrderSendResult>;
35
+ export type DocumentKind = "delivery-note" | "logistic-label" | "auction-letter" | "customer-sticker";
36
+ export interface PrintClaim {
37
+ fresh: boolean;
38
+ id: string | null;
39
+ status: string;
40
+ }
41
+ /** Claim een printregel. fresh=false betekent: er is al geprint. */
42
+ export declare function claimDocumentPrint(supabase: SupabaseClient, args: {
43
+ orderRef: string;
44
+ documentType: string;
45
+ trigger: string;
46
+ taskId?: string | null;
47
+ mergedBatchId?: string | null;
48
+ environment?: string | null;
49
+ }): Promise<PrintClaim>;
50
+ export declare function finishDocumentPrint(supabase: SupabaseClient, id: string | null, ok: boolean, error?: string | null): Promise<void>;
51
+ //# sourceMappingURL=floridayDocuments.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floridayDocuments.server.d.ts","sourceRoot":"","sources":["../../src/lib/floridayDocuments.server.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,uDAAuD,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,wBAAwB,GAAG,uBAAuB,CAAC,CAqB7D;AAED,sEAAsE;AACtE,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,GACnC,OAAO,CAAC,SAAS,CAAC,CAOpB;AAED,yDAAyD;AACzD,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,8CAA8C;AAC9C,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,OAAO,EACb,MAAM,SAAqB,uGAG5B;AAMD,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAEtG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oEAAoE;AACpE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACA,OAAO,CAAC,UAAU,CAAC,CAiCrB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,cAAc,EACxB,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,EAAE,EAAE,OAAO,EACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,iBAWtB"}
@@ -0,0 +1,109 @@
1
+ // ============================================================================
2
+ // src/lib/floridayDocuments.server.ts
3
+ // Dunne wrapper rond de gateway van @flowselections/floriday-authenticatie-module.
4
+ //
5
+ // Regels:
6
+ // - Nooit via HTTP; de gateway-functies worden rechtstreeks geimporteerd via
7
+ // de package-subpath /gateway.
8
+ // - Nooit een eigen environment kiezen: de authenticatie-module bepaalt de
9
+ // actieve koppeling uit de database.
10
+ // - Altijd een supabase-client met service-role rechten meegeven; de
11
+ // cache-tabellen zijn admin-only.
12
+ // - Geen eigen token-logica, geen florydayFetch, geen HMAC, geen secrets.
13
+ // ============================================================================
14
+ import { runActiveEnvironment, runPdf, runPdfBulkMerged, runFulfillmentOrderSend, } from "@flowselections/floriday-authenticatie-module/gateway";
15
+ /**
16
+ * Actieve koppeling zoals de authenticatie-module hem kent.
17
+ * De omgeving komt uit de module zelf; de begeleidende gegevens komen uit de
18
+ * publieke RPC van diezelfde module. Nooit een eigen keuze, nooit een eigen
19
+ * lees-query op floriday_connections.
20
+ */
21
+ export async function getFlorydayActiveConnection(supabase) {
22
+ try {
23
+ const { environment } = await runActiveEnvironment(supabase);
24
+ const { data } = await supabase.rpc("get_active_floriday_connection_public");
25
+ const row = Array.isArray(data) ? data[0] : undefined;
26
+ return {
27
+ ok: true,
28
+ environment,
29
+ connection: row
30
+ ? {
31
+ id: String(row["id"] ?? ""),
32
+ label: row["label"] ?? null,
33
+ organization_name: row["organization_name"] ?? null,
34
+ gln_code: row["gln_code"] ?? null,
35
+ is_active: true,
36
+ }
37
+ : null,
38
+ };
39
+ }
40
+ catch (e) {
41
+ return { ok: false, error: String(e?.message ?? e) };
42
+ }
43
+ }
44
+ /** Eén Floriday-document. Geeft nooit een throw, altijd een union. */
45
+ export async function getFlorydayDocument(supabase, input) {
46
+ try {
47
+ const { environment } = await runActiveEnvironment(supabase);
48
+ return await runPdf(supabase, input, environment);
49
+ }
50
+ catch (e) {
51
+ return { ok: false, error: String(e?.message ?? e) };
52
+ }
53
+ }
54
+ /** Meerdere documenten samengevoegd tot één printjob. */
55
+ export async function getFlorydayMergedDocument(supabase, input) {
56
+ try {
57
+ const { environment } = await runActiveEnvironment(supabase);
58
+ return await runPdfBulkMerged(supabase, { items: input.items, onError: input.onError ?? "skip" }, environment);
59
+ }
60
+ catch (e) {
61
+ return { ok: false, status: 502, error: String(e?.message ?? e) };
62
+ }
63
+ }
64
+ /** Fulfillment-order aanmaken in Floriday. */
65
+ export async function sendFlorydayFulfillmentOrder(supabase, body, caller = "logistiek-engine") {
66
+ return runFulfillmentOrderSend(supabase, body, caller);
67
+ }
68
+ /** Claim een printregel. fresh=false betekent: er is al geprint. */
69
+ export async function claimDocumentPrint(supabase, args) {
70
+ const { data: existing } = await supabase
71
+ .from("logistics_document_prints")
72
+ .select("id, status")
73
+ .eq("order_ref", args.orderRef)
74
+ .eq("document_type", args.documentType)
75
+ .eq("trigger", args.trigger)
76
+ .maybeSingle();
77
+ if (existing && existing.status === "printed") {
78
+ return { fresh: false, id: existing.id, status: "printed" };
79
+ }
80
+ const { data, error } = await supabase
81
+ .from("logistics_document_prints")
82
+ .upsert({
83
+ order_ref: args.orderRef,
84
+ document_type: args.documentType,
85
+ trigger: args.trigger,
86
+ task_id: args.taskId ?? null,
87
+ merged_batch_id: args.mergedBatchId ?? null,
88
+ environment: args.environment ?? null,
89
+ status: "pending",
90
+ error: null,
91
+ }, { onConflict: "order_ref,document_type,trigger" })
92
+ .select("id, status")
93
+ .maybeSingle();
94
+ if (error)
95
+ return { fresh: true, id: null, status: "pending" };
96
+ return { fresh: true, id: data?.id ?? null, status: "pending" };
97
+ }
98
+ export async function finishDocumentPrint(supabase, id, ok, error) {
99
+ if (!id)
100
+ return;
101
+ await supabase
102
+ .from("logistics_document_prints")
103
+ .update({
104
+ status: ok ? "printed" : "failed",
105
+ error: ok ? null : (error ?? "onbekende printfout"),
106
+ printed_at: ok ? new Date().toISOString() : null,
107
+ })
108
+ .eq("id", id);
109
+ }
@@ -0,0 +1,71 @@
1
+ export declare const LOAD_CARRIER_PLANNER_VERSION = 2;
2
+ export type CapacityModel = "layered" | "stacked" | "single" | "none";
3
+ export interface CarrierProfile {
4
+ id?: string | null;
5
+ code: string;
6
+ name: string;
7
+ capacity_model: CapacityModel;
8
+ layers_per_carrier: number;
9
+ max_crates_per_layer?: number | null;
10
+ max_boxes?: number | null;
11
+ max_weight_kg?: number | null;
12
+ allow_mixing?: boolean | null;
13
+ }
14
+ export interface PlannerInputItem {
15
+ order_item_id: string;
16
+ order_id?: string | null;
17
+ customer_id?: string | null;
18
+ product_id: string | null;
19
+ product_name: string;
20
+ plants: number;
21
+ plants_per_crate: number;
22
+ crates_per_layer: number;
23
+ layers_per_cart: number;
24
+ /** Gewicht per fust in kg. Optioneel; alleen gebruikt bij max_weight_kg. */
25
+ weight_per_crate?: number | null;
26
+ }
27
+ export interface PlannerOptions {
28
+ carrier: CarrierProfile;
29
+ maxPartySharePerLayerPct?: number;
30
+ maxBeladingenPerLayer?: number;
31
+ neverMixProductIds?: Set<string>;
32
+ maxOrders?: number | null;
33
+ maxCustomers?: number | null;
34
+ oneCustomerPerLayer?: boolean;
35
+ /** Vanaf zoveel volle lagen krijgt een partij altijd een eigen ladingdrager. */
36
+ ownCarrierFromLayers?: number | null;
37
+ sortOrder?: "location" | "customer" | "product" | "size" | "none";
38
+ }
39
+ export interface PlannedLoadUnitItem {
40
+ order_item_id: string;
41
+ order_id: string | null;
42
+ product_id: string | null;
43
+ product_name: string;
44
+ crates: number;
45
+ plants: number;
46
+ boxes: number;
47
+ weight_kg: number | null;
48
+ plants_per_crate: number;
49
+ crates_per_layer: number;
50
+ layers_per_cart: number;
51
+ layer_fraction: number;
52
+ layer_share_pct: number;
53
+ }
54
+ export interface PlannedLoadUnit {
55
+ cart_number: number;
56
+ carrier_type: string;
57
+ carrier_type_id: string | null;
58
+ source: "auto";
59
+ is_complete: boolean;
60
+ occupancy_pct: number;
61
+ total_layers_used: number;
62
+ max_layers: number;
63
+ weight_kg: number | null;
64
+ items: PlannedLoadUnitItem[];
65
+ }
66
+ export interface PlannerOutput {
67
+ carts: PlannedLoadUnit[];
68
+ warnings: string[];
69
+ }
70
+ export declare function planLoadUnits(inputs: PlannerInputItem[], options: PlannerOptions): PlannerOutput;
71
+ //# sourceMappingURL=loadCarrierPlanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"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"}