medusajs-documents-plugin 0.0.0-stage → 1.1.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.
- package/.medusa/server/src/admin/index.js +2427 -0
- package/.medusa/server/src/admin/index.mjs +2428 -0
- package/.medusa/server/src/api/admin/documents/[id]/document/route.js +36 -0
- package/.medusa/server/src/api/admin/documents/[id]/send/route.js +41 -0
- package/.medusa/server/src/api/admin/documents/[id]/sync-zoho/route.js +68 -0
- package/.medusa/server/src/api/admin/documents/custom/route.js +48 -0
- package/.medusa/server/src/api/admin/documents/manual/route.js +46 -0
- package/.medusa/server/src/api/admin/documents/route.js +36 -0
- package/.medusa/server/src/api/admin/documents/settings/route.js +44 -0
- package/.medusa/server/src/api/admin/documents/templates/preview/route.js +159 -0
- package/.medusa/server/src/api/admin/documents/zoho/list/route.js +51 -0
- package/.medusa/server/src/api/documents/[id]/document/route.js +36 -0
- package/.medusa/server/src/api/documents/r/[code]/route.js +29 -0
- package/.medusa/server/src/api/documents/templates/preview/route.js +159 -0
- package/.medusa/server/src/api/store/documents/r/[code]/route.js +22 -0
- package/.medusa/server/src/index.js +27 -0
- package/.medusa/server/src/modules/documents/index.js +13 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20261012164601.js +23 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20261014150000.js +20 -0
- package/.medusa/server/src/modules/documents/models/document-link.js +12 -0
- package/.medusa/server/src/modules/documents/models/document-record.js +33 -0
- package/.medusa/server/src/modules/documents/models/document-settings.js +61 -0
- package/.medusa/server/src/modules/documents/service.js +456 -0
- package/.medusa/server/src/services/notification-sender.js +293 -0
- package/.medusa/server/src/services/pdf-post-processor.js +64 -0
- package/.medusa/server/src/services/pdfkit-generator.js +438 -0
- package/.medusa/server/src/services/zoho-books.js +221 -0
- package/.medusa/server/src/subscribers/order-documents.js +178 -0
- package/.medusa/server/src/subscribers/repair-documents.js +162 -0
- package/.medusa/server/src/utils/integrate.js +37 -0
- package/.medusa/server/src/utils/payment-link.js +69 -0
- package/.medusa/server/src/workflows/create-manual-document.js +27 -0
- package/.medusa/server/src/workflows/generate-document.js +24 -0
- package/.medusa/server/src/workflows/index.js +20 -0
- package/.medusa/server/src/workflows/send-document-notification.js +41 -0
- package/CHANGELOG.md +87 -0
- package/LICENSE +21 -0
- package/README.md +201 -2
- package/package.json +86 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../modules/documents");
|
|
5
|
+
// GET /documents/r/:code (Public shortlink redirect - no publishable API key or admin auth required)
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const code = req.params.code;
|
|
8
|
+
try {
|
|
9
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
10
|
+
const links = await documentService.listDocumentLinks({ shortcode: code });
|
|
11
|
+
if (links && links.length > 0) {
|
|
12
|
+
let targetUrl = links[0].url;
|
|
13
|
+
// If relative URL, prepend backend origin
|
|
14
|
+
if (targetUrl.startsWith("/")) {
|
|
15
|
+
const host = req.get("host") || "localhost:9000";
|
|
16
|
+
const protocol = req.protocol || "http";
|
|
17
|
+
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
18
|
+
}
|
|
19
|
+
res.setHeader("Location", targetUrl);
|
|
20
|
+
return res.status(302).send("Redirecting...");
|
|
21
|
+
}
|
|
22
|
+
return res.status(404).send("Document link not found or expired.");
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
req.scope.resolve("logger")?.error(`[Documents-Public] Error resolving shortlink ${code}: ${err.message}`);
|
|
26
|
+
return res.status(500).send("Error resolving document link");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy9yL1tjb2RlXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQXVCQztBQTNCRCw2REFBaUU7QUFHakUscUdBQXFHO0FBQzlGLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBb0MsRUFBRSxHQUFtQjtJQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztRQUNuRixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM3QiwwQ0FBMEM7WUFDMUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO2dCQUN4QyxTQUFTLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ2xELENBQUM7WUFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsZ0RBQWdELElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../modules/documents");
|
|
5
|
+
const pdfkit_generator_1 = require("../../../../services/pdfkit-generator");
|
|
6
|
+
// GET /documents/templates/preview?style=modern | classic | minimal&type=invoice | receipt | packing_slip | estimate | custom | job_card
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
try {
|
|
9
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
10
|
+
const settings = (await documentService.getSettings().catch(() => ({}))) || {};
|
|
11
|
+
const rawStyle = String(req.query.style || "").trim().toLowerCase();
|
|
12
|
+
const style = ["modern", "classic", "minimal"].includes(rawStyle) ? rawStyle : "modern";
|
|
13
|
+
const rawType = String(req.query.type || "").trim().toLowerCase();
|
|
14
|
+
const validTypes = ["invoice", "receipt", "packing_slip", "estimate", "custom", "job_card"];
|
|
15
|
+
const type = (validTypes.includes(rawType) ? rawType : "invoice");
|
|
16
|
+
const isJobCard = type === "job_card";
|
|
17
|
+
const isCustom = type === "custom";
|
|
18
|
+
const isReceipt = type === "receipt";
|
|
19
|
+
const isPackingSlip = type === "packing_slip";
|
|
20
|
+
const isEstimate = type === "estimate";
|
|
21
|
+
const companyName = settings.company_name || "Urban Device Care Ltd";
|
|
22
|
+
const sampleData = {
|
|
23
|
+
display_id: isJobCard
|
|
24
|
+
? "JOB-1042"
|
|
25
|
+
: isReceipt
|
|
26
|
+
? "REC-4019"
|
|
27
|
+
: isPackingSlip
|
|
28
|
+
? "PKG-8821"
|
|
29
|
+
: isEstimate
|
|
30
|
+
? "EST-3091"
|
|
31
|
+
: isCustom
|
|
32
|
+
? "CERT-7701"
|
|
33
|
+
: "INV-1092",
|
|
34
|
+
title: isJobCard
|
|
35
|
+
? "Repair Job Card"
|
|
36
|
+
: type === "invoice"
|
|
37
|
+
? "Tax Invoice"
|
|
38
|
+
: isReceipt
|
|
39
|
+
? "Payment Receipt"
|
|
40
|
+
: isPackingSlip
|
|
41
|
+
? "Packing Slip"
|
|
42
|
+
: isEstimate
|
|
43
|
+
? "Quotation / Estimate"
|
|
44
|
+
: "Warranty Certificate",
|
|
45
|
+
type: type,
|
|
46
|
+
date: new Date().toISOString().split("T")[0],
|
|
47
|
+
due_date: (type === "invoice" || isEstimate)
|
|
48
|
+
? new Date(Date.now() + 14 * 86400000).toISOString().split("T")[0]
|
|
49
|
+
: undefined,
|
|
50
|
+
customer: {
|
|
51
|
+
name: "Jane Doe",
|
|
52
|
+
email: "jane.doe@example.com",
|
|
53
|
+
phone: "+44 7911 123456",
|
|
54
|
+
address: "221B Baker Street, Marylebone, London, NW1 6XE",
|
|
55
|
+
},
|
|
56
|
+
company: {
|
|
57
|
+
name: companyName,
|
|
58
|
+
logo_url: settings.pdf_logo_url,
|
|
59
|
+
address: settings.pdf_address || "123 High Street, Tech Park, London",
|
|
60
|
+
phone: settings.pdf_phone || "+44 20 7946 0991",
|
|
61
|
+
email: settings.pdf_email || "support@urbandevicecare.co.uk",
|
|
62
|
+
website: settings.pdf_website || "www.urbandevicecare.co.uk",
|
|
63
|
+
payment_details: settings.pdf_payment_details || "Bank: Barclays | Acct: 12345678 | Sort: 20-00-00",
|
|
64
|
+
terms: settings.pdf_terms || "Payment is due within 14 days of invoice date. Thank you for your business.",
|
|
65
|
+
},
|
|
66
|
+
items: isJobCard
|
|
67
|
+
? [
|
|
68
|
+
{ title: "Initial Physical Inspection & Safety Boot Test", quantity: 1, unit_price: 0, total: 0 },
|
|
69
|
+
{ title: "OEM OLED Display Replacement & Digitizer Calibration", quantity: 1, unit_price: 0, total: 0 },
|
|
70
|
+
{ title: "TrueTone & Ambient Light Sensor Transfer", quantity: 1, unit_price: 0, total: 0 },
|
|
71
|
+
{ title: "Battery Health Diagnostic & Load Testing", quantity: 1, unit_price: 0, total: 0 },
|
|
72
|
+
{ title: "Final Multi-Point Bench Clearance & Sanitization", quantity: 1, unit_price: 0, total: 0 },
|
|
73
|
+
]
|
|
74
|
+
: isCustom
|
|
75
|
+
? [
|
|
76
|
+
{
|
|
77
|
+
title: "OEM Component & Hardware Warranty",
|
|
78
|
+
description: "90-Day Comprehensive Hardware Protection",
|
|
79
|
+
quantity: 1,
|
|
80
|
+
unit_price: 0,
|
|
81
|
+
total: 0,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
title: "Workshop Quality Clearance",
|
|
85
|
+
description: "Multi-Point Hardware Bench Certification",
|
|
86
|
+
quantity: 1,
|
|
87
|
+
unit_price: 0,
|
|
88
|
+
total: 0,
|
|
89
|
+
},
|
|
90
|
+
]
|
|
91
|
+
: [
|
|
92
|
+
{
|
|
93
|
+
title: "Apple iPhone 14 Screen Replacement",
|
|
94
|
+
description: "OEM Grade OLED Assembly with TrueTone restoration",
|
|
95
|
+
quantity: 1,
|
|
96
|
+
unit_price: 189.0,
|
|
97
|
+
total: 189.0,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
title: "Diagnostic & Workshop Labor Fee",
|
|
101
|
+
description: "Full device diagnostic and multi-point hardware inspection",
|
|
102
|
+
quantity: 1,
|
|
103
|
+
unit_price: 45.0,
|
|
104
|
+
total: 45.0,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
title: "Tempered Glass Screen Protector",
|
|
108
|
+
description: "9H Hardness Edge-to-Edge protection",
|
|
109
|
+
quantity: 1,
|
|
110
|
+
unit_price: 15.0,
|
|
111
|
+
total: 15.0,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
subtotal: (isJobCard || isPackingSlip || isCustom) ? undefined : 249.0,
|
|
115
|
+
tax_total: (isJobCard || isPackingSlip || isCustom) ? undefined : 24.9,
|
|
116
|
+
discount_total: (isJobCard || isPackingSlip || isCustom) ? undefined : 10.0,
|
|
117
|
+
total: (isJobCard || isPackingSlip || isCustom) ? 0 : 263.9,
|
|
118
|
+
currency_code: "usd",
|
|
119
|
+
payment_status: isReceipt ? "paid" : "unpaid",
|
|
120
|
+
payment_link: (type === "invoice" || isEstimate) ? "https://store.urbandevicecare.co.uk/pay/sample-preview-token" : undefined,
|
|
121
|
+
qr_url: (type === "invoice" || isEstimate || isJobCard) ? "https://store.urbandevicecare.co.uk/track/JOB-1042" : undefined,
|
|
122
|
+
notes: isJobCard
|
|
123
|
+
? "Customer acknowledges device physical intake condition and workshop repair terms."
|
|
124
|
+
: isReceipt
|
|
125
|
+
? "Payment received in full via Paystack. Thank you for your custom!"
|
|
126
|
+
: isPackingSlip
|
|
127
|
+
? "Please inspect contents immediately upon receipt. Keep this slip for your delivery records."
|
|
128
|
+
: isEstimate
|
|
129
|
+
? "This quotation is valid for 30 calendar days from the date of issue."
|
|
130
|
+
: isCustom
|
|
131
|
+
? "Retain this warranty certificate for official warranty claim verification."
|
|
132
|
+
: "Please scan the QR code to complete payment securely via Paystack.",
|
|
133
|
+
body_text: isCustom
|
|
134
|
+
? "This official certificate verifies that the aforementioned device has undergone professional repairs with genuine OEM-specification components and has passed our multi-point quality assurance inspection.\n\nAll hardware replacements and associated workshop labor are covered under our comprehensive 90-day warranty against defects in parts and workmanship."
|
|
135
|
+
: undefined,
|
|
136
|
+
custom_fields: isJobCard
|
|
137
|
+
? {
|
|
138
|
+
"Device Model": "Apple iPhone 14 Pro Max",
|
|
139
|
+
"Serial / IMEI": "F2LZ90K8MD6R",
|
|
140
|
+
"Technician": "Alex Morgan",
|
|
141
|
+
"Reported Fault": "Cracked front glass, intermittent touch on upper quadrant",
|
|
142
|
+
"Cosmetic Condition": "Light casing scuffs; screen fractured",
|
|
143
|
+
"Accessories Left": "None (Unit only)",
|
|
144
|
+
}
|
|
145
|
+
: undefined,
|
|
146
|
+
};
|
|
147
|
+
const pdfBuffer = await pdfkit_generator_1.PDFKitGenerator.generate(sampleData, style);
|
|
148
|
+
res.setHeader("Content-Type", "application/pdf");
|
|
149
|
+
res.setHeader("Content-Disposition", `inline; filename="preview-${style}-${type}.pdf"`);
|
|
150
|
+
res.setHeader("Content-Length", String(pdfBuffer.length));
|
|
151
|
+
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
152
|
+
return res.send(pdfBuffer);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
req.scope.resolve("logger")?.error(`[Documents-API] Error generating preview: ${err.message}`);
|
|
156
|
+
return res.status(500).send(`Failed to generate preview: ${err.message}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy90ZW1wbGF0ZXMvcHJldmlldy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLGtCQTZKQztBQWxLRCw2REFBaUU7QUFFakUsNEVBQXNGO0FBRXRGLHlJQUF5STtBQUNsSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUM7UUFDbkYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRS9FLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUV4RixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sSUFBSSxHQUFH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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../../modules/documents");
|
|
5
|
+
// GET /store/documents/r/:code
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const code = req.params.code;
|
|
8
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
9
|
+
const links = await documentService.listDocumentLinks({ shortcode: code });
|
|
10
|
+
if (links && links.length > 0) {
|
|
11
|
+
let targetUrl = links[0].url;
|
|
12
|
+
if (targetUrl.startsWith("/")) {
|
|
13
|
+
const host = req.get("host") || "localhost:9000";
|
|
14
|
+
const protocol = req.protocol || "http";
|
|
15
|
+
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
16
|
+
}
|
|
17
|
+
res.setHeader("Location", targetUrl);
|
|
18
|
+
return res.status(302).send("Redirecting...");
|
|
19
|
+
}
|
|
20
|
+
return res.status(404).send("Document link not found or expired.");
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2RvY3VtZW50cy9yL1tjb2RlXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQWtCQztBQXRCRCxnRUFBb0U7QUFHcEUsK0JBQStCO0FBQ3hCLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBb0MsRUFBRSxHQUFtQjtJQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztJQUVuRixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO1lBQ3hDLFNBQVMsR0FBRyxHQUFHLFFBQVEsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMifQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.delegateDocumentGeneration = exports.DOCUMENTS_MODULE = exports.default = void 0;
|
|
21
|
+
var documents_1 = require("./modules/documents");
|
|
22
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(documents_1).default; } });
|
|
23
|
+
Object.defineProperty(exports, "DOCUMENTS_MODULE", { enumerable: true, get: function () { return documents_1.DOCUMENTS_MODULE; } });
|
|
24
|
+
__exportStar(require("./workflows"), exports);
|
|
25
|
+
var integrate_1 = require("./utils/integrate");
|
|
26
|
+
Object.defineProperty(exports, "delegateDocumentGeneration", { enumerable: true, get: function () { return integrate_1.delegateDocumentGeneration; } });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBZ0U7QUFBdkQscUhBQUEsT0FBTyxPQUFBO0FBQUUsNkdBQUEsZ0JBQWdCLE9BQUE7QUFDbEMsOENBQTRCO0FBQzVCLCtDQUErRDtBQUF0RCx1SEFBQSwwQkFBMEIsT0FBQSJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DOCUMENTS_MODULE = void 0;
|
|
7
|
+
const service_1 = __importDefault(require("./service"));
|
|
8
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
9
|
+
exports.DOCUMENTS_MODULE = "documents";
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.DOCUMENTS_MODULE, {
|
|
11
|
+
service: service_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQThDO0FBQzlDLHFEQUFtRDtBQUV0QyxRQUFBLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUU1QyxrQkFBZSxJQUFBLGNBQU0sRUFBQyx3QkFBZ0IsRUFBRTtJQUN0QyxPQUFPLEVBQUUsaUJBQXFCO0NBQy9CLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261012164601 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261012164601 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "document_link" drop constraint if exists "document_link_shortcode_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "document_link" ("id" text not null, "shortcode" text not null, "url" text not null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_link_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_document_link_shortcode_unique" ON "document_link" ("shortcode") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_link_deleted_at" ON "document_link" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
11
|
+
this.addSql(`create table if not exists "document_record" ("id" text not null, "display_id" text not null, "title" text not null default 'Document', "type" text not null, "source" text not null default 'pdfkit', "status" text not null default 'draft', "customer_name" text null, "customer_email" text null, "customer_phone" text null, "order_id" text null, "repair_ticket_id" text null, "zoho_document_id" text null, "total_amount" integer not null default 0, "currency_code" text not null default 'usd', "payment_status" text not null default 'unpaid', "payment_link" text null, "short_payment_link" text null, "pdf_url" text null, "short_pdf_link" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_record_pkey" primary key ("id"));`);
|
|
12
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_record_deleted_at" ON "document_record" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
13
|
+
this.addSql(`create table if not exists "document_settings" ("id" text not null, "email_notifications_enabled" boolean not null default true, "sms_notifications_enabled" boolean not null default true, "whatsapp_notifications_enabled" boolean not null default true, "event_order_placed_enabled" boolean not null default true, "event_order_completed_enabled" boolean not null default true, "event_payment_captured_enabled" boolean not null default true, "event_order_fulfillment_enabled" boolean not null default true, "event_repair_status_changed_enabled" boolean not null default true, "event_repair_compliance_enabled" boolean not null default true, "event_repair_created_enabled" boolean not null default true, "event_repair_completed_enabled" boolean not null default true, "event_repair_reminder_enabled" boolean not null default true, "zoho_books_enabled" boolean not null default false, "zoho_client_id" text null, "zoho_client_secret" text null, "zoho_refresh_token" text null, "zoho_organization_id" text null, "zoho_domain" text not null default 'com', "zoho_invoice_terms" text null, "zoho_invoice_notes" text null, "zoho_estimate_terms" text null, "zoho_payment_terms_days" integer not null default 0, "zoho_tax_inclusive" boolean not null default false, "zoho_invoice_prefix" text not null default 'INV-', "zoho_include_payment_qr" boolean not null default true, "zoho_custom_field_payment_link" text null, "company_name" text not null default 'Company Store', "storefront_url" text null, "pdf_logo_url" text null, "pdf_address" text null, "pdf_phone" text null, "pdf_email" text null, "pdf_website" text null, "pdf_payment_details" text null, "pdf_terms" text null, "invoice_template" text not null default 'modern', "packing_slip_template" text not null default 'modern', "receipt_template" text not null default 'modern', "estimate_template" text not null default 'modern', "job_card_template" text not null default 'modern', "custom_doc_template" text not null default 'modern', "email_subject_template" text null, "email_body_template" text null, "sms_body_template" text null, "whatsapp_body_template" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_settings_pkey" primary key ("id"));`);
|
|
14
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_settings_deleted_at" ON "document_settings" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
15
|
+
}
|
|
16
|
+
async down() {
|
|
17
|
+
this.addSql(`drop table if exists "document_link" cascade;`);
|
|
18
|
+
this.addSql(`drop table if exists "document_record" cascade;`);
|
|
19
|
+
this.addSql(`drop table if exists "document_settings" cascade;`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Migration20261012164601 = Migration20261012164601;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMTIxNjQ2MDEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAxMjE2NDYwMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsbUdBQW1HLENBQUMsQ0FBQztRQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLDhUQUE4VCxDQUFDLENBQUM7UUFDNVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtSUFBbUksQ0FBQyxDQUFDO1FBQ2pKLElBQUksQ0FBQyxNQUFNLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUVySSxJQUFJLENBQUMsTUFBTSxDQUFDLHcxQkFBdzFCLENBQUMsQ0FBQztRQUN0MkIsSUFBSSxDQUFDLE1BQU0sQ0FBQywySEFBMkgsQ0FBQyxDQUFDO1FBRXpJLElBQUksQ0FBQyxNQUFNLENBQUMsaXdFQUFpd0UsQ0FBQyxDQUFDO1FBQy93RSxJQUFJLENBQUMsTUFBTSxDQUFDLCtIQUErSCxDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FFRjtBQXJCRCwwREFxQkMifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261014150000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261014150000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "document_settings" add column if not exists "email_subject_template" text null;`);
|
|
8
|
+
this.addSql(`alter table if exists "document_settings" add column if not exists "email_body_template" text null;`);
|
|
9
|
+
this.addSql(`alter table if exists "document_settings" add column if not exists "sms_body_template" text null;`);
|
|
10
|
+
this.addSql(`alter table if exists "document_settings" add column if not exists "whatsapp_body_template" text null;`);
|
|
11
|
+
}
|
|
12
|
+
async down() {
|
|
13
|
+
this.addSql(`alter table if exists "document_settings" drop column if exists "email_subject_template";`);
|
|
14
|
+
this.addSql(`alter table if exists "document_settings" drop column if exists "email_body_template";`);
|
|
15
|
+
this.addSql(`alter table if exists "document_settings" drop column if exists "sms_body_template";`);
|
|
16
|
+
this.addSql(`alter table if exists "document_settings" drop column if exists "whatsapp_body_template";`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.Migration20261014150000 = Migration20261014150000;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMTQxNTAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAxNDE1MDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsTUFBTSxDQUFDLHFHQUFxRyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsd0dBQXdHLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxNQUFNLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsTUFBTSxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQzNHLENBQUM7Q0FFRjtBQWhCRCwwREFnQkMifQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentLink = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.DocumentLink = utils_1.model.define("document_link", {
|
|
6
|
+
id: utils_1.model.id().primaryKey(),
|
|
7
|
+
shortcode: utils_1.model.text().unique(),
|
|
8
|
+
url: utils_1.model.text(),
|
|
9
|
+
metadata: utils_1.model.json().nullable(),
|
|
10
|
+
});
|
|
11
|
+
exports.default = exports.DocumentLink;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9tb2RlbHMvZG9jdW1lbnQtbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBa0Q7QUFFckMsUUFBQSxZQUFZLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7SUFDeEQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7SUFDaEMsR0FBRyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDakIsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsb0JBQVksQ0FBQyJ9
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentRecord = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.DocumentRecord = utils_1.model.define("document_record", {
|
|
6
|
+
id: utils_1.model.id().primaryKey(),
|
|
7
|
+
display_id: utils_1.model.text(), // e.g. "INV-1001", "DOC-501", "RCPT-1001"
|
|
8
|
+
title: utils_1.model.text().default("Document"), // e.g. "Tax Invoice", "Packing Slip", "Warranty Certificate"
|
|
9
|
+
type: utils_1.model.text(), // "invoice" | "receipt" | "estimate" | "packing_slip" | "custom"
|
|
10
|
+
source: utils_1.model.text().default("pdfkit"), // "zoho" | "pdfkit"
|
|
11
|
+
status: utils_1.model.text().default("draft"), // "draft" | "sent" | "paid" | "unpaid" | "void"
|
|
12
|
+
// Recipient details
|
|
13
|
+
customer_name: utils_1.model.text().nullable(),
|
|
14
|
+
customer_email: utils_1.model.text().nullable(),
|
|
15
|
+
customer_phone: utils_1.model.text().nullable(),
|
|
16
|
+
// Relationships / references
|
|
17
|
+
order_id: utils_1.model.text().nullable(),
|
|
18
|
+
repair_ticket_id: utils_1.model.text().nullable(),
|
|
19
|
+
zoho_document_id: utils_1.model.text().nullable(), // ID from Zoho Books API
|
|
20
|
+
// Financial fields
|
|
21
|
+
total_amount: utils_1.model.number().default(0),
|
|
22
|
+
currency_code: utils_1.model.text().default("usd"),
|
|
23
|
+
payment_status: utils_1.model.text().default("unpaid"), // "paid" | "unpaid" | "not_applicable"
|
|
24
|
+
// Links
|
|
25
|
+
payment_link: utils_1.model.text().nullable(),
|
|
26
|
+
short_payment_link: utils_1.model.text().nullable(),
|
|
27
|
+
pdf_url: utils_1.model.text().nullable(),
|
|
28
|
+
short_pdf_link: utils_1.model.text().nullable(),
|
|
29
|
+
// Structured custom data & line items
|
|
30
|
+
metadata: utils_1.model.json().nullable(),
|
|
31
|
+
});
|
|
32
|
+
exports.default = exports.DocumentRecord;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL21vZGVscy9kb2N1bWVudC1yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBRXJDLFFBQUEsY0FBYyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7SUFDNUQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSwwQ0FBMEM7SUFDcEUsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsNkRBQTZEO0lBQ3RHLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsaUVBQWlFO0lBQ3JGLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLG9CQUFvQjtJQUM1RCxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7SUFFdkYsb0JBQW9CO0lBQ3BCLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3RDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXZDLDZCQUE2QjtJQUM3QixRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxnQkFBZ0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pDLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSx5QkFBeUI7SUFFcEUsbUJBQW1CO0lBQ25CLFlBQVksRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2QyxhQUFhLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDMUMsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsdUNBQXVDO0lBRXZGLFFBQVE7SUFDUixZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXZDLHNDQUFzQztJQUN0QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDLENBQUM7QUFFSCxrQkFBZSxzQkFBYyxDQUFDIn0=
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentSettings = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.DocumentSettings = utils_1.model.define("document_settings", {
|
|
6
|
+
id: utils_1.model.id().primaryKey(),
|
|
7
|
+
// Notification channels
|
|
8
|
+
email_notifications_enabled: utils_1.model.boolean().default(true),
|
|
9
|
+
sms_notifications_enabled: utils_1.model.boolean().default(true),
|
|
10
|
+
whatsapp_notifications_enabled: utils_1.model.boolean().default(true),
|
|
11
|
+
// Automation / Event Subscribers on/off toggles
|
|
12
|
+
event_order_placed_enabled: utils_1.model.boolean().default(true),
|
|
13
|
+
event_order_completed_enabled: utils_1.model.boolean().default(true),
|
|
14
|
+
event_payment_captured_enabled: utils_1.model.boolean().default(true),
|
|
15
|
+
event_order_fulfillment_enabled: utils_1.model.boolean().default(true),
|
|
16
|
+
event_repair_status_changed_enabled: utils_1.model.boolean().default(true),
|
|
17
|
+
event_repair_compliance_enabled: utils_1.model.boolean().default(true),
|
|
18
|
+
event_repair_created_enabled: utils_1.model.boolean().default(true),
|
|
19
|
+
event_repair_completed_enabled: utils_1.model.boolean().default(true),
|
|
20
|
+
event_repair_reminder_enabled: utils_1.model.boolean().default(true),
|
|
21
|
+
// Zoho Books Credentials
|
|
22
|
+
zoho_books_enabled: utils_1.model.boolean().default(false),
|
|
23
|
+
zoho_client_id: utils_1.model.text().nullable(),
|
|
24
|
+
zoho_client_secret: utils_1.model.text().nullable(),
|
|
25
|
+
zoho_refresh_token: utils_1.model.text().nullable(),
|
|
26
|
+
zoho_organization_id: utils_1.model.text().nullable(),
|
|
27
|
+
zoho_domain: utils_1.model.text().default("com"),
|
|
28
|
+
// Exposed Zoho Customizations
|
|
29
|
+
zoho_invoice_terms: utils_1.model.text().nullable(),
|
|
30
|
+
zoho_invoice_notes: utils_1.model.text().nullable(),
|
|
31
|
+
zoho_estimate_terms: utils_1.model.text().nullable(),
|
|
32
|
+
zoho_payment_terms_days: utils_1.model.number().default(0),
|
|
33
|
+
zoho_tax_inclusive: utils_1.model.boolean().default(false),
|
|
34
|
+
zoho_invoice_prefix: utils_1.model.text().default("INV-"),
|
|
35
|
+
zoho_include_payment_qr: utils_1.model.boolean().default(true),
|
|
36
|
+
zoho_custom_field_payment_link: utils_1.model.text().nullable(),
|
|
37
|
+
// Company Details & PDF Branding
|
|
38
|
+
company_name: utils_1.model.text().default("Company Store"),
|
|
39
|
+
storefront_url: utils_1.model.text().nullable(),
|
|
40
|
+
pdf_logo_url: utils_1.model.text().nullable(),
|
|
41
|
+
pdf_address: utils_1.model.text().nullable(),
|
|
42
|
+
pdf_phone: utils_1.model.text().nullable(),
|
|
43
|
+
pdf_email: utils_1.model.text().nullable(),
|
|
44
|
+
pdf_website: utils_1.model.text().nullable(),
|
|
45
|
+
pdf_payment_details: utils_1.model.text().nullable(),
|
|
46
|
+
pdf_terms: utils_1.model.text().nullable(),
|
|
47
|
+
// PDFKit Template Selections
|
|
48
|
+
invoice_template: utils_1.model.text().default("modern"),
|
|
49
|
+
packing_slip_template: utils_1.model.text().default("modern"),
|
|
50
|
+
receipt_template: utils_1.model.text().default("modern"),
|
|
51
|
+
estimate_template: utils_1.model.text().default("modern"),
|
|
52
|
+
job_card_template: utils_1.model.text().default("modern"),
|
|
53
|
+
custom_doc_template: utils_1.model.text().default("modern"),
|
|
54
|
+
// Customizable Notification Body & Subject Templates
|
|
55
|
+
email_subject_template: utils_1.model.text().nullable(),
|
|
56
|
+
email_body_template: utils_1.model.text().nullable(),
|
|
57
|
+
sms_body_template: utils_1.model.text().nullable(),
|
|
58
|
+
whatsapp_body_template: utils_1.model.text().nullable(),
|
|
59
|
+
});
|
|
60
|
+
exports.default = exports.DocumentSettings;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbW9kZWxzL2RvY3VtZW50LXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFrRDtBQUVyQyxRQUFBLGdCQUFnQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7SUFDaEUsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFFM0Isd0JBQXdCO0lBQ3hCLDJCQUEyQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFELHlCQUF5QixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hELDhCQUE4QixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBRTdELGdEQUFnRDtJQUNoRCwwQkFBMEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN6RCw2QkFBNkIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM1RCw4QkFBOEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3RCwrQkFBK0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM5RCxtQ0FBbUMsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNsRSwrQkFBK0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM5RCw0QkFBNEIsRUFBRSxhQUFL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
|