diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-09-16 21:14:03 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-09-16 21:14:03 +0200 |
commit | 4043cac59d8aac105663432a33a162f8546cb3f5 (patch) | |
tree | d87f72a6da5c596b287c700a91a5ebba3c7935e7 | |
parent | c540308d631b6a8f92b4fc450a7e887b672710fb (diff) | |
download | bank-4043cac59d8aac105663432a33a162f8546cb3f5.tar.gz bank-4043cac59d8aac105663432a33a162f8546cb3f5.tar.bz2 bank-4043cac59d8aac105663432a33a162f8546cb3f5.zip |
fixing #5889
-rw-r--r-- | talerbank/app/views.py | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/talerbank/app/views.py b/talerbank/app/views.py index 3762ddf..a5e7b26 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -803,8 +803,34 @@ def reject(request, user_account): user_account.bankaccount.account_no: raise RejectNoRightsException() trans.cancelled = True - trans.debit_account.amount.add(trans.amount) - trans.credit_account.amount.subtract(trans.amount) + if trans.debit_account.debit: + # balance is negative + if 1 > Amount.cmp(trans.debit_account.amount, trans.amount): + # debit_account.amount <= trans.amount + trans.debit_account.debit = False + tmp = Amount(**trans.amount.dump()) + tmp.subtract (trans.debit_account.amount) + trans.debit_account.amount.set (**tmp.dump()) + else: + # debit_account > trans.amount + trans.debit_account.amount.subtract (trans.amount) + else: + # balance is positive, simply add + trans.debit_account.amount.add(trans.amount) + if trans.credit_account.debit: + # credit account balance is already negative + trans.credit_account.amount.add(trans.amount) + else: + if -1 == Amount.cmp(trans.credit_account.amount, trans.amount): + # credit_account.amount < trans.amount + trans.credit_account.debit = True + tmp = Amount(**trans.amount.dump()) + tmp.subtract (trans.credit_account.amount) + trans.credit_account.amount.set (**tmp.dump()) + else: + # credit_account.amount >= trans.amount + trans.credit_account.amount.subtract(trans.amount) + trans.save() return HttpResponse(status=204) |