1 # -=- encoding: utf-8 -=-
2 from django
.db
import models
4 import datamaster_modeles
.models
as ref
5 import project
.rh_v1
.models
as rh
8 STATUT_RESIDENCE_CHOICES
= (
10 ('expat', 'Expatrié'),
13 POSTE_APPEL_CHOICES
= (
14 ('interne', 'Interne'),
15 ('externe', 'Externe'),
18 POSTE_STATUT_CHOICES
= (
19 ('MAD', 'Mise à disposition'),
20 ('DET', 'Détachement'),
25 class PosteManager(models
.Manager
):
27 Chargement de tous les objets FK existants sur chaque QuerySet.
29 def get_query_set(self
):
41 return super(PosteManager
, self
).get_query_set().select_related(*fkeys
).all()
44 class Poste(models
.Model
):
46 id_rh
= models
.ForeignKey(rh
.Poste
, null
=True, related_name
='+',
47 editable
=False, verbose_name
="Mise à jour du poste")
48 nom
= models
.CharField(verbose_name
="Titre du poste", max_length
=255)
49 implantation
= models
.ForeignKey(ref
.Implantation
)
50 type_poste
= models
.ForeignKey(rh
.TypePoste
, null
=True, related_name
='+')
51 service
= models
.ForeignKey(rh
.Service
, verbose_name
=u
"Direction/Service/Pôle support", related_name
='+')
52 responsable
= models
.ForeignKey(rh
.Poste
, verbose_name
="Poste du responsable", related_name
='+')
55 regime_travail
= models
.DecimalField(max_digits
=12, decimal_places
=2,
57 regime_travail_nb_heure_semaine
= models
.DecimalField(max_digits
=12,
62 statut_residence
= models
.CharField(max_length
=10, default
='MAD', verbose_name
="Recrutement",
63 choices
=STATUT_RESIDENCE_CHOICES
)
65 mise_a_disposition
= models
.BooleanField()
66 appel
= models
.CharField(max_length
=10, default
='interne', verbose_name
="Appel à candidature",
67 choices
=POSTE_APPEL_CHOICES
)
70 classement_min
= models
.ForeignKey(rh
.Classement
, related_name
='+')
71 classement_max
= models
.ForeignKey(rh
.Classement
, related_name
='+')
72 valeur_point_min
= models
.ForeignKey(rh
.ValeurPoint
, related_name
='+')
73 valeur_point_max
= models
.ForeignKey(rh
.ValeurPoint
, related_name
='+')
74 salaire_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
76 salaire_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
78 indemn_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
80 indemn_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
82 autre_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
84 autre_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
87 # Comparatifs de rémunération
88 devise_comparaison
= models
.ForeignKey(rh
.Devise
, related_name
='+',
89 null
=True, blank
=True)
90 comp_locale_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
91 null
=True, blank
=True)
92 comp_locale_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
93 null
=True, blank
=True)
94 comp_universite_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
95 null
=True, blank
=True)
96 comp_universite_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
97 null
=True, blank
=True)
98 comp_fonctionpub_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
99 null
=True, blank
=True)
100 comp_fonctionpub_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
101 null
=True, blank
=True)
102 comp_ong_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
103 null
=True, blank
=True)
104 comp_ong_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
105 null
=True, blank
=True)
106 comp_autre_min
= models
.DecimalField(max_digits
=12, decimal_places
=2,
107 null
=True, blank
=True)
108 comp_autre_max
= models
.DecimalField(max_digits
=12, decimal_places
=2,
109 null
=True, blank
=True)
112 date_creation
= models
.DateTimeField(auto_now_add
=True)
113 date_modification
= models
.DateTimeField(auto_now
=True)
114 date_debut
= models
.DateField(verbose_name
="Date de début", help_text
="format: aaaa-mm-jj")
115 date_fin
= models
.DateField(null
=True, verbose_name
="Date de fin", help_text
="format: aaaa-mm-jj")
116 actif
= models
.BooleanField(default
=True)
119 objects
= PosteManager()
121 def __unicode__(self
):
122 return u
'%s - %s (%s)' % (self
.implantation
, self
.type_poste
.nom
,
125 def DISABLED_save(self
, *args
, **kwargs
):
126 # calculate nb_mois = nb of months between date_debut and date_fin
127 from datetime
import date
128 if not self
.salaire_min
:
129 self
.salaire_min
= self
.classement_min
* self
.valeur_point_min
130 if not self
.salaire_max
:
131 self
.salaire_max
= self
.classement_max
* self
.valeur_point_min
132 if not self
.valeur_point_min
:
133 self
.valeur_point_min
= \
134 rh
.ValeurPoint
.objects
.filter(implantation
=self
.implantation
)
135 if not self
.valeur_point_max
:
136 self
.valeur_point_max
= \
137 rh
.ValeurPoint
.objects
.filter(implantation
=self
.implantation
)
138 super(Subject
, self
).save(*args
, **kwargs
)
141 POSTE_FINANCEMENT_CHOICES
= (
142 ('A', 'A - Frais de personnel'),
143 ('B', 'B - Projet(s)-Titre(s)'),
148 class PosteFinancement(models
.Model
):
149 montant
= models
.DecimalField(max_digits
=12, decimal_places
=2)
150 poste
= models
.ForeignKey('Poste', related_name
='financements')
151 type = models
.CharField(max_length
=1, choices
=POSTE_FINANCEMENT_CHOICES
)
152 pourcentage
= models
.DecimalField(max_digits
=12, decimal_places
=2)
153 commentaire
= models
.TextField()
162 class Employe(models
.Model
):
163 id = models
.IntegerField(primary_key
=True)
166 id_rh
= models
.ForeignKey(rh
.Employe
, null
=True, related_name
='+')
167 nom
= models
.CharField(max_length
=255)
168 prenom
= models
.CharField(max_length
=255)
169 genre
= models
.CharField(max_length
=1,
170 choices
=GENRE_CHOICES
,
175 COMPTE_COMPTA_CHOICES
= (
182 class Dossier(models
.Model
):
183 statut_anterieur
= models
.ForeignKey(rh
.Statut
, related_name
='+')
186 poste
= models
.ForeignKey('Poste')
187 statut
= models
.ForeignKey(rh
.Statut
, related_name
='+')
188 organisme_bstg
= models
.ForeignKey(rh
.OrganismeBstg
, related_name
='+')
191 remplacement
= models
.BooleanField()
192 mobilite_interne
= models
.BooleanField()
193 statut_residence
= models
.CharField(max_length
=10,
194 choices
=STATUT_RESIDENCE_CHOICES
)
197 classement
= models
.ForeignKey(rh
.Classement
,
198 verbose_name
='Classement proposé',
200 salaire
= models
.DecimalField(max_digits
=12,
202 verbose_name
='Salaire de base',
205 devise
= models
.ForeignKey(rh
.Devise
, related_name
='+')
206 regime_travail
= models
.DecimalField(max_digits
=12, verbose_name
="Régime de travail", decimal_places
=2)
207 regime_travail_nb_heure_semaine
= \
208 models
.DecimalField(max_digits
=12, verbose_name
="Nbr heures par semaine", decimal_places
=2)
211 type_contrat
= models
.ForeignKey(rh
.TypeContrat
, related_name
='+')
212 contrat_date_debut
= models
.DateField()
213 contrat_date_fin
= models
.DateField()
214 contrat_nb_mois
= models
.IntegerField()
217 compte_compta
= models
.CharField(max_length
=10,
218 choices
=COMPTE_COMPTA_CHOICES
)
219 compte_courriel
= models
.BooleanField()
222 class Remuneration(models
.Model
):
224 id = models
.IntegerField(primary_key
=True)
225 dossier
= models
.ForeignKey('Dossier', db_column
='dossier')
226 type = models
.ForeignKey('TypeRemuneration', db_column
='type')
228 # type_revalorisation = models.ForeignKey('TypeRevalorisation',
229 # db_column='type_revalorisation')
230 montant
= models
.DecimalField(max_digits
=12, decimal_places
=2)
231 devise
= models
.ForeignKey(rh
.Devise
,
233 db_column
='devise', related_name
='+')
234 date_effective
= models
.DateField()
235 pourcentage
= models
.IntegerField()
238 date_creation
= models
.DateField(auto_now_add
=True)
239 user_creation
= models
.IntegerField()
240 desactivation
= models
.BooleanField()
241 date_desactivation
= models
.DateField()
242 user_desactivation
= models
.IntegerField()
243 annule
= models
.BooleanField()
244 date_annule
= models
.DateField()
245 user_annule
= models
.IntegerField()
248 class JustificationPoste(models
.Model
):
252 class JustificationEmploye(models
.Model
):
256 class DocumentPoste(models
.Model
):
260 class DocumentEmploye(models
.Model
):
264 class Validation(models
.Model
):
266 date
= models
.DateField()
268 # avis = ? (CHOICES?)
271 class ValidationPoste(models
.Model
):
272 poste
= models
.ForeignKey('Poste')
275 class ValidationEmploye(models
.Model
):
276 employe
= models
.ForeignKey('Employe')
279 class TypeRemuneration(models
.Model
):
280 ordre
= models
.IntegerField()
281 groupe
= models
.ForeignKey('GroupeTypeRemuneration')
284 class GroupeTypeRemuneration(models
.Model
):
285 nom
= models
.CharField(max_length
=255)
286 ordre
= models
.IntegerField()