# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .enum import Enum
from .enum import Enum


class EmployeesAdditionalJobEdit(object):
    _types = {
        "employee_type_id": str,
        "working_hours_type_id": str,
        "work_location_id": str,
        "department_id": str,
        "job_id": str,
        "job_level_id": str,
        "job_family_id": str,
        "employment_id": str,
        "start_date": str,
        "end_date": str,
        "direct_manager_id": str,
        "dotted_line_manager_id": str,
        "work_shift": Enum,
        "compensation_type": Enum,
        "service_company": str,
        "weekly_working_hours": str,
        "work_calendar_id": str,
        "position_id": str,
        "employee_subtype_id": str,
    }

    def __init__(self, d=None):
        self.employee_type_id: Optional[str] = None
        self.working_hours_type_id: Optional[str] = None
        self.work_location_id: Optional[str] = None
        self.department_id: Optional[str] = None
        self.job_id: Optional[str] = None
        self.job_level_id: Optional[str] = None
        self.job_family_id: Optional[str] = None
        self.employment_id: Optional[str] = None
        self.start_date: Optional[str] = None
        self.end_date: Optional[str] = None
        self.direct_manager_id: Optional[str] = None
        self.dotted_line_manager_id: Optional[str] = None
        self.work_shift: Optional[Enum] = None
        self.compensation_type: Optional[Enum] = None
        self.service_company: Optional[str] = None
        self.weekly_working_hours: Optional[str] = None
        self.work_calendar_id: Optional[str] = None
        self.position_id: Optional[str] = None
        self.employee_subtype_id: Optional[str] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "EmployeesAdditionalJobEditBuilder":
        return EmployeesAdditionalJobEditBuilder()


class EmployeesAdditionalJobEditBuilder(object):
    def __init__(self) -> None:
        self._employees_additional_job_edit = EmployeesAdditionalJobEdit()

    def employee_type_id(self, employee_type_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.employee_type_id = employee_type_id
        return self

    def working_hours_type_id(self, working_hours_type_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.working_hours_type_id = working_hours_type_id
        return self

    def work_location_id(self, work_location_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.work_location_id = work_location_id
        return self

    def department_id(self, department_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.department_id = department_id
        return self

    def job_id(self, job_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.job_id = job_id
        return self

    def job_level_id(self, job_level_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.job_level_id = job_level_id
        return self

    def job_family_id(self, job_family_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.job_family_id = job_family_id
        return self

    def employment_id(self, employment_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.employment_id = employment_id
        return self

    def start_date(self, start_date: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.start_date = start_date
        return self

    def end_date(self, end_date: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.end_date = end_date
        return self

    def direct_manager_id(self, direct_manager_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.direct_manager_id = direct_manager_id
        return self

    def dotted_line_manager_id(self, dotted_line_manager_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.dotted_line_manager_id = dotted_line_manager_id
        return self

    def work_shift(self, work_shift: Enum) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.work_shift = work_shift
        return self

    def compensation_type(self, compensation_type: Enum) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.compensation_type = compensation_type
        return self

    def service_company(self, service_company: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.service_company = service_company
        return self

    def weekly_working_hours(self, weekly_working_hours: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.weekly_working_hours = weekly_working_hours
        return self

    def work_calendar_id(self, work_calendar_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.work_calendar_id = work_calendar_id
        return self

    def position_id(self, position_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.position_id = position_id
        return self

    def employee_subtype_id(self, employee_subtype_id: str) -> "EmployeesAdditionalJobEditBuilder":
        self._employees_additional_job_edit.employee_subtype_id = employee_subtype_id
        return self

    def build(self) -> "EmployeesAdditionalJobEdit":
        return self._employees_additional_job_edit
