def _tx():
     dest_transfer = Account_transfer.get_by_key_name(str(source_transfer.key()), parent=source_transfer.counter_account.key())
     if not dest_transfer:
         dest_transfer = Account_transfer(
             parent = source_transfer.counter_account.key(),
             key_name = str(source_transfer.key()),
             self_account = source_transfer.counter_account,
             counter_account = source_transfer.key().parent(), #same as source_transfer.counter_account
             counter_transfer = source_transfer,
             currency_type = source_transfer.currency_type,
             amount = -source_transfer.amount,
             is_committed = True)
         account = Account.get(dest_transfer.self_account.key())
         account.balance += source_transfer.amount # add negative amount
         db.put([account, dest_transfer])
     return dest_transfer
 def transfer_currency(self, source, target, amount):
     if source.balance < amount and not source.negative_balance_allowed:
         return None
     if source.currency_type != target.currency_type:
         return None
     source.balance -= amount
     transfer = Account_transfer(parent=source,
                         key_name=str(target.key()),
                         self_account=source,
                         counter_account=target,
                         counter_transfer=None,
                         currency_type=source.currency_type,
                         amount=amount,
                         is_committed = False)
     db.put([source, transfer])
     return transfer