evilguy4000
1b5d019560
feat(admin): persist test recipient and send invoice email template tests
...
Add Settings.mail_test_recipient (migration 142) and wire Admin → Email Configuration to save, load, and prefill the SMTP test recipient field.
Extract invoice email PDF/HTML building into _build_invoice_email_payload for reuse. New send_invoice_template_test_email sends a real message with subject "Invoice template test: …", reusing production rendering and PDF attachment, without updating invoice status or creating InvoiceEmail records.
Add POST /admin/email-templates/<id>/send-test (optional recipient override, optional invoice_id) and Send test email UI on template view and edit pages. Extend smoke and unit tests.
2026-03-27 06:39:16 +01:00
..
2026-03-15 10:51:52 +01:00
2026-03-26 14:52:06 +01:00
2026-03-26 14:52:06 +01:00
2026-03-15 09:37:15 +01:00
2026-03-27 06:38:47 +01:00
2026-03-15 09:37:15 +01:00
2026-03-15 09:37:15 +01:00
2026-03-15 09:37:15 +01:00
2026-03-15 09:37:15 +01:00
2026-03-27 06:39:16 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-16 16:42:53 +01:00
2026-03-15 09:37:15 +01:00
2026-03-27 06:39:16 +01:00
2026-01-25 09:13:14 +01:00
2026-03-26 17:01:55 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-15 09:37:15 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-26 14:52:06 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-01-21 13:59:13 +01:00
2026-01-25 08:59:54 +01:00
2026-03-08 06:50:42 +01:00
2026-03-06 15:46:07 +01:00
2026-02-09 20:22:08 +01:00
2026-03-06 22:15:29 +01:00
2026-01-25 09:44:46 +01:00
2026-03-16 16:43:35 +01:00
2026-03-08 06:50:42 +01:00
2026-01-30 17:26:14 +01:00
2026-01-25 09:38:11 +01:00
2026-01-25 09:38:11 +01:00
2026-03-08 06:50:42 +01:00
2026-03-16 15:16:11 +01:00
2026-03-16 16:44:09 +01:00
2026-03-08 06:50:42 +01:00
2026-03-08 06:50:42 +01:00
2026-03-16 13:01:41 +01:00
2026-03-08 06:50:42 +01:00
2026-03-27 06:39:16 +01:00
2026-03-26 14:51:55 +01:00
2026-03-06 22:15:29 +01:00
2026-03-26 14:51:55 +01:00
2026-03-16 15:16:11 +01:00
2026-03-16 15:16:11 +01:00
2026-03-15 10:16:49 +01:00
2026-01-30 17:25:56 +01:00
2026-02-02 17:24:45 +01:00
2026-02-02 17:24:45 +01:00
2026-03-11 17:39:37 +01:00
2026-03-11 17:39:37 +01:00
2026-03-11 17:39:37 +01:00
2026-03-08 06:50:42 +01:00
2026-02-20 09:56:44 +01:00
2026-03-06 22:15:29 +01:00
2026-03-02 20:55:02 +01:00
2026-03-06 22:15:29 +01:00
2026-01-25 09:38:11 +01:00
2026-03-15 09:37:15 +01:00
2026-03-15 09:37:15 +01:00
2026-03-15 10:16:49 +01:00
2026-03-15 09:37:15 +01:00
2026-02-02 19:18:28 +01:00
2026-03-16 15:16:11 +01:00
2026-01-25 08:59:54 +01:00
2026-03-26 18:25:10 +01:00
2026-03-26 17:01:55 +01:00
2026-01-25 08:59:54 +01:00
2026-01-25 09:38:11 +01:00
2026-02-02 17:59:59 +01:00
2026-03-09 20:33:48 +01:00
2026-03-15 09:37:15 +01:00
2026-01-25 08:36:02 +01:00
2026-03-06 22:15:29 +01:00