medusajs-documents-plugin 1.1.13 → 1.1.15
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.
- package/.medusa/server/src/admin/index.js +53 -29
- package/.medusa/server/src/admin/index.mjs +54 -30
- package/.medusa/server/src/api/admin/documents/[id]/sync-zoho/route.js +21 -4
- package/.medusa/server/src/api/admin/documents/custom/route.js +6 -4
- package/.medusa/server/src/api/admin/documents/manual/route.js +6 -4
- package/.medusa/server/src/api/admin/documents/templates/preview/route.js +1 -1
- package/.medusa/server/src/api/admin/documents/zoho/list/route.js +18 -7
- package/.medusa/server/src/api/api/store/documents/r/[code]/route.js +3 -42
- package/.medusa/server/src/api/documents/r/[code]/route.js +3 -37
- package/.medusa/server/src/api/documents/templates/preview/route.js +1 -1
- package/.medusa/server/src/api/r/[code]/route.js +3 -55
- package/.medusa/server/src/api/store/documents/r/[code]/route.js +4 -31
- package/.medusa/server/src/modules/documents/service.js +23 -7
- package/.medusa/server/src/services/notification-sender.js +5 -5
- package/.medusa/server/src/services/pdfkit-generator.js +58 -20
- package/.medusa/server/src/services/zoho-books.js +6 -4
- package/.medusa/server/src/subscribers/order-documents.js +17 -6
- package/.medusa/server/src/subscribers/repair-documents.js +45 -7
- package/.medusa/server/src/utils/shortlink-resolver.js +168 -0
- package/CHANGELOG.md +39 -0
- package/package.json +1 -1
|
@@ -62,13 +62,18 @@ async function repairDocumentsSubscriber({ event, container, }) {
|
|
|
62
62
|
let customerName = "Valued Customer";
|
|
63
63
|
let customerEmail = undefined;
|
|
64
64
|
let customerPhone = undefined;
|
|
65
|
+
let customerCompanyName = ticket.company_name ||
|
|
66
|
+
ticket.customer?.company_name ||
|
|
67
|
+
ticket.metadata?.company_name;
|
|
65
68
|
if (ticket.customer_id) {
|
|
66
69
|
try {
|
|
67
70
|
const customerModule = container.resolve("customer", { allowUnregistered: true });
|
|
68
71
|
if (customerModule) {
|
|
69
72
|
const c = await customerModule.retrieveCustomer(ticket.customer_id);
|
|
70
73
|
if (c) {
|
|
71
|
-
|
|
74
|
+
customerCompanyName = customerCompanyName || c.company_name || c.metadata?.company_name;
|
|
75
|
+
const personalName = c.first_name ? `${c.first_name} ${c.last_name || ""}`.trim() : "";
|
|
76
|
+
customerName = customerCompanyName || personalName || c.email || customerName;
|
|
72
77
|
customerEmail = c.email || undefined;
|
|
73
78
|
customerPhone = c.phone || undefined;
|
|
74
79
|
}
|
|
@@ -76,6 +81,11 @@ async function repairDocumentsSubscriber({ event, container, }) {
|
|
|
76
81
|
}
|
|
77
82
|
catch (e) { }
|
|
78
83
|
}
|
|
84
|
+
else if (ticket.customer_name || customerCompanyName) {
|
|
85
|
+
customerName = customerCompanyName || ticket.customer_name;
|
|
86
|
+
customerEmail = ticket.customer_email || undefined;
|
|
87
|
+
customerPhone = ticket.customer_phone || undefined;
|
|
88
|
+
}
|
|
79
89
|
const storeUrl = settings.storefront_url || process.env.STORE_URL || "http://localhost:3000";
|
|
80
90
|
const paymentInfo = (0, payment_link_1.generateRepairPaymentLink)(ticket, storeUrl);
|
|
81
91
|
// Fix 4: Build line items mapping inventory parts from product_variants as well as custom_parts
|
|
@@ -160,13 +170,40 @@ async function repairDocumentsSubscriber({ event, container, }) {
|
|
|
160
170
|
docType = "job_card";
|
|
161
171
|
docTitle = "Repair Job Card";
|
|
162
172
|
}
|
|
173
|
+
const cleanTicketNumber = String(ticket.ticket_number || "").replace(/^(JOB-|RT-)+/i, "");
|
|
163
174
|
const displayId = docType === "job_card"
|
|
164
|
-
? `JOB-${
|
|
175
|
+
? `JOB-${cleanTicketNumber}`
|
|
165
176
|
: docType === "receipt"
|
|
166
|
-
? `RCPT-${
|
|
177
|
+
? `RCPT-${cleanTicketNumber}`
|
|
167
178
|
: docType === "estimate"
|
|
168
|
-
? `EST-${
|
|
169
|
-
: `RT-${
|
|
179
|
+
? `EST-${cleanTicketNumber}`
|
|
180
|
+
: `RT-${cleanTicketNumber}`;
|
|
181
|
+
let currencyCode = ticket.currency_code || ticket.metadata?.currency_code;
|
|
182
|
+
if (!currencyCode) {
|
|
183
|
+
try {
|
|
184
|
+
const storeModule = container.resolve("store", { allowUnregistered: true });
|
|
185
|
+
if (storeModule) {
|
|
186
|
+
const [store] = await storeModule.listStores();
|
|
187
|
+
if (store?.default_currency_code) {
|
|
188
|
+
currencyCode = store.default_currency_code;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (e) { }
|
|
193
|
+
}
|
|
194
|
+
if (!currencyCode) {
|
|
195
|
+
try {
|
|
196
|
+
const regionModule = container.resolve("region", { allowUnregistered: true });
|
|
197
|
+
if (regionModule) {
|
|
198
|
+
const [reg] = await regionModule.listRegions();
|
|
199
|
+
if (reg?.currency_code) {
|
|
200
|
+
currencyCode = reg.currency_code;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e) { }
|
|
205
|
+
}
|
|
206
|
+
currencyCode = currencyCode || "kes";
|
|
170
207
|
const totalEstimate = eventName === "repair.payment_received" && data.amount != null && Number(data.amount) > 0
|
|
171
208
|
? Number(data.amount)
|
|
172
209
|
: Number(ticket.total_actual && ticket.total_actual > 0 ? ticket.total_actual : ticket.total_estimate || 0);
|
|
@@ -197,12 +234,13 @@ async function repairDocumentsSubscriber({ event, container, }) {
|
|
|
197
234
|
order_id: data.order_id || ticket.order_id || ticket.metadata?.order_id,
|
|
198
235
|
customer: {
|
|
199
236
|
name: customerName,
|
|
237
|
+
company_name: customerCompanyName || undefined,
|
|
200
238
|
email: customerEmail,
|
|
201
239
|
phone: customerPhone,
|
|
202
240
|
},
|
|
203
241
|
items: lineItems,
|
|
204
242
|
total: totalEstimate,
|
|
205
|
-
currency_code:
|
|
243
|
+
currency_code: currencyCode,
|
|
206
244
|
payment_status: isPaid ? "paid" : "unpaid",
|
|
207
245
|
payment_link: paymentOrTrackingLink || undefined,
|
|
208
246
|
auto_send: autoSend,
|
|
@@ -260,4 +298,4 @@ exports.config = {
|
|
|
260
298
|
"repair.payment_received",
|
|
261
299
|
],
|
|
262
300
|
};
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYWlyLWRvY3VtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZXBhaXItZG9jdW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDRDQStRQztBQXBSRCxxREFBc0U7QUFDdEUsb0RBQXdEO0FBRXhELHdEQUFrRTtBQUVuRCxLQUFLLFVBQVUseUJBQXlCLENBQUMsRUFDdEQsS0FBSyxFQUNMLFNBQVMsR0FDVztJQUNwQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUV4QixNQUFNLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE1BQU0sZUFBZSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFO1lBQ2pGLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXJELHlGQUF5RjtRQUN6RixNQUFNLFdBQVcsR0FDZixTQUFTLEtBQUssa0JBQWtCO1lBQ2hDLENBQUMsU0FBUyxLQUFLLHVCQUF1QjtnQkFDcEMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakUsdUJBQXVCO1FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFD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
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYWlyLWRvY3VtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZXBhaXItZG9jdW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDRDQW9UQztBQXpURCxxREFBc0U7QUFDdEUsb0RBQXdEO0FBRXhELHdEQUFrRTtBQUVuRCxLQUFLLFVBQVUseUJBQXlCLENBQUMsRUFDdEQsS0FBSyxFQUNMLFNBQVMsR0FDVztJQUNwQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUV4QixNQUFNLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE1BQU0sZUFBZSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFO1lBQ2pGLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXJELHlGQUF5RjtRQUN6RixNQUFNLFdBQVcsR0FDZixTQUFTLEtBQUssa0JBQWtCO1lBQ2hDLENBQUMsU0FBUyxLQUFLLHVCQUF1QjtnQkFDcEMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakUsdUJBQXVCO1FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFD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
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleShortlinkRedirect = handleShortlinkRedirect;
|
|
4
|
+
const documents_1 = require("../modules/documents");
|
|
5
|
+
const service_1 = require("../modules/documents/service");
|
|
6
|
+
/**
|
|
7
|
+
* Universal safe shortlink redirection handler.
|
|
8
|
+
* Resolves shortcodes from documents module, repair module, or direct knex fallback,
|
|
9
|
+
* safely extracts host and protocol across Express and Fastify environments,
|
|
10
|
+
* and performs redirection without throwing 500 errors.
|
|
11
|
+
*/
|
|
12
|
+
async function handleShortlinkRedirect(req, res, contextTag = "Shortlink") {
|
|
13
|
+
const code = req.params?.code;
|
|
14
|
+
if (!code || typeof code !== "string" || !code.trim()) {
|
|
15
|
+
return res.status(404).send("Link not found or expired.");
|
|
16
|
+
}
|
|
17
|
+
const cleanCode = code.trim();
|
|
18
|
+
try {
|
|
19
|
+
let targetUrl = null;
|
|
20
|
+
// 1. Resolve via DocumentModuleService
|
|
21
|
+
try {
|
|
22
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE, { allowUnregistered: true });
|
|
23
|
+
if (documentService) {
|
|
24
|
+
const links = await documentService.listDocumentLinks({ shortcode: cleanCode }).catch(() => []);
|
|
25
|
+
if (links && links.length > 0 && links[0].url) {
|
|
26
|
+
targetUrl = links[0].url;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (_) { }
|
|
31
|
+
// 2. Resolve via Repair Module if present
|
|
32
|
+
if (!targetUrl) {
|
|
33
|
+
try {
|
|
34
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
35
|
+
if (repairModule && typeof repairModule.listRepairLinks === "function") {
|
|
36
|
+
const links = await repairModule.listRepairLinks({ shortcode: cleanCode }).catch(() => []);
|
|
37
|
+
if (links && links.length > 0 && links[0].url) {
|
|
38
|
+
targetUrl = links[0].url;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (_) { }
|
|
43
|
+
}
|
|
44
|
+
// 3. Fallback direct SQL resolution using Knex
|
|
45
|
+
if (!targetUrl) {
|
|
46
|
+
try {
|
|
47
|
+
const pg = (0, service_1.getDatabaseConnection)(req.scope);
|
|
48
|
+
if (pg) {
|
|
49
|
+
// 3a. document_link table
|
|
50
|
+
try {
|
|
51
|
+
const row = await pg("document_link")
|
|
52
|
+
.where({ shortcode: cleanCode })
|
|
53
|
+
.first();
|
|
54
|
+
if (row && row.url) {
|
|
55
|
+
targetUrl = row.url;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (_) { }
|
|
59
|
+
// 3b. repair_link table
|
|
60
|
+
if (!targetUrl) {
|
|
61
|
+
try {
|
|
62
|
+
const row = await pg("repair_link")
|
|
63
|
+
.where({ shortcode: cleanCode })
|
|
64
|
+
.first();
|
|
65
|
+
if (row && row.url) {
|
|
66
|
+
targetUrl = row.url;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (_) { }
|
|
70
|
+
}
|
|
71
|
+
// 3c. document_record table (search short_payment_link or short_pdf_link)
|
|
72
|
+
if (!targetUrl) {
|
|
73
|
+
try {
|
|
74
|
+
const docRow = await pg("document_record")
|
|
75
|
+
.where(function () {
|
|
76
|
+
this.where("short_payment_link", "like", `%/r/${cleanCode}`)
|
|
77
|
+
.orWhere("short_payment_link", "like", `%/${cleanCode}`)
|
|
78
|
+
.orWhere("short_pdf_link", "like", `%/r/${cleanCode}`)
|
|
79
|
+
.orWhere("short_pdf_link", "like", `%/${cleanCode}`);
|
|
80
|
+
})
|
|
81
|
+
.first();
|
|
82
|
+
if (docRow) {
|
|
83
|
+
if (docRow.short_payment_link && docRow.short_payment_link.endsWith(cleanCode)) {
|
|
84
|
+
targetUrl = docRow.payment_link || docRow.short_payment_link;
|
|
85
|
+
}
|
|
86
|
+
else if (docRow.short_pdf_link && docRow.short_pdf_link.endsWith(cleanCode)) {
|
|
87
|
+
targetUrl = docRow.pdf_url || docRow.short_pdf_link;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (_) { }
|
|
92
|
+
}
|
|
93
|
+
// 3d. repair_ticket table (search short_payment_link)
|
|
94
|
+
if (!targetUrl) {
|
|
95
|
+
try {
|
|
96
|
+
const repRow = await pg("repair_ticket")
|
|
97
|
+
.where(function () {
|
|
98
|
+
this.where("short_payment_link", "like", `%/r/${cleanCode}`)
|
|
99
|
+
.orWhere("short_payment_link", "like", `%/${cleanCode}`);
|
|
100
|
+
})
|
|
101
|
+
.first();
|
|
102
|
+
if (repRow && repRow.payment_link && !repRow.payment_link.endsWith(cleanCode)) {
|
|
103
|
+
targetUrl = repRow.payment_link;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (_) { }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (_) { }
|
|
111
|
+
}
|
|
112
|
+
if (!targetUrl) {
|
|
113
|
+
return res.status(404).send("Link not found or expired.");
|
|
114
|
+
}
|
|
115
|
+
// Safe extraction of host and protocol
|
|
116
|
+
const getHeader = (name) => {
|
|
117
|
+
try {
|
|
118
|
+
if (typeof req.get === "function") {
|
|
119
|
+
const val = req.get(name);
|
|
120
|
+
if (val)
|
|
121
|
+
return val;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (_) { }
|
|
125
|
+
try {
|
|
126
|
+
if (req.headers && typeof req.headers === "object") {
|
|
127
|
+
const val = req.headers[name.toLowerCase()];
|
|
128
|
+
if (Array.isArray(val))
|
|
129
|
+
return val[0];
|
|
130
|
+
if (val != null)
|
|
131
|
+
return String(val);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (_) { }
|
|
135
|
+
return undefined;
|
|
136
|
+
};
|
|
137
|
+
const host = getHeader("x-forwarded-host") ||
|
|
138
|
+
getHeader("host") ||
|
|
139
|
+
req.hostname ||
|
|
140
|
+
"localhost:9000";
|
|
141
|
+
const forwardedProto = getHeader("x-forwarded-proto");
|
|
142
|
+
const protocol = (forwardedProto === "http" || forwardedProto === "https")
|
|
143
|
+
? forwardedProto
|
|
144
|
+
: (req.protocol || (host.includes("localhost") || host.includes("127.0.0.1") ? "http" : "https"));
|
|
145
|
+
// Normalize any document path pointing to admin or legacy routes
|
|
146
|
+
if (targetUrl.includes("/documents/")) {
|
|
147
|
+
const docSubpath = targetUrl.slice(targetUrl.indexOf("/documents/")).replace(/\/admin\/documents\//, "/documents/");
|
|
148
|
+
targetUrl = `${protocol}://${host}${docSubpath}`;
|
|
149
|
+
}
|
|
150
|
+
else if (targetUrl.startsWith("/")) {
|
|
151
|
+
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
152
|
+
}
|
|
153
|
+
// Perform redirect safely
|
|
154
|
+
if (typeof res.redirect === "function") {
|
|
155
|
+
return res.redirect(targetUrl);
|
|
156
|
+
}
|
|
157
|
+
res.setHeader("Location", targetUrl);
|
|
158
|
+
return res.status(302).send("Redirecting...");
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
try {
|
|
162
|
+
req.scope.resolve("logger", { allowUnregistered: true })?.error?.(`[${contextTag}] Error resolving /r/${cleanCode}: ${err.message}`);
|
|
163
|
+
}
|
|
164
|
+
catch (_) { }
|
|
165
|
+
return res.status(500).send("Error resolving link");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRsaW5rLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Nob3J0bGluay1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLDBEQWlLQztBQTFLRCxvREFBd0Q7QUFDeEQsMERBQTRGO0FBRTVGOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxHQUFvQyxFQUNwQyxHQUFtQixFQUNuQixhQUFxQixXQUFXO0lBRWhDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFOUIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQztRQUVwQyx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoSCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElB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
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [1.1.14] - 2026-10-16
|
|
11
|
+
|
|
12
|
+
### Company Name Support, Shortlink 500 Fix, Duplicate Prefix Cleanup & Currency Improvements
|
|
13
|
+
|
|
14
|
+
- **Short Payment Link HTTP 500 Resolution**:
|
|
15
|
+
- Implemented universal `handleShortlinkRedirect` utility protecting against `TypeError: req.get is not a function` across Medusa v2 / Express / Fastify environments.
|
|
16
|
+
- Added safe extraction of `host` (`x-forwarded-host` -> `host` -> `req.hostname` -> `localhost:9000`) and `protocol` (`x-forwarded-proto` -> `req.protocol` -> `https`).
|
|
17
|
+
- Added multi-tier fallback lookup: checks `documents` module, `repair` module, `document_link` table, `repair_link` table, `document_record` table, and `repair_ticket` table.
|
|
18
|
+
- Safe redirect execution via `res.redirect` with fallback to `Location` header + HTTP 302.
|
|
19
|
+
- Updated all shortlink routes: `/r/:code`, `/documents/r/:code`, `/store/documents/r/:code`, and `/api/store/documents/r/:code`.
|
|
20
|
+
- **Customer Company Name Priority**:
|
|
21
|
+
- Prioritized customer `company_name` over personal name across document records, PDFKit generator, and Zoho Books contact synchronization.
|
|
22
|
+
- Updated Modern, Classic, and Minimal PDFKit templates to render `customerDisplayName = data.customer.company_name || data.customer.name` with `(Attn: ${name})` when personal contact name differs.
|
|
23
|
+
- Added `company_name` input fields to manual document and custom document modals in Admin UI.
|
|
24
|
+
- **Prevent Pushing Non-Zoho Documents to Zoho Books**:
|
|
25
|
+
- Disabled and hid the "Push Zoho" action button in Admin UI for non-Zoho document types (`job_card`, `packing_slip`, `custom`) and documents with zero or negative total amounts.
|
|
26
|
+
- Enforced strict validation in `POST /admin/documents/:id/sync-zoho`, rejecting non-Zoho document types and zero-amount documents with informative HTTP 400 messages.
|
|
27
|
+
- **Eliminate Duplicate `RT-` & `JOB-RT-` Reference Prefixes**:
|
|
28
|
+
- Normalized repair ticket number prefixes across `repair-documents` subscriber and document generator to prevent duplicate prefixes such as `RT-RT-...` and `JOB-RT-...`.
|
|
29
|
+
- Output clean formatted reference IDs like `RT-1792156525673-SNL9QH` and `JOB-1792156525673-SNL9QH`.
|
|
30
|
+
- **Live Zoho Books Invoices UI & Hover Tooltip Refresh Button**:
|
|
31
|
+
- Converted the "Refresh Live Zoho" / "View Live Zoho" button in the filter bar and the Live Zoho table header into dedicated `IconButton` components wrapped with interactive hover tooltips (`<Tooltip content="Refresh Live Zoho Books Invoices">`).
|
|
32
|
+
- Live Zoho Books invoices table is permanently visible and automatically synchronized on initial mount, tab switches, and on-demand refreshes.
|
|
33
|
+
- **Default Document Types to Invoices**:
|
|
34
|
+
- Filter bar, preview modal, and manual document creation form now default to `"invoice"` (Tax Invoice / Invoices).
|
|
35
|
+
- **Currency Formatting Defaulted to KES**:
|
|
36
|
+
- Set default currency to `KES` (Kenya Shillings / `KSh 1,500.00`) across all Admin UI tables, amount summaries, PDFKit templates, and notification dispatches when not explicitly overridden by store region settings.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## [1.1.13] - 2026-10-16
|
|
41
|
+
|
|
42
|
+
### Live Zoho Books Invoices View Enhancements
|
|
43
|
+
|
|
44
|
+
- Added persistent Live Zoho Books Invoices table to the Documents Hub.
|
|
45
|
+
- Automatically queries Zoho API upon mounting with localized empty states.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
10
49
|
## [1.1.12] - 2026-10-16
|
|
11
50
|
|
|
12
51
|
### Admin UI Enhancements: Auto-fetch Live Zoho Documents & Invoices Default Filter
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medusajs-documents-plugin",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.15",
|
|
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",
|