fix(email): sibling billing emails follow customer language too
Addresses the PR #763 review: the invoice_sent / storno_issued / payment-check / paid-admin-notification emails share the identical event-first language bug and never set __language, so a German customer on an English-gallery event got an English email body with German-formatted amounts. Each call site already computes the locale it formats amounts in, so this is a one-liner per call — the body language now matches the amount formatting: - invoice_sent, storno_issued (sending.js) -> __language: ctx.locale - payment-check, invoice_paid_admin_notification (payments.js) -> __language: locale Leak-safe (no template references {{__language}}) and falls back to the existing event-first resolution when unset, per the mechanism added in #763.
This commit is contained in:
@@ -185,6 +185,8 @@ async function queueInvoicePaidAdminNotification({
|
|||||||
|| [customer?.first_name, customer?.last_name].filter(Boolean).join(' ')
|
|| [customer?.first_name, customer?.last_name].filter(Boolean).join(' ')
|
||||||
|| customer?.email || '',
|
|| customer?.email || '',
|
||||||
event_name: invoice.event_name || '',
|
event_name: invoice.event_name || '',
|
||||||
|
// Keep the body language consistent with the locale-formatted amounts.
|
||||||
|
__language: locale,
|
||||||
total_amount: formatMajor(invoice.total_amount_minor, invoice.currency, locale),
|
total_amount: formatMajor(invoice.total_amount_minor, invoice.currency, locale),
|
||||||
paid_amount: formatMajor(paidTotalMinor, invoice.currency, locale),
|
paid_amount: formatMajor(paidTotalMinor, invoice.currency, locale),
|
||||||
payment_method: paymentMethod || '',
|
payment_method: paymentMethod || '',
|
||||||
@@ -285,6 +287,9 @@ async function queuePaymentCheckEmail(invoiceId, { skipThrottle = false } = {})
|
|||||||
|| [customer?.first_name, customer?.last_name].filter(Boolean).join(' ')
|
|| [customer?.first_name, customer?.last_name].filter(Boolean).join(' ')
|
||||||
|| customer?.email || '',
|
|| customer?.email || '',
|
||||||
event_name: invoice.event_name || '',
|
event_name: invoice.event_name || '',
|
||||||
|
// Keep the body language consistent with the locale the amounts are
|
||||||
|
// formatted in, instead of event-first resolution (admin-facing gate).
|
||||||
|
__language: locale,
|
||||||
due_date: formatShortDate(invoice.due_date),
|
due_date: formatShortDate(invoice.due_date),
|
||||||
total_amount: formatMajor(invoice.total_amount_minor, invoice.currency, locale),
|
total_amount: formatMajor(invoice.total_amount_minor, invoice.currency, locale),
|
||||||
paid_amount: formatMajor(paidMinor, invoice.currency, locale),
|
paid_amount: formatMajor(paidMinor, invoice.currency, locale),
|
||||||
|
|||||||
@@ -127,6 +127,9 @@ async function sendInvoice(id, adminId) {
|
|||||||
installment_label: invoice.installment_label || '',
|
installment_label: invoice.installment_label || '',
|
||||||
installment_index: invoice.installment_index + 1,
|
installment_index: invoice.installment_index + 1,
|
||||||
installment_total: invoice.installment_total,
|
installment_total: invoice.installment_total,
|
||||||
|
// Send in the customer's language (matches the ctx.locale-formatted amounts
|
||||||
|
// above) rather than the event-first default resolution.
|
||||||
|
__language: ctx.locale,
|
||||||
cc: invoiceCc,
|
cc: invoiceCc,
|
||||||
attachments: [{
|
attachments: [{
|
||||||
filename: `${invoice.invoice_number}.pdf`,
|
filename: `${invoice.invoice_number}.pdf`,
|
||||||
@@ -368,6 +371,8 @@ async function sendStorno(stornoId, adminId) {
|
|||||||
original_issue_date: originalRow?.issue_date ? formatShortDate(originalRow.issue_date) : '',
|
original_issue_date: originalRow?.issue_date ? formatShortDate(originalRow.issue_date) : '',
|
||||||
customer_name: customer.display_name || customer.first_name || customer.email.split('@')[0],
|
customer_name: customer.display_name || customer.first_name || customer.email.split('@')[0],
|
||||||
total_amount: formatMajor(Math.abs(storno.total_amount_minor), storno.currency, ctx.locale),
|
total_amount: formatMajor(Math.abs(storno.total_amount_minor), storno.currency, ctx.locale),
|
||||||
|
// Match the customer's language (as with the ctx.locale-formatted amount).
|
||||||
|
__language: ctx.locale,
|
||||||
cc: stornoCc,
|
cc: stornoCc,
|
||||||
attachments: [{
|
attachments: [{
|
||||||
filename: `${storno.invoice_number}.pdf`,
|
filename: `${storno.invoice_number}.pdf`,
|
||||||
|
|||||||
Reference in New Issue
Block a user