InvoiceEmail
EmailKalemli fatura. Durum badge, tüm kalemler ve toplamlar, PDF indirme CTA.
Acme Corp
123 Main St · SF, CA
Invoice
INV-2026-0042
Issue DateMay 3, 2026
Due DateMay 17, 2026
Pro Plan₺999.90
Design System ×2₺300.00
Total₺1,533.88
Download PDF Invoice
© 2026 Acme Corp
Live preview// GET /theme/common/email/billing/invoice
res.render('theme/common/email/billing/invoice', {
layout: 'layouts/blank',
subject: 'Invoice #' + invoice.id + ' from Acme Corp',
fromName: 'Acme Corp',
fromEmail: 'noreply@acme.example.com',
toName: user.name,
toEmail: user.email,
company: { name: 'Acme Corp', address: '...' },
invoice: {
id: invoice.id,
date: invoice.createdAt.toLocaleDateString(),
dueDate: invoice.dueDate.toLocaleDateString(),
status: invoice.status, // 'PAID' | 'PENDING' | 'OVERDUE'
items: invoice.lineItems, // [{ name, variant, qty, price }]
totals: invoice.totals,
downloadUrl: '/invoices/' + invoice.id + '/pdf',
},
});
<%
var inv = locals.invoice || {};
var items = inv.items || [];
var totals = inv.totals || {};
var STATUS_COLORS = { PAID: 'bg-success/10 text-success border-success/30', PENDING: 'bg-warning/10 text-warning border-warning/30', OVERDUE: 'bg-error/10 text-error border-error/30' };
var statusClass = STATUS_COLORS[inv.status] || STATUS_COLORS.PENDING;
function fmtTRY(n) { return '₺' + (n || 0).toFixed(2); }
%>
<%- include('../_preview-bar', locals) %>
<%= company.name %>
<%= company.address %>
<%= inv.status %>
Invoice
<%= inv.id %>
Issue Date
<%= inv.date %>
Due Date
<%= inv.dueDate %>
Billed To
<%= toName %>
<%= toEmail %>
Item
Amount
<% items.forEach(function(item) { %>
<%= item.name %>
<% if (item.variant) { %><%= item.variant %>
<% } %>
Qty: <%= item.qty %>
<%= fmtTRY(item.price * item.qty) %>
<% }); %>
Subtotal<%= fmtTRY(totals.subtotal) %>
Tax<%= fmtTRY(totals.tax) %>
Total<%= fmtTRY(totals.total) %>
<%- include('../_footer', locals) %>