Preliminary clockify support
This commit is contained in:
32
hamstertools/screens/clockify/mappings.py
Normal file
32
hamstertools/screens/clockify/mappings.py
Normal file
@ -0,0 +1,32 @@
|
||||
from textual.app import ComposeResult
|
||||
from textual.containers import VerticalScroll
|
||||
from textual.screen import Screen
|
||||
from textual.widgets import DataTable, Header, Footer
|
||||
|
||||
from hamstertools.db import HamsterActivity, ClockifyProject, HamsterClockifyMapping
|
||||
|
||||
|
||||
class ClockifyMappingScreen(Screen):
|
||||
"""Screen for managing Clockify activity-project mappings"""
|
||||
|
||||
BINDINGS = [("q", "quit", "Quit")]
|
||||
|
||||
def compose(self) -> ComposeResult:
|
||||
yield Header()
|
||||
yield VerticalScroll(DataTable())
|
||||
yield Footer()
|
||||
|
||||
def on_mount(self) -> None:
|
||||
table = self.query_one(DataTable)
|
||||
table.add_columns("Hamster Activity", "Clockify Project")
|
||||
|
||||
# Query all mappings
|
||||
mappings = (HamsterClockifyMapping
|
||||
.select()
|
||||
.join(HamsterActivity)
|
||||
.join(ClockifyProject))
|
||||
|
||||
for mapping in mappings:
|
||||
activity = f"{mapping.hamster_activity.category.name} » {mapping.hamster_activity.name}"
|
||||
project = mapping.clockify_project.name
|
||||
table.add_row(activity, project)
|
Reference in New Issue
Block a user