diff --git a/hamstertools/__init__.py b/hamstertools/__init__.py index e3ffc96..24a851c 100755 --- a/hamstertools/__init__.py +++ b/hamstertools/__init__.py @@ -370,7 +370,7 @@ def check(username, api_key, just_errors, ignore_activities, mapping_path=None): mapping_files = [] for mapping_path_item in mapping_path: if not Path(mapping_path_item).exists(): - raise click.UsageError(f'{mapping_path_item} does not exist') + raise click.UsageError(f"{mapping_path_item} does not exist") mapping_file = _get_kimai_mapping_file(mapping_path_item) next(mapping_file) diff --git a/hamstertools/app.py b/hamstertools/app.py index ea41aa6..dcd4964 100644 --- a/hamstertools/app.py +++ b/hamstertools/app.py @@ -156,10 +156,26 @@ class ActivityMappingScreen(ModalScreen): customer_id = None project_id = None activity_id = None + customer = "" + project = "" + activity = "" + description = "" + tags = "" + + def __init__(self, category, activity, mapping=None): + self.hamster_category = category + self.hamster_activity = activity + + if mapping is not None: + self.customer_id = mapping.kimai_customer_id + self.customer = mapping.kimai_customer.name + self.project_id = mapping.kimai_project_id + self.project = mapping.kimai_project.name + self.activity_id = mapping.kimai_activity_id + self.activity = mapping.kimai_activity.name + self.description = mapping.kimai_description + self.tags = mapping.kimai_tags - def __init__(self, category, activity): - self.category = category - self.activity = activity super().__init__() @staticmethod @@ -197,36 +213,48 @@ class ActivityMappingScreen(ModalScreen): def compose(self) -> ComposeResult: yield Vertical( Horizontal( - Label(f"Mapping for {self.activity}@{self.category}"), + Label(f"Mapping for {self.hamster_activity}@{self.hamster_category}"), ), Horizontal( Label("Customer"), AutoComplete( - Input(placeholder="Type to search...", id="customer"), + Input( + placeholder="Type to search...", + id="customer", + value=self.customer, + ), Dropdown(items=self._get_customers), ), ), Horizontal( Label("Project"), AutoComplete( - Input(placeholder="Type to search...", id="project"), + Input( + placeholder="Type to search...", + id="project", + value=self.project, + ), Dropdown(items=self._get_projects), ), ), Horizontal( Label("Activity"), AutoComplete( - Input(placeholder="Type to search...", id="activity"), + Input( + placeholder="Type to search...", + id="activity", + value=self.activity, + ), Dropdown(items=self._get_activities), ), ), Horizontal( Label("Description"), - Input(id="description"), + Input(id="description", value=self.description), ), Horizontal( Label("Tags"), - Input(id="tags"), + Input(id="tags", value=self.tags), ), Horizontal(Checkbox("Global", id="global")), ) @@ -468,20 +496,33 @@ class ActivityListScreen(ListScreen): .get() ) - def handle_mapping(mapping): - if mapping is None: - return - m = HamsterActivityKimaiMapping.create( - hamster_activity=selected_activity, **mapping + mapping = None + try: + mapping = HamsterActivityKimaiMapping.get( + hamster_activity=selected_activity ) - m.save() - filter_search = self.query_one("#search") + except HamsterActivityKimaiMapping.DoesNotExist: + pass + + def handle_mapping(mapping_data): + if mapping_data is None: + return + if mapping is not None: + mapping_ = mapping + for key, value in mapping_data.items(): + setattr(mapping_, key, value) + else: + mapping_ = HamsterActivityKimaiMapping.create( + hamster_activity=selected_activity, **mapping_data + ) + mapping_.save() self._refresh() self.app.push_screen( ActivityMappingScreen( category=selected_activity.category_name, activity=selected_activity.name, + mapping=mapping, ), handle_mapping, ) diff --git a/hamstertools/sync.py b/hamstertools/sync.py index 4e7b108..a03fe50 100644 --- a/hamstertools/sync.py +++ b/hamstertools/sync.py @@ -6,13 +6,9 @@ from .kimai import ( ) from .db import ( db, - HamsterCategory, - HamsterActivity, - HamsterFact, KimaiProject, KimaiCustomer, KimaiActivity, - HamsterActivityKimaiMapping, )