diff --git a/src/routes/invoices.js b/src/routes/invoices.js
index e490856..dc1896a 100644
--- a/src/routes/invoices.js
+++ b/src/routes/invoices.js
@@ -24,7 +24,28 @@ function calculateNextRecurringDate(invoiceDate, interval) {
}
return d.toISOString().split('T')[0];
}
+/**
+ * Build HTML block for Stripe Payment Link on PDF invoice.
+ * Returns empty string if no link or invoice is already paid.
+ */
+function buildPaymentLinkHtml(invoice) {
+ if (!invoice.stripe_payment_link_url) return '';
+ if (invoice.paid_date || invoice.stripe_payment_status === 'paid') return '';
+ return `
+
`;
+}
// GET all invoices
router.get('/', async (req, res) => {
try {
@@ -745,7 +766,8 @@ router.get('/:id/pdf', async (req, res) => {
.replace('{{INVOICE_DATE}}', formatDate(invoice.invoice_date))
.replace('{{TERMS}}', invoice.terms)
.replace('{{AUTHORIZATION}}', authHTML)
- .replace('{{ITEMS}}', itemsHTML);
+ .replace('{{ITEMS}}', itemsHTML)
+ .replace('{{PAYMENT_LINK}}', buildPaymentLinkHtml(invoice));
const pdf = await generatePdfFromHtml(html);
@@ -808,7 +830,8 @@ router.get('/:id/html', async (req, res) => {
.replace('{{INVOICE_DATE}}', formatDate(invoice.invoice_date))
.replace('{{TERMS}}', invoice.terms)
.replace('{{AUTHORIZATION}}', authHTML)
- .replace('{{ITEMS}}', itemsHTML);
+ .replace('{{ITEMS}}', itemsHTML)
+ .replace('{{PAYMENT_LINK}}', buildPaymentLinkHtml(invoice));
res.setHeader('Content-Type', 'text/html');
res.send(html);
@@ -862,7 +885,8 @@ router.post('/:id/send-email', async (req, res) => {
.replace('{{INVOICE_DATE}}', formatDate(invoice.invoice_date))
.replace('{{TERMS}}', invoice.terms)
.replace('{{AUTHORIZATION}}', authHTML)
- .replace('{{ITEMS}}', itemsHTML);
+ .replace('{{ITEMS}}', itemsHTML)
+ .replace('{{PAYMENT_LINK}}', buildPaymentLinkHtml(invoice));
const pdfBuffer = await generatePdfFromHtml(html);
diff --git a/templates/invoice-template.html b/templates/invoice-template.html
index d81e2c2..7cda1d1 100644
--- a/templates/invoice-template.html
+++ b/templates/invoice-template.html
@@ -282,6 +282,7 @@
{{ITEMS}}
+ {{PAYMENT_LINK}}