From e6401e75ae7df6791e91a4bee3bc9f0e5893a406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Tue, 7 Jul 2020 07:10:24 +0800 Subject: [PATCH] Implemented has_order_hole in Transaction, and added the caches and setters to the pseudo properties is_balanced and has_order_hole. --- accounting/models.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/accounting/models.py b/accounting/models.py index 6ff2d4e..b6a60eb 100644 --- a/accounting/models.py +++ b/accounting/models.py @@ -86,20 +86,42 @@ class Transaction(models.Model): """The credit records of this transaction.""" return [x for x in self.record_set.all() if x.is_credit] + _is_balanced = None + @property def is_balanced(self): """Whether the sum of the amounts of the debit records is the same as the sum of the amounts of the credit records. """ - debit_sum = sum([x.amount for x in self.debit_records]) - credit_sum = sum([x.amount for x in self.credit_records]) - return debit_sum == credit_sum + if self._is_balanced is None: + debit_sum = sum([x.amount for x in self.debit_records]) + 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 def has_order_hole(self): """Whether the order of the transactions on this day is not 1, 2, 3, 4, 5..., and should be reordered. """ - # TODO: To be done - return False + if self._has_order_hole is None: + 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 def is_cash_income(self):