mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-02 03:32:13 +02:00
feat: allow deleting housekeeper tasks
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import tkinter as tk
|
||||
from collections import Counter
|
||||
from collections.abc import Callable
|
||||
from tkinter import ttk
|
||||
from tkinter import messagebox, ttk
|
||||
|
||||
from ccma.domain.dates import format_date_for_display
|
||||
from ccma.domain.models import MEMBERSHIP_STATUS_LABELS, HousekeeperFinding, Member
|
||||
@@ -188,12 +188,14 @@ class HousekeeperTab(ttk.Frame):
|
||||
findings: list[HousekeeperFinding],
|
||||
on_open_member: Callable[[str], None],
|
||||
on_refresh: Callable[[], list[HousekeeperFinding]],
|
||||
on_delete: Callable[[str], list[HousekeeperFinding]],
|
||||
on_close: Callable[[], None],
|
||||
):
|
||||
super().__init__(master, padding=12)
|
||||
self.findings = findings
|
||||
self.on_open_member = on_open_member
|
||||
self.on_refresh = on_refresh
|
||||
self.on_delete = on_delete
|
||||
self.on_close = on_close
|
||||
self._build_ui()
|
||||
|
||||
@@ -241,6 +243,13 @@ class HousekeeperTab(ttk.Frame):
|
||||
style="Status.TLabel",
|
||||
)
|
||||
self.detail_label.grid(row=0, column=0, sticky="ew")
|
||||
self.delete_button = ttk.Button(
|
||||
details,
|
||||
text="Task löschen",
|
||||
command=self._delete_selected,
|
||||
state="disabled",
|
||||
)
|
||||
self.delete_button.grid(row=0, column=1, sticky="ne", padx=(12, 0))
|
||||
details.bind(
|
||||
"<Configure>",
|
||||
lambda event: self.detail_label.configure(wraplength=max(300, event.width - 32)),
|
||||
@@ -254,6 +263,7 @@ class HousekeeperTab(ttk.Frame):
|
||||
def _render(self) -> None:
|
||||
self.tree.delete(*self.tree.get_children())
|
||||
self.detail_var.set("Eintrag auswählen, um Details anzuzeigen.")
|
||||
self.delete_button.configure(state="disabled")
|
||||
self.title_var.set(f"HAUSMEISTER · {len(self.findings)} Vorgänge")
|
||||
for index, finding in enumerate(self.findings):
|
||||
self.tree.insert(
|
||||
@@ -267,11 +277,28 @@ class HousekeeperTab(ttk.Frame):
|
||||
selected = self.tree.selection()
|
||||
if not selected:
|
||||
self.detail_var.set("Eintrag auswählen, um Details anzuzeigen.")
|
||||
self.delete_button.configure(state="disabled")
|
||||
return
|
||||
index = int(selected[0])
|
||||
if index >= len(self.findings):
|
||||
return
|
||||
self.detail_var.set(_finding_details(self.findings[index]))
|
||||
self.delete_button.configure(state="normal" if self.findings[index].key else "disabled")
|
||||
|
||||
def _delete_selected(self) -> None:
|
||||
selected = self.tree.selection()
|
||||
if not selected:
|
||||
return
|
||||
finding = self.findings[int(selected[0])]
|
||||
if not finding.key or not messagebox.askyesno(
|
||||
"Hausmeister-Task löschen",
|
||||
f"Task wirklich löschen?\n\n{finding.title}\n\n"
|
||||
"Falls die Ursache weiter besteht, wird er beim nächsten Lauf neu angelegt.",
|
||||
parent=self,
|
||||
):
|
||||
return
|
||||
self.findings = self.on_delete(finding.key)
|
||||
self._render()
|
||||
|
||||
def _open_selected(self) -> None:
|
||||
selected = self.tree.selection()
|
||||
@@ -281,6 +308,8 @@ class HousekeeperTab(ttk.Frame):
|
||||
|
||||
def _finding_details(finding: HousekeeperFinding) -> str:
|
||||
lines = [f"{finding.severity.upper()} · {finding.code}", finding.title]
|
||||
if finding.key:
|
||||
lines.append(f"Key: {finding.key}")
|
||||
if finding.due_date:
|
||||
lines.append(f"Fällig: {format_date_for_display(finding.due_date.isoformat())}")
|
||||
if finding.detail:
|
||||
|
||||
Reference in New Issue
Block a user