mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-01 03:04:52 +02:00
feat: add member address and SEPA data
This commit is contained in:
@@ -83,9 +83,13 @@ class MemberTab(ttk.Frame):
|
||||
notebook = ttk.Notebook(parent)
|
||||
notebook.grid(row=0, column=0, sticky="nsew")
|
||||
data_tab = ttk.Frame(notebook, padding=16)
|
||||
address_tab = ttk.Frame(notebook, padding=16)
|
||||
banking_tab = ttk.Frame(notebook, padding=16)
|
||||
contribution_tab = ttk.Frame(notebook, padding=16)
|
||||
documents_tab = ttk.Frame(notebook, padding=16)
|
||||
notebook.add(data_tab, text="Stammdaten")
|
||||
notebook.add(address_tab, text="Anschrift")
|
||||
notebook.add(banking_tab, text="Bank / SEPA")
|
||||
notebook.add(contribution_tab, text="Forderungen")
|
||||
notebook.add(documents_tab, text="Dokumente")
|
||||
|
||||
@@ -94,6 +98,7 @@ class MemberTab(ttk.Frame):
|
||||
("Vorname", "first_name"),
|
||||
("Nachname", "last_name"),
|
||||
("E-Mail-Adresse", "email"),
|
||||
("Telefonnummer", "phone"),
|
||||
(f"Geburtsdatum ({date_input_hint()})", "birth_date"),
|
||||
(f"Aufnahmebeschluss ({date_input_hint()})", "accepted_at"),
|
||||
(f"Mitglied seit ({date_input_hint()})", "membership_started_at"),
|
||||
@@ -139,6 +144,50 @@ class MemberTab(ttk.Frame):
|
||||
row=len(fields) + 2, column=1, sticky="e", pady=(18, 0)
|
||||
)
|
||||
|
||||
address_fields = (
|
||||
("Straße und Hausnummer", "street"),
|
||||
("Adresszusatz", "address_addition"),
|
||||
("Postleitzahl", "postal_code"),
|
||||
("Ort", "city"),
|
||||
("Land", "country"),
|
||||
)
|
||||
address_tab.columnconfigure(1, weight=1)
|
||||
for row, (label, key) in enumerate(address_fields):
|
||||
self.variables[key] = tk.StringVar()
|
||||
ttk.Label(address_tab, text=label).grid(row=row, column=0, sticky="w", padx=(0, 12), pady=5)
|
||||
ttk.Entry(address_tab, textvariable=self.variables[key], width=42).grid(
|
||||
row=row, column=1, sticky="ew", pady=5
|
||||
)
|
||||
ttk.Button(
|
||||
address_tab, text="Anschrift speichern", style="Accent.TButton", command=self._save
|
||||
).grid(row=len(address_fields), column=1, sticky="e", pady=(18, 0))
|
||||
|
||||
banking_fields = (
|
||||
("Kontoinhaber", "account_holder"),
|
||||
("IBAN", "iban"),
|
||||
("BIC", "bic"),
|
||||
("Mandatsreferenz", "mandate_reference"),
|
||||
(f"Mandat erteilt am ({date_input_hint()})", "mandate_signed_at"),
|
||||
(f"Mandat widerrufen am ({date_input_hint()})", "mandate_revoked_at"),
|
||||
)
|
||||
banking_tab.columnconfigure(1, weight=1)
|
||||
for row, (label, key) in enumerate(banking_fields):
|
||||
self.variables[key] = tk.StringVar()
|
||||
ttk.Label(banking_tab, text=label).grid(row=row, column=0, sticky="w", padx=(0, 12), pady=5)
|
||||
ttk.Entry(banking_tab, textvariable=self.variables[key], width=42).grid(
|
||||
row=row, column=1, sticky="ew", pady=5
|
||||
)
|
||||
self.variables["mandate_active"] = tk.BooleanVar()
|
||||
ttk.Checkbutton(
|
||||
banking_tab,
|
||||
text="SEPA-Lastschriftmandat ist aktiv",
|
||||
variable=self.variables["mandate_active"],
|
||||
style="Switch",
|
||||
).grid(row=len(banking_fields), column=0, columnspan=2, sticky="w", pady=(12, 5))
|
||||
ttk.Button(
|
||||
banking_tab, text="Bankdaten speichern", style="Accent.TButton", command=self._save
|
||||
).grid(row=len(banking_fields) + 1, column=1, sticky="e", pady=(18, 0))
|
||||
|
||||
contribution_tab.columnconfigure(0, weight=1)
|
||||
contribution_tab.rowconfigure(1, weight=1)
|
||||
self.contribution_summary = tk.StringVar()
|
||||
@@ -225,7 +274,13 @@ class MemberTab(ttk.Frame):
|
||||
self.member = self.repository.get_member(self.member_id)
|
||||
self.title_var.set(f"{self.member.member_number or '—'} · {self.member.display_name}")
|
||||
self.status_var.set(STATUS_LABELS.get(self.member.status, self.member.status.upper()))
|
||||
date_fields = {"birth_date", "accepted_at", "membership_started_at"}
|
||||
date_fields = {
|
||||
"birth_date",
|
||||
"accepted_at",
|
||||
"membership_started_at",
|
||||
"mandate_signed_at",
|
||||
"mandate_revoked_at",
|
||||
}
|
||||
for key, variable in self.variables.items():
|
||||
value = getattr(self.member, key)
|
||||
if key == "status":
|
||||
@@ -303,7 +358,8 @@ class MemberTab(ttk.Frame):
|
||||
|
||||
def _save(self) -> None:
|
||||
for key, variable in self.variables.items():
|
||||
value = variable.get().strip()
|
||||
raw_value = variable.get()
|
||||
value = raw_value.strip() if isinstance(raw_value, str) else raw_value
|
||||
if key == "status":
|
||||
value = storage_key(STATUS_LABELS, value)
|
||||
setattr(self.member, key, value)
|
||||
|
||||
Reference in New Issue
Block a user