diff --git a/kfet/models.py b/kfet/models.py index bfa1f360..c13eea9e 100644 --- a/kfet/models.py +++ b/kfet/models.py @@ -96,7 +96,8 @@ class Account(models.Model): # Propriétés supplémentaires @property def real_balance(self): - if (hasattr(self, 'negative')): + if (hasattr(self, 'negative') and + self.negative.balance_offset is not None): return self.balance - self.negative.balance_offset return self.balance @@ -229,27 +230,43 @@ class Account(models.Model): def __init__(self, trigramme): self.trigramme = trigramme + +class AccountNegativeManager(models.Manager): + """Manager for AccountNegative model.""" + + def get_queryset(self): + return ( + super().get_queryset() + .select_related('account__cofprofile__user') + ) + + class AccountNegative(models.Model): + objects = AccountNegativeManager() + account = models.OneToOneField( - Account, on_delete = models.PROTECT, - related_name = "negative") - start = models.DateTimeField( - blank = True, null = True, default = None) + Account, on_delete=models.PROTECT, + related_name="negative", + ) + start = models.DateTimeField(blank=True, null=True, default=None) balance_offset = models.DecimalField( "décalage de balance", help_text="Montant non compris dans l'autorisation de négatif", - max_digits = 6, decimal_places = 2, - blank = True, null = True, default = None) + max_digits=6, decimal_places=2, + blank=True, null=True, default=None, + ) authz_overdraft_amount = models.DecimalField( "négatif autorisé", - max_digits = 6, decimal_places = 2, - blank = True, null = True, default = None) + max_digits=6, decimal_places=2, + blank=True, null=True, default=None, + ) authz_overdraft_until = models.DateTimeField( "expiration du négatif", - blank = True, null = True, default = None) - comment = models.CharField("commentaire", max_length = 255, blank = True) + blank=True, null=True, default=None, + ) + comment = models.CharField("commentaire", max_length=255, blank=True) + -@python_2_unicode_compatible class Checkout(models.Model): created_by = models.ForeignKey( Account, on_delete = models.PROTECT, diff --git a/kfet/views.py b/kfet/views.py index c296d3b3..92cdd734 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -540,10 +540,13 @@ class AccountGroupUpdate(UpdateView): success_message = 'Groupe modifié : %(name)s' success_url = reverse_lazy('kfet.account.group') + class AccountNegativeList(ListView): - queryset = (AccountNegative.objects + queryset = ( + AccountNegative.objects .select_related('account', 'account__cofprofile__user') - .exclude(account__trigramme='#13')) + .exclude(account__trigramme='#13') + ) template_name = 'kfet/account_negative.html' context_object_name = 'negatives' @@ -553,14 +556,8 @@ class AccountNegativeList(ListView): 'overdraft_amount': Settings.OVERDRAFT_AMOUNT(), 'overdraft_duration': Settings.OVERDRAFT_DURATION(), } - negs_sum = (AccountNegative.objects - .exclude(account__trigramme='#13') - .aggregate( - bal = Coalesce(Sum('account__balance'),0), - offset = Coalesce(Sum('balance_offset'),0), - ) - ) - context['negatives_sum'] = negs_sum['bal'] - negs_sum['offset'] + real_balances = (neg.account.real_balance for neg in self.object_list) + context['negatives_sum'] = sum(real_balances) return context # -----