Implemented has_order_hole in Transaction, and added the caches and setters to the pseudo properties is_balanced and has_order_hole.
This commit is contained in:
parent
37e793f340
commit
e6401e75ae
@ -86,20 +86,42 @@ class Transaction(models.Model):
|
|||||||
"""The credit records of this transaction."""
|
"""The credit records of this transaction."""
|
||||||
return [x for x in self.record_set.all() if x.is_credit]
|
return [x for x in self.record_set.all() if x.is_credit]
|
||||||
|
|
||||||
|
_is_balanced = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_balanced(self):
|
def is_balanced(self):
|
||||||
"""Whether the sum of the amounts of the debit records is the
|
"""Whether the sum of the amounts of the debit records is the
|
||||||
same as the sum of the amounts of the credit records. """
|
same as the sum of the amounts of the credit records. """
|
||||||
debit_sum = sum([x.amount for x in self.debit_records])
|
if self._is_balanced is None:
|
||||||
credit_sum = sum([x.amount for x in self.credit_records])
|
debit_sum = sum([x.amount for x in self.debit_records])
|
||||||
return debit_sum == credit_sum
|
credit_sum = sum([x.amount for x in self.credit_records])
|
||||||
|
self._is_balanced = debit_sum == credit_sum
|
||||||
|
return self._is_balanced
|
||||||
|
|
||||||
|
@is_balanced.setter
|
||||||
|
def is_balanced(self, value):
|
||||||
|
self._is_balanced = value
|
||||||
|
|
||||||
|
_has_order_hole = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_order_hole(self):
|
def has_order_hole(self):
|
||||||
"""Whether the order of the transactions on this day is not
|
"""Whether the order of the transactions on this day is not
|
||||||
1, 2, 3, 4, 5..., and should be reordered. """
|
1, 2, 3, 4, 5..., and should be reordered. """
|
||||||
# TODO: To be done
|
if self._has_order_hole is None:
|
||||||
return False
|
orders = [x.ord for x in Transaction.objects.filter(
|
||||||
|
date=self.date).order_by("-ord")]
|
||||||
|
if orders[0] != len(orders):
|
||||||
|
self._has_order_hole = True
|
||||||
|
elif len(orders) != len(set(orders)):
|
||||||
|
self._has_order_hole = True
|
||||||
|
else:
|
||||||
|
self._has_order_hole = False
|
||||||
|
return self._has_order_hole
|
||||||
|
|
||||||
|
@has_order_hole.setter
|
||||||
|
def has_order_hole(self, value):
|
||||||
|
self._has_order_hole = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_cash_income(self):
|
def is_cash_income(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user