1 # -=- encoding: utf-8 -=-
5 from django
.db
import models
7 from rh
import models
as rh
10 class Simulation(models
.Model
):
11 nom
= models
.CharField(max_length
=255,
12 verbose_name
=u
'Nom de la simulation')
15 """ Copie les données nécessaires à une simulation. """
16 if not self
.is_empty():
17 raise ValueError(u
'Cette simulation a déjà été initialisée.')
21 for model
in [rh
.Poste
, rh
.Dossier
, rh
.Remuneration
, rh
.Evenement
,
22 rh
.EvenementRemuneration
, rh
.Classement
, rh
.ValeurPoint
,
24 self
.seen_models
[model
.__class__
.__name__
.lower()] = \
25 self
.copy_rh_models(model
)
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:
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()
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.
45 Opère une translation des id si nécessaire. """
46 xlate
= getattr(self
, 'xlate_%s' % model
.__class__
.__name__
.lower(),
49 for orig
in model
.objects
.all():
50 sim
= self
.copy_rh_model(orig
)
57 def copy_rh_model(self
, obj
):
58 """ Crée une copie de simulation d'un modèle rh. """
59 initial
= dict([('simulation', self
)] +
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
)
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]
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]
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]
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']:
89 raise ValueError(u
'Données inconsistantes.')
90 er
.evenement
= self
.seen_models
['evenement'] [er
.evenement
.id]
93 class Classement(rh
.Classement_
):
94 __doc__
= rh
.Classement_
.__doc__
95 simulation
= models
.ForeignKey(Simulation
)
98 class Dossier(rh
.Dossier_
):
99 __doc__
= rh
.Dossier_
.__doc__
100 simulation
= models
.ForeignKey(Simulation
)
103 class Evenement(rh
.Evenement_
):
104 __doc__
= rh
.Evenement_
.__doc__
105 simulation
= models
.ForeignKey(Simulation
)
108 class EvenementRemuneration(rh
.EvenementRemuneration_
):
109 __doc__
= rh
.EvenementRemuneration_
.__doc__
110 simulation
= models
.ForeignKey(Simulation
)
113 class Poste(rh
.Poste_
):
114 __doc__
= rh
.Poste_
.__doc__
115 simulation
= models
.ForeignKey(Simulation
)
118 class Remuneration(rh
.Remuneration_
):
119 __doc__
= rh
.Remuneration_
.__doc__
120 simulation
= models
.ForeignKey(Simulation
)
123 class TauxChange(rh
.TauxChange_
):
124 __doc__
= rh
.TauxChange_
.__doc__
125 simulation
= models
.ForeignKey(Simulation
)
128 class ValeurPoint(rh
.ValeurPoint_
):
129 __doc__
= rh
.ValeurPoint_
.__doc__
130 simulation
= models
.ForeignKey(Simulation
)