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