[#3400] Solde des cotisations par année à un exercice/période donné
authorEric Mc Sween <eric.mcsween@auf.org>
Thu, 26 Jul 2012 21:26:04 +0000 (17:26 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Thu, 26 Jul 2012 21:26:04 +0000 (17:26 -0400)
auf/django/coda/models.py
setup.py

index 9badbeb..384b1e8 100644 (file)
@@ -5,7 +5,7 @@ from datetime import date
 from auf.django.references import models as ref
 from django.conf import settings
 from django.db import models
-from django.db.models import Sum
+from django.db.models import Sum, Q
 from django.db.models.query import QuerySet
 
 
@@ -42,23 +42,33 @@ class TiersOperation(Element):
         db_table = 'coda_tiersoperation'
         managed = MANAGED
 
-    def solde_cotisations_par_annee(self):
+    def solde_cotisations_par_annee(self, annee=None, periode=None):
         """
         Retourne une liste de paires (annee, solde) contenant le solde des
         cotisations à payer par année pour cet établissement.
         """
-        cotisations_impayees = self.lignes.cotisations().exclude(
+        lignes = self.lignes.cotisations().exclude(
             etat_paiement='P'
         )
+        if annee or periode:
+            annee = annee or date.today().year
+            if periode:
+                lignes = lignes.filter(
+                    Q(ecriture__annee__lt=annee) |
+                    Q(ecriture__annee=annee, ecriture__periode__lte=periode)
+                )
+            else:
+                lignes = lignes.filter(Q(ecriture__annee__lte=annee))
+
         factures_par_annee = list(
-            cotisations_impayees
+            lignes
             .filter(montant_eur__gt=0)
             .values('ecriture__annee')
             .annotate(Sum('montant_eur'))
             .order_by('ecriture__annee')
         )
         paiements = (
-            cotisations_impayees
+            lignes
             .filter(montant_eur__lt=0)
             .aggregate(Sum('montant_eur'))
         )['montant_eur__sum'] or 0
@@ -78,7 +88,7 @@ class TiersOperation(Element):
             result.append((date.today().year, paiements))
         return result
 
-    def delinquant(self):
+    def delinquant(self, annee=None, periode=None):
         """
         Teste si l'établissement lié à ce tiers est délinquant ou pas.
 
@@ -90,8 +100,12 @@ class TiersOperation(Element):
         if today.month < 6:
             # Ne pas considérer l'année en cours avant le mois de juin
             annee_max -= 1
-        return len([x for x in self.solde_cotisations_par_annee()
-                    if x[0] <= annee_max]) >= 3
+        return len([
+            x for x in self.solde_cotisations_par_annee(
+                annee=annee, periode=periode
+            )
+            if x[0] <= annee_max
+        ]) >= 3
 
 
 class ProjetPoste(Element):
index 974ddcb..36cee90 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
 from setuptools import setup, find_packages
 
 name = 'auf.django.coda'
-version = '0.9'
+version = '0.10'
 
 setup(
     name=name,