def make_target_balance_transfer(target_balance,
                                 target_user,
                                 transfer_mode=None,
                                 require_target_user_approved=True,
                                 require_sufficient_balance=True,
                                 automatically_resolve_complete=True,
                                 uuid=None,
                                 queue='high-priority'):
    if target_balance is None:
        raise InvalidTargetBalanceError("Target balance not provided")

    if target_user.transfer_account is None:
        raise TransferAccountNotFoundError('Transfer account not found')

    transfer_amount = target_balance - target_user.transfer_account.balance

    if transfer_amount == 0:
        raise InvalidTargetBalanceError("Transfer Amount can't be zero")

    if transfer_amount < 0:
        transfer = make_payment_transfer(
            abs(transfer_amount),
            target_user.transfer_account.token,
            send_user=target_user,
            transfer_mode=transfer_mode,
            require_sender_approved=require_target_user_approved,
            require_recipient_approved=False,
            require_sufficient_balance=require_sufficient_balance,
            automatically_resolve_complete=automatically_resolve_complete,
            uuid=uuid,
            transfer_subtype=TransferSubTypeEnum.RECLAMATION,
            queue=queue)

    else:
        transfer = make_payment_transfer(
            transfer_amount,
            target_user.transfer_account.token,
            receive_user=target_user,
            transfer_mode=transfer_mode,
            automatically_resolve_complete=automatically_resolve_complete,
            uuid=uuid,
            transfer_subtype=TransferSubTypeEnum.DISBURSEMENT,
            queue=queue)

    return transfer
Beispiel #2
0
def make_target_balance_transfer(target_balance,
                                 target_user,
                                 transfer_mode=None,
                                 allow_withdrawal=False,
                                 require_target_user_approved=True,
                                 require_sufficient_balance=True,
                                 automatically_resolve_complete=True,
                                 uuid=None):

    if target_balance is None:
        raise InvalidTargetBalanceError("Target balance not provided")

    transfer_amount = target_balance - target_user.transfer_account.balance

    if transfer_amount < 0 and not allow_withdrawal:
        raise InvalidTargetBalanceError(
            "Setting balance would force withdrawal")

    if transfer_amount < 0:
        transfer = make_withdrawal_transfer(
            transfer_amount,
            target_user,
            transfer_mode,
            require_sender_approved=require_target_user_approved,
            require_sufficient_balance=require_sufficient_balance,
            automatically_resolve_complete=automatically_resolve_complete,
            uuid=uuid)

    else:
        transfer = make_disbursement_transfer(
            transfer_amount,
            target_user,
            transfer_mode,
            automatically_resolve_complete=automatically_resolve_complete,
            uuid=uuid)

    return transfer