medusajs-documents-plugin 1.1.18 → 1.1.20

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.
@@ -64,6 +64,15 @@ function getDocTypeLabel(type) {
64
64
  return type || "Document";
65
65
  }
66
66
  }
67
+ function formatCurrency(amount, currencyCode) {
68
+ const raw = (currencyCode || "kes").toLowerCase().trim();
69
+ const normalized = !raw || raw === "usd" ? "KES" : raw.toUpperCase();
70
+ const locale = normalized === "KES" ? "en-KE" : "en-US";
71
+ return new Intl.NumberFormat(locale, {
72
+ style: "currency",
73
+ currency: normalized
74
+ }).format(Number(amount) || 0);
75
+ }
67
76
  function groupDocuments(documents) {
68
77
  var _a, _b;
69
78
  if (!documents || documents.length === 0) return [];
@@ -163,7 +172,8 @@ function groupDocuments(documents) {
163
172
  const totalAmount = Number(
164
173
  invoiceDoc && invoiceDoc.total_amount != null ? invoiceDoc.total_amount : estimateDoc && estimateDoc.total_amount != null ? estimateDoc.total_amount : receiptDoc && receiptDoc.total_amount != null ? receiptDoc.total_amount : primaryDoc.total_amount || 0
165
174
  );
166
- const currencyCode = primaryDoc.currency_code || (invoiceDoc == null ? void 0 : invoiceDoc.currency_code) || "kes";
175
+ const rawCurrency = (primaryDoc.currency_code || (invoiceDoc == null ? void 0 : invoiceDoc.currency_code) || "kes").toLowerCase().trim();
176
+ const currencyCode = !rawCurrency || rawCurrency === "usd" ? "kes" : rawCurrency;
167
177
  const uniqueTypes = Array.from(new Set(clusterDocs.map((d) => getDocTypeLabel(d.type))));
168
178
  const includedTypesSummary = uniqueTypes.join(" • ");
169
179
  const latestCreatedAt = clusterDocs.reduce((latest, d) => {
@@ -910,10 +920,7 @@ const DocumentsPage = () => {
910
920
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium", children: group.customerName || "Guest" }),
911
921
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] text-ui-fg-subtle", children: group.customerEmail || group.customerPhone || "-" })
912
922
  ] }) }),
913
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold", children: new Intl.NumberFormat("en-US", {
914
- style: "currency",
915
- currency: (group.currencyCode || "KES").toUpperCase()
916
- }).format(Number(group.totalAmount || 0)) }) }),
923
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold", children: formatCurrency(group.totalAmount, group.currencyCode) }) }),
917
924
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: isPaid ? "green" : doc.payment_status === "unpaid" ? "red" : "blue", size: "small", children: doc.payment_status || doc.status }) }),
918
925
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: isZoho ? "purple" : "grey", size: "small", children: isZoho ? "Zoho Books" : "PDFKit" }) }),
919
926
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-ui-fg-subtle", children: new Date(group.latestCreatedAt).toLocaleDateString() }) }),
@@ -954,10 +961,7 @@ const DocumentsPage = () => {
954
961
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-ui-fg-subtle", children: subDoc.display_id })
955
962
  ] }),
956
963
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
957
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? new Intl.NumberFormat("en-US", {
958
- style: "currency",
959
- currency: (subDoc.currency_code || "KES").toUpperCase()
960
- }).format(Number(subDoc.total_amount)) : "—" }),
964
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? formatCurrency(subDoc.total_amount, subDoc.currency_code) : "—" }),
961
965
  /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowDownTray, { className: "w-3.5 h-3.5 text-ui-fg-subtle" })
962
966
  ] })
963
967
  ]
@@ -1070,10 +1074,7 @@ const DocumentsPage = () => {
1070
1074
  children: subDoc.display_id
1071
1075
  }
1072
1076
  ) }),
1073
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2 px-3 font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? new Intl.NumberFormat("en-US", {
1074
- style: "currency",
1075
- currency: (subDoc.currency_code || "KES").toUpperCase()
1076
- }).format(Number(subDoc.total_amount)) : "—" }),
1077
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2 px-3 font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? formatCurrency(subDoc.total_amount, subDoc.currency_code) : "—" }),
1077
1078
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2 px-3", children: /* @__PURE__ */ jsxRuntime.jsx(
1078
1079
  ui.Badge,
1079
1080
  {
@@ -1159,10 +1160,7 @@ const DocumentsPage = () => {
1159
1160
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium", children: doc.customer_name || "Guest" }),
1160
1161
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] text-ui-fg-subtle", children: doc.customer_email || doc.customer_phone || "-" })
1161
1162
  ] }) }),
1162
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold", children: new Intl.NumberFormat("en-US", {
1163
- style: "currency",
1164
- currency: (doc.currency_code || "KES").toUpperCase()
1165
- }).format(Number(doc.total_amount || 0)) }) }),
1163
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold", children: formatCurrency(doc.total_amount, doc.currency_code) }) }),
1166
1164
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: isPaid ? "green" : doc.payment_status === "unpaid" ? "red" : "blue", size: "small", children: doc.payment_status || doc.status }) }),
1167
1165
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: isZoho ? "purple" : "grey", size: "small", children: isZoho ? "Zoho Books" : "PDFKit" }) }),
1168
1166
  /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-ui-fg-subtle", children: new Date(doc.created_at).toLocaleDateString() }) }),
@@ -2419,10 +2417,7 @@ Your *{document_title} #{display_id}* has been generated.
2419
2417
  ] }),
2420
2418
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "col-span-2 flex flex-col items-end justify-between self-stretch", children: [
2421
2419
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-[11px] text-ui-fg-subtle mb-0.5", children: "Row Total" }),
2422
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: new Intl.NumberFormat("en-US", {
2423
- style: "currency",
2424
- currency: (manualForm.currency_code || "KES").toUpperCase()
2425
- }).format(lineTotal) }),
2420
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: formatCurrency(lineTotal, manualForm.currency_code) }),
2426
2421
  manualForm.items.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
2427
2422
  "button",
2428
2423
  {
@@ -2464,14 +2459,12 @@ Your *{document_title} #{display_id}* has been generated.
2464
2459
  ),
2465
2460
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 bg-ui-bg-subtle px-4 py-2 rounded border border-ui-border-base", children: [
2466
2461
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-ui-fg-subtle font-medium", children: "Document Total:" }),
2467
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: new Intl.NumberFormat("en-US", {
2468
- style: "currency",
2469
- currency: (manualForm.currency_code || "KES").toUpperCase()
2470
- }).format(
2462
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: formatCurrency(
2471
2463
  manualForm.items.reduce(
2472
2464
  (sum, it) => sum + (Number(it.quantity) || 0) * (Number(it.unit_price) || 0),
2473
2465
  0
2474
- )
2466
+ ),
2467
+ manualForm.currency_code
2475
2468
  ) })
2476
2469
  ] })
2477
2470
  ] })
@@ -2720,10 +2713,7 @@ Your *{document_title} #{display_id}* has been generated.
2720
2713
  ] }),
2721
2714
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "col-span-2 flex flex-col items-end justify-between self-stretch", children: [
2722
2715
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-[11px] text-ui-fg-subtle mb-0.5", children: "Row Total" }),
2723
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: new Intl.NumberFormat("en-US", {
2724
- style: "currency",
2725
- currency: (customDocForm.currency_code || "KES").toUpperCase()
2726
- }).format(lineTotal) }),
2716
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: formatCurrency(lineTotal, customDocForm.currency_code) }),
2727
2717
  customDocForm.items.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
2728
2718
  "button",
2729
2719
  {
@@ -2765,14 +2755,12 @@ Your *{document_title} #{display_id}* has been generated.
2765
2755
  ),
2766
2756
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 bg-ui-bg-subtle px-4 py-2 rounded border border-ui-border-base", children: [
2767
2757
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-ui-fg-subtle font-medium", children: "Document Total:" }),
2768
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: new Intl.NumberFormat("en-US", {
2769
- style: "currency",
2770
- currency: (customDocForm.currency_code || "KES").toUpperCase()
2771
- }).format(
2758
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: formatCurrency(
2772
2759
  customDocForm.items.reduce(
2773
2760
  (sum, it) => sum + (Number(it.quantity) || 0) * (Number(it.unit_price) || 0),
2774
2761
  0
2775
- )
2762
+ ),
2763
+ customDocForm.currency_code
2776
2764
  ) })
2777
2765
  ] })
2778
2766
  ] })
@@ -63,6 +63,15 @@ function getDocTypeLabel(type) {
63
63
  return type || "Document";
64
64
  }
65
65
  }
66
+ function formatCurrency(amount, currencyCode) {
67
+ const raw = (currencyCode || "kes").toLowerCase().trim();
68
+ const normalized = !raw || raw === "usd" ? "KES" : raw.toUpperCase();
69
+ const locale = normalized === "KES" ? "en-KE" : "en-US";
70
+ return new Intl.NumberFormat(locale, {
71
+ style: "currency",
72
+ currency: normalized
73
+ }).format(Number(amount) || 0);
74
+ }
66
75
  function groupDocuments(documents) {
67
76
  var _a, _b;
68
77
  if (!documents || documents.length === 0) return [];
@@ -162,7 +171,8 @@ function groupDocuments(documents) {
162
171
  const totalAmount = Number(
163
172
  invoiceDoc && invoiceDoc.total_amount != null ? invoiceDoc.total_amount : estimateDoc && estimateDoc.total_amount != null ? estimateDoc.total_amount : receiptDoc && receiptDoc.total_amount != null ? receiptDoc.total_amount : primaryDoc.total_amount || 0
164
173
  );
165
- const currencyCode = primaryDoc.currency_code || (invoiceDoc == null ? void 0 : invoiceDoc.currency_code) || "kes";
174
+ const rawCurrency = (primaryDoc.currency_code || (invoiceDoc == null ? void 0 : invoiceDoc.currency_code) || "kes").toLowerCase().trim();
175
+ const currencyCode = !rawCurrency || rawCurrency === "usd" ? "kes" : rawCurrency;
166
176
  const uniqueTypes = Array.from(new Set(clusterDocs.map((d) => getDocTypeLabel(d.type))));
167
177
  const includedTypesSummary = uniqueTypes.join(" • ");
168
178
  const latestCreatedAt = clusterDocs.reduce((latest, d) => {
@@ -909,10 +919,7 @@ const DocumentsPage = () => {
909
919
  /* @__PURE__ */ jsx("span", { className: "text-xs font-medium", children: group.customerName || "Guest" }),
910
920
  /* @__PURE__ */ jsx("span", { className: "text-[11px] text-ui-fg-subtle", children: group.customerEmail || group.customerPhone || "-" })
911
921
  ] }) }),
912
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: new Intl.NumberFormat("en-US", {
913
- style: "currency",
914
- currency: (group.currencyCode || "KES").toUpperCase()
915
- }).format(Number(group.totalAmount || 0)) }) }),
922
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: formatCurrency(group.totalAmount, group.currencyCode) }) }),
916
923
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: isPaid ? "green" : doc.payment_status === "unpaid" ? "red" : "blue", size: "small", children: doc.payment_status || doc.status }) }),
917
924
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: isZoho ? "purple" : "grey", size: "small", children: isZoho ? "Zoho Books" : "PDFKit" }) }),
918
925
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs text-ui-fg-subtle", children: new Date(group.latestCreatedAt).toLocaleDateString() }) }),
@@ -953,10 +960,7 @@ const DocumentsPage = () => {
953
960
  /* @__PURE__ */ jsx("span", { className: "text-[10px] text-ui-fg-subtle", children: subDoc.display_id })
954
961
  ] }),
955
962
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
956
- /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? new Intl.NumberFormat("en-US", {
957
- style: "currency",
958
- currency: (subDoc.currency_code || "KES").toUpperCase()
959
- }).format(Number(subDoc.total_amount)) : "—" }),
963
+ /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? formatCurrency(subDoc.total_amount, subDoc.currency_code) : "—" }),
960
964
  /* @__PURE__ */ jsx(ArrowDownTray, { className: "w-3.5 h-3.5 text-ui-fg-subtle" })
961
965
  ] })
962
966
  ]
@@ -1069,10 +1073,7 @@ const DocumentsPage = () => {
1069
1073
  children: subDoc.display_id
1070
1074
  }
1071
1075
  ) }),
1072
- /* @__PURE__ */ jsx("td", { className: "py-2 px-3 font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? new Intl.NumberFormat("en-US", {
1073
- style: "currency",
1074
- currency: (subDoc.currency_code || "KES").toUpperCase()
1075
- }).format(Number(subDoc.total_amount)) : "—" }),
1076
+ /* @__PURE__ */ jsx("td", { className: "py-2 px-3 font-semibold text-ui-fg-base", children: subDoc.total_amount != null && Number(subDoc.total_amount) > 0 ? formatCurrency(subDoc.total_amount, subDoc.currency_code) : "—" }),
1076
1077
  /* @__PURE__ */ jsx("td", { className: "py-2 px-3", children: /* @__PURE__ */ jsx(
1077
1078
  Badge,
1078
1079
  {
@@ -1158,10 +1159,7 @@ const DocumentsPage = () => {
1158
1159
  /* @__PURE__ */ jsx("span", { className: "text-xs font-medium", children: doc.customer_name || "Guest" }),
1159
1160
  /* @__PURE__ */ jsx("span", { className: "text-[11px] text-ui-fg-subtle", children: doc.customer_email || doc.customer_phone || "-" })
1160
1161
  ] }) }),
1161
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: new Intl.NumberFormat("en-US", {
1162
- style: "currency",
1163
- currency: (doc.currency_code || "KES").toUpperCase()
1164
- }).format(Number(doc.total_amount || 0)) }) }),
1162
+ /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: formatCurrency(doc.total_amount, doc.currency_code) }) }),
1165
1163
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: isPaid ? "green" : doc.payment_status === "unpaid" ? "red" : "blue", size: "small", children: doc.payment_status || doc.status }) }),
1166
1164
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: isZoho ? "purple" : "grey", size: "small", children: isZoho ? "Zoho Books" : "PDFKit" }) }),
1167
1165
  /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("span", { className: "text-xs text-ui-fg-subtle", children: new Date(doc.created_at).toLocaleDateString() }) }),
@@ -2418,10 +2416,7 @@ Your *{document_title} #{display_id}* has been generated.
2418
2416
  ] }),
2419
2417
  /* @__PURE__ */ jsxs("div", { className: "col-span-2 flex flex-col items-end justify-between self-stretch", children: [
2420
2418
  /* @__PURE__ */ jsx(Label, { className: "text-[11px] text-ui-fg-subtle mb-0.5", children: "Row Total" }),
2421
- /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: new Intl.NumberFormat("en-US", {
2422
- style: "currency",
2423
- currency: (manualForm.currency_code || "KES").toUpperCase()
2424
- }).format(lineTotal) }),
2419
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: formatCurrency(lineTotal, manualForm.currency_code) }),
2425
2420
  manualForm.items.length > 1 && /* @__PURE__ */ jsx(
2426
2421
  "button",
2427
2422
  {
@@ -2463,14 +2458,12 @@ Your *{document_title} #{display_id}* has been generated.
2463
2458
  ),
2464
2459
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 bg-ui-bg-subtle px-4 py-2 rounded border border-ui-border-base", children: [
2465
2460
  /* @__PURE__ */ jsx("span", { className: "text-xs text-ui-fg-subtle font-medium", children: "Document Total:" }),
2466
- /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: new Intl.NumberFormat("en-US", {
2467
- style: "currency",
2468
- currency: (manualForm.currency_code || "KES").toUpperCase()
2469
- }).format(
2461
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: formatCurrency(
2470
2462
  manualForm.items.reduce(
2471
2463
  (sum, it) => sum + (Number(it.quantity) || 0) * (Number(it.unit_price) || 0),
2472
2464
  0
2473
- )
2465
+ ),
2466
+ manualForm.currency_code
2474
2467
  ) })
2475
2468
  ] })
2476
2469
  ] })
@@ -2719,10 +2712,7 @@ Your *{document_title} #{display_id}* has been generated.
2719
2712
  ] }),
2720
2713
  /* @__PURE__ */ jsxs("div", { className: "col-span-2 flex flex-col items-end justify-between self-stretch", children: [
2721
2714
  /* @__PURE__ */ jsx(Label, { className: "text-[11px] text-ui-fg-subtle mb-0.5", children: "Row Total" }),
2722
- /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: new Intl.NumberFormat("en-US", {
2723
- style: "currency",
2724
- currency: (customDocForm.currency_code || "KES").toUpperCase()
2725
- }).format(lineTotal) }),
2715
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-ui-fg-base py-1", children: formatCurrency(lineTotal, customDocForm.currency_code) }),
2726
2716
  customDocForm.items.length > 1 && /* @__PURE__ */ jsx(
2727
2717
  "button",
2728
2718
  {
@@ -2764,14 +2754,12 @@ Your *{document_title} #{display_id}* has been generated.
2764
2754
  ),
2765
2755
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 bg-ui-bg-subtle px-4 py-2 rounded border border-ui-border-base", children: [
2766
2756
  /* @__PURE__ */ jsx("span", { className: "text-xs text-ui-fg-subtle font-medium", children: "Document Total:" }),
2767
- /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: new Intl.NumberFormat("en-US", {
2768
- style: "currency",
2769
- currency: (customDocForm.currency_code || "KES").toUpperCase()
2770
- }).format(
2757
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-ui-fg-base", children: formatCurrency(
2771
2758
  customDocForm.items.reduce(
2772
2759
  (sum, it) => sum + (Number(it.quantity) || 0) * (Number(it.unit_price) || 0),
2773
2760
  0
2774
- )
2761
+ ),
2762
+ customDocForm.currency_code
2775
2763
  ) })
2776
2764
  ] })
2777
2765
  ] })
@@ -19,7 +19,7 @@ exports.DocumentRecord = utils_1.model.define("document_record", {
19
19
  zoho_document_id: utils_1.model.text().nullable(), // ID from Zoho Books API
20
20
  // Financial fields
21
21
  total_amount: utils_1.model.number().default(0),
22
- currency_code: utils_1.model.text().default("usd"),
22
+ currency_code: utils_1.model.text().default("kes"),
23
23
  payment_status: utils_1.model.text().default("unpaid"), // "paid" | "unpaid" | "not_applicable"
24
24
  // Links
25
25
  payment_link: utils_1.model.text().nullable(),
@@ -4,6 +4,7 @@ exports.extractBaseReference = extractBaseReference;
4
4
  exports.getDocTypePriority = getDocTypePriority;
5
5
  exports.getDocLifecycleOrder = getDocLifecycleOrder;
6
6
  exports.getDocTypeLabel = getDocTypeLabel;
7
+ exports.formatCurrency = formatCurrency;
7
8
  exports.groupDocuments = groupDocuments;
8
9
  /**
9
10
  * Extracts normalized base reference by stripping known document prefixes.
@@ -89,6 +90,19 @@ function getDocTypeLabel(type) {
89
90
  return type || "Document";
90
91
  }
91
92
  }
93
+ /**
94
+ * Formats a numeric currency amount into a localized currency string.
95
+ * Defaults to en-KE / KES (Ksh ... or KES ...), treating empty or legacy "usd" as "kes".
96
+ */
97
+ function formatCurrency(amount, currencyCode) {
98
+ const raw = (currencyCode || "kes").toLowerCase().trim();
99
+ const normalized = (!raw || raw === "usd") ? "KES" : raw.toUpperCase();
100
+ const locale = normalized === "KES" ? "en-KE" : "en-US";
101
+ return new Intl.NumberFormat(locale, {
102
+ style: "currency",
103
+ currency: normalized,
104
+ }).format(Number(amount) || 0);
105
+ }
92
106
  /**
93
107
  * Groups related documents by job or order using a multi-tier correlation algorithm.
94
108
  * 1. Ties documents by repair_ticket_id
@@ -202,8 +216,9 @@ function groupDocuments(documents) {
202
216
  : (receiptDoc && receiptDoc.total_amount != null)
203
217
  ? receiptDoc.total_amount
204
218
  : primaryDoc.total_amount || 0);
205
- // Group currency
206
- const currencyCode = primaryDoc.currency_code || invoiceDoc?.currency_code || "kes";
219
+ // Group currency: normalize legacy "usd" or empty to "kes"
220
+ const rawCurrency = (primaryDoc.currency_code || invoiceDoc?.currency_code || "kes").toLowerCase().trim();
221
+ const currencyCode = (!rawCurrency || rawCurrency === "usd") ? "kes" : rawCurrency;
207
222
  // Summary of included types
208
223
  const uniqueTypes = Array.from(new Set(clusterDocs.map((d) => getDocTypeLabel(d.type))));
209
224
  const includedTypesSummary = uniqueTypes.join(" • ");
@@ -238,4 +253,4 @@ function groupDocuments(documents) {
238
253
  groups.sort((a, b) => new Date(b.latestCreatedAt).getTime() - new Date(a.latestCreatedAt).getTime());
239
254
  return groups;
240
255
  }
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JvdXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9kb2N1bWVudC1ncm91cGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaURBLG9EQU1DO0FBTUQsZ0RBaUJDO0FBTUQsb0RBaUJDO0FBS0QsMENBaUJDO0FBUUQsd0NBbUtDO0FBaFFEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxTQUFrQjtJQUNyRCxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6Qyx3RUFBd0U7SUFDeEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsSUFBYTtJQUM5QyxRQUFRLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzVCLEtBQUssU0FBUztZQUNaLE9BQU8sR0FBRyxDQUFDLENBQUMsc0NBQXNDO1FBQ3BELEtBQUssVUFBVTtZQUNiLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLFNBQVM7WUFDWixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssY0FBYztZQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1o7WUFDRSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsSUFBYTtJQUNoRCxRQUFRLElBQUksRUFBRSxXQUFXLEVBQUUs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
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JvdXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9kb2N1bWVudC1ncm91cGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaURBLG9EQU1DO0FBTUQsZ0RBaUJDO0FBTUQsb0RBaUJDO0FBS0QsMENBaUJDO0FBTUQsd0NBUUM7QUFRRCx3Q0FvS0M7QUEvUUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLFNBQWtCO0lBQ3JELElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pDLHdFQUF3RTtJQUN4RSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFhO0lBQzlDLFFBQVEsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDNUIsS0FBSyxTQUFTO1lBQ1osT0FBTyxHQUFHLENBQUMsQ0FBQyxzQ0FBc0M7UUFDcEQsS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLFVBQVU7WUFDYixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssU0FBUztZQUNaLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxjQUFjO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxRQUFRO1lBQ1gsT0FBTyxFQUFFLENBQUM7UUFDWjtZQUNFLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFhO0lBQ2hELFFBQVEsSUFBSSxFQUFF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QUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2RCxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUIsZ0NBQWdDO1FBQ2hDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoQyxRQUFRLEdBQUcsVUFBVSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0MsQ0FBQzthQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLFFBQVEsR0FBRyxVQUFVLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVE7WUFDUixVQUFVO1lBQ1YsU0FBUyxFQUFFLFdBQVc7WUFDdEIsVUFBVTtZQUNWLFdBQVc7WUFDWCxZQUFZO1lBQ1osWUFBWSxFQUFFLFVBQVUsQ0FBQyxhQUFhLElBQUksaUJBQWlCO1lBQzNELGFBQWEsRUFBRSxVQUFVLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjO1lBQ3JHLGFBQWEsRUFBRSxVQUFVLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjO1lBQ3JHLGVBQWU7WUFDZixvQkFBb0I7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXJHLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.1.19] - 2026-10-17
11
+
12
+ ### Localized Currency Normalization & KES Formatting
13
+ - **Document Record Currency Default**: Updated default currency to `kes` in `DocumentRecord` model.
14
+ - **Document Grouper Currency Normalization**: Fallback normalizes legacy `"usd"` or empty currency codes to `"kes"` so grouped packs consistently format in KES.
15
+ - **Admin Hub Currency Formatting**: Introduced `formatCurrency` helper across all Admin Hub views (master packed rows, related docs dropdown, accordion sub-tables, flat list, and creation modals), defaulting to `en-KE` / `KES` (`KSh ...`) and preventing unwanted dollar (`$`) rendering.
16
+
10
17
  ## [1.1.17] - 2026-10-16
11
18
 
12
19
  ### Seamless Zoho Books Credentials Inheritance
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusajs-documents-plugin",
3
- "version": "1.1.18",
3
+ "version": "1.1.20",
4
4
  "description": "Comprehensive document generation and management module for Medusa v2 with Zoho Books integration, PDFKit fallback, QR codes, shortlinks, multi-channel notifications and unified admin hub.",
5
5
  "author": "Urban Device Care <info@urbandevicecare.co.uk>",
6
6
  "license": "MIT",