mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-09-06 03:20:49 +02:00
feat: extend inventory and administration workflows
This commit is contained in:
@@ -115,6 +115,10 @@ class AssetTab(ttk.Frame):
|
||||
("Inventarnummer", "inventory_number"),
|
||||
("Seriennummer", "serial_number"),
|
||||
("Kaution (EUR)", "deposit_amount_default"),
|
||||
("Standort", "location"),
|
||||
("Übergabedatum", "handed_over_at"),
|
||||
("Zustand bei Übergabe", "condition"),
|
||||
("Wert / Kaufpreis", "estimated_value"),
|
||||
]
|
||||
for row, (label, key) in enumerate(fields):
|
||||
self.variables[key] = tk.StringVar()
|
||||
@@ -151,15 +155,22 @@ class AssetTab(ttk.Frame):
|
||||
)
|
||||
self.holder_label.grid(row=holder_row + 1, column=1, sticky="w", pady=5)
|
||||
self.holder_label.bind("<Button-1>", lambda _event: self._open_holder_member(), add="+")
|
||||
self.owner_var = tk.StringVar()
|
||||
ttk.Label(data_tab, text="Eigentümer").grid(
|
||||
row=holder_row + 2, column=0, sticky="w", pady=5, padx=(0, 12)
|
||||
)
|
||||
self.owner_label = ttk.Label(data_tab, textvariable=self.owner_var, style="TimelineHeader.TLabel")
|
||||
self.owner_label.grid(row=holder_row + 2, column=1, sticky="w", pady=5)
|
||||
self.owner_label.bind("<Button-1>", lambda _event: self._open_owner_member(), add="+")
|
||||
ttk.Label(data_tab, text="Interne Notiz").grid(
|
||||
row=holder_row + 2,
|
||||
row=holder_row + 3,
|
||||
column=0,
|
||||
sticky="nw",
|
||||
pady=5,
|
||||
padx=(0, 12),
|
||||
)
|
||||
self.notes_text = tk.Text(data_tab, width=42, height=6, wrap="word")
|
||||
self.notes_text.grid(row=holder_row + 2, column=1, sticky="ew", pady=5)
|
||||
self.notes_text.grid(row=holder_row + 3, column=1, sticky="ew", pady=5)
|
||||
data_tab.columnconfigure(1, weight=1)
|
||||
self.issue_button = ttk.Button(
|
||||
action_buttons,
|
||||
@@ -276,13 +287,19 @@ class AssetTab(ttk.Frame):
|
||||
self.variables["inventory_number"].set(self.asset.inventory_number)
|
||||
self.variables["serial_number"].set(self.asset.serial_number)
|
||||
self.variables["deposit_amount_default"].set(self.asset.deposit_amount_default)
|
||||
self.variables["location"].set(self.asset.location)
|
||||
self.variables["handed_over_at"].set(self.asset.handed_over_at)
|
||||
self.variables["condition"].set(self.asset.condition)
|
||||
self.variables["estimated_value"].set(self.asset.estimated_value)
|
||||
self.variables["status"].set(ASSET_STATUS_LABELS.get(self.asset.status, self.asset.status.upper()))
|
||||
if self.notes_text is not None:
|
||||
self.notes_text.delete("1.0", "end")
|
||||
self.notes_text.insert("1.0", self.asset.notes)
|
||||
self.holder_var.set(holder)
|
||||
self.owner_var.set(self._owner_label())
|
||||
issued = bool(self.asset.current_holder_member_id)
|
||||
self.holder_label.configure(cursor="hand2" if issued else "")
|
||||
self.owner_label.configure(cursor="hand2" if self.asset.owner_type == "member" else "")
|
||||
self.issue_button.configure(state="normal" if self.asset.status == "available" else "disabled")
|
||||
self.return_button.configure(state="normal" if issued else "disabled")
|
||||
self.status_box.configure(state="disabled" if issued else "readonly")
|
||||
@@ -300,6 +317,21 @@ class AssetTab(ttk.Frame):
|
||||
return self.asset.current_holder_member_id
|
||||
return f"{member.member_number or member.member_id} · {member.display_name}"
|
||||
|
||||
def _owner_label(self) -> str:
|
||||
if self.asset.owner_type == "club":
|
||||
return "Verein"
|
||||
if self.asset.owner_type == "external":
|
||||
return self.asset.owner_name or "Extern"
|
||||
try:
|
||||
member = self.repository.get_member(self.asset.owner_member_id)
|
||||
except RepositoryError:
|
||||
return self.asset.owner_member_id or "—"
|
||||
return f"{member.member_number or member.member_id} · {member.display_name}"
|
||||
|
||||
def _open_owner_member(self) -> None:
|
||||
if self.asset.owner_type == "member" and self.asset.owner_member_id:
|
||||
self.on_open_member(self.asset.owner_member_id)
|
||||
|
||||
def _refresh_events(self) -> None:
|
||||
self.timeline.delete(*self.timeline.get_children())
|
||||
try:
|
||||
@@ -352,6 +384,10 @@ class AssetTab(ttk.Frame):
|
||||
self.asset.inventory_number = self.variables["inventory_number"].get().strip()
|
||||
self.asset.serial_number = self.variables["serial_number"].get().strip()
|
||||
self.asset.notes = self.notes_text.get("1.0", "end-1c").strip() if self.notes_text else ""
|
||||
self.asset.location = self.variables["location"].get().strip()
|
||||
self.asset.handed_over_at = self.variables["handed_over_at"].get().strip()
|
||||
self.asset.condition = self.variables["condition"].get().strip()
|
||||
self.asset.estimated_value = self.variables["estimated_value"].get().strip()
|
||||
if not self.asset.current_holder_member_id:
|
||||
self.asset.deposit_amount_default = self.variables["deposit_amount_default"].get().strip()
|
||||
self.asset.status = _asset_status_key(self.variables["status"].get())
|
||||
|
||||
Reference in New Issue
Block a user