Terminé la routine d'initialisation d'une simulation
authorNicolas Cadou <ncadou@cadou.ca>
Mon, 23 May 2011 22:00:22 +0000 (18:00 -0400)
committerNicolas Cadou <ncadou@cadou.ca>
Mon, 23 May 2011 22:02:42 +0000 (18:02 -0400)
project/budget/models.py

index d45c2a0..1e6b00f 100755 (executable)
@@ -1,5 +1,7 @@
 # -=- encoding: utf-8 -=-
 
+import inspect
+
 from django.db import models
 
 from rh import models as rh
@@ -11,8 +13,7 @@ class Simulation(models.Model):
 
     def initialize(self):
         """ Copie les données nécessaires à une simulation. """
-        if (self.poste_set.all().count() > 0 or
-          self.dossier_set.all().count() > 0):
+        if not self.is_empty():
             raise ValueError(u'Cette simulation a déjà été initialisée.')
 
         self.seen_models = {}
@@ -23,9 +24,19 @@ class Simulation(models.Model):
             self.seen_models[model.__class__.__name__.lower()] = \
                     self.copy_rh_models(model)
 
-    def clean_simulation(self):
-        self.poste_set.all().delete()
-        self.dossier_set.all().delete()
+    def is_empty(self):
+        for attr in ['classement_set', 'dossier_set', 'evenement_set',
+                     'evenementremuneration_set', 'poste_set',
+                     'remuneration_set', 'valeurpoint_set', 'tauxchange_set']:
+            if not getattr(self, attr).all().count() == 0:
+                return False
+        return True
+
+    def reset(self):
+        for attr in ['classement_set', 'dossier_set', 'evenement_set',
+                     'evenementremuneration_set', 'poste_set',
+                     'remuneration_set', 'valeurpoint_set', 'tauxchange_set']:
+            getattr(self, attr).all().delete()
 
     def copy_rh_models(self, model):
         """ Crée une copie de simulation de tous les enregistrements d'un
@@ -45,17 +56,38 @@ class Simulation(models.Model):
 
     def copy_rh_model(self, obj):
         """ Crée une copie de simulation d'un modèle rh. """
-        initial = dict(['simulation', self] +
+        initial = dict([('simulation', self)] +
                        [(f.name, getattr(obj, f.name))
                         for f in obj._meta.fields
                         if not isinstance(f, models.AutoField) and
                            not f in obj._meta.parents.values()])
         return globals()[obj.__class__.__name__](**initial)
 
-    def xlate_dossier(self, dossier):
-        if not dossier.poste.id in self.seen_models['poste']:
+    def xlate_dossier(self, d):
+        if not d.poste.id in self.seen_models['poste']:
+            raise ValueError(u'Données inconsistantes.')
+        d.poste = self.seen_models['poste'][d.poste.id]
+        if not d.classement.id in self.seen_models['classement']:
+            raise ValueError(u'Données inconsistantes.')
+        d.classement = self.seen_models['classement'] [d.classement.id]
+
+    def xlate_evenement(self, e):
+        if not e.dossier.id in self.seen_models['dossier']:
+            raise ValueError(u'Données inconsistantes.')
+        e.dossier = self.seen_models['dossier'][e.dossier.id]
+
+    def xlate_remuneration(self, r):
+        if not r.dossier.id in self.seen_models['dossier']:
+            raise ValueError(u'Données inconsistantes.')
+        r.dossier = self.seen_models['dossier'] [r.dossier.id]
+
+    def xlate_evenementremuneration(self, er):
+        if not er.dossier.id in self.seen_models['dossier']:
+            raise ValueError(u'Données inconsistantes.')
+        er.dossier = self.seen_models['dossier'] [er.dossier.id]
+        if not er.evenement.id in self.seen_models['evenement']:
             raise ValueError(u'Données inconsistantes.')
-        dossier.poste = self.seen_models['poste'][dossier.poste.id]
+        er.evenement = self.seen_models['evenement'] [er.evenement.id]
 
 
 class Classement(rh.Classement_):