Mapping editing
This commit is contained in:
		@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@ -6,13 +6,9 @@ from .kimai import (
 | 
			
		||||
)
 | 
			
		||||
from .db import (
 | 
			
		||||
    db,
 | 
			
		||||
    HamsterCategory,
 | 
			
		||||
    HamsterActivity,
 | 
			
		||||
    HamsterFact,
 | 
			
		||||
    KimaiProject,
 | 
			
		||||
    KimaiCustomer,
 | 
			
		||||
    KimaiActivity,
 | 
			
		||||
    HamsterActivityKimaiMapping,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user