# coding: utf-8

"""
    Getir-Locals Integration Swagger Documentation

    This documentation is created by Getir Developers for Getir-Locals Integration.For this integration, you need to take CLIENT NAME and CLIENT SECRET keys from Getir-dev team and use these keys for authentication. You also need to use access token provided after successful login to be able to use all other endpoints  You can view information about the active order through /orders/unapproved endpoints. The status of the order is managed via verify, prepare, handover and cancel endpoints. Details on order management are as follows:  For orders to be made by the Getir courier, the flow is as follows:  Supplier confirms order --verify<br />Supplier prepares order --prepare (1-2 minutes must pass before delivery)<br />Supplier hands over the order to Getir courier --handover<br />For Getir delivery, transactions are made by the Getir courier after handover.  A valid reason will be requested from the supplier to cancel an order. Valid reasons may vary depending on the instant status of the order. For this reason, before canceling an order, you have to get instant valid order cancellation reasons from /orders/{orderId}/cancel-options endpoint.   # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class OrderResponse(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 = {
        'order_id': 'str',
        'order_type': 'str',
        'confirmation_id': 'str',
        'shop_id': 'str',
        'supplier_id': 'str',
        'max_possible_amount_merchant_can_charge': 'float',
        'min_possible_amount_merchant_can_charge': 'float',
        'is_promo_applied': 'bool',
        'client_note': 'str',
        'client_batched_note': 'str',
        'do_not_knock': 'bool',
        'total_price': 'float',
        'checkout_date': 'str',
        'delivery_type': 'int',
        'payment_method': 'int',
        'payment_method_text': 'PaymentMethodTextResponse',
        'customer': 'CustomerResponse',
        'invoice_address': 'InvoiceAddressResponse',
        'products': 'list[ProductResponse]'
    }

    attribute_map = {
        'order_id': 'orderID',
        'order_type': 'orderType',
        'confirmation_id': 'confirmationId',
        'shop_id': 'shopID',
        'supplier_id': 'supplierID',
        'max_possible_amount_merchant_can_charge': 'maxPossibleAmountMerchantCanCharge',
        'min_possible_amount_merchant_can_charge': 'minPossibleAmountMerchantCanCharge',
        'is_promo_applied': 'isPromoApplied',
        'client_note': 'clientNote',
        'client_batched_note': 'clientBatchedNote',
        'do_not_knock': 'doNotKnock',
        'total_price': 'totalPrice',
        'checkout_date': 'checkoutDate',
        'delivery_type': 'deliveryType',
        'payment_method': 'paymentMethod',
        'payment_method_text': 'paymentMethodText',
        'customer': 'customer',
        'invoice_address': 'invoiceAddress',
        'products': 'products'
    }

    def __init__(self, order_id=None, order_type=None, confirmation_id=None, shop_id=None, supplier_id=None, max_possible_amount_merchant_can_charge=None, min_possible_amount_merchant_can_charge=None, is_promo_applied=None, client_note=None, client_batched_note=None, do_not_knock=None, total_price=None, checkout_date=None, delivery_type=None, payment_method=None, payment_method_text=None, customer=None, invoice_address=None, products=None):  # noqa: E501
        """OrderResponse - a model defined in Swagger"""  # noqa: E501
        self._order_id = None
        self._order_type = None
        self._confirmation_id = None
        self._shop_id = None
        self._supplier_id = None
        self._max_possible_amount_merchant_can_charge = None
        self._min_possible_amount_merchant_can_charge = None
        self._is_promo_applied = None
        self._client_note = None
        self._client_batched_note = None
        self._do_not_knock = None
        self._total_price = None
        self._checkout_date = None
        self._delivery_type = None
        self._payment_method = None
        self._payment_method_text = None
        self._customer = None
        self._invoice_address = None
        self._products = None
        self.discriminator = None
        if order_id is not None:
            self.order_id = order_id
        if order_type is not None:
            self.order_type = order_type
        if confirmation_id is not None:
            self.confirmation_id = confirmation_id
        if shop_id is not None:
            self.shop_id = shop_id
        if supplier_id is not None:
            self.supplier_id = supplier_id
        if max_possible_amount_merchant_can_charge is not None:
            self.max_possible_amount_merchant_can_charge = max_possible_amount_merchant_can_charge
        if min_possible_amount_merchant_can_charge is not None:
            self.min_possible_amount_merchant_can_charge = min_possible_amount_merchant_can_charge
        if is_promo_applied is not None:
            self.is_promo_applied = is_promo_applied
        if client_note is not None:
            self.client_note = client_note
        if client_batched_note is not None:
            self.client_batched_note = client_batched_note
        if do_not_knock is not None:
            self.do_not_knock = do_not_knock
        if total_price is not None:
            self.total_price = total_price
        if checkout_date is not None:
            self.checkout_date = checkout_date
        if delivery_type is not None:
            self.delivery_type = delivery_type
        if payment_method is not None:
            self.payment_method = payment_method
        if payment_method_text is not None:
            self.payment_method_text = payment_method_text
        if customer is not None:
            self.customer = customer
        if invoice_address is not None:
            self.invoice_address = invoice_address
        if products is not None:
            self.products = products

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


        :return: The order_id of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._order_id

    @order_id.setter
    def order_id(self, order_id):
        """Sets the order_id of this OrderResponse.


        :param order_id: The order_id of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._order_id = order_id

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


        :return: The order_type of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._order_type

    @order_type.setter
    def order_type(self, order_type):
        """Sets the order_type of this OrderResponse.


        :param order_type: The order_type of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._order_type = order_type

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


        :return: The confirmation_id of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._confirmation_id

    @confirmation_id.setter
    def confirmation_id(self, confirmation_id):
        """Sets the confirmation_id of this OrderResponse.


        :param confirmation_id: The confirmation_id of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._confirmation_id = confirmation_id

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


        :return: The shop_id of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._shop_id

    @shop_id.setter
    def shop_id(self, shop_id):
        """Sets the shop_id of this OrderResponse.


        :param shop_id: The shop_id of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._shop_id = shop_id

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


        :return: The supplier_id of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._supplier_id

    @supplier_id.setter
    def supplier_id(self, supplier_id):
        """Sets the supplier_id of this OrderResponse.


        :param supplier_id: The supplier_id of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._supplier_id = supplier_id

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


        :return: The max_possible_amount_merchant_can_charge of this OrderResponse.  # noqa: E501
        :rtype: float
        """
        return self._max_possible_amount_merchant_can_charge

    @max_possible_amount_merchant_can_charge.setter
    def max_possible_amount_merchant_can_charge(self, max_possible_amount_merchant_can_charge):
        """Sets the max_possible_amount_merchant_can_charge of this OrderResponse.


        :param max_possible_amount_merchant_can_charge: The max_possible_amount_merchant_can_charge of this OrderResponse.  # noqa: E501
        :type: float
        """

        self._max_possible_amount_merchant_can_charge = max_possible_amount_merchant_can_charge

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


        :return: The min_possible_amount_merchant_can_charge of this OrderResponse.  # noqa: E501
        :rtype: float
        """
        return self._min_possible_amount_merchant_can_charge

    @min_possible_amount_merchant_can_charge.setter
    def min_possible_amount_merchant_can_charge(self, min_possible_amount_merchant_can_charge):
        """Sets the min_possible_amount_merchant_can_charge of this OrderResponse.


        :param min_possible_amount_merchant_can_charge: The min_possible_amount_merchant_can_charge of this OrderResponse.  # noqa: E501
        :type: float
        """

        self._min_possible_amount_merchant_can_charge = min_possible_amount_merchant_can_charge

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


        :return: The is_promo_applied of this OrderResponse.  # noqa: E501
        :rtype: bool
        """
        return self._is_promo_applied

    @is_promo_applied.setter
    def is_promo_applied(self, is_promo_applied):
        """Sets the is_promo_applied of this OrderResponse.


        :param is_promo_applied: The is_promo_applied of this OrderResponse.  # noqa: E501
        :type: bool
        """

        self._is_promo_applied = is_promo_applied

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


        :return: The client_note of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._client_note

    @client_note.setter
    def client_note(self, client_note):
        """Sets the client_note of this OrderResponse.


        :param client_note: The client_note of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._client_note = client_note

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


        :return: The client_batched_note of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._client_batched_note

    @client_batched_note.setter
    def client_batched_note(self, client_batched_note):
        """Sets the client_batched_note of this OrderResponse.


        :param client_batched_note: The client_batched_note of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._client_batched_note = client_batched_note

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


        :return: The do_not_knock of this OrderResponse.  # noqa: E501
        :rtype: bool
        """
        return self._do_not_knock

    @do_not_knock.setter
    def do_not_knock(self, do_not_knock):
        """Sets the do_not_knock of this OrderResponse.


        :param do_not_knock: The do_not_knock of this OrderResponse.  # noqa: E501
        :type: bool
        """

        self._do_not_knock = do_not_knock

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


        :return: The total_price of this OrderResponse.  # noqa: E501
        :rtype: float
        """
        return self._total_price

    @total_price.setter
    def total_price(self, total_price):
        """Sets the total_price of this OrderResponse.


        :param total_price: The total_price of this OrderResponse.  # noqa: E501
        :type: float
        """

        self._total_price = total_price

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


        :return: The checkout_date of this OrderResponse.  # noqa: E501
        :rtype: str
        """
        return self._checkout_date

    @checkout_date.setter
    def checkout_date(self, checkout_date):
        """Sets the checkout_date of this OrderResponse.


        :param checkout_date: The checkout_date of this OrderResponse.  # noqa: E501
        :type: str
        """

        self._checkout_date = checkout_date

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


        :return: The delivery_type of this OrderResponse.  # noqa: E501
        :rtype: int
        """
        return self._delivery_type

    @delivery_type.setter
    def delivery_type(self, delivery_type):
        """Sets the delivery_type of this OrderResponse.


        :param delivery_type: The delivery_type of this OrderResponse.  # noqa: E501
        :type: int
        """

        self._delivery_type = delivery_type

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


        :return: The payment_method of this OrderResponse.  # noqa: E501
        :rtype: int
        """
        return self._payment_method

    @payment_method.setter
    def payment_method(self, payment_method):
        """Sets the payment_method of this OrderResponse.


        :param payment_method: The payment_method of this OrderResponse.  # noqa: E501
        :type: int
        """

        self._payment_method = payment_method

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


        :return: The payment_method_text of this OrderResponse.  # noqa: E501
        :rtype: PaymentMethodTextResponse
        """
        return self._payment_method_text

    @payment_method_text.setter
    def payment_method_text(self, payment_method_text):
        """Sets the payment_method_text of this OrderResponse.


        :param payment_method_text: The payment_method_text of this OrderResponse.  # noqa: E501
        :type: PaymentMethodTextResponse
        """

        self._payment_method_text = payment_method_text

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


        :return: The customer of this OrderResponse.  # noqa: E501
        :rtype: CustomerResponse
        """
        return self._customer

    @customer.setter
    def customer(self, customer):
        """Sets the customer of this OrderResponse.


        :param customer: The customer of this OrderResponse.  # noqa: E501
        :type: CustomerResponse
        """

        self._customer = customer

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


        :return: The invoice_address of this OrderResponse.  # noqa: E501
        :rtype: InvoiceAddressResponse
        """
        return self._invoice_address

    @invoice_address.setter
    def invoice_address(self, invoice_address):
        """Sets the invoice_address of this OrderResponse.


        :param invoice_address: The invoice_address of this OrderResponse.  # noqa: E501
        :type: InvoiceAddressResponse
        """

        self._invoice_address = invoice_address

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


        :return: The products of this OrderResponse.  # noqa: E501
        :rtype: list[ProductResponse]
        """
        return self._products

    @products.setter
    def products(self, products):
        """Sets the products of this OrderResponse.


        :param products: The products of this OrderResponse.  # noqa: E501
        :type: list[ProductResponse]
        """

        self._products = products

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

        return self.__dict__ == other.__dict__

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