merge branche dev
[auf_rh_dae.git] / project / budget / models.py
index 1e6b00f..6c40b51 100755 (executable)
@@ -1,9 +1,6 @@
 # -=- encoding: utf-8 -=-
 
-import inspect
-
 from django.db import models
-
 from rh import models as rh
 
 
@@ -63,6 +60,29 @@ class Simulation(models.Model):
                            not f in obj._meta.parents.values()])
         return globals()[obj.__class__.__name__](**initial)
 
+    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):
+            raise ValueError(u'Cette simulation a déjà été initialisée.')
+
+        postes = {}
+        for rh_p in rh.Poste.objects.all():
+            sim_p = self.copy_rh_model(rh_p)
+            sim_p.save()
+            postes[rh_p.id] = sim_p
+
+        dossiers = {}
+        for rh_d in rh.Dossier.objects.all():
+            sim_d = self.copy_rh_model(rh_d)
+            if not sim_d.poste.id in postes:
+                self.poste_set.all().delete()
+                self.dossier_set.all().delete()
+                raise ValueError(u'Données inconsistantes.')
+            sim_d.poste = postes[sim_d.poste.id]
+            sim_d.save()
+            dossiers[rh_d.id] = sim_d
+
     def xlate_dossier(self, d):
         if not d.poste.id in self.seen_models['poste']:
             raise ValueError(u'Données inconsistantes.')
@@ -94,7 +114,6 @@ class Classement(rh.Classement_):
     __doc__ = rh.Classement_.__doc__
     simulation = models.ForeignKey(Simulation)
 
-
 class Dossier(rh.Dossier_):
     __doc__ = rh.Dossier_.__doc__
     simulation = models.ForeignKey(Simulation)
@@ -115,6 +134,11 @@ class Poste(rh.Poste_):
     simulation = models.ForeignKey(Simulation)
 
 
+class PosteFinancement(rh.PosteFinancement_):
+    __doc__ = rh.PosteFinancement_.__doc__
+    simulation = models.ForeignKey(Simulation)
+
+
 class Remuneration(rh.Remuneration_):
     __doc__ = rh.Remuneration_.__doc__
     simulation = models.ForeignKey(Simulation)