Código fonte para zoop_wrapper.wrapper.transaction

from typing import Union

from .base import BaseZoopWrapper
from ..models.transaction import Transaction
from ..utils import convert_currency_float_value_to_cents
from ..exceptions import ValidationError


[documentos]class TransactionWrapper(BaseZoopWrapper): """ Possui os métodos do resource :class:`.Transaction` """
[documentos] def list_transactions(self): """ Lista todas as :class:`.Transaction`'s Returns: response """ url = self._construct_url(action="transactions") return self._get(url)
[documentos] def list_transactions_for_seller(self, identifier): """ Lista todas as :class:`.Transaction`'s de um :class:`.Seller` Args: identifier: uuid id do :class:`.Seller` offset: '' Returns: response """ url = self._construct_url( action="sellers", identifier=identifier, subaction="transactions", search="sort=time-descending", ) return self._get(url)
[documentos] def retrieve_transaction(self, identifier): """ Retorna uma :class:`.Transaction`. Args: identifier: uuid id da :class:`.Transaction` Returns: response """ url = self._construct_url(action="transactions", identifier=identifier) return self._get(url)
[documentos] def add_transaction(self, data: Union[dict, Transaction]): """ Adiciona uma :class:`.Transaction`. Examples: >>> data = { 'amount' : 'foo', 'currency' : 'BRL', 'customer': 'foo', 'description' : 'foo', 'on_behalf_of' : 'foo', 'payment_type' : 'foo', 'reference_id' : 'foo', 'payment_method' : { 'body_instructions' : instructions, 'expiration_date' : expiration_date, 'payment_limit_date' : payment_limit_date, 'billing_instructions' : { 'discount' : discount 'interest' : interest, 'late_fee' : late_fee, } } } >>> data = { 'amount': '1000', 'currency': 'BRL', 'customer': 'buyer_id', 'description': 'meu boleto gerado para teste', 'on_behalf_of': 'seller_id', 'payment_type': 'boleto', 'payment_method': { 'expiration_date': '2020-06-20', 'payment_limit_date': '2020-06-30', 'billing_instructions': { 'late_fee': { 'mode': 'FIXED', 'percentage': 30, 'start_date': '2020-06-20' }, 'interest': { 'mode': 'MONTHLY_PERCENTAGE', 'percentage': 30, 'start_date': '2020-06-20' }, 'discount': [{ 'amount': 300, 'limit_date': '2020-06-20' 'mode': 'FIXED', }] } } } Args: data: dict of data Returns: response with instance of Transaction """ instance = Transaction.from_dict_or_instance(data) url = self._construct_url(action="transactions") return self._post_instance(url, instance=instance)
[documentos] def _capture_or_void_transaction(self, identifier, sub_action, amount=None): """ Estorna ou captura uma :class:`.Transaction`. O :attr:`amount` é opcional, e deve ser um valor em centavos ou real. Caso ele não seja passado, o valor da transação é utilizado. Caso ele seja um valor menor do que a transação, é feita uma ação parcial no valor passado. .. warning:: o :attr:`amount` não pode ser maior do que o valor da quantia! Examples: >>> ZoopWrapper()._capture_or_void_transaction('1', 'void') >>> ZoopWrapper()._capture_or_void_transaction('1', 'void', '10.00') >>> ZoopWrapper()._capture_or_void_transaction('1', 'capture', '10,00') >>> ZoopWrapper()._capture_or_void_transaction('1', 'void', '1000') Args: identifier: uuid id da :class:`.Transaction` sub_action: string da ação a ser feita. 'void' ou 'capture' amount: quantia em centavos da ação a ser feita Returns: response """ SUB_ACTIONS = {"void", "capture"} if sub_action not in SUB_ACTIONS: raise ValidationError( self, f"Sub ação '{sub_action}' não identificada! " f"Deveria ser um dos valores {SUB_ACTIONS}", ) transaction_response = self.retrieve_transaction(identifier) transaction_data = transaction_response.data if amount is None: amount = transaction_data["amount"] else: amount = convert_currency_float_value_to_cents(amount) if amount > transaction_data["amount"]: raise ValidationError( self, f"A quantia {amount} é maior do que o " f"valor {transaction_data['amount']} da transação", ) data = { "amount": amount, "on_behalf_of": transaction_data["on_behalf_of"], } url = self._construct_url( action="transactions", identifier=identifier, subaction=sub_action ) return self._post(url, data=data)
[documentos] def cancel_transaction(self, identifier, amount=None): """ Estorna uma :class:`.Transaction`. O :attr:`amount` é opcional, e deve ser um valor em centavos ou real. Caso ele não seja passado, o valor da transação é utilizado. Caso ele seja um valor menor do que a transação, é feita uma ação parcial no valor passado. .. warning:: o :attr:`amount` não pode ser maior do que o valor da quantia! Examples: >>> ZoopWrapper().cancel_transaction('1', '10.00') >>> ZoopWrapper().cancel_transaction('1', '10,00') >>> ZoopWrapper().cancel_transaction('1', '1000') Args: identifier: uuid id da :class:`.Transaction` amount: quantia em centavos a ser estronada Returns: response """ return self._capture_or_void_transaction(identifier, "void", amount)
[documentos] def capture_transaction(self, identifier, amount=None): """ Captura uma :class:`.Transaction`. O :attr:`amount` é opcional, e deve ser um valor em centavos ou real. Caso ele não seja passado, o valor da transação é utilizado. Caso ele seja um valor menor do que a transação, é feita uma ação parcial no valor passado. .. warning:: o :attr:`amount` não pode ser maior do que o valor da quantia! Examples: >>> ZoopWrapper().capture_transaction('1', '10.00') >>> ZoopWrapper().capture_transaction('1', '10,00') >>> ZoopWrapper().capture_transaction('1', '1000') Args: identifier: uuid id da :class:`.Transaction` amount: quantia em centavos a ser capturada Returns: response """ return self._capture_or_void_transaction(identifier, "capture", amount)