1 # -=- encoding: utf-8 -=-
3 from django.db import models
4 from rh import models as rh
7 class Simulation(models.Model):
8 nom = models.CharField(max_length=255,
9 verbose_name=u'Nom de la simulation')
12 """ Copie les données nécessaires à une simulation. """
13 if not self.is_empty():
14 raise ValueError(u'Cette simulation a déjà été initialisée.')
18 for model in [rh.Poste, rh.Dossier, rh.Remuneration, rh.Evenement,
19 rh.EvenementRemuneration, rh.Classement, rh.ValeurPoint,
21 self.seen_models[model.__class__.__name__.lower()] = \
22 self.copy_rh_models(model)
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:
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()
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.
42 Opère une translation des id si nécessaire. """
43 xlate = getattr(self, 'xlate_%s' % model.__class__.__name__.lower(),
46 for orig in model.objects.all():
47 sim = self.copy_rh_model(orig)
54 def copy_rh_model(self, obj):
55 """ Crée une copie de simulation d'un modèle rh. """
56 initial = dict([('simulation', self)] +
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)
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.')
70 for rh_p in rh.Poste.objects.all():
71 sim_p = self.copy_rh_model(rh_p)
73 postes[rh_p.id] = sim_p
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]
84 dossiers[rh_d.id] = sim_d
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]
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]
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]
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']:
109 raise ValueError(u'Données inconsistantes.')
110 er.evenement = self.seen_models['evenement'] [er.evenement.id]
113 class Classement(rh.Classement_):
114 __doc__ = rh.Classement_.__doc__
115 simulation = models.ForeignKey(Simulation)
118 class Dossier(rh.Dossier_):
119 __doc__ = rh.Dossier_.__doc__
120 simulation = models.ForeignKey(Simulation)
123 class Evenement(rh.Evenement_):
124 __doc__ = rh.Evenement_.__doc__
125 simulation = models.ForeignKey(Simulation)
128 class EvenementRemuneration(rh.EvenementRemuneration_):
129 __doc__ = rh.EvenementRemuneration_.__doc__
130 simulation = models.ForeignKey(Simulation)
133 class Poste(rh.Poste_):
134 __doc__ = rh.Poste_.__doc__
135 simulation = models.ForeignKey(Simulation)
138 class PosteFinancement(rh.PosteFinancement_):
139 __doc__ = rh.PosteFinancement_.__doc__
140 simulation = models.ForeignKey(Simulation)
143 class Remuneration(rh.Remuneration_):
144 __doc__ = rh.Remuneration_.__doc__
145 simulation = models.ForeignKey(Simulation)
148 class TauxChange(rh.TauxChange_):
149 __doc__ = rh.TauxChange_.__doc__
150 simulation = models.ForeignKey(Simulation)
153 class ValeurPoint(rh.ValeurPoint_):
154 __doc__ = rh.ValeurPoint_.__doc__
155 simulation = models.ForeignKey(Simulation)