Ajouté des modèles à la simulation et avancé la routine de copie des données
[auf_rh_dae.git] / project / budget / models.py
1 # -=- encoding: utf-8 -=-
2
3 from django.db import models
4
5 from rh import models as rh
6
7
8 class Simulation(models.Model):
9 nom = models.CharField(max_length=255,
10 verbose_name=u'Nom de la simulation')
11
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
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
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]
59
60
61 class Classement(rh.Classement_):
62 __doc__ = rh.Classement_.__doc__
63 simulation = models.ForeignKey(Simulation)
64
65
66 class Dossier(rh.Dossier_):
67 __doc__ = rh.Dossier_.__doc__
68 simulation = models.ForeignKey(Simulation)
69
70
71 class Evenement(rh.Evenement_):
72 __doc__ = rh.Evenement_.__doc__
73 simulation = models.ForeignKey(Simulation)
74
75
76 class EvenementRemuneration(rh.EvenementRemuneration_):
77 __doc__ = rh.EvenementRemuneration_.__doc__
78 simulation = models.ForeignKey(Simulation)
79
80
81 class Poste(rh.Poste_):
82 __doc__ = rh.Poste_.__doc__
83 simulation = models.ForeignKey(Simulation)
84
85
86 class Remuneration(rh.Remuneration_):
87 __doc__ = rh.Remuneration_.__doc__
88 simulation = models.ForeignKey(Simulation)
89
90
91 class TauxChange(rh.TauxChange_):
92 __doc__ = rh.TauxChange_.__doc__
93 simulation = models.ForeignKey(Simulation)
94
95
96 class ValeurPoint(rh.ValeurPoint_):
97 __doc__ = rh.ValeurPoint_.__doc__
98 simulation = models.ForeignKey(Simulation)