# coding: utf-8

"""
    AristaFlowREST/WorklistManager

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

    OpenAPI spec version: 6.0.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six
from af_worklist_manager.models.dummy_parent import DummyParent  # noqa: F401,E501

class WorklistItem(DummyParent):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'sub_class': 'str',
        'id': 'str',
        'title': 'str',
        'loc_title': 'dict(str, str)',
        'desc': 'str',
        'loc_desc': 'dict(str, str)',
        'process_type': 'str',
        'process_template_version': 'str',
        'process_template_name': 'str',
        'loc_process_template_name': 'dict(str, str)',
        'process_instance_name': 'str',
        'loc_process_instance_name': 'dict(str, str)',
        'act_ref': 'ActivityReference',
        'icon_id': 'str',
        'group_id': 'str',
        'state': 'str',
        'priority': 'int',
        'complexity': 'int',
        'activation_date': 'datetime',
        'assignment_date': 'datetime',
        'escalation_date': 'datetime',
        'due_date': 'datetime',
        'assigned_agent': 'QualifiedAgent',
        'current_escalation_level': 'int',
        'current_delegation': 'Delegation',
        'current_enquiry': 'Enquiry',
        'replied_enquiry': 'Enquiry',
        'current_delegation_level': 'int',
        'user_attributes': 'dict(str, str)'
    }
    if hasattr(DummyParent, "swagger_types"):
        swagger_types.update(DummyParent.swagger_types)

    attribute_map = {
        'sub_class': 'subClass',
        'id': 'id',
        'title': 'title',
        'loc_title': 'locTitle',
        'desc': 'desc',
        'loc_desc': 'locDesc',
        'process_type': 'processType',
        'process_template_version': 'processTemplateVersion',
        'process_template_name': 'processTemplateName',
        'loc_process_template_name': 'locProcessTemplateName',
        'process_instance_name': 'processInstanceName',
        'loc_process_instance_name': 'locProcessInstanceName',
        'act_ref': 'actRef',
        'icon_id': 'iconId',
        'group_id': 'groupId',
        'state': 'state',
        'priority': 'priority',
        'complexity': 'complexity',
        'activation_date': 'activationDate',
        'assignment_date': 'assignmentDate',
        'escalation_date': 'escalationDate',
        'due_date': 'dueDate',
        'assigned_agent': 'assignedAgent',
        'current_escalation_level': 'currentEscalationLevel',
        'current_delegation': 'currentDelegation',
        'current_enquiry': 'currentEnquiry',
        'replied_enquiry': 'repliedEnquiry',
        'current_delegation_level': 'currentDelegationLevel',
        'user_attributes': 'userAttributes'
    }
    if hasattr(DummyParent, "attribute_map"):
        attribute_map.update(DummyParent.attribute_map)

    discriminator_value_class_map = {
          'ClientWorklistItem': 'ClientWorklistItem',
'AdministrativeWorklistItem': 'AdministrativeWorklistItem'    }

    def __init__(self, sub_class=None, id=None, title=None, loc_title=None, desc=None, loc_desc=None, process_type=None, process_template_version=None, process_template_name=None, loc_process_template_name=None, process_instance_name=None, loc_process_instance_name=None, act_ref=None, icon_id=None, group_id=None, state=None, priority=None, complexity=None, activation_date=None, assignment_date=None, escalation_date=None, due_date=None, assigned_agent=None, current_escalation_level=None, current_delegation=None, current_enquiry=None, replied_enquiry=None, current_delegation_level=None, user_attributes=None, *args, **kwargs):  # noqa: E501
        """WorklistItem - a model defined in Swagger"""  # noqa: E501
        self._sub_class = None
        self._id = None
        self._title = None
        self._loc_title = None
        self._desc = None
        self._loc_desc = None
        self._process_type = None
        self._process_template_version = None
        self._process_template_name = None
        self._loc_process_template_name = None
        self._process_instance_name = None
        self._loc_process_instance_name = None
        self._act_ref = None
        self._icon_id = None
        self._group_id = None
        self._state = None
        self._priority = None
        self._complexity = None
        self._activation_date = None
        self._assignment_date = None
        self._escalation_date = None
        self._due_date = None
        self._assigned_agent = None
        self._current_escalation_level = None
        self._current_delegation = None
        self._current_enquiry = None
        self._replied_enquiry = None
        self._current_delegation_level = None
        self._user_attributes = None
        if not(hasattr(self, "discriminator")) or not(self.discriminator):
            self.discriminator = 'sub_class'
        if sub_class is not None:
            self.sub_class = sub_class
        self.id = id
        self.title = title
        if loc_title is not None:
            self.loc_title = loc_title
        if desc is not None:
            self.desc = desc
        if loc_desc is not None:
            self.loc_desc = loc_desc
        if process_type is not None:
            self.process_type = process_type
        if process_template_version is not None:
            self.process_template_version = process_template_version
        if process_template_name is not None:
            self.process_template_name = process_template_name
        if loc_process_template_name is not None:
            self.loc_process_template_name = loc_process_template_name
        if process_instance_name is not None:
            self.process_instance_name = process_instance_name
        if loc_process_instance_name is not None:
            self.loc_process_instance_name = loc_process_instance_name
        self.act_ref = act_ref
        if icon_id is not None:
            self.icon_id = icon_id
        if group_id is not None:
            self.group_id = group_id
        self.state = state
        self.priority = priority
        self.complexity = complexity
        self.activation_date = activation_date
        if assignment_date is not None:
            self.assignment_date = assignment_date
        if escalation_date is not None:
            self.escalation_date = escalation_date
        if due_date is not None:
            self.due_date = due_date
        if assigned_agent is not None:
            self.assigned_agent = assigned_agent
        self.current_escalation_level = current_escalation_level
        if current_delegation is not None:
            self.current_delegation = current_delegation
        if current_enquiry is not None:
            self.current_enquiry = current_enquiry
        if replied_enquiry is not None:
            self.replied_enquiry = replied_enquiry
        self.current_delegation_level = current_delegation_level
        if user_attributes is not None:
            self.user_attributes = user_attributes
        DummyParent.__init__(self, *args, **kwargs)

    @property
    def sub_class(self):
        """Gets the sub_class of this WorklistItem.  # noqa: E501


        :return: The sub_class of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._sub_class

    @sub_class.setter
    def sub_class(self, sub_class):
        """Sets the sub_class of this WorklistItem.


        :param sub_class: The sub_class of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._sub_class = sub_class

    @property
    def id(self):
        """Gets the id of this WorklistItem.  # noqa: E501


        :return: The id of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this WorklistItem.


        :param id: The id of this WorklistItem.  # noqa: E501
        :type: str
        """
        if id is None:
            raise ValueError("Invalid value for `id`, must not be `None`")  # noqa: E501

        self._id = id

    @property
    def title(self):
        """Gets the title of this WorklistItem.  # noqa: E501


        :return: The title of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._title

    @title.setter
    def title(self, title):
        """Sets the title of this WorklistItem.


        :param title: The title of this WorklistItem.  # noqa: E501
        :type: str
        """
        if title is None:
            raise ValueError("Invalid value for `title`, must not be `None`")  # noqa: E501

        self._title = title

    @property
    def loc_title(self):
        """Gets the loc_title of this WorklistItem.  # noqa: E501


        :return: The loc_title of this WorklistItem.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._loc_title

    @loc_title.setter
    def loc_title(self, loc_title):
        """Sets the loc_title of this WorklistItem.


        :param loc_title: The loc_title of this WorklistItem.  # noqa: E501
        :type: dict(str, str)
        """

        self._loc_title = loc_title

    @property
    def desc(self):
        """Gets the desc of this WorklistItem.  # noqa: E501


        :return: The desc of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._desc

    @desc.setter
    def desc(self, desc):
        """Sets the desc of this WorklistItem.


        :param desc: The desc of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._desc = desc

    @property
    def loc_desc(self):
        """Gets the loc_desc of this WorklistItem.  # noqa: E501


        :return: The loc_desc of this WorklistItem.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._loc_desc

    @loc_desc.setter
    def loc_desc(self, loc_desc):
        """Sets the loc_desc of this WorklistItem.


        :param loc_desc: The loc_desc of this WorklistItem.  # noqa: E501
        :type: dict(str, str)
        """

        self._loc_desc = loc_desc

    @property
    def process_type(self):
        """Gets the process_type of this WorklistItem.  # noqa: E501


        :return: The process_type of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._process_type

    @process_type.setter
    def process_type(self, process_type):
        """Sets the process_type of this WorklistItem.


        :param process_type: The process_type of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._process_type = process_type

    @property
    def process_template_version(self):
        """Gets the process_template_version of this WorklistItem.  # noqa: E501


        :return: The process_template_version of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._process_template_version

    @process_template_version.setter
    def process_template_version(self, process_template_version):
        """Sets the process_template_version of this WorklistItem.


        :param process_template_version: The process_template_version of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._process_template_version = process_template_version

    @property
    def process_template_name(self):
        """Gets the process_template_name of this WorklistItem.  # noqa: E501


        :return: The process_template_name of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._process_template_name

    @process_template_name.setter
    def process_template_name(self, process_template_name):
        """Sets the process_template_name of this WorklistItem.


        :param process_template_name: The process_template_name of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._process_template_name = process_template_name

    @property
    def loc_process_template_name(self):
        """Gets the loc_process_template_name of this WorklistItem.  # noqa: E501


        :return: The loc_process_template_name of this WorklistItem.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._loc_process_template_name

    @loc_process_template_name.setter
    def loc_process_template_name(self, loc_process_template_name):
        """Sets the loc_process_template_name of this WorklistItem.


        :param loc_process_template_name: The loc_process_template_name of this WorklistItem.  # noqa: E501
        :type: dict(str, str)
        """

        self._loc_process_template_name = loc_process_template_name

    @property
    def process_instance_name(self):
        """Gets the process_instance_name of this WorklistItem.  # noqa: E501


        :return: The process_instance_name of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._process_instance_name

    @process_instance_name.setter
    def process_instance_name(self, process_instance_name):
        """Sets the process_instance_name of this WorklistItem.


        :param process_instance_name: The process_instance_name of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._process_instance_name = process_instance_name

    @property
    def loc_process_instance_name(self):
        """Gets the loc_process_instance_name of this WorklistItem.  # noqa: E501


        :return: The loc_process_instance_name of this WorklistItem.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._loc_process_instance_name

    @loc_process_instance_name.setter
    def loc_process_instance_name(self, loc_process_instance_name):
        """Sets the loc_process_instance_name of this WorklistItem.


        :param loc_process_instance_name: The loc_process_instance_name of this WorklistItem.  # noqa: E501
        :type: dict(str, str)
        """

        self._loc_process_instance_name = loc_process_instance_name

    @property
    def act_ref(self):
        """Gets the act_ref of this WorklistItem.  # noqa: E501


        :return: The act_ref of this WorklistItem.  # noqa: E501
        :rtype: ActivityReference
        """
        return self._act_ref

    @act_ref.setter
    def act_ref(self, act_ref):
        """Sets the act_ref of this WorklistItem.


        :param act_ref: The act_ref of this WorklistItem.  # noqa: E501
        :type: ActivityReference
        """
        if act_ref is None:
            raise ValueError("Invalid value for `act_ref`, must not be `None`")  # noqa: E501

        self._act_ref = act_ref

    @property
    def icon_id(self):
        """Gets the icon_id of this WorklistItem.  # noqa: E501


        :return: The icon_id of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._icon_id

    @icon_id.setter
    def icon_id(self, icon_id):
        """Sets the icon_id of this WorklistItem.


        :param icon_id: The icon_id of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._icon_id = icon_id

    @property
    def group_id(self):
        """Gets the group_id of this WorklistItem.  # noqa: E501


        :return: The group_id of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._group_id

    @group_id.setter
    def group_id(self, group_id):
        """Sets the group_id of this WorklistItem.


        :param group_id: The group_id of this WorklistItem.  # noqa: E501
        :type: str
        """

        self._group_id = group_id

    @property
    def state(self):
        """Gets the state of this WorklistItem.  # noqa: E501


        :return: The state of this WorklistItem.  # noqa: E501
        :rtype: str
        """
        return self._state

    @state.setter
    def state(self, state):
        """Sets the state of this WorklistItem.


        :param state: The state of this WorklistItem.  # noqa: E501
        :type: str
        """
        if state is None:
            raise ValueError("Invalid value for `state`, must not be `None`")  # noqa: E501
        allowed_values = ["AVAILABLE", "ASSIGNED", "STARTED", "SUSPENDED", "ENQUIRED"]  # noqa: E501
        if state not in allowed_values:
            raise ValueError(
                "Invalid value for `state` ({0}), must be one of {1}"  # noqa: E501
                .format(state, allowed_values)
            )

        self._state = state

    @property
    def priority(self):
        """Gets the priority of this WorklistItem.  # noqa: E501


        :return: The priority of this WorklistItem.  # noqa: E501
        :rtype: int
        """
        return self._priority

    @priority.setter
    def priority(self, priority):
        """Sets the priority of this WorklistItem.


        :param priority: The priority of this WorklistItem.  # noqa: E501
        :type: int
        """
        if priority is None:
            raise ValueError("Invalid value for `priority`, must not be `None`")  # noqa: E501

        self._priority = priority

    @property
    def complexity(self):
        """Gets the complexity of this WorklistItem.  # noqa: E501


        :return: The complexity of this WorklistItem.  # noqa: E501
        :rtype: int
        """
        return self._complexity

    @complexity.setter
    def complexity(self, complexity):
        """Sets the complexity of this WorklistItem.


        :param complexity: The complexity of this WorklistItem.  # noqa: E501
        :type: int
        """
        if complexity is None:
            raise ValueError("Invalid value for `complexity`, must not be `None`")  # noqa: E501

        self._complexity = complexity

    @property
    def activation_date(self):
        """Gets the activation_date of this WorklistItem.  # noqa: E501


        :return: The activation_date of this WorklistItem.  # noqa: E501
        :rtype: datetime
        """
        return self._activation_date

    @activation_date.setter
    def activation_date(self, activation_date):
        """Sets the activation_date of this WorklistItem.


        :param activation_date: The activation_date of this WorklistItem.  # noqa: E501
        :type: datetime
        """
        if activation_date is None:
            raise ValueError("Invalid value for `activation_date`, must not be `None`")  # noqa: E501

        self._activation_date = activation_date

    @property
    def assignment_date(self):
        """Gets the assignment_date of this WorklistItem.  # noqa: E501


        :return: The assignment_date of this WorklistItem.  # noqa: E501
        :rtype: datetime
        """
        return self._assignment_date

    @assignment_date.setter
    def assignment_date(self, assignment_date):
        """Sets the assignment_date of this WorklistItem.


        :param assignment_date: The assignment_date of this WorklistItem.  # noqa: E501
        :type: datetime
        """

        self._assignment_date = assignment_date

    @property
    def escalation_date(self):
        """Gets the escalation_date of this WorklistItem.  # noqa: E501


        :return: The escalation_date of this WorklistItem.  # noqa: E501
        :rtype: datetime
        """
        return self._escalation_date

    @escalation_date.setter
    def escalation_date(self, escalation_date):
        """Sets the escalation_date of this WorklistItem.


        :param escalation_date: The escalation_date of this WorklistItem.  # noqa: E501
        :type: datetime
        """

        self._escalation_date = escalation_date

    @property
    def due_date(self):
        """Gets the due_date of this WorklistItem.  # noqa: E501


        :return: The due_date of this WorklistItem.  # noqa: E501
        :rtype: datetime
        """
        return self._due_date

    @due_date.setter
    def due_date(self, due_date):
        """Sets the due_date of this WorklistItem.


        :param due_date: The due_date of this WorklistItem.  # noqa: E501
        :type: datetime
        """

        self._due_date = due_date

    @property
    def assigned_agent(self):
        """Gets the assigned_agent of this WorklistItem.  # noqa: E501


        :return: The assigned_agent of this WorklistItem.  # noqa: E501
        :rtype: QualifiedAgent
        """
        return self._assigned_agent

    @assigned_agent.setter
    def assigned_agent(self, assigned_agent):
        """Sets the assigned_agent of this WorklistItem.


        :param assigned_agent: The assigned_agent of this WorklistItem.  # noqa: E501
        :type: QualifiedAgent
        """

        self._assigned_agent = assigned_agent

    @property
    def current_escalation_level(self):
        """Gets the current_escalation_level of this WorklistItem.  # noqa: E501


        :return: The current_escalation_level of this WorklistItem.  # noqa: E501
        :rtype: int
        """
        return self._current_escalation_level

    @current_escalation_level.setter
    def current_escalation_level(self, current_escalation_level):
        """Sets the current_escalation_level of this WorklistItem.


        :param current_escalation_level: The current_escalation_level of this WorklistItem.  # noqa: E501
        :type: int
        """
        if current_escalation_level is None:
            raise ValueError("Invalid value for `current_escalation_level`, must not be `None`")  # noqa: E501

        self._current_escalation_level = current_escalation_level

    @property
    def current_delegation(self):
        """Gets the current_delegation of this WorklistItem.  # noqa: E501


        :return: The current_delegation of this WorklistItem.  # noqa: E501
        :rtype: Delegation
        """
        return self._current_delegation

    @current_delegation.setter
    def current_delegation(self, current_delegation):
        """Sets the current_delegation of this WorklistItem.


        :param current_delegation: The current_delegation of this WorklistItem.  # noqa: E501
        :type: Delegation
        """

        self._current_delegation = current_delegation

    @property
    def current_enquiry(self):
        """Gets the current_enquiry of this WorklistItem.  # noqa: E501


        :return: The current_enquiry of this WorklistItem.  # noqa: E501
        :rtype: Enquiry
        """
        return self._current_enquiry

    @current_enquiry.setter
    def current_enquiry(self, current_enquiry):
        """Sets the current_enquiry of this WorklistItem.


        :param current_enquiry: The current_enquiry of this WorklistItem.  # noqa: E501
        :type: Enquiry
        """

        self._current_enquiry = current_enquiry

    @property
    def replied_enquiry(self):
        """Gets the replied_enquiry of this WorklistItem.  # noqa: E501


        :return: The replied_enquiry of this WorklistItem.  # noqa: E501
        :rtype: Enquiry
        """
        return self._replied_enquiry

    @replied_enquiry.setter
    def replied_enquiry(self, replied_enquiry):
        """Sets the replied_enquiry of this WorklistItem.


        :param replied_enquiry: The replied_enquiry of this WorklistItem.  # noqa: E501
        :type: Enquiry
        """

        self._replied_enquiry = replied_enquiry

    @property
    def current_delegation_level(self):
        """Gets the current_delegation_level of this WorklistItem.  # noqa: E501


        :return: The current_delegation_level of this WorklistItem.  # noqa: E501
        :rtype: int
        """
        return self._current_delegation_level

    @current_delegation_level.setter
    def current_delegation_level(self, current_delegation_level):
        """Sets the current_delegation_level of this WorklistItem.


        :param current_delegation_level: The current_delegation_level of this WorklistItem.  # noqa: E501
        :type: int
        """
        if current_delegation_level is None:
            raise ValueError("Invalid value for `current_delegation_level`, must not be `None`")  # noqa: E501

        self._current_delegation_level = current_delegation_level

    @property
    def user_attributes(self):
        """Gets the user_attributes of this WorklistItem.  # noqa: E501


        :return: The user_attributes of this WorklistItem.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._user_attributes

    @user_attributes.setter
    def user_attributes(self, user_attributes):
        """Sets the user_attributes of this WorklistItem.


        :param user_attributes: The user_attributes of this WorklistItem.  # noqa: E501
        :type: dict(str, str)
        """

        self._user_attributes = user_attributes

    def get_real_child_model(self, data):
        """Returns the real base class specified by the discriminator"""
        discriminator_value = data[self.attribute_map[self.discriminator]]
        return discriminator_value if not(self.__class__.__name__ == discriminator_value) else None

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(WorklistItem, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, WorklistItem):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
