feat: add member address and SEPA data

This commit is contained in:
Marcel Peterkau
2026-06-21 22:14:45 +02:00
parent 0622a22794
commit 6c7bf63280
12 changed files with 362 additions and 10 deletions
+49 -1
View File
@@ -116,7 +116,16 @@ class DocumentService:
if reminder is None:
raise DocumentError("Die ausgewählte Mahnung wurde nicht gefunden.")
values = _template_values(member, data=data, claim=claim, reminder=reminder)
organization = self.repository.get_configuration().get("organization") or {}
if not isinstance(organization, dict):
organization = {}
values = _template_values(
member,
data=data,
claim=claim,
reminder=reminder,
organization=organization,
)
destination_dir = self.repository.members_root / member_id / "files" / "documents"
destination_dir.mkdir(parents=True, exist_ok=True)
destination = _available_path(destination_dir, _safe_pdf_name(output_name))
@@ -168,7 +177,18 @@ def _template_values(
data=None,
claim: dict | None = None,
reminder: dict | None = None,
organization: dict | None = None,
) -> dict[str, str]:
organization = organization or {}
organization_address = " ".join(
part
for part in (
str(organization.get("street", "")),
str(organization.get("postal_code", "")),
str(organization.get("city", "")),
)
if part
)
values = {
"document.date": format_date_for_display(date.today().isoformat()),
"document.datetime": datetime.now().astimezone().strftime("%d.%m.%Y %H:%M"),
@@ -178,10 +198,38 @@ def _template_values(
"member.last_name": member.last_name,
"member.full_name": member.display_name,
"member.email": member.email,
"member.phone": member.phone,
"member.birth_date": format_date_for_display(member.birth_date),
"member.status": MEMBERSHIP_STATUS_LABELS.get(member.status, member.status),
"member.accepted_at": format_date_for_display(member.accepted_at),
"member.started_at": format_date_for_display(member.membership_started_at),
"member.street": member.street,
"member.address_addition": member.address_addition,
"member.postal_code": member.postal_code,
"member.city": member.city,
"member.country": member.country,
"member.address_line": " ".join(
part for part in (member.street, member.postal_code, member.city) if part
),
"member.account_holder": member.account_holder,
"member.iban": member.iban,
"member.bic": member.bic,
"member.mandate_reference": member.mandate_reference,
"member.mandate_signed_at": format_date_for_display(member.mandate_signed_at),
"member.mandate_revoked_at": format_date_for_display(member.mandate_revoked_at),
"member.mandate_active": "Ja" if member.mandate_active else "Nein",
"organization.name": str(organization.get("name", "")),
"organization.street": str(organization.get("street", "")),
"organization.postal_code": str(organization.get("postal_code", "")),
"organization.city": str(organization.get("city", "")),
"organization.country": str(organization.get("country", "")),
"organization.address_line": organization_address,
"organization.email": str(organization.get("email", "")),
"organization.phone": str(organization.get("phone", "")),
"organization.website": str(organization.get("website", "")),
"organization.iban": str(organization.get("iban", "")),
"organization.bic": str(organization.get("bic", "")),
"organization.creditor_id": str(organization.get("creditor_id", "")),
}
if claim is not None and data is not None:
claim_id = str(claim.get("claim_id", ""))