# coding: utf-8

"""
    Cyclos 4.11.5 API

    The REST API for Cyclos 4.11.5  # noqa: E501

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


import pprint
import re  # noqa: F401

import six

from swagger_client.configuration import Configuration


class TransactionQueryFilters(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 = {
        'account_types': 'list[str]',
        'direction': 'TransferDirectionEnum',
        'kinds': 'list[TransactionKind]',
        'authorization_statuses': 'list[TransactionAuthorizationStatusEnum]',
        'ticket_statuses': 'list[TicketStatusEnum]',
        'recurring_payment_statuses': 'list[RecurringPaymentStatusEnum]',
        'scheduled_payment_statuses': 'list[ScheduledPaymentStatusEnum]',
        'payment_request_statuses': 'list[PaymentRequestStatusEnum]',
        'external_payment_statuses': 'list[ExternalPaymentStatusEnum]'
    }

    attribute_map = {
        'account_types': 'accountTypes',
        'direction': 'direction',
        'kinds': 'kinds',
        'authorization_statuses': 'authorizationStatuses',
        'ticket_statuses': 'ticketStatuses',
        'recurring_payment_statuses': 'recurringPaymentStatuses',
        'scheduled_payment_statuses': 'scheduledPaymentStatuses',
        'payment_request_statuses': 'paymentRequestStatuses',
        'external_payment_statuses': 'externalPaymentStatuses'
    }

    def __init__(self, account_types=None, direction=None, kinds=None, authorization_statuses=None, ticket_statuses=None, recurring_payment_statuses=None, scheduled_payment_statuses=None, payment_request_statuses=None, external_payment_statuses=None, _configuration=None):  # noqa: E501
        """TransactionQueryFilters - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._account_types = None
        self._direction = None
        self._kinds = None
        self._authorization_statuses = None
        self._ticket_statuses = None
        self._recurring_payment_statuses = None
        self._scheduled_payment_statuses = None
        self._payment_request_statuses = None
        self._external_payment_statuses = None
        self.discriminator = None

        if account_types is not None:
            self.account_types = account_types
        if direction is not None:
            self.direction = direction
        if kinds is not None:
            self.kinds = kinds
        if authorization_statuses is not None:
            self.authorization_statuses = authorization_statuses
        if ticket_statuses is not None:
            self.ticket_statuses = ticket_statuses
        if recurring_payment_statuses is not None:
            self.recurring_payment_statuses = recurring_payment_statuses
        if scheduled_payment_statuses is not None:
            self.scheduled_payment_statuses = scheduled_payment_statuses
        if payment_request_statuses is not None:
            self.payment_request_statuses = payment_request_statuses
        if external_payment_statuses is not None:
            self.external_payment_statuses = external_payment_statuses

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

        The account types  # noqa: E501

        :return: The account_types of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[str]
        """
        return self._account_types

    @account_types.setter
    def account_types(self, account_types):
        """Sets the account_types of this TransactionQueryFilters.

        The account types  # noqa: E501

        :param account_types: The account_types of this TransactionQueryFilters.  # noqa: E501
        :type: list[str]
        """

        self._account_types = account_types

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

        Indicates whether from an account POV a transfer is a credit or debit Possible values are: * credit: The transfer impacts the balance positively * debit: The transfer impacts the balance negatively   # noqa: E501

        :return: The direction of this TransactionQueryFilters.  # noqa: E501
        :rtype: TransferDirectionEnum
        """
        return self._direction

    @direction.setter
    def direction(self, direction):
        """Sets the direction of this TransactionQueryFilters.

        Indicates whether from an account POV a transfer is a credit or debit Possible values are: * credit: The transfer impacts the balance positively * debit: The transfer impacts the balance negatively   # noqa: E501

        :param direction: The direction of this TransactionQueryFilters.  # noqa: E501
        :type: TransferDirectionEnum
        """

        self._direction = direction

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

        The kind of a transaction  Possibles values for each array element are: * chargeback: Chargeback of a given transfer * externalPayment: A payment to an external user * import: An imported transaction * order: Transaction generated by confirming an order * payment: A direct payment * paymentRequest: A request for another user to accept a payment  * recurringPayment: A payment which is processed again periodically * scheduledPayment: A scheduled payment which is either a payment scheduled for a future date or has multiple installments * ticket: A payment whose the payer is unknown   # noqa: E501

        :return: The kinds of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[TransactionKind]
        """
        return self._kinds

    @kinds.setter
    def kinds(self, kinds):
        """Sets the kinds of this TransactionQueryFilters.

        The kind of a transaction  Possibles values for each array element are: * chargeback: Chargeback of a given transfer * externalPayment: A payment to an external user * import: An imported transaction * order: Transaction generated by confirming an order * payment: A direct payment * paymentRequest: A request for another user to accept a payment  * recurringPayment: A payment which is processed again periodically * scheduledPayment: A scheduled payment which is either a payment scheduled for a future date or has multiple installments * ticket: A payment whose the payer is unknown   # noqa: E501

        :param kinds: The kinds of this TransactionQueryFilters.  # noqa: E501
        :type: list[TransactionKind]
        """

        self._kinds = kinds

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

        Authorization statuses used as search criteria Possibles values for each array element are: * authorized: The transaction was fully authorized and is processed * canceled: The authorization submission was canceled by the submitter * denied: The authorization was denied * pending: The transaction is pending authorization   # noqa: E501

        :return: The authorization_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[TransactionAuthorizationStatusEnum]
        """
        return self._authorization_statuses

    @authorization_statuses.setter
    def authorization_statuses(self, authorization_statuses):
        """Sets the authorization_statuses of this TransactionQueryFilters.

        Authorization statuses used as search criteria Possibles values for each array element are: * authorized: The transaction was fully authorized and is processed * canceled: The authorization submission was canceled by the submitter * denied: The authorization was denied * pending: The transaction is pending authorization   # noqa: E501

        :param authorization_statuses: The authorization_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[TransactionAuthorizationStatusEnum]
        """

        self._authorization_statuses = authorization_statuses

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

        Statuses used as search criteria applied only to transactions of kind `ticket`. Possibles values for each array element are: * approved: The ticket was approved by the payer and is waiting to be processed by the receiver to generate the payment * canceled: The ticket was canceled by the receiver before being approved * expired: The ticket has expired without being approved by a payer or canceled by the receiver until the expiration date * open: The ticket was created, but not approved yet * processed: The ticket was approved and processed and the payment was generated   # noqa: E501

        :return: The ticket_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[TicketStatusEnum]
        """
        return self._ticket_statuses

    @ticket_statuses.setter
    def ticket_statuses(self, ticket_statuses):
        """Sets the ticket_statuses of this TransactionQueryFilters.

        Statuses used as search criteria applied only to transactions of kind `ticket`. Possibles values for each array element are: * approved: The ticket was approved by the payer and is waiting to be processed by the receiver to generate the payment * canceled: The ticket was canceled by the receiver before being approved * expired: The ticket has expired without being approved by a payer or canceled by the receiver until the expiration date * open: The ticket was created, but not approved yet * processed: The ticket was approved and processed and the payment was generated   # noqa: E501

        :param ticket_statuses: The ticket_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[TicketStatusEnum]
        """

        self._ticket_statuses = ticket_statuses

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

        Statuses used as search criteria applied only to transactions of kind `recurringPayment`. Possibles values for each array element are: * canceled: The recurring payment was manually canceled * closed: The recurring payment is closed, as the last scheduled occurrence was processed * open: The recurring payment is open, as there are more future occurrences   # noqa: E501

        :return: The recurring_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[RecurringPaymentStatusEnum]
        """
        return self._recurring_payment_statuses

    @recurring_payment_statuses.setter
    def recurring_payment_statuses(self, recurring_payment_statuses):
        """Sets the recurring_payment_statuses of this TransactionQueryFilters.

        Statuses used as search criteria applied only to transactions of kind `recurringPayment`. Possibles values for each array element are: * canceled: The recurring payment was manually canceled * closed: The recurring payment is closed, as the last scheduled occurrence was processed * open: The recurring payment is open, as there are more future occurrences   # noqa: E501

        :param recurring_payment_statuses: The recurring_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[RecurringPaymentStatusEnum]
        """

        self._recurring_payment_statuses = recurring_payment_statuses

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

        Statuses used as search criteria applied only to transactions of kind `scheduledPayment`. Possibles values for each array element are: * blocked: The scheduled payment is blocked - won't have any installment processed until being unblocked again * canceled: The scheduled payment, as well as all open installments were canceled * closed: The scheduled payment is closed * open: The scheduled payment has open installments   # noqa: E501

        :return: The scheduled_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[ScheduledPaymentStatusEnum]
        """
        return self._scheduled_payment_statuses

    @scheduled_payment_statuses.setter
    def scheduled_payment_statuses(self, scheduled_payment_statuses):
        """Sets the scheduled_payment_statuses of this TransactionQueryFilters.

        Statuses used as search criteria applied only to transactions of kind `scheduledPayment`. Possibles values for each array element are: * blocked: The scheduled payment is blocked - won't have any installment processed until being unblocked again * canceled: The scheduled payment, as well as all open installments were canceled * closed: The scheduled payment is closed * open: The scheduled payment has open installments   # noqa: E501

        :param scheduled_payment_statuses: The scheduled_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[ScheduledPaymentStatusEnum]
        """

        self._scheduled_payment_statuses = scheduled_payment_statuses

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

        Statuses used as search criteria applied only to transactions of kind `paymentRequest`.   Possibles values for each array element are: * canceled: The payment request was canceled * denied: The payment request was denied by the receiver * expired: The payment request has expired - the received did not respond until the expiration date * open: The payment request is open and can be accepted * processed: The payment request was processed, and either a direct or scheduled payment was created from it * scheduled: The payment request has been accepted, and scheduled for processing on a future date   # noqa: E501

        :return: The payment_request_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[PaymentRequestStatusEnum]
        """
        return self._payment_request_statuses

    @payment_request_statuses.setter
    def payment_request_statuses(self, payment_request_statuses):
        """Sets the payment_request_statuses of this TransactionQueryFilters.

        Statuses used as search criteria applied only to transactions of kind `paymentRequest`.   Possibles values for each array element are: * canceled: The payment request was canceled * denied: The payment request was denied by the receiver * expired: The payment request has expired - the received did not respond until the expiration date * open: The payment request is open and can be accepted * processed: The payment request was processed, and either a direct or scheduled payment was created from it * scheduled: The payment request has been accepted, and scheduled for processing on a future date   # noqa: E501

        :param payment_request_statuses: The payment_request_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[PaymentRequestStatusEnum]
        """

        self._payment_request_statuses = payment_request_statuses

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

        Statuses used as search criteria applied only to transactions of kind `externalPayment`.   Possibles values for each array element are: * canceled: The external payment was canceled * expired: The external payment has expired without the destination user activation * failed: The external payment has failed processing * pending: The external payment is pending, awaiting the destination user to be activated in Cyclos * processed: The external payment was processed, and the destination payment was created   # noqa: E501

        :return: The external_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :rtype: list[ExternalPaymentStatusEnum]
        """
        return self._external_payment_statuses

    @external_payment_statuses.setter
    def external_payment_statuses(self, external_payment_statuses):
        """Sets the external_payment_statuses of this TransactionQueryFilters.

        Statuses used as search criteria applied only to transactions of kind `externalPayment`.   Possibles values for each array element are: * canceled: The external payment was canceled * expired: The external payment has expired without the destination user activation * failed: The external payment has failed processing * pending: The external payment is pending, awaiting the destination user to be activated in Cyclos * processed: The external payment was processed, and the destination payment was created   # noqa: E501

        :param external_payment_statuses: The external_payment_statuses of this TransactionQueryFilters.  # noqa: E501
        :type: list[ExternalPaymentStatusEnum]
        """

        self._external_payment_statuses = external_payment_statuses

    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(TransactionQueryFilters, 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, TransactionQueryFilters):
            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, TransactionQueryFilters):
            return True

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