summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-09-16 21:14:03 +0200
committerChristian Grothoff <christian@grothoff.org>2019-09-16 21:14:03 +0200
commit4043cac59d8aac105663432a33a162f8546cb3f5 (patch)
treed87f72a6da5c596b287c700a91a5ebba3c7935e7
parentc540308d631b6a8f92b4fc450a7e887b672710fb (diff)
downloadbank-4043cac59d8aac105663432a33a162f8546cb3f5.tar.gz
bank-4043cac59d8aac105663432a33a162f8546cb3f5.tar.bz2
bank-4043cac59d8aac105663432a33a162f8546cb3f5.zip
fixing #5889
-rw-r--r--talerbank/app/views.py30
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)