Ajouté des modèles à la simulation et avancé la routine de copie des données
[auf_rh_dae.git] / project / budget / models.py
CommitLineData
119e48ac
NC
1# -=- encoding: utf-8 -=-
2
3from django.db import models
4
5from rh import models as rh
6
7
8class Simulation(models.Model):
9 nom = models.CharField(max_length=255,
10 verbose_name=u'Nom de la simulation')
11
6e7c919b
NC
12 def initialize(self):
13 """ Copie les données nécessaires à une simulation. """
14 if (self.poste_set.all().count() > 0 or
15 self.dossier_set.all().count() > 0):
16 raise ValueError(u'Cette simulation a déjà été initialisée.')
17
18 self.seen_models = {}
19
20 for model in [rh.Poste, rh.Dossier, rh.Remuneration, rh.Evenement,
21 rh.EvenementRemuneration, rh.Classement, rh.ValeurPoint,
22 rh.TauxChange]:
23 self.seen_models[model.__class__.__name__.lower()] = \
24 self.copy_rh_models(model)
25
26 def clean_simulation(self):
27 self.poste_set.all().delete()
28 self.dossier_set.all().delete()
29
30 def copy_rh_models(self, model):
31 """ Crée une copie de simulation de tous les enregistrements d'un
32 modèle donné et en retourne la liste indexée dans un dictionnaire.
33
34 Opère une translation des id si nécessaire. """
35 xlate = getattr(self, 'xlate_%s' % model.__class__.__name__.lower(),
36 None)
37 seen = {}
38 for orig in model.objects.all():
39 sim = self.copy_rh_model(orig)
40 if xlate is not None:
41 xlate(sim)
42 sim.save()
43 seen[orig.id] = sim
44 return seen
45
180a4d25
NC
46 def copy_rh_model(self, obj):
47 """ Crée une copie de simulation d'un modèle rh. """
48 initial = dict(['simulation', self] +
49 [(f.name, getattr(obj, f.name))
50 for f in obj._meta.fields
51 if not isinstance(f, models.AutoField) and
52 not f in obj._meta.parents.values()])
53 return globals()[obj.__class__.__name__](**initial)
54
6e7c919b
NC
55 def xlate_dossier(self, dossier):
56 if not dossier.poste.id in self.seen_models['poste']:
57 raise ValueError(u'Données inconsistantes.')
58 dossier.poste = self.seen_models['poste'][dossier.poste.id]
180a4d25 59
180a4d25 60
6e7c919b
NC
61class Classement(rh.Classement_):
62 __doc__ = rh.Classement_.__doc__
63 simulation = models.ForeignKey(Simulation)
64
65
66class Dossier(rh.Dossier_):
67 __doc__ = rh.Dossier_.__doc__
68 simulation = models.ForeignKey(Simulation)
69
70
71class Evenement(rh.Evenement_):
72 __doc__ = rh.Evenement_.__doc__
73 simulation = models.ForeignKey(Simulation)
74
75
76class EvenementRemuneration(rh.EvenementRemuneration_):
77 __doc__ = rh.EvenementRemuneration_.__doc__
78 simulation = models.ForeignKey(Simulation)
79
119e48ac
NC
80
81class Poste(rh.Poste_):
82 __doc__ = rh.Poste_.__doc__
83 simulation = models.ForeignKey(Simulation)
84
85
6e7c919b
NC
86class Remuneration(rh.Remuneration_):
87 __doc__ = rh.Remuneration_.__doc__
88 simulation = models.ForeignKey(Simulation)
89
90
91class TauxChange(rh.TauxChange_):
92 __doc__ = rh.TauxChange_.__doc__
93 simulation = models.ForeignKey(Simulation)
94
95
96class ValeurPoint(rh.ValeurPoint_):
97 __doc__ = rh.ValeurPoint_.__doc__
119e48ac 98 simulation = models.ForeignKey(Simulation)