from datetime import date
from decimal import Decimal
+from auf.django.emploi.models import \
+ GENRE_CHOICES, SITUATION_CHOICES # devrait plutot être dans references
+from auf.django.metadata.models import AUFMetadata
+from auf.django.metadata.managers import NoDeleteManager
+from auf.django.references import models as ref
from django.core.files.storage import FileSystemStorage
from django.db import models
from django.db.models import Q
from django.conf import settings
-from auf.django.emploi.models import GENRE_CHOICES, SITUATION_CHOICES # devrait plutot être dans references
-from auf.django.metadata.models import AUFMetadata
-from auf.django.metadata.managers import NoDeleteManager
-import auf.django.references.models as ref
+from change_list import \
+ RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
+ STATUT_FUTUR
+from managers import \
+ PosteManager, DossierManager, DossierComparaisonManager, \
+ PosteComparaisonManager, DeviseManager, ServiceManager, \
+ TypeRemunerationManager
from validators import validate_date_passee
-from managers import PosteManager, DossierManager, DossierComparaisonManager, \
- PosteComparaisonManager, DeviseManager, ServiceManager, TypeRemunerationManager
-from change_list import RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, \
- STATUT_INACTIF, STATUT_FUTUR
-# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe pour l'héritage.
-# Cela permet de faire du dynamic loading par app sans avoir à redéfinir dans DAE la FK
+# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe
+# pour l'héritage. Cela permet de faire du dynamic loading par app sans
+# avoir à redéfinir dans DAE la FK
def app_context():
- import inspect;
- models_stack = [s[1].split('/')[-2] for s in inspect.stack() if s[1].endswith('models.py')]
+ import inspect
+ models_stack = [s[1].split('/')[-2]
+ for s in inspect.stack()
+ if s[1].endswith('models.py')]
return models_stack[-1]
HELP_TEXT_DATE = "format: jj-mm-aaaa"
REGIME_TRAVAIL_DEFAULT = Decimal('100.00')
REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT = Decimal('35.00')
-REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = "Saisir le nombre d'heure de travail à temps complet (100%), sans tenir compte du régime de travail"
+REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = \
+ "Saisir le nombre d'heure de travail à temps complet (100%), " \
+ "sans tenir compte du régime de travail"
# Upload de fichiers
storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
base_url=settings.PRIVE_MEDIA_URL)
+
def poste_piece_dispatch(instance, filename):
- path = "%s/poste/%s/%s" % (instance._meta.app_label, instance.poste_id, filename)
+ path = "%s/poste/%s/%s" % (
+ instance._meta.app_label, instance.poste_id, filename
+ )
return path
+
def dossier_piece_dispatch(instance, filename):
- path = "%s/dossier/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+ path = "%s/dossier/%s/%s" % (
+ instance._meta.app_label, instance.dossier_id, filename
+ )
return path
+
def employe_piece_dispatch(instance, filename):
- path = "%s/employe/%s/%s" % (instance._meta.app_label, instance.employe_id, filename)
+ path = "%s/employe/%s/%s" % (
+ instance._meta.app_label, instance.employe_id, filename
+ )
return path
+
def contrat_dispatch(instance, filename):
- path = "%s/contrat/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+ path = "%s/contrat/%s/%s" % (
+ instance._meta.app_label, instance.dossier_id, filename
+ )
return path
def get_annee_pour_taux_devise(self):
return datetime.datetime.now().year
-
def taux_devise(self, devise=None):
if devise is None:
devise = self.devise
return 1
annee = self.get_annee_pour_taux_devise()
- taux = [tc.taux for tc in TauxChange.objects.filter(devise=devise, annee=annee)]
+ taux = [
+ tc.taux
+ for tc in TauxChange.objects.filter(devise=devise, annee=annee)
+ ]
taux = set(taux)
if len(taux) == 0:
- raise Exception(u"Pas de taux pour %s en %s" % (devise.code, annee))
-
+ raise Exception(
+ u"Pas de taux pour %s en %s" % (devise.code, annee)
+ )
+
if len(taux) > 1:
raise Exception(u"Il existe plusieurs taux de %s en %s" %
(devise.code, annee))
class Commentaire(AUFMetadata):
texte = models.TextField()
- owner = models.ForeignKey('auth.User', db_column='owner', related_name='+', verbose_name=u"Commentaire de")
+ owner = models.ForeignKey(
+ 'auth.User', db_column='owner', related_name='+',
+ verbose_name=u"Commentaire de"
+ )
class Meta:
abstract = True
('externe', 'Externe'),
)
+
class Poste_(AUFMetadata):
- """Un Poste est un emploi (job) à combler dans une implantation.
+ """
+ Un Poste est un emploi (job) à combler dans une implantation.
Un Poste peut être comblé par un Employe, auquel cas un Dossier est créé.
Si on veut recruter 2 jardiniers, 2 Postes distincts existent.
"""
objects = PosteManager()
# Identification
- nom = models.CharField(max_length=255,
- verbose_name = u"Titre du poste", )
- nom_feminin = models.CharField(max_length=255,
- verbose_name = u"Titre du poste (au féminin)",
- null=True)
- implantation = models.ForeignKey(ref.Implantation, help_text=u"Taper le nom de l'implantation ou sa région",
- db_column='implantation', related_name='+')
- type_poste = models.ForeignKey('TypePoste', db_column='type_poste', help_text=u"Taper le nom du type de poste",
- related_name='+',
- null=True,
- verbose_name=u"type de poste")
- service = models.ForeignKey('Service', db_column='service',
- related_name='+',
- verbose_name = u"direction/service/pôle support",
- null=True,)
- responsable = models.ForeignKey('Poste', db_column='responsable',
- related_name='+',
- null=True,
- help_text=u"Taper le nom du poste ou du type de poste",
- verbose_name = u"Poste du responsable", )
-
+ nom = models.CharField(u"Titre du poste", max_length=255)
+ nom_feminin = models.CharField(
+ u"Titre du poste (au féminin)", max_length=255, null=True
+ )
+ implantation = models.ForeignKey(
+ ref.Implantation,
+ help_text=u"Taper le nom de l'implantation ou sa région",
+ db_column='implantation', related_name='+'
+ )
+ type_poste = models.ForeignKey(
+ 'TypePoste', db_column='type_poste',
+ help_text=u"Taper le nom du type de poste", related_name='+',
+ null=True, verbose_name=u"type de poste"
+ )
+ service = models.ForeignKey(
+ 'Service', db_column='service', related_name='+',
+ verbose_name=u"direction/service/pôle support", null=True
+ )
+ responsable = models.ForeignKey(
+ 'Poste', db_column='responsable',
+ related_name='+', null=True,
+ help_text=u"Taper le nom du poste ou du type de poste",
+ verbose_name=u"Poste du responsable"
+ )
+
# Contrat
- regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
- default=REGIME_TRAVAIL_DEFAULT, null=True,
- verbose_name = u"Temps de travail",
- help_text="% du temps complet")
- regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
- decimal_places=2, null=True,
- default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
- verbose_name= u"Nb. heures par semaine",
- help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+ regime_travail = models.DecimalField(
+ u"temps de travail", max_digits=12, decimal_places=2,
+ default=REGIME_TRAVAIL_DEFAULT, null=True,
+ help_text="% du temps complet"
+ )
+ regime_travail_nb_heure_semaine = models.DecimalField(
+ u"nb. heures par semaine", max_digits=12, decimal_places=2,
+ null=True, default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+ help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT
+ )
# Recrutement
- local = models.NullBooleanField(verbose_name = u"Local", default=True,
- null=True, blank=True)
- expatrie = models.NullBooleanField(verbose_name = u"Expatrié", default=False,
- null=True, blank=True)
+ local = models.NullBooleanField(
+ u"local", default=True, null=True, blank=True
+ )
+ expatrie = models.NullBooleanField(
+ u"expatrié", default=False, null=True, blank=True
+ )
mise_a_disposition = models.NullBooleanField(
- verbose_name = u"Mise à disposition",
- null=True, default=False)
- appel = models.CharField(max_length=10, null=True,
- verbose_name = u"Appel à candidature",
- choices=POSTE_APPEL_CHOICES,
- default='interne')
+ u"mise à disposition", null=True, default=False
+ )
+ appel = models.CharField(
+ u"Appel à candidature", max_length=10, null=True,
+ choices=POSTE_APPEL_CHOICES, default='interne'
+ )
# Rémunération
- classement_min = models.ForeignKey('Classement',
- db_column='classement_min', related_name='+',
- null=True, blank=True)
- classement_max = models.ForeignKey('Classement',
- db_column='classement_max', related_name='+',
- null=True, blank=True)
- valeur_point_min = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
- db_column='valeur_point_min', related_name='+',
- null=True, blank=True)
- valeur_point_max = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
- db_column='valeur_point_max', related_name='+',
- null=True, blank=True)
- devise_min = models.ForeignKey('Devise', db_column='devise_min', null=True,
- related_name='+',)
- devise_max = models.ForeignKey('Devise', db_column='devise_max', null=True,
- related_name='+',)
- salaire_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
- salaire_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
- indemn_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
- indemn_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
- autre_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
- autre_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, default=0)
+ classement_min = models.ForeignKey(
+ 'Classement', db_column='classement_min', related_name='+',
+ null=True, blank=True
+ )
+ classement_max = models.ForeignKey(
+ 'Classement', db_column='classement_max', related_name='+',
+ null=True, blank=True
+ )
+ valeur_point_min = models.ForeignKey(
+ 'ValeurPoint',
+ help_text=u"Taper le code ou le nom de l'implantation",
+ db_column='valeur_point_min', related_name='+', null=True,
+ blank=True
+ )
+ valeur_point_max = models.ForeignKey(
+ 'ValeurPoint',
+ help_text=u"Taper le code ou le nom de l'implantation",
+ db_column='valeur_point_max', related_name='+', null=True,
+ blank=True
+ )
+ devise_min = models.ForeignKey(
+ 'Devise', db_column='devise_min', null=True, related_name='+'
+ )
+ devise_max = models.ForeignKey(
+ 'Devise', db_column='devise_max', null=True, related_name='+'
+ )
+ salaire_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
+ salaire_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
+ indemn_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
+ indemn_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
+ autre_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
+ autre_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, default=0
+ )
# Comparatifs de rémunération
- devise_comparaison = models.ForeignKey('Devise', null=True, blank=True,
- db_column='devise_comparaison',
- related_name='+', )
- comp_locale_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_locale_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_universite_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_universite_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_fonctionpub_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_fonctionpub_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_ong_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_ong_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_autre_min = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
- comp_autre_max = models.DecimalField(max_digits=12, decimal_places=2,
- null=True, blank=True)
+ devise_comparaison = models.ForeignKey(
+ 'Devise', null=True, blank=True, db_column='devise_comparaison',
+ related_name='+'
+ )
+ comp_locale_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_locale_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_universite_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_universite_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_fonctionpub_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_fonctionpub_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_ong_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_ong_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_autre_min = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
+ comp_autre_max = models.DecimalField(
+ max_digits=12, decimal_places=2, null=True, blank=True
+ )
# Justification
justification = models.TextField(null=True, blank=True)
# Autres Metadata
- date_debut = models.DateField(verbose_name=u"Date de début", help_text=HELP_TEXT_DATE,
- null=True, blank=True)
- date_fin = models.DateField(verbose_name=u"Date de fin", help_text=HELP_TEXT_DATE,
- null=True, blank=True)
+ date_debut = models.DateField(
+ u"date de début", help_text=HELP_TEXT_DATE, null=True, blank=True
+ )
+ date_fin = models.DateField(
+ u"date de fin", help_text=HELP_TEXT_DATE, null=True, blank=True
+ )
class Meta:
abstract = True
ordering = ["nom"]
def __unicode__(self):
- representation = u'%s - %s [%s]' % (self.implantation, self.nom,
- self.id)
+ representation = u'%s - %s [%s]' % (
+ self.implantation, self.nom, self.id
+ )
return representation
-
prefix_implantation = "implantation__region"
+
def get_regions(self):
return [self.implantation.region]
def get_devise(self):
- vp = ValeurPoint.objects.filter(implantation=self.implantation, devise__archive=False).order_by('annee')
+ vp = ValeurPoint.objects.filter(
+ implantation=self.implantation, devise__archive=False
+ ).order_by('annee')
if len(vp) > 0:
return vp[0].devise
else:
return Devise.objects.get(code='EUR')
+
class Poste(Poste_):
__doc__ = Poste_.__doc__
# meta dématérialisation : pour permettre le filtrage
- vacant = models.NullBooleanField(verbose_name = u"vacant", null=True, blank=True)
+ vacant = models.NullBooleanField(u"vacant", null=True, blank=True)
def is_vacant(self):
vacant = True
return vacant
def occupe_par(self):
- """Retourne la liste d'employé occupant ce poste.
+ """
+ Retourne la liste d'employé occupant ce poste.
Généralement, retourne une liste d'un élément.
Si poste inoccupé, retourne liste vide.
UTILISE pour mettre a jour le flag vacant
"""
- return [d.employe for d in self.rh_dossiers.filter(supprime=False).exclude(date_fin__lt=date.today())]
+ return [
+ d.employe for d in self.rh_dossiers
+ .filter(supprime=False)
+ .exclude(date_fin__lt=date.today())
+ ]
POSTE_FINANCEMENT_CHOICES = (
class PosteFinancement_(models.Model):
- """Pour un Poste, structure d'informations décrivant comment on prévoit
+ """
+ Pour un Poste, structure d'informations décrivant comment on prévoit
financer ce Poste.
"""
- poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_financements')
+ poste = models.ForeignKey(
+ '%s.Poste' % app_context(), db_column='poste',
+ related_name='%(app_label)s_financements'
+ )
type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
- pourcentage = models.DecimalField(max_digits=12, decimal_places=2,
- help_text="ex.: 33.33 % (décimale avec point)")
+ pourcentage = models.DecimalField(
+ max_digits=12, decimal_places=2,
+ help_text="ex.: 33.33 % (décimale avec point)"
+ )
commentaire = models.TextField(
- help_text="Spécifiez la source de financement.")
+ help_text="Spécifiez la source de financement."
+ )
class Meta:
abstract = True
class PostePiece_(models.Model):
- """Documents relatifs au Poste.
+ """
+ Documents relatifs au Poste.
Ex.: Description de poste
"""
- poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_pieces')
- nom = models.CharField(verbose_name = u"Nom", max_length=255)
- fichier = models.FileField(verbose_name = u"Fichier",
- upload_to=poste_piece_dispatch,
- storage=storage_prive)
+ poste = models.ForeignKey(
+ '%s.Poste' % app_context(), db_column='poste',
+ related_name='%(app_label)s_pieces'
+ )
+ nom = models.CharField(u"Nom", max_length=255)
+ fichier = models.FileField(
+ u"Fichier", upload_to=poste_piece_dispatch, storage=storage_prive
+ )
class Meta:
abstract = True
def __unicode__(self):
return u'%s' % (self.nom)
+
class PostePiece(PostePiece_):
pass
+
class PosteComparaison_(AUFMetadata, DevisableMixin):
"""
- De la même manière qu'un dossier, un poste peut-être comparé à un autre poste.
+ De la même manière qu'un dossier, un poste peut-être comparé à un autre
+ poste.
"""
- poste = models.ForeignKey('%s.Poste' % app_context(), related_name='%(app_label)s_comparaisons_internes')
+ poste = models.ForeignKey(
+ '%s.Poste' % app_context(),
+ related_name='%(app_label)s_comparaisons_internes'
+ )
objects = PosteComparaisonManager()
- implantation = models.ForeignKey(ref.Implantation, null=True, blank=True, related_name="+")
- nom = models.CharField(verbose_name = u"Poste", max_length=255, null=True, blank=True)
+ implantation = models.ForeignKey(
+ ref.Implantation, null=True, blank=True, related_name="+"
+ )
+ nom = models.CharField(u"Poste", max_length=255, null=True, blank=True)
montant = models.IntegerField(null=True)
- devise = models.ForeignKey("Devise", related_name='+', null=True, blank=True)
+ devise = models.ForeignKey(
+ "Devise", related_name='+', null=True, blank=True
+ )
class Meta:
abstract = True
-
def __unicode__(self):
return self.nom
+
class PosteComparaison(PosteComparaison_):
objects = NoDeleteManager()
+
class PosteCommentaire_(Commentaire):
- poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='+')
+ poste = models.ForeignKey(
+ '%s.Poste' % app_context(), db_column='poste', related_name='+'
+ )
class Meta:
abstract = True
+
class PosteCommentaire(PosteCommentaire_):
pass
+
### EMPLOYÉ/PERSONNE
class Employe(AUFMetadata):
- """Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
+ """
+ Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
Dossiers qu'il occupe ou a occupé de Postes.
Cette classe aurait pu avantageusement s'appeler Personne car la notion
"""
# Identification
nom = models.CharField(max_length=255)
- prenom = models.CharField(max_length=255, verbose_name = u"Prénom")
- nom_affichage = models.CharField(max_length=255,
- verbose_name = u"Nom d'affichage",
- null=True, blank=True)
- nationalite = models.ForeignKey(ref.Pays, to_field='code',
- db_column='nationalite',
- related_name='employes_nationalite',
- verbose_name = u"Nationalité",
- blank=True, null=True)
- date_naissance = models.DateField(verbose_name = u"Date de naissance",
- help_text=HELP_TEXT_DATE,
- validators=[validate_date_passee],
- null=True, blank=True)
+ prenom = models.CharField(u"prénom", max_length=255)
+ nom_affichage = models.CharField(
+ u"nom d'affichage", max_length=255, null=True, blank=True
+ )
+ nationalite = models.ForeignKey(
+ ref.Pays, to_field='code', db_column='nationalite',
+ related_name='employes_nationalite', verbose_name=u"nationalité",
+ blank=True, null=True
+ )
+ date_naissance = models.DateField(
+ u"date de naissance", help_text=HELP_TEXT_DATE,
+ validators=[validate_date_passee], null=True, blank=True
+ )
genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
# Infos personnelles
- situation_famille = models.CharField(max_length=1,
- choices=SITUATION_CHOICES,
- verbose_name = u"Situation familiale",
- null=True, blank=True)
- date_entree = models.DateField(verbose_name = u"Date d'entrée à l'AUF",
- help_text=HELP_TEXT_DATE,
- null=True, blank=True)
+ situation_famille = models.CharField(
+ u"situation familiale", max_length=1, choices=SITUATION_CHOICES,
+ null=True, blank=True
+ )
+ date_entree = models.DateField(
+ u"date d'entrée à l'AUF", help_text=HELP_TEXT_DATE, null=True,
+ blank=True
+ )
# Coordonnées
- tel_domicile = models.CharField(max_length=255,
- verbose_name = u"Tél. domicile",
- null=True, blank=True)
- tel_cellulaire = models.CharField(max_length=255,
- verbose_name = u"Tél. cellulaire",
- null=True, blank=True)
+ tel_domicile = models.CharField(
+ u"tél. domicile", max_length=255, null=True, blank=True
+ )
+ tel_cellulaire = models.CharField(
+ u"tél. cellulaire", max_length=255, null=True, blank=True
+ )
adresse = models.CharField(max_length=255, null=True, blank=True)
ville = models.CharField(max_length=255, null=True, blank=True)
province = models.CharField(max_length=255, null=True, blank=True)
code_postal = models.CharField(max_length=255, null=True, blank=True)
- pays = models.ForeignKey(ref.Pays, to_field='code', db_column='pays',
- related_name='employes',
- null=True, blank=True)
+ pays = models.ForeignKey(
+ ref.Pays, to_field='code', db_column='pays',
+ related_name='employes', null=True, blank=True
+ )
# meta dématérialisation : pour permettre le filtrage
- nb_postes = models.IntegerField(verbose_name = u"nombre de postes", null=True, blank=True)
+ nb_postes = models.IntegerField(u"nombre de postes", null=True, blank=True)
class Meta:
- ordering = ['nom','prenom']
+ ordering = ['nom', 'prenom']
verbose_name = u"Employé"
verbose_name_plural = u"Employés"
return civilite
def url_photo(self):
- """Retourne l'URL du service retournant la photo de l'Employe.
+ """
+ Retourne l'URL du service retournant la photo de l'Employe.
Équivalent reverse url 'rh_photo' avec id en param.
"""
from django.core.urlresolvers import reverse
- return reverse('rh_photo', kwargs={'id':self.id})
+ return reverse('rh_photo', kwargs={'id': self.id})
def dossiers_passes(self):
params = {KEY_STATUT: STATUT_INACTIF, }
return poste
prefix_implantation = "rh_dossiers__poste__implantation__region"
+
def get_regions(self):
regions = []
for d in self.dossiers.all():
class EmployePiece(models.Model):
- """Documents relatifs à un employé.
+ """
+ Documents relatifs à un employé.
Ex.: CV...
"""
- employe = models.ForeignKey('Employe', db_column='employe',
- related_name="pieces")
- nom = models.CharField(verbose_name="Nom", max_length=255)
- fichier = models.FileField(verbose_name="Fichier",
- upload_to=employe_piece_dispatch,
- storage=storage_prive)
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe', related_name="pieces",
+ verbose_name=u"employé"
+ )
+ nom = models.CharField(max_length=255)
+ fichier = models.FileField(
+ u"fichier", upload_to=employe_piece_dispatch, storage=storage_prive
+ )
class Meta:
ordering = ['nom']
def __unicode__(self):
return u'%s' % (self.nom)
+
class EmployeCommentaire(Commentaire):
- employe = models.ForeignKey('Employe', db_column='employe',
- related_name='+')
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe', related_name='+'
+ )
class Meta:
verbose_name = u"Employé commentaire"
('Fils', 'Fils'),
)
+
class AyantDroit(AUFMetadata):
- """Personne en relation avec un Employe.
+ """
+ Personne en relation avec un Employe.
"""
# Identification
nom = models.CharField(max_length=255)
- prenom = models.CharField(max_length=255,
- verbose_name = u"Prénom",)
- nom_affichage = models.CharField(max_length=255,
- verbose_name = u"Nom d'affichage",
- null=True, blank=True)
- nationalite = models.ForeignKey(ref.Pays, to_field='code',
- db_column='nationalite',
- related_name='ayantdroits_nationalite',
- verbose_name = u"Nationalité",
- null=True, blank=True)
- date_naissance = models.DateField(verbose_name = u"Date de naissance",
- help_text=HELP_TEXT_DATE,
- validators=[validate_date_passee],
- null=True, blank=True)
+ prenom = models.CharField(u"prénom", max_length=255)
+ nom_affichage = models.CharField(
+ u"nom d'affichage", max_length=255, null=True, blank=True
+ )
+ nationalite = models.ForeignKey(
+ ref.Pays, to_field='code', db_column='nationalite',
+ related_name='ayantdroits_nationalite',
+ verbose_name=u"nationalité", null=True, blank=True
+ )
+ date_naissance = models.DateField(
+ u"Date de naissance", help_text=HELP_TEXT_DATE,
+ validators=[validate_date_passee], null=True, blank=True
+ )
genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
# Relation
- employe = models.ForeignKey('Employe', db_column='employe',
- related_name='ayantdroits',
- verbose_name = u"Employé")
- lien_parente = models.CharField(max_length=10,
- choices=LIEN_PARENTE_CHOICES,
- verbose_name = u"Lien de parenté",
- null=True, blank=True)
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe', related_name='ayantdroits',
+ verbose_name=u"Employé"
+ )
+ lien_parente = models.CharField(
+ u"lien de parenté", max_length=10, choices=LIEN_PARENTE_CHOICES,
+ null=True, blank=True
+ )
class Meta:
ordering = ['nom', ]
return u'%s %s' % (self.nom.upper(), self.prenom, )
prefix_implantation = "employe__dossiers__poste__implantation__region"
+
def get_regions(self):
regions = []
for d in self.employe.dossiers.all():
class AyantDroitCommentaire(Commentaire):
- ayant_droit = models.ForeignKey('AyantDroit', db_column='ayant_droit',
- related_name='+')
+ ayant_droit = models.ForeignKey(
+ 'AyantDroit', db_column='ayant_droit', related_name='+'
+ )
### DOSSIER
('aucun', 'Aucun'),
)
+
class Dossier_(AUFMetadata, DevisableMixin):
- """Le Dossier regroupe les informations relatives à l'occupation
+ """
+ Le Dossier regroupe les informations relatives à l'occupation
d'un Poste par un Employe. Un seul Dossier existe par Poste occupé
par un Employe.
# TODO: OneToOne ??
statut = models.ForeignKey('Statut', related_name='+', null=True)
- organisme_bstg = models.ForeignKey('OrganismeBstg',
- db_column='organisme_bstg',
- related_name='+',
- verbose_name = u"Organisme",
- help_text="Si détaché (DET) ou \
- mis à disposition (MAD), \
- préciser l'organisme.",
- null=True, blank=True)
+ organisme_bstg = models.ForeignKey(
+ 'OrganismeBstg', db_column='organisme_bstg', related_name='+',
+ verbose_name=u"organisme",
+ help_text=(
+ u"Si détaché (DET) ou mis à disposition (MAD), "
+ u"préciser l'organisme."
+ ), null=True, blank=True
+ )
# Recrutement
remplacement = models.BooleanField(default=False)
- remplacement_de = models.ForeignKey('self', related_name='+',
- help_text=u"Taper le nom de l'employé",
- null=True, blank=True)
- statut_residence = models.CharField(max_length=10, default='local',
- verbose_name = u"Statut", null=True,
- choices=STATUT_RESIDENCE_CHOICES)
+ remplacement_de = models.ForeignKey(
+ 'self', related_name='+', help_text=u"Taper le nom de l'employé",
+ null=True, blank=True
+ )
+ statut_residence = models.CharField(
+ u"statut", max_length=10, default='local', null=True,
+ choices=STATUT_RESIDENCE_CHOICES
+ )
# Rémunération
- classement = models.ForeignKey('Classement', db_column='classement',
- related_name='+',
- null=True, blank=True)
- regime_travail = models.DecimalField(max_digits=12, null=True,
- decimal_places=2,
- default=REGIME_TRAVAIL_DEFAULT,
- verbose_name = u"Régime de travail",
- help_text="% du temps complet")
- regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
- decimal_places=2, null=True,
- default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
- verbose_name=u"Nb. heures par semaine",
- help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+ classement = models.ForeignKey(
+ 'Classement', db_column='classement', related_name='+', null=True,
+ blank=True
+ )
+ regime_travail = models.DecimalField(
+ u"régime de travail", max_digits=12, null=True, decimal_places=2,
+ default=REGIME_TRAVAIL_DEFAULT, help_text="% du temps complet"
+ )
+ regime_travail_nb_heure_semaine = models.DecimalField(
+ u"nb. heures par semaine", max_digits=12,
+ decimal_places=2, null=True,
+ default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+ help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT
+ )
# Occupation du Poste par cet Employe (anciennement "mandat")
- date_debut = models.DateField(verbose_name = u"Date de début d'occupation \
- de poste",)
- date_fin = models.DateField(verbose_name = u"Date de fin d'occupation \
- de poste",
- null=True, blank=True)
+ date_debut = models.DateField(u"date de début d'occupation de poste")
+ date_fin = models.DateField(
+ u"Date de fin d'occupation de poste", null=True, blank=True
+ )
# Comptes
# TODO?
montant = coeff * point.valeur
devise = point.devise
- return {'montant':montant, 'devise':devise}
+ return {'montant': montant, 'devise': devise}
def __unicode__(self):
poste = self.poste.nom
return u'%s - %s' % (self.employe, poste)
prefix_implantation = "poste__implantation__region"
+
def get_regions(self):
return [self.poste.implantation.region]
-
def remunerations(self):
key = "%s_remunerations" % self._meta.app_label
remunerations = getattr(self, key)
def get_salaire(self):
try:
- return [r for r in self.remunerations().order_by('-date_debut') if r.type_id == 1][0]
+ return [r for r in self.remunerations().order_by('-date_debut')
+ if r.type_id == 1][0]
except:
return None
18 Prime de 13ième mois
19 Prime d'intérim
"""
- ids = [1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19]
- return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+ ids = [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19]
+ return [r for r in self.remunerations_en_cours().all()
+ if r.type_id in ids]
def get_charges_salariales(self):
"""
20 Charges salariales ?
"""
- ids = [20, ]
- return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+ ids = [20]
+ return [r for r in self.remunerations_en_cours().all()
+ if r.type_id in ids]
def get_charges_patronales(self):
"""
17 Charges patronales
"""
- ids = [17, ]
- return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+ ids = [17]
+ return [r for r in self.remunerations_en_cours().all()
+ if r.type_id in ids]
def get_remunerations_tierces(self):
"""
2 Salaire MAD
"""
- return [r for r in self.remunerations_en_cours().all() if r.type_id in (2, )]
+ return [r for r in self.remunerations_en_cours().all()
+ if r.type_id in (2,)]
# DEVISE LOCALE
related_name='%(app_label)s_dossiers',
help_text=u"Taper le nom du poste ou du type de poste",
)
- employe = models.ForeignKey('Employe', db_column='employe',
- help_text=u"Taper le nom de l'employé",
- related_name='%(app_label)s_dossiers',
- verbose_name=u"Employé")
- principal = models.BooleanField(verbose_name=u"Principal?", default=True,
- help_text=u"Ce Dossier est pour le principal Poste occupé par l'Employé")
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe',
+ help_text=u"Taper le nom de l'employé",
+ related_name='%(app_label)s_dossiers', verbose_name=u"employé")
+ principal = models.BooleanField(
+ u"Principal?", default=True,
+ help_text=(
+ u"Ce dossier est pour le principal poste occupé par l'employé"
+ )
+ )
class DossierPiece_(models.Model):
- """Documents relatifs au Dossier (à l'occupation de ce poste par employé).
+ """
+ Documents relatifs au Dossier (à l'occupation de ce poste par employé).
Ex.: Lettre de motivation.
"""
- dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_dossierpieces')
- nom = models.CharField(verbose_name = u"Nom", max_length=255)
- fichier = models.FileField(verbose_name = u"Fichier",
- upload_to=dossier_piece_dispatch,
- storage=storage_prive)
+ dossier = models.ForeignKey(
+ '%s.Dossier' % app_context(),
+ db_column='dossier', related_name='%(app_label)s_dossierpieces'
+ )
+ nom = models.CharField(max_length=255)
+ fichier = models.FileField(
+ upload_to=dossier_piece_dispatch, storage=storage_prive
+ )
class Meta:
abstract = True
def __unicode__(self):
return u'%s' % (self.nom)
+
class DossierPiece(DossierPiece_):
pass
+
class DossierCommentaire_(Commentaire):
- dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='+')
+ dossier = models.ForeignKey(
+ '%s.Dossier' % app_context(), db_column='dossier', related_name='+'
+ )
+
class Meta:
abstract = True
+
class DossierCommentaire(DossierCommentaire_):
pass
+
class DossierComparaison_(models.Model, DevisableMixin):
"""
Photo d'une comparaison salariale au moment de l'embauche.
"""
- dossier = models.ForeignKey('%s.Dossier' % app_context(), related_name='%(app_label)s_comparaisons')
+ dossier = models.ForeignKey(
+ '%s.Dossier' % app_context(), related_name='%(app_label)s_comparaisons'
+ )
objects = DossierComparaisonManager()
- implantation = models.ForeignKey(ref.Implantation, related_name="+", null=True, blank=True)
+ implantation = models.ForeignKey(
+ ref.Implantation, related_name="+", null=True, blank=True
+ )
poste = models.CharField(max_length=255, null=True, blank=True)
personne = models.CharField(max_length=255, null=True, blank=True)
montant = models.IntegerField(null=True)
- devise = models.ForeignKey('Devise', related_name='+', null=True, blank=True)
+ devise = models.ForeignKey(
+ 'Devise', related_name='+', null=True, blank=True
+ )
class Meta:
abstract = True
class DossierComparaison(DossierComparaison_):
pass
+
### RÉMUNÉRATION
class RemunerationMixin(AUFMetadata):
- dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_remunerations')
+ dossier = models.ForeignKey(
+ '%s.Dossier' % app_context(), db_column='dossier',
+ related_name='%(app_label)s_remunerations'
+ )
+
# Identification
- type = models.ForeignKey('TypeRemuneration', db_column='type',
- related_name='+',
- verbose_name = u"Type de rémunération")
- type_revalorisation = models.ForeignKey('TypeRevalorisation',
- db_column='type_revalorisation',
- related_name='+',
- verbose_name = u"Type de revalorisation",
- null=True, blank=True)
- montant = models.DecimalField(null=True, blank=True,
- default=0, max_digits=12, decimal_places=2)
- # Annuel (12 mois, 52 semaines, 364 jours?)
- devise = models.ForeignKey('Devise', db_column='devise', related_name='+',)
+ type = models.ForeignKey(
+ 'TypeRemuneration', db_column='type', related_name='+',
+ verbose_name=u"type de rémunération"
+ )
+ type_revalorisation = models.ForeignKey(
+ 'TypeRevalorisation', db_column='type_revalorisation',
+ related_name='+', verbose_name=u"type de revalorisation",
+ null=True, blank=True
+ )
+ montant = models.DecimalField(
+ null=True, blank=True,
+ default=0, max_digits=12, decimal_places=2
+ ) # Annuel (12 mois, 52 semaines, 364 jours?)
+ devise = models.ForeignKey('Devise', db_column='devise', related_name='+')
+
# commentaire = precision
commentaire = models.CharField(max_length=255, null=True, blank=True)
+
# date_debut = anciennement date_effectif
- date_debut = models.DateField(verbose_name = u"Date de début",
- null=True, blank=True)
- date_fin = models.DateField(verbose_name = u"Date de fin",
- null=True, blank=True)
+ date_debut = models.DateField(u"date de début", null=True, blank=True)
+ date_fin = models.DateField(u"date de fin", null=True, blank=True)
class Meta:
abstract = True
def __unicode__(self):
return u'%s %s (%s)' % (self.montant, self.devise.code, self.type.nom)
+
class Remuneration_(RemunerationMixin, DevisableMixin):
- """Structure de rémunération (données budgétaires) en situation normale
+ """
+ Structure de rémunération (données budgétaires) en situation normale
pour un Dossier. Si un Evenement existe, utiliser la structure de
rémunération EvenementRemuneration de cet événement.
"""
return round(self.montant / 12, 2)
def montant_avec_regime(self):
- return round(self.montant * (self.dossier.regime_travail/100), 2)
+ return round(self.montant * (self.dossier.regime_travail / 100), 2)
def montant_euro_mois(self):
return round(self.montant_euros() / 12, 2)
class ContratManager(NoDeleteManager):
def get_query_set(self):
- return super(ContratManager, self).get_query_set().select_related('dossier', 'dossier__poste')
+ return super(ContratManager, self).get_query_set() \
+ .select_related('dossier', 'dossier__poste')
+
-
class Contrat_(AUFMetadata):
- """Document juridique qui encadre la relation de travail d'un Employe
+ """
+ Document juridique qui encadre la relation de travail d'un Employe
pour un Poste particulier. Pour un Dossier (qui documente cette
relation de travail) plusieurs contrats peuvent être associés.
"""
objects = ContratManager()
- dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_contrats')
- type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat',
- related_name='+',
- verbose_name = u"type de contrat")
- date_debut = models.DateField(verbose_name = u"Date de début")
- date_fin = models.DateField(verbose_name = u"Date de fin",
- null=True, blank=True)
- fichier = models.FileField(verbose_name = u"Fichier",
- upload_to=contrat_dispatch,
- storage=storage_prive,
- null=True, blank=True)
+ dossier = models.ForeignKey(
+ '%s.Dossier' % app_context(), db_column='dossier',
+ related_name='%(app_label)s_contrats'
+ )
+ type_contrat = models.ForeignKey(
+ 'TypeContrat', db_column='type_contrat',
+ verbose_name=u'type de contrat', related_name='+'
+ )
+ date_debut = models.DateField(u"date de début")
+ date_fin = models.DateField(u"date de fin", null=True, blank=True)
+ fichier = models.FileField(
+ upload_to=contrat_dispatch, storage=storage_prive, null=True,
+ blank=True
+ )
class Meta:
abstract = True
def __unicode__(self):
return u'%s - %s' % (self.dossier, self.id)
+
class Contrat(Contrat_):
pass
-
### ÉVÉNEMENTS
#class Evenement_(AUFMetadata):
-# """Un Evenement sert à déclarer une situation temporaire (exceptionnelle)
-# d'un Dossier qui vient altérer des informations normales liées à un Dossier
-# (ex.: la Remuneration).
-#
+# """
+# Un Evenement sert à déclarer une situation temporaire (exceptionnelle)
+# d'un Dossier qui vient altérer des informations normales liées à un
+# Dossier (ex.: la Remuneration).
+#
# Ex.: congé de maternité, maladie...
-#
+#
# Lors de ces situations exceptionnelles, l'Employe a un régime de travail
# différent et une rémunération en conséquence. On souhaite toutefois
# conserver le Dossier intact afin d'éviter une re-saisie des données lors
# du retour à la normale.
# """
-# dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier',
-# related_name='+')
+# dossier = models.ForeignKey(
+# '%s.Dossier' % app_context(), db_column='dossier',
+# related_name='+'
+# )
# nom = models.CharField(max_length=255)
# date_debut = models.DateField(verbose_name = u"Date de début")
# date_fin = models.DateField(verbose_name = u"Date de fin",
# ordering = ['nom']
# verbose_name = u"Évènement"
# verbose_name_plural = u"Évènements"
-#
+#
# def __unicode__(self):
# return u'%s' % (self.nom)
#
#class Evenement(Evenement_):
# __doc__ = Evenement_.__doc__
#
-#
+#
#class EvenementRemuneration_(RemunerationMixin):
-# """Structure de rémunération liée à un Evenement qui remplace
+# """
+# Structure de rémunération liée à un Evenement qui remplace
# temporairement la Remuneration normale d'un Dossier, pour toute la durée
# de l'Evenement.
# """
### RÉFÉRENCES RH
class FamilleEmploi(AUFMetadata):
- """Catégorie utilisée dans la gestion des Postes.
+ """
+ Catégorie utilisée dans la gestion des Postes.
Catégorie supérieure à TypePoste.
"""
nom = models.CharField(max_length=255)
def __unicode__(self):
return u'%s' % (self.nom)
+
class TypePoste(AUFMetadata):
- """Catégorie de Poste.
+ """
+ Catégorie de Poste.
"""
nom = models.CharField(max_length=255)
- nom_feminin = models.CharField(max_length=255,
- verbose_name = u"Nom féminin")
-
- is_responsable = models.BooleanField(default=False,
- verbose_name = u"Poste de responsabilité")
- famille_emploi = models.ForeignKey('FamilleEmploi',
- db_column='famille_emploi',
- related_name='+',
- verbose_name = u"famille d'emploi")
+ nom_feminin = models.CharField(u"nom féminin", max_length=255)
+ is_responsable = models.BooleanField(
+ u"poste de responsabilité", default=False
+ )
+ famille_emploi = models.ForeignKey(
+ 'FamilleEmploi', db_column='famille_emploi', related_name='+',
+ verbose_name=u"famille d'emploi"
+ )
class Meta:
ordering = ['nom']
def __unicode__(self):
return u'%s' % (self.nom)
-
TYPE_PAIEMENT_CHOICES = (
(u'Régulier', u'Régulier'),
(u'Ponctuel', u'Ponctuel'),
(u'Traitement', u'Traitement'),
)
+
class TypeRemuneration(AUFMetadata):
- """Catégorie de Remuneration.
+ """
+ Catégorie de Remuneration.
"""
objects = TypeRemunerationManager()
nom = models.CharField(max_length=255)
- type_paiement = models.CharField(max_length=30,
- choices=TYPE_PAIEMENT_CHOICES,
- verbose_name = u"Type de paiement")
- nature_remuneration = models.CharField(max_length=30,
- choices=NATURE_REMUNERATION_CHOICES,
- verbose_name = u"Nature de la rémunération")
+ type_paiement = models.CharField(
+ u"type de paiement", max_length=30, choices=TYPE_PAIEMENT_CHOICES
+ )
+ nature_remuneration = models.CharField(
+ u"nature de la rémunération", max_length=30,
+ choices=NATURE_REMUNERATION_CHOICES
+ )
archive = models.BooleanField(verbose_name=u"Archivé", default=False)
class Meta:
if self.archive:
archive = u"(archivé)"
else:
- archive = ""
+ archive = ""
return u'%s %s' % (self.nom, archive)
+
class TypeRevalorisation(AUFMetadata):
- """Justification du changement de la Remuneration.
+ """
+ Justification du changement de la Remuneration.
(Actuellement utilisé dans aucun traitement informatique.)
"""
nom = models.CharField(max_length=255)
def __unicode__(self):
return u'%s' % (self.nom)
+
class Service(AUFMetadata):
- """Unité administrative où les Postes sont rattachés.
+ """
+ Unité administrative où les Postes sont rattachés.
"""
objects = ServiceManager()
if self.archive:
archive = u"(archivé)"
else:
- archive = ""
+ archive = ""
return u'%s %s' % (self.nom, archive)
('DET', 'Détachement'),
)
+
class OrganismeBstg(AUFMetadata):
- """Organisation d'où provient un Employe mis à disposition (MAD) de
+ """
+ Organisation d'où provient un Employe mis à disposition (MAD) de
ou détaché (DET) à l'AUF à titre gratuit.
(BSTG = bien et service à titre gratuit.)
return u'%s (%s)' % (self.nom, self.get_type_display())
prefix_implantation = "pays__region"
+
def get_regions(self):
return [self.pays.region]
class Statut(AUFMetadata):
- """Statut de l'Employe dans le cadre d'un Dossier particulier.
+ """
+ Statut de l'Employe dans le cadre d'un Dossier particulier.
"""
# Identification
- code = models.CharField(max_length=25, unique=True, help_text="Saisir un code court mais lisible pour ce statut : le code est utilisé pour associer les statuts aux autres données tout en demeurant plus lisible qu'un identifiant numérique.")
+ code = models.CharField(
+ max_length=25, unique=True,
+ help_text=(
+ u"Saisir un code court mais lisible pour ce statut : "
+ u"le code est utilisé pour associer les statuts aux autres "
+ u"données tout en demeurant plus lisible qu'un identifiant "
+ u"numérique."
+ )
+ )
nom = models.CharField(max_length=255)
class Meta:
('HG', 'HG - Hors grille [direction]'),
)
+
class ClassementManager(models.Manager):
"""
Ordonner les spcéfiquement les classements.
"""
def get_query_set(self):
qs = super(self.__class__, self).get_query_set()
- qs = qs.extra(select={'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'})
+ qs = qs.extra(select={
+ 'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'
+ })
qs = qs.extra(order_by=('ponderation', 'echelon', 'degre', ))
return qs.all()
class Classement_(AUFMetadata):
- """Éléments de classement de la
+ """
+ Éléments de classement de la
"Grille générique de classement hiérarchique".
Utile pour connaître, pour un Dossier, le salaire de base théorique lié au
# Identification
type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
- echelon = models.IntegerField(verbose_name=u"Échelon", blank=True, default=0)
- degre = models.IntegerField(verbose_name=u"Degré", blank=True, default=0)
- coefficient = models.FloatField(default=0, verbose_name=u"Coefficient",
- null=True)
+ echelon = models.IntegerField(u"échelon", blank=True, default=0)
+ degre = models.IntegerField(u"degré", blank=True, default=0)
+ coefficient = models.FloatField(u"coefficient", default=0, null=True)
+
# Méta
# annee # au lieu de date_debut et date_fin
commentaire = models.TextField(null=True, blank=True)
class Meta:
abstract = True
- ordering = ['type','echelon','degre','coefficient']
+ ordering = ['type', 'echelon', 'degre', 'coefficient']
verbose_name = u"Classement"
verbose_name_plural = u"Classements"
def __unicode__(self):
return u'%s.%s.%s' % (self.type, self.echelon, self.degre, )
+
class Classement(Classement_):
__doc__ = Classement_.__doc__
class TauxChange_(AUFMetadata):
- """Taux de change de la devise vers l'euro (EUR)
+ """
+ Taux de change de la devise vers l'euro (EUR)
pour chaque année budgétaire.
"""
# Identification
devise = models.ForeignKey('Devise', db_column='devise')
- annee = models.IntegerField(verbose_name = u"Année")
- taux = models.FloatField(verbose_name = u"Taux vers l'euro")
+ annee = models.IntegerField(u"année")
+ taux = models.FloatField(u"taux vers l'euro")
class Meta:
abstract = True
class TauxChange(TauxChange_):
__doc__ = TauxChange_.__doc__
+
class ValeurPointManager(NoDeleteManager):
def get_query_set(self):
- return super(ValeurPointManager, self).get_query_set().select_related('devise', 'implantation')
+ return super(ValeurPointManager, self).get_query_set() \
+ .select_related('devise', 'implantation')
class ValeurPoint_(AUFMetadata):
- """Utile pour connaître, pour un Dossier, le salaire de base théorique lié
+ """
+ Utile pour connaître, pour un Dossier, le salaire de base théorique lié
au classement dans la grille. La ValeurPoint s'obtient par l'implantation
du Poste de ce Dossier : dossier.poste.implantation (pseudo code).
verbose_name_plural = u"Valeurs du point"
def __unicode__(self):
- return u'%s %s %s [%s] %s' % (self.devise.code, self.annee, self.valeur, self.implantation.nom_court, self.devise.nom)
+ return u'%s %s %s [%s] %s' % (
+ self.devise.code, self.annee, self.valeur,
+ self.implantation.nom_court, self.devise.nom
+ )
class ValeurPoint(ValeurPoint_):
__doc__ = ValeurPoint_.__doc__
-
class Devise(AUFMetadata):
- """Devise monétaire.
"""
-
+ Devise monétaire.
+ """
objects = DeviseManager()
archive = models.BooleanField(verbose_name=u"Archivé", default=False)
- code = models.CharField(max_length=10, unique=True)
+ code = models.CharField(max_length=10, unique=True)
nom = models.CharField(max_length=255)
class Meta:
def __unicode__(self):
return u'%s - %s' % (self.code, self.nom)
+
class TypeContrat(AUFMetadata):
- """Type de contrat.
+ """
+ Type de contrat.
"""
nom = models.CharField(max_length=255)
nom_long = models.CharField(max_length=255)
class ResponsableImplantation(models.Model):
- """Le responsable d'une implantation.
+ """
+ Le responsable d'une implantation.
Anciennement géré sur le Dossier du responsable.
"""
- employe = models.ForeignKey('Employe', db_column='employe',
- related_name='+',
- null=True, blank=True)
- implantation = models.OneToOneField("ResponsableImplantationProxy",
- db_column='implantation', related_name='responsable',
- unique=True)
+ employe = models.ForeignKey(
+ 'Employe', db_column='employe', related_name='+', null=True,
+ blank=True
+ )
+ implantation = models.OneToOneField(
+ "ResponsableImplantationProxy", db_column='implantation',
+ related_name='responsable', unique=True
+ )
def __unicode__(self):
return u'%s : %s' % (self.implantation, self.employe)
ordering = ['implantation__nom']
verbose_name = "Responsable d'implantation"
verbose_name_plural = "Responsables d'implantation"
-