mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-09-06 03:20:49 +02:00
Render every outgoing e-mail from an editable text template
The wording of the dunning and SEPA pre-notification mails was hard-coded in
Python, so adjusting a single sentence required a new release. Both texts now
live in plain text templates that ship as defaults, are copied into the store's
templates/mail/ directory on first start and can be edited there or under
Optionen -> E-Mail-Vorlagen; an existing file is never overwritten and a deleted
one is restored from the shipped default.
A template carries its subject in the first line and the body after a blank
line. Placeholders use the same {{ ... }} syntax as the document templates and
share their member/organization values, so a name means the same thing in a
letter and in the mail that carries it. Unknown placeholders are rejected while
editing instead of during a send run, a line holding nothing but placeholders
that render empty is dropped, and {{#claims}} ... {{/claims}} repeats per entry.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e3807bf7dc
commit
d6cd58a788
@@ -183,6 +183,30 @@ marker may share the last cell. CCMA removes both markers and clones the whole
|
||||
row, including its formatting, once per item. With no items, the template row
|
||||
is removed. A loop that is not closed in the same row is rejected.
|
||||
|
||||
## Mail templates
|
||||
|
||||
Every e-mail CCMA sends -- the welcome mail with its first invoice, dunning mails
|
||||
and SEPA pre-notifications -- is rendered from a plain text template. The shipped
|
||||
defaults are copied into the store's `templates/mail/` directory on first start
|
||||
and can be edited there or under Optionen -> E-Mail-Vorlagen. An existing file is
|
||||
never overwritten; a deleted one is restored from the shipped default.
|
||||
|
||||
A template holds the subject in its first line and the message body after a blank
|
||||
line:
|
||||
|
||||
```
|
||||
Betreff: {{reminder.name}} – {{claim.title}}
|
||||
|
||||
Hallo {{member.first_name}},
|
||||
...
|
||||
```
|
||||
|
||||
Placeholders use the same `{{ ... }}` syntax as the document templates. Which ones
|
||||
are available depends on the mail; the options dialog lists them per template and
|
||||
rejects unknown ones when saving. A line that contains nothing but placeholders
|
||||
which render empty (an optional hint, an empty list) is dropped, and
|
||||
`{{#claims}} ... {{/claims}}` repeats its content once per claim.
|
||||
|
||||
## Housekeeper rules
|
||||
|
||||
The housekeeper runs every rule for every member. Built-in Python rules live in
|
||||
|
||||
Reference in New Issue
Block a user