# coding: utf-8

"""
    Welcome to the Atera API

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

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


import pprint
import re  # noqa: F401

import six

from atera_client.configuration import Configuration


class ContractQueryDTO(object):
    """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 = {
        "customer_id": "int",
        "customer_name": "str",
        "contract_id": "int",
        "contract_name": "str",
        "contract_type": "str",
        "active": "bool",
        "default": "bool",
        "taxable": "bool",
        "start_date": "datetime",
        "end_date": "datetime",
        "retainer_flat_fee_contract": "RetainerFlatFeeContractQueryDTO",
        "hourly_contract": "HourlyContractQueryDTO",
        "block_hours_contract": "BlockHoursContractQueryDTO",
        "block_money_contract": "BlockMoneyContractQueryDTO",
        "remote_monitoring_contract": "RemoteMonitoringContractQueryDTO",
        "online_backup_contract": "OnlineBackupContractQueryDTO",
        "project_one_time_fee_contract": "ProjectOneTimeFeeContractQueryDTO",
        "project_hourly_rate_contract": "ProjectHourlyRateContractQueryDTO",
    }

    attribute_map = {
        "customer_id": "CustomerID",
        "customer_name": "CustomerName",
        "contract_id": "ContractID",
        "contract_name": "ContractName",
        "contract_type": "ContractType",
        "active": "Active",
        "default": "Default",
        "taxable": "Taxable",
        "start_date": "StartDate",
        "end_date": "EndDate",
        "retainer_flat_fee_contract": "RetainerFlatFeeContract",
        "hourly_contract": "HourlyContract",
        "block_hours_contract": "BlockHoursContract",
        "block_money_contract": "BlockMoneyContract",
        "remote_monitoring_contract": "RemoteMonitoringContract",
        "online_backup_contract": "OnlineBackupContract",
        "project_one_time_fee_contract": "ProjectOneTimeFeeContract",
        "project_hourly_rate_contract": "ProjectHourlyRateContract",
    }

    def __init__(
        self,
        customer_id=None,
        customer_name=None,
        contract_id=None,
        contract_name=None,
        contract_type=None,
        active=None,
        default=None,
        taxable=None,
        start_date=None,
        end_date=None,
        retainer_flat_fee_contract=None,
        hourly_contract=None,
        block_hours_contract=None,
        block_money_contract=None,
        remote_monitoring_contract=None,
        online_backup_contract=None,
        project_one_time_fee_contract=None,
        project_hourly_rate_contract=None,
        _configuration=None,
    ):  # noqa: E501
        """ContractQueryDTO - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._customer_id = None
        self._customer_name = None
        self._contract_id = None
        self._contract_name = None
        self._contract_type = None
        self._active = None
        self._default = None
        self._taxable = None
        self._start_date = None
        self._end_date = None
        self._retainer_flat_fee_contract = None
        self._hourly_contract = None
        self._block_hours_contract = None
        self._block_money_contract = None
        self._remote_monitoring_contract = None
        self._online_backup_contract = None
        self._project_one_time_fee_contract = None
        self._project_hourly_rate_contract = None
        self.discriminator = None

        if customer_id is not None:
            self.customer_id = customer_id
        if customer_name is not None:
            self.customer_name = customer_name
        if contract_id is not None:
            self.contract_id = contract_id
        if contract_name is not None:
            self.contract_name = contract_name
        if contract_type is not None:
            self.contract_type = contract_type
        if active is not None:
            self.active = active
        if default is not None:
            self.default = default
        if taxable is not None:
            self.taxable = taxable
        if start_date is not None:
            self.start_date = start_date
        if end_date is not None:
            self.end_date = end_date
        if retainer_flat_fee_contract is not None:
            self.retainer_flat_fee_contract = retainer_flat_fee_contract
        if hourly_contract is not None:
            self.hourly_contract = hourly_contract
        if block_hours_contract is not None:
            self.block_hours_contract = block_hours_contract
        if block_money_contract is not None:
            self.block_money_contract = block_money_contract
        if remote_monitoring_contract is not None:
            self.remote_monitoring_contract = remote_monitoring_contract
        if online_backup_contract is not None:
            self.online_backup_contract = online_backup_contract
        if project_one_time_fee_contract is not None:
            self.project_one_time_fee_contract = project_one_time_fee_contract
        if project_hourly_rate_contract is not None:
            self.project_hourly_rate_contract = project_hourly_rate_contract

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


        :return: The customer_id of this ContractQueryDTO.  # noqa: E501
        :rtype: int
        """
        return self._customer_id

    @customer_id.setter
    def customer_id(self, customer_id):
        """Sets the customer_id of this ContractQueryDTO.


        :param customer_id: The customer_id of this ContractQueryDTO.  # noqa: E501
        :type: int
        """

        self._customer_id = customer_id

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


        :return: The customer_name of this ContractQueryDTO.  # noqa: E501
        :rtype: str
        """
        return self._customer_name

    @customer_name.setter
    def customer_name(self, customer_name):
        """Sets the customer_name of this ContractQueryDTO.


        :param customer_name: The customer_name of this ContractQueryDTO.  # noqa: E501
        :type: str
        """

        self._customer_name = customer_name

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


        :return: The contract_id of this ContractQueryDTO.  # noqa: E501
        :rtype: int
        """
        return self._contract_id

    @contract_id.setter
    def contract_id(self, contract_id):
        """Sets the contract_id of this ContractQueryDTO.


        :param contract_id: The contract_id of this ContractQueryDTO.  # noqa: E501
        :type: int
        """

        self._contract_id = contract_id

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


        :return: The contract_name of this ContractQueryDTO.  # noqa: E501
        :rtype: str
        """
        return self._contract_name

    @contract_name.setter
    def contract_name(self, contract_name):
        """Sets the contract_name of this ContractQueryDTO.


        :param contract_name: The contract_name of this ContractQueryDTO.  # noqa: E501
        :type: str
        """

        self._contract_name = contract_name

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


        :return: The contract_type of this ContractQueryDTO.  # noqa: E501
        :rtype: str
        """
        return self._contract_type

    @contract_type.setter
    def contract_type(self, contract_type):
        """Sets the contract_type of this ContractQueryDTO.


        :param contract_type: The contract_type of this ContractQueryDTO.  # noqa: E501
        :type: str
        """
        allowed_values = [
            "RetainerFlatFee",
            "BlockHours",
            "Hourly",
            "RemoteMonitoring",
            "BlockMoney",
            "ProjectOneTimeFee",
            "ProjectHourlyRate",
            "OnlineBackup",
        ]  # noqa: E501
        if self._configuration.client_side_validation and contract_type not in allowed_values:
            raise ValueError(
                "Invalid value for `contract_type` ({0}), must be one of {1}".format(  # noqa: E501
                    contract_type, allowed_values
                )
            )

        self._contract_type = contract_type

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


        :return: The active of this ContractQueryDTO.  # noqa: E501
        :rtype: bool
        """
        return self._active

    @active.setter
    def active(self, active):
        """Sets the active of this ContractQueryDTO.


        :param active: The active of this ContractQueryDTO.  # noqa: E501
        :type: bool
        """

        self._active = active

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


        :return: The default of this ContractQueryDTO.  # noqa: E501
        :rtype: bool
        """
        return self._default

    @default.setter
    def default(self, default):
        """Sets the default of this ContractQueryDTO.


        :param default: The default of this ContractQueryDTO.  # noqa: E501
        :type: bool
        """

        self._default = default

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


        :return: The taxable of this ContractQueryDTO.  # noqa: E501
        :rtype: bool
        """
        return self._taxable

    @taxable.setter
    def taxable(self, taxable):
        """Sets the taxable of this ContractQueryDTO.


        :param taxable: The taxable of this ContractQueryDTO.  # noqa: E501
        :type: bool
        """

        self._taxable = taxable

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


        :return: The start_date of this ContractQueryDTO.  # noqa: E501
        :rtype: datetime
        """
        return self._start_date

    @start_date.setter
    def start_date(self, start_date):
        """Sets the start_date of this ContractQueryDTO.


        :param start_date: The start_date of this ContractQueryDTO.  # noqa: E501
        :type: datetime
        """

        self._start_date = start_date

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


        :return: The end_date of this ContractQueryDTO.  # noqa: E501
        :rtype: datetime
        """
        return self._end_date

    @end_date.setter
    def end_date(self, end_date):
        """Sets the end_date of this ContractQueryDTO.


        :param end_date: The end_date of this ContractQueryDTO.  # noqa: E501
        :type: datetime
        """

        self._end_date = end_date

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


        :return: The retainer_flat_fee_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: RetainerFlatFeeContractQueryDTO
        """
        return self._retainer_flat_fee_contract

    @retainer_flat_fee_contract.setter
    def retainer_flat_fee_contract(self, retainer_flat_fee_contract):
        """Sets the retainer_flat_fee_contract of this ContractQueryDTO.


        :param retainer_flat_fee_contract: The retainer_flat_fee_contract of this ContractQueryDTO.  # noqa: E501
        :type: RetainerFlatFeeContractQueryDTO
        """

        self._retainer_flat_fee_contract = retainer_flat_fee_contract

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


        :return: The hourly_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: HourlyContractQueryDTO
        """
        return self._hourly_contract

    @hourly_contract.setter
    def hourly_contract(self, hourly_contract):
        """Sets the hourly_contract of this ContractQueryDTO.


        :param hourly_contract: The hourly_contract of this ContractQueryDTO.  # noqa: E501
        :type: HourlyContractQueryDTO
        """

        self._hourly_contract = hourly_contract

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


        :return: The block_hours_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: BlockHoursContractQueryDTO
        """
        return self._block_hours_contract

    @block_hours_contract.setter
    def block_hours_contract(self, block_hours_contract):
        """Sets the block_hours_contract of this ContractQueryDTO.


        :param block_hours_contract: The block_hours_contract of this ContractQueryDTO.  # noqa: E501
        :type: BlockHoursContractQueryDTO
        """

        self._block_hours_contract = block_hours_contract

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


        :return: The block_money_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: BlockMoneyContractQueryDTO
        """
        return self._block_money_contract

    @block_money_contract.setter
    def block_money_contract(self, block_money_contract):
        """Sets the block_money_contract of this ContractQueryDTO.


        :param block_money_contract: The block_money_contract of this ContractQueryDTO.  # noqa: E501
        :type: BlockMoneyContractQueryDTO
        """

        self._block_money_contract = block_money_contract

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


        :return: The remote_monitoring_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: RemoteMonitoringContractQueryDTO
        """
        return self._remote_monitoring_contract

    @remote_monitoring_contract.setter
    def remote_monitoring_contract(self, remote_monitoring_contract):
        """Sets the remote_monitoring_contract of this ContractQueryDTO.


        :param remote_monitoring_contract: The remote_monitoring_contract of this ContractQueryDTO.  # noqa: E501
        :type: RemoteMonitoringContractQueryDTO
        """

        self._remote_monitoring_contract = remote_monitoring_contract

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


        :return: The online_backup_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: OnlineBackupContractQueryDTO
        """
        return self._online_backup_contract

    @online_backup_contract.setter
    def online_backup_contract(self, online_backup_contract):
        """Sets the online_backup_contract of this ContractQueryDTO.


        :param online_backup_contract: The online_backup_contract of this ContractQueryDTO.  # noqa: E501
        :type: OnlineBackupContractQueryDTO
        """

        self._online_backup_contract = online_backup_contract

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


        :return: The project_one_time_fee_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: ProjectOneTimeFeeContractQueryDTO
        """
        return self._project_one_time_fee_contract

    @project_one_time_fee_contract.setter
    def project_one_time_fee_contract(self, project_one_time_fee_contract):
        """Sets the project_one_time_fee_contract of this ContractQueryDTO.


        :param project_one_time_fee_contract: The project_one_time_fee_contract of this ContractQueryDTO.  # noqa: E501
        :type: ProjectOneTimeFeeContractQueryDTO
        """

        self._project_one_time_fee_contract = project_one_time_fee_contract

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


        :return: The project_hourly_rate_contract of this ContractQueryDTO.  # noqa: E501
        :rtype: ProjectHourlyRateContractQueryDTO
        """
        return self._project_hourly_rate_contract

    @project_hourly_rate_contract.setter
    def project_hourly_rate_contract(self, project_hourly_rate_contract):
        """Sets the project_hourly_rate_contract of this ContractQueryDTO.


        :param project_hourly_rate_contract: The project_hourly_rate_contract of this ContractQueryDTO.  # noqa: E501
        :type: ProjectHourlyRateContractQueryDTO
        """

        self._project_hourly_rate_contract = project_hourly_rate_contract

    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(ContractQueryDTO, 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, ContractQueryDTO):
            return False

        return self.to_dict() == other.to_dict()

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

        return self.to_dict() != other.to_dict()
