# -=- encoding: utf-8 -=-
+import inspect
+
from django.db import models
from rh import models as rh
def initialize(self):
""" Copie les données nécessaires à une simulation. """
- if (self.poste_set.all().count() > 0 or
- self.dossier_set.all().count() > 0):
+ if not self.is_empty():
raise ValueError(u'Cette simulation a déjà été initialisée.')
self.seen_models = {}
self.seen_models[model.__class__.__name__.lower()] = \
self.copy_rh_models(model)
- def clean_simulation(self):
- self.poste_set.all().delete()
- self.dossier_set.all().delete()
+ def is_empty(self):
+ for attr in ['classement_set', 'dossier_set', 'evenement_set',
+ 'evenementremuneration_set', 'poste_set',
+ 'remuneration_set', 'valeurpoint_set', 'tauxchange_set']:
+ if not getattr(self, attr).all().count() == 0:
+ return False
+ return True
+
+ def reset(self):
+ for attr in ['classement_set', 'dossier_set', 'evenement_set',
+ 'evenementremuneration_set', 'poste_set',
+ 'remuneration_set', 'valeurpoint_set', 'tauxchange_set']:
+ getattr(self, attr).all().delete()
def copy_rh_models(self, model):
""" Crée une copie de simulation de tous les enregistrements d'un
def copy_rh_model(self, obj):
""" Crée une copie de simulation d'un modèle rh. """
- initial = dict(['simulation', self] +
+ initial = dict([('simulation', self)] +
[(f.name, getattr(obj, f.name))
for f in obj._meta.fields
if not isinstance(f, models.AutoField) and
not f in obj._meta.parents.values()])
return globals()[obj.__class__.__name__](**initial)
- def xlate_dossier(self, dossier):
- if not dossier.poste.id in self.seen_models['poste']:
+ def xlate_dossier(self, d):
+ if not d.poste.id in self.seen_models['poste']:
+ raise ValueError(u'Données inconsistantes.')
+ d.poste = self.seen_models['poste'][d.poste.id]
+ if not d.classement.id in self.seen_models['classement']:
+ raise ValueError(u'Données inconsistantes.')
+ d.classement = self.seen_models['classement'] [d.classement.id]
+
+ def xlate_evenement(self, e):
+ if not e.dossier.id in self.seen_models['dossier']:
+ raise ValueError(u'Données inconsistantes.')
+ e.dossier = self.seen_models['dossier'][e.dossier.id]
+
+ def xlate_remuneration(self, r):
+ if not r.dossier.id in self.seen_models['dossier']:
+ raise ValueError(u'Données inconsistantes.')
+ r.dossier = self.seen_models['dossier'] [r.dossier.id]
+
+ def xlate_evenementremuneration(self, er):
+ if not er.dossier.id in self.seen_models['dossier']:
+ raise ValueError(u'Données inconsistantes.')
+ er.dossier = self.seen_models['dossier'] [er.dossier.id]
+ if not er.evenement.id in self.seen_models['evenement']:
raise ValueError(u'Données inconsistantes.')
- dossier.poste = self.seen_models['poste'][dossier.poste.id]
+ er.evenement = self.seen_models['evenement'] [er.evenement.id]
class Classement(rh.Classement_):