mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-08-25 06:55:17 +02:00
feat: configure member number allocation strategy
This commit is contained in:
@@ -47,6 +47,7 @@ class OptionsDialog(tk.Toplevel):
|
||||
number_policy = repository.get_member_number_policy()
|
||||
self.manual_numbers_var = tk.BooleanVar(value=number_policy["mode"] == "manual")
|
||||
self.number_pattern_var = tk.StringVar(value=number_policy["pattern"])
|
||||
self.number_strategy_var = tk.StringVar(value=number_policy["allocation_strategy"])
|
||||
self.number_preview_var = tk.StringVar()
|
||||
organization = repository.get_configuration().get("organization") or {}
|
||||
if not isinstance(organization, dict):
|
||||
@@ -280,19 +281,38 @@ class OptionsDialog(tk.Toplevel):
|
||||
text="Platzhalter: {number}, {number:04d} und optional {year}",
|
||||
style="Muted.TLabel",
|
||||
).grid(row=2, column=1, sticky="w", pady=(0, 12))
|
||||
ttk.Label(parent, text="Nächste Nummer").grid(row=3, column=0, sticky="w", padx=(0, 12), pady=6)
|
||||
ttk.Label(parent, text="Vergabestrategie").grid(
|
||||
row=3, column=0, sticky="nw", padx=(0, 12), pady=6
|
||||
)
|
||||
strategy_frame = ttk.Frame(parent)
|
||||
strategy_frame.grid(row=3, column=1, sticky="w", pady=6)
|
||||
ttk.Radiobutton(
|
||||
strategy_frame,
|
||||
text="Lücken füllen (nächste freie Nummer)",
|
||||
variable=self.number_strategy_var,
|
||||
value="next_free",
|
||||
command=self._update_number_preview,
|
||||
).pack(anchor="w")
|
||||
ttk.Radiobutton(
|
||||
strategy_frame,
|
||||
text="Immer Max++ (höchste Nummer + 1)",
|
||||
variable=self.number_strategy_var,
|
||||
value="max_plus_one",
|
||||
command=self._update_number_preview,
|
||||
).pack(anchor="w", pady=(4, 0))
|
||||
ttk.Label(parent, text="Nächste Nummer").grid(row=4, column=0, sticky="w", padx=(0, 12), pady=6)
|
||||
ttk.Label(parent, textvariable=self.number_preview_var, style="TimelineHeader.TLabel").grid(
|
||||
row=3, column=1, sticky="w", pady=6
|
||||
row=4, column=1, sticky="w", pady=6
|
||||
)
|
||||
ttk.Label(
|
||||
parent,
|
||||
text=(
|
||||
"Der Zähler wird pro Pattern im Mitglieder-Store geführt. Bereits vergebene Nummern "
|
||||
"werden niemals doppelt erzeugt."
|
||||
"Die Strategie wird im Mitglieder-Store gespeichert. Die Vergabe ist gesperrt, "
|
||||
"solange ein neues Mitglied angelegt wird, damit keine Nummer doppelt entsteht."
|
||||
),
|
||||
style="Muted.TLabel",
|
||||
wraplength=620,
|
||||
).grid(row=4, column=0, columnspan=2, sticky="w", pady=(14, 0))
|
||||
).grid(row=5, column=0, columnspan=2, sticky="w", pady=(14, 0))
|
||||
self.number_pattern_var.trace_add("write", lambda *_args: self._update_number_preview())
|
||||
self._update_member_number_controls()
|
||||
|
||||
@@ -309,7 +329,9 @@ class OptionsDialog(tk.Toplevel):
|
||||
return
|
||||
pattern = self.number_pattern_var.get()
|
||||
try:
|
||||
preview = self.repository.preview_member_number(pattern)
|
||||
preview = self.repository.preview_member_number(
|
||||
pattern, self.number_strategy_var.get()
|
||||
)
|
||||
except RepositoryError as exc:
|
||||
preview = f"UNGÜLTIG: {exc}"
|
||||
self.number_preview_var.set(preview)
|
||||
@@ -409,7 +431,11 @@ class OptionsDialog(tk.Toplevel):
|
||||
)
|
||||
try:
|
||||
self.config_obj.save()
|
||||
self.repository.save_member_number_policy(mode=number_mode, pattern=number_pattern)
|
||||
self.repository.save_member_number_policy(
|
||||
mode=number_mode,
|
||||
pattern=number_pattern,
|
||||
allocation_strategy=self.number_strategy_var.get(),
|
||||
)
|
||||
self.repository.save_organization(
|
||||
{key: variable.get() for key, variable in self.organization_vars.items()}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user