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