début du formulaire d'autorisation d'embauche
[auf_rh_dae.git] / project / dae / models.py
CommitLineData
bd28238f 1# -=- encoding: utf-8 -=-
3f3cf5f3 2from django.db import models
3
bd28238f 4import datamaster_modeles.models as ref
5d680e84 5import project.rh_v1.models as rh
bd28238f
NC
6
7
8STATUT_RESIDENCE_CHOICES = (
5d680e84
NC
9 ('local', 'Local'),
10 ('expat', 'Expatrié'),
bd28238f
NC
11)
12
13POSTE_APPEL_CHOICES = (
5d680e84
NC
14 ('interne', 'Interne'),
15 ('externe', 'Externe'),
bd28238f
NC
16)
17
18POSTE_STATUT_CHOICES = (
19 ('MAD', 'Mise à disposition'),
20 ('DET', 'Détachement'),
21)
22
23
24class Poste(models.Model):
bd28238f 25 # Modèle existant
5d680e84
NC
26 id_rh = models.ForeignKey(rh.Poste, null=True, related_name='+',
27 editable=False)
bd28238f 28 nom = models.CharField(max_length=255)
5d680e84
NC
29 implantation = models.ForeignKey(ref.Implantation)
30 type_poste = models.ForeignKey(rh.TypePoste, null=True, related_name='+')
31 service = models.ForeignKey(rh.Service, related_name='+')
32 responsable = models.ForeignKey(rh.Poste, related_name='+')
33 regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
34 default=100)
35 regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
36 decimal_places=2,
37 default=40)
bd28238f
NC
38
39 # Recrutement
5d680e84 40 statut_residence = models.CharField(max_length=10, default='MAD',
bd28238f 41 choices=STATUT_RESIDENCE_CHOICES)
5d680e84
NC
42 # TODO null?
43 mise_a_disposition = models.BooleanField()
44 appel = models.CharField(max_length=10, default='interne',
45 choices=POSTE_APPEL_CHOICES)
bd28238f
NC
46
47 # Rémunération
5d680e84
NC
48 classement_min = models.ForeignKey(rh.Classement, related_name='+')
49 classement_max = models.ForeignKey(rh.Classement, related_name='+')
50 valeur_point_min = models.ForeignKey(rh.ValeurPoint, related_name='+')
51 valeur_point_max = models.ForeignKey(rh.ValeurPoint, related_name='+')
52 salaire_min = models.DecimalField(max_digits=12, decimal_places=2,
53 default=0)
54 salaire_max = models.DecimalField(max_digits=12, decimal_places=2,
55 default=0)
56 indemn_min = models.DecimalField(max_digits=12, decimal_places=2,
57 default=0)
58 indemn_max = models.DecimalField(max_digits=12, decimal_places=2,
59 default=0)
60 autre_min = models.DecimalField(max_digits=12, decimal_places=2,
61 default=0)
62 autre_max = models.DecimalField(max_digits=12, decimal_places=2,
63 default=0)
64
65 # Comparatifs de rémunération
66 devise_comparaison = models.ForeignKey(rh.Devise, related_name='+',
67 null=True, blank=True)
68 comp_locale_min = models.DecimalField(max_digits=12, decimal_places=2,
69 null=True, blank=True)
70 comp_locale_max = models.DecimalField(max_digits=12, decimal_places=2,
71 null=True, blank=True)
72 comp_universite_min = models.DecimalField(max_digits=12, decimal_places=2,
73 null=True, blank=True)
74 comp_universite_max = models.DecimalField(max_digits=12, decimal_places=2,
75 null=True, blank=True)
76 comp_fonctionpub_min = models.DecimalField(max_digits=12, decimal_places=2,
77 null=True, blank=True)
78 comp_fonctionpub_max = models.DecimalField(max_digits=12, decimal_places=2,
79 null=True, blank=True)
80 comp_ong_min = models.DecimalField(max_digits=12, decimal_places=2,
81 null=True, blank=True)
82 comp_ong_max = models.DecimalField(max_digits=12, decimal_places=2,
83 null=True, blank=True)
84 comp_autre_min = models.DecimalField(max_digits=12, decimal_places=2,
85 null=True, blank=True)
86 comp_autre_max = models.DecimalField(max_digits=12, decimal_places=2,
87 null=True, blank=True)
bd28238f
NC
88
89 # Méta
5d680e84
NC
90 date_creation = models.DateTimeField(auto_now_add=True)
91 date_modification = models.DateTimeField(auto_now=True)
24d44b1b
OL
92 date_debut = models.DateField(help_text="format: aaaa-mm-jj")
93 date_fin = models.DateField(null=True, help_text="format: aaaa-mm-jj")
bd28238f
NC
94 actif = models.BooleanField(default=True)
95
5d680e84
NC
96 def __unicode__(self):
97 return u'%s - %s (%s)' % (self.implantation, self.type_poste.nom,
98 self.nom)
99
100 def DISABLED_save(self, *args, **kwargs):
bd28238f
NC
101 # calculate nb_mois = nb of months between date_debut and date_fin
102 from datetime import date
bd28238f
NC
103 if not self.salaire_min:
104 self.salaire_min = self.classement_min * self.valeur_point_min
105 if not self.salaire_max:
106 self.salaire_max = self.classement_max * self.valeur_point_min
107 if not self.valeur_point_min:
108 self.valeur_point_min = \
109 rh.ValeurPoint.objects.filter(implantation=self.implantation)
110 if not self.valeur_point_max:
111 self.valeur_point_max = \
112 rh.ValeurPoint.objects.filter(implantation=self.implantation)
113 super(Subject, self).save(*args, **kwargs)
114
115
5d680e84
NC
116POSTE_FINANCEMENT_CHOICES = (
117 ('A', 'A - Frais de personnel'),
118 ('B', 'B - Projet(s)-Titre(s)'),
119 ('C', 'C - Autre')
120)
bd28238f
NC
121
122
5d680e84
NC
123class PosteFinancement(models.Model):
124 montant = models.DecimalField(max_digits=12, decimal_places=2)
125 poste = models.ForeignKey('Poste', related_name='financements')
126 type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
127 pourcentage = models.DecimalField(max_digits=12, decimal_places=2)
128 commentaire = models.TextField()
bd28238f
NC
129
130
131GENRE_CHOICES = (
139686f2
NC
132 ('m', 'Homme'),
133 ('f', 'Femme'),
bd28238f
NC
134)
135
136
137class Employe(models.Model):
bd28238f
NC
138
139 # Modèle existant
5d680e84 140 id_rh = models.ForeignKey(rh.Employe, null=True, related_name='+')
bd28238f
NC
141 nom = models.CharField(max_length=255)
142 prenom = models.CharField(max_length=255)
494ff2be
NC
143 genre = models.CharField(max_length=1, choices=GENRE_CHOICES,
144 null=True, blank=True)
bd28238f 145
139686f2
NC
146 def __unicode__(self):
147 return u'%s %s' % (self.prenom, self.nom)
148
bd28238f
NC
149
150COMPTE_COMPTA_CHOICES = (
494ff2be
NC
151 ('coda', 'CODA'),
152 ('scs', 'SCS'),
153 ('aucun', 'Aucun'),
bd28238f
NC
154)
155
156
157class Dossier(models.Model):
bd28238f
NC
158
159 # Modèle existant
139686f2
NC
160 employe = models.ForeignKey('Employe', related_name='+', editable=False)
161 poste = models.ForeignKey('Poste', related_name='+', editable=False)
5d680e84
NC
162 statut = models.ForeignKey(rh.Statut, related_name='+')
163 organisme_bstg = models.ForeignKey(rh.OrganismeBstg, related_name='+')
bd28238f 164
139686f2
NC
165 # Données antérieures de l'employé
166 statut_anterieur = models.ForeignKey(
167 rh.Statut, related_name='+', null=True, blank=True,
168 verbose_name='Statut précédent')
169 classement_anterieur = models.ForeignKey(
170 rh.Classement, related_name='+', null=True, blank=True,
171 verbose_name='Classement précédent')
172 salaire_anterieur = models.DecimalField(
173 max_digits=12, decimal_places=2, null=True, default=None,
174 blank=True, verbose_name='Salaire précédent')
175
176 # Données du titulaire précédent
177 employe_anterieur = models.ForeignKey(
178 rh.Employe, related_name='+', null=True, blank=True,
179 verbose_name='Employé précédent')
180 statut_titulaire_anterieur = models.ForeignKey(
181 rh.Statut, related_name='+', null=True, blank=True,
182 verbose_name='Statut titulaire précédent')
183 classement_titulaire_anterieur = models.ForeignKey(
184 rh.Classement, related_name='+', null=True, blank=True,
185 verbose_name='Classement titulaire précédent')
186 salaire_titulaire_anterieur = models.DecimalField(
187 max_digits=12, decimal_places=2, default=None, null=True,
188 blank=True, verbose_name='Salaire titulaire précédent')
494ff2be 189
bd28238f
NC
190 # Recrutement
191 remplacement = models.BooleanField()
bd28238f
NC
192 statut_residence = models.CharField(max_length=10,
193 choices=STATUT_RESIDENCE_CHOICES)
194
195 # Rémunération
494ff2be
NC
196 classement = models.ForeignKey(rh.Classement, related_name='+',
197 verbose_name='Classement proposé')
198 salaire = models.DecimalField(max_digits=12, decimal_places=2,
bd28238f 199 verbose_name='Salaire de base',
494ff2be 200 null=True, default=None)
5d680e84
NC
201 devise = models.ForeignKey(rh.Devise, related_name='+')
202 regime_travail = models.DecimalField(max_digits=12, decimal_places=2)
139686f2
NC
203 regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
204 decimal_places=2)
bd28238f
NC
205
206 # Contrat
5d680e84 207 type_contrat = models.ForeignKey(rh.TypeContrat, related_name='+')
bd28238f
NC
208 contrat_date_debut = models.DateField()
209 contrat_date_fin = models.DateField()
bd28238f
NC
210
211 # Comptes
212 compte_compta = models.CharField(max_length=10,
213 choices=COMPTE_COMPTA_CHOICES)
214 compte_courriel = models.BooleanField()
215
216
217class Remuneration(models.Model):
5d680e84 218 # Identification
bd28238f
NC
219 id = models.IntegerField(primary_key=True)
220 dossier = models.ForeignKey('Dossier', db_column='dossier')
221 type = models.ForeignKey('TypeRemuneration', db_column='type')
5d680e84
NC
222 # TODO: what's that?
223 # type_revalorisation = models.ForeignKey('TypeRevalorisation',
224 # db_column='type_revalorisation')
494ff2be
NC
225 montant = models.DecimalField(max_digits=12, decimal_places=2) # Annuel
226 devise = models.ForeignKey(rh.Devise, to_field='code',
5d680e84 227 db_column='devise', related_name='+')
494ff2be
NC
228 date_effective = models.DateField(null=True, blank=True)
229 pourcentage = models.IntegerField(null=True, blank=True)
bd28238f 230
5d680e84 231 # Méta
bd28238f 232 date_creation = models.DateField(auto_now_add=True)
494ff2be 233 user_creation = models.IntegerField(null=True, blank=True)
139686f2 234 desactivation = models.BooleanField(default=False, blank=True)
494ff2be
NC
235 date_desactivation = models.DateField(null=True, blank=True)
236 user_desactivation = models.IntegerField(null=True, blank=True)
139686f2
NC
237 annulation = models.BooleanField(default=False, blank=True)
238 date_annulation = models.DateField(null=True, blank=True)
239 user_annulation = models.IntegerField(null=True, blank=True)
bd28238f
NC
240
241
242class JustificationPoste(models.Model):
243 pass
244
245
246class JustificationEmploye(models.Model):
247 pass
248
249
250class DocumentPoste(models.Model):
251 pass
252
253
254class DocumentEmploye(models.Model):
255 pass
256
257
258class Validation(models.Model):
259 # user
260 date = models.DateField()
261
262 # avis = ? (CHOICES?)
263
264
265class ValidationPoste(models.Model):
266 poste = models.ForeignKey('Poste')
267
268
269class ValidationEmploye(models.Model):
270 employe = models.ForeignKey('Employe')
271
272
273class TypeRemuneration(models.Model):
274 ordre = models.IntegerField()
275 groupe = models.ForeignKey('GroupeTypeRemuneration')
276
277
278class GroupeTypeRemuneration(models.Model):
279 nom = models.CharField(max_length=255)
280 ordre = models.IntegerField()