# coding: utf-8

"""
    Yanport API

    ## À propos Voici quelques ressources qui vous aideront à explorer notre API, si vous avez des problèmes ou des demandes, veuillez contacter le [support](mailto:support@yanport.com). ## REST API Nos services webs utilisent le protocle **HTTPS** sur le port 443, tout accès en HTTP sur le port 80 est bloqué par notre pare-feu. Les échanges de données sont réalisés en **JSON**. ## Authentification Avant de commencer à explorer notre API, vous devez nous [contacter](https://www.yanport.com/contact) afin d'obtenir un [JSON Web Token](https://jwt.io) (**JWT**) qui vous permettra de vous identifier à chaque requêtes. ### JWT (header) La méthode privilégiée pour s'authentifier est de passer à chaque requêtes le token dans le header `Authorization: Bearer {{ JWT }}` en remplaçant `{{ JWT }}` par votre token. ### JWT (query param) Il est aussi possible de passer le token directement en query param de la requête `https://api.yanport.com/?token={{ JWT }}`. (_privilégié le passage par header en production._) ## Pour démarrer Lorsque vous disposez de votre token d'authentification, vous pouvez commencer à explorer notre API grâce au boutton  `Try it out` sur chacun de nos webs services. Mais au préalable, vous devez vous authentifier en cliquant sur le boutton `Authorize `, en remplissant l'input `api_key` avec `Bearer {{ JWT }}`.  **Exemple** `Bearer eyUEkiLCJh...CHCUiBfD63oxoo=` ## Limitation Toutes les requêtes à notre API sont loggées, c'est pourquoi vous devez respecter nos [CGU](https://dev.yanport.com/cgu) afin d'éviter tout usage abusif de notre API. 

    OpenAPI spec version: 1.0
    Contact: dev@yanport.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class PropertyMarketing(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 = {
        'type': 'str',
        'price': 'float',
        'selling_price': 'float',
        'price_events': 'list[PriceEvent]',
        'dealers': 'list[MarketingDealer]',
        'marketing_start_date': 'datetime',
        'marketing_end_date': 'datetime',
        'publication_start_date': 'datetime',
        'publication_end_date': 'datetime',
        'rental_expenses': 'float',
        'rental_expenses_included': 'bool',
        'deposit': 'float',
        'property_tax': 'float',
        'fees': 'float',
        'fees_included': 'bool',
        'exclusive_mandate': 'bool',
        'occupied': 'bool',
        'rent_control': 'RentControl'
    }

    attribute_map = {
        'type': 'type',
        'price': 'price',
        'selling_price': 'sellingPrice',
        'price_events': 'priceEvents',
        'dealers': 'dealers',
        'marketing_start_date': 'marketingStartDate',
        'marketing_end_date': 'marketingEndDate',
        'publication_start_date': 'publicationStartDate',
        'publication_end_date': 'publicationEndDate',
        'rental_expenses': 'rentalExpenses',
        'rental_expenses_included': 'rentalExpensesIncluded',
        'deposit': 'deposit',
        'property_tax': 'propertyTax',
        'fees': 'fees',
        'fees_included': 'feesIncluded',
        'exclusive_mandate': 'exclusiveMandate',
        'occupied': 'occupied',
        'rent_control': 'rentControl'
    }

    def __init__(self, type=None, price=None, selling_price=None, price_events=None, dealers=None, marketing_start_date=None, marketing_end_date=None, publication_start_date=None, publication_end_date=None, rental_expenses=None, rental_expenses_included=None, deposit=None, property_tax=None, fees=None, fees_included=None, exclusive_mandate=None, occupied=None, rent_control=None):
        """
        PropertyMarketing - a model defined in Swagger
        """

        self._type = None
        self._price = None
        self._selling_price = None
        self._price_events = None
        self._dealers = None
        self._marketing_start_date = None
        self._marketing_end_date = None
        self._publication_start_date = None
        self._publication_end_date = None
        self._rental_expenses = None
        self._rental_expenses_included = None
        self._deposit = None
        self._property_tax = None
        self._fees = None
        self._fees_included = None
        self._exclusive_mandate = None
        self._occupied = None
        self._rent_control = None

        if type is not None:
          self.type = type
        if price is not None:
          self.price = price
        if selling_price is not None:
          self.selling_price = selling_price
        if price_events is not None:
          self.price_events = price_events
        if dealers is not None:
          self.dealers = dealers
        if marketing_start_date is not None:
          self.marketing_start_date = marketing_start_date
        if marketing_end_date is not None:
          self.marketing_end_date = marketing_end_date
        if publication_start_date is not None:
          self.publication_start_date = publication_start_date
        if publication_end_date is not None:
          self.publication_end_date = publication_end_date
        if rental_expenses is not None:
          self.rental_expenses = rental_expenses
        if rental_expenses_included is not None:
          self.rental_expenses_included = rental_expenses_included
        if deposit is not None:
          self.deposit = deposit
        if property_tax is not None:
          self.property_tax = property_tax
        if fees is not None:
          self.fees = fees
        if fees_included is not None:
          self.fees_included = fees_included
        if exclusive_mandate is not None:
          self.exclusive_mandate = exclusive_mandate
        if occupied is not None:
          self.occupied = occupied
        if rent_control is not None:
          self.rent_control = rent_control

    @property
    def type(self):
        """
        Gets the type of this PropertyMarketing.

        :return: The type of this PropertyMarketing.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """
        Sets the type of this PropertyMarketing.

        :param type: The type of this PropertyMarketing.
        :type: str
        """
        allowed_values = ["SALE", "RENT", "NEW_BUILD"]
        if type not in allowed_values:
            raise ValueError(
                "Invalid value for `type` ({0}), must be one of {1}"
                .format(type, allowed_values)
            )

        self._type = type

    @property
    def price(self):
        """
        Gets the price of this PropertyMarketing.

        :return: The price of this PropertyMarketing.
        :rtype: float
        """
        return self._price

    @price.setter
    def price(self, price):
        """
        Sets the price of this PropertyMarketing.

        :param price: The price of this PropertyMarketing.
        :type: float
        """

        self._price = price

    @property
    def selling_price(self):
        """
        Gets the selling_price of this PropertyMarketing.

        :return: The selling_price of this PropertyMarketing.
        :rtype: float
        """
        return self._selling_price

    @selling_price.setter
    def selling_price(self, selling_price):
        """
        Sets the selling_price of this PropertyMarketing.

        :param selling_price: The selling_price of this PropertyMarketing.
        :type: float
        """

        self._selling_price = selling_price

    @property
    def price_events(self):
        """
        Gets the price_events of this PropertyMarketing.

        :return: The price_events of this PropertyMarketing.
        :rtype: list[PriceEvent]
        """
        return self._price_events

    @price_events.setter
    def price_events(self, price_events):
        """
        Sets the price_events of this PropertyMarketing.

        :param price_events: The price_events of this PropertyMarketing.
        :type: list[PriceEvent]
        """

        self._price_events = price_events

    @property
    def dealers(self):
        """
        Gets the dealers of this PropertyMarketing.

        :return: The dealers of this PropertyMarketing.
        :rtype: list[MarketingDealer]
        """
        return self._dealers

    @dealers.setter
    def dealers(self, dealers):
        """
        Sets the dealers of this PropertyMarketing.

        :param dealers: The dealers of this PropertyMarketing.
        :type: list[MarketingDealer]
        """

        self._dealers = dealers

    @property
    def marketing_start_date(self):
        """
        Gets the marketing_start_date of this PropertyMarketing.

        :return: The marketing_start_date of this PropertyMarketing.
        :rtype: datetime
        """
        return self._marketing_start_date

    @marketing_start_date.setter
    def marketing_start_date(self, marketing_start_date):
        """
        Sets the marketing_start_date of this PropertyMarketing.

        :param marketing_start_date: The marketing_start_date of this PropertyMarketing.
        :type: datetime
        """

        self._marketing_start_date = marketing_start_date

    @property
    def marketing_end_date(self):
        """
        Gets the marketing_end_date of this PropertyMarketing.

        :return: The marketing_end_date of this PropertyMarketing.
        :rtype: datetime
        """
        return self._marketing_end_date

    @marketing_end_date.setter
    def marketing_end_date(self, marketing_end_date):
        """
        Sets the marketing_end_date of this PropertyMarketing.

        :param marketing_end_date: The marketing_end_date of this PropertyMarketing.
        :type: datetime
        """

        self._marketing_end_date = marketing_end_date

    @property
    def publication_start_date(self):
        """
        Gets the publication_start_date of this PropertyMarketing.

        :return: The publication_start_date of this PropertyMarketing.
        :rtype: datetime
        """
        return self._publication_start_date

    @publication_start_date.setter
    def publication_start_date(self, publication_start_date):
        """
        Sets the publication_start_date of this PropertyMarketing.

        :param publication_start_date: The publication_start_date of this PropertyMarketing.
        :type: datetime
        """

        self._publication_start_date = publication_start_date

    @property
    def publication_end_date(self):
        """
        Gets the publication_end_date of this PropertyMarketing.

        :return: The publication_end_date of this PropertyMarketing.
        :rtype: datetime
        """
        return self._publication_end_date

    @publication_end_date.setter
    def publication_end_date(self, publication_end_date):
        """
        Sets the publication_end_date of this PropertyMarketing.

        :param publication_end_date: The publication_end_date of this PropertyMarketing.
        :type: datetime
        """

        self._publication_end_date = publication_end_date

    @property
    def rental_expenses(self):
        """
        Gets the rental_expenses of this PropertyMarketing.

        :return: The rental_expenses of this PropertyMarketing.
        :rtype: float
        """
        return self._rental_expenses

    @rental_expenses.setter
    def rental_expenses(self, rental_expenses):
        """
        Sets the rental_expenses of this PropertyMarketing.

        :param rental_expenses: The rental_expenses of this PropertyMarketing.
        :type: float
        """

        self._rental_expenses = rental_expenses

    @property
    def rental_expenses_included(self):
        """
        Gets the rental_expenses_included of this PropertyMarketing.

        :return: The rental_expenses_included of this PropertyMarketing.
        :rtype: bool
        """
        return self._rental_expenses_included

    @rental_expenses_included.setter
    def rental_expenses_included(self, rental_expenses_included):
        """
        Sets the rental_expenses_included of this PropertyMarketing.

        :param rental_expenses_included: The rental_expenses_included of this PropertyMarketing.
        :type: bool
        """

        self._rental_expenses_included = rental_expenses_included

    @property
    def deposit(self):
        """
        Gets the deposit of this PropertyMarketing.

        :return: The deposit of this PropertyMarketing.
        :rtype: float
        """
        return self._deposit

    @deposit.setter
    def deposit(self, deposit):
        """
        Sets the deposit of this PropertyMarketing.

        :param deposit: The deposit of this PropertyMarketing.
        :type: float
        """

        self._deposit = deposit

    @property
    def property_tax(self):
        """
        Gets the property_tax of this PropertyMarketing.

        :return: The property_tax of this PropertyMarketing.
        :rtype: float
        """
        return self._property_tax

    @property_tax.setter
    def property_tax(self, property_tax):
        """
        Sets the property_tax of this PropertyMarketing.

        :param property_tax: The property_tax of this PropertyMarketing.
        :type: float
        """

        self._property_tax = property_tax

    @property
    def fees(self):
        """
        Gets the fees of this PropertyMarketing.

        :return: The fees of this PropertyMarketing.
        :rtype: float
        """
        return self._fees

    @fees.setter
    def fees(self, fees):
        """
        Sets the fees of this PropertyMarketing.

        :param fees: The fees of this PropertyMarketing.
        :type: float
        """

        self._fees = fees

    @property
    def fees_included(self):
        """
        Gets the fees_included of this PropertyMarketing.

        :return: The fees_included of this PropertyMarketing.
        :rtype: bool
        """
        return self._fees_included

    @fees_included.setter
    def fees_included(self, fees_included):
        """
        Sets the fees_included of this PropertyMarketing.

        :param fees_included: The fees_included of this PropertyMarketing.
        :type: bool
        """

        self._fees_included = fees_included

    @property
    def exclusive_mandate(self):
        """
        Gets the exclusive_mandate of this PropertyMarketing.

        :return: The exclusive_mandate of this PropertyMarketing.
        :rtype: bool
        """
        return self._exclusive_mandate

    @exclusive_mandate.setter
    def exclusive_mandate(self, exclusive_mandate):
        """
        Sets the exclusive_mandate of this PropertyMarketing.

        :param exclusive_mandate: The exclusive_mandate of this PropertyMarketing.
        :type: bool
        """

        self._exclusive_mandate = exclusive_mandate

    @property
    def occupied(self):
        """
        Gets the occupied of this PropertyMarketing.

        :return: The occupied of this PropertyMarketing.
        :rtype: bool
        """
        return self._occupied

    @occupied.setter
    def occupied(self, occupied):
        """
        Sets the occupied of this PropertyMarketing.

        :param occupied: The occupied of this PropertyMarketing.
        :type: bool
        """

        self._occupied = occupied

    @property
    def rent_control(self):
        """
        Gets the rent_control of this PropertyMarketing.

        :return: The rent_control of this PropertyMarketing.
        :rtype: RentControl
        """
        return self._rent_control

    @rent_control.setter
    def rent_control(self, rent_control):
        """
        Sets the rent_control of this PropertyMarketing.

        :param rent_control: The rent_control of this PropertyMarketing.
        :type: RentControl
        """

        self._rent_control = rent_control

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

        for attr, _ in 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

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return 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, PropertyMarketing):
            return False

        return self.__dict__ == other.__dict__

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