d42e48c87d68b493415858e5864382bd3f9f2fc3
[auf_django_references.git] / auf / django / references / models.py
1 # -=- encoding: utf-8 -=-
2
3 from django.db import models
4
5 from auf.django.references.managedref import models as managedref
6
7 class Employe(models.Model):
8 """Personne en contrat d'employé (CDD ou CDI) à l'AUF
9 """
10 id = models.IntegerField(primary_key=True)
11 nom = models.CharField(max_length=255)
12 prenom = models.CharField(max_length=255)
13 implantation = models.ForeignKey(to='Implantation', db_column='implantation', related_name='lieu_travail_theorique_de') # SGRH
14 implantation_physique = models.ForeignKey(to='Implantation', db_column='implantation_physique', related_name='lieu_travail_reel_de')
15 courriel = models.CharField(max_length=255, null=True, blank=True)
16 genre = models.CharField(max_length=3)
17 fonction = models.CharField(max_length=255, null=True, blank=True)
18 telephone_poste = models.CharField(max_length=255, null=True, blank=True)
19 telephone_ip = models.CharField(max_length=255, null=True, blank=True)
20 responsable = models.ForeignKey(to='Employe', db_column='responsable', related_name='responsable_de', null=True, blank=True)
21 mandat_debut = models.DateField(null=True, blank=True)
22 mandat_fin = models.DateField(null=True, blank=True)
23 date_entree = models.DateField(null=True, blank=True)
24 service = models.ForeignKey('Service', db_column='service')
25 poste_type_1 = models.ForeignKey('PosteType', null=True, blank=True, db_column='poste_type_1', related_name='poste_type_1')
26 poste_type_2 = models.ForeignKey('PosteType', null=True, blank=True, db_column='poste_type_2', related_name='poste_type_2')
27 # meta
28 actif = models.BooleanField()
29
30 class Meta:
31 db_table = u'ref_employe'
32 ordering = ['nom']
33 managed = False
34
35 def __unicode__(self):
36 return u"%s, %s [%d]" % (self.nom, self.prenom, self.id)
37
38 class Authentification(models.Model):
39 """Authentification"""
40 id = models.ForeignKey('Employe', primary_key=True, db_column='id')
41 courriel = models.CharField(max_length=255, unique=True)
42 motdepasse = models.CharField(max_length=255)
43 actif = models.BooleanField()
44
45 class Meta:
46 db_table = u'ref_authentification'
47 ordering = ['id']
48 managed = False
49
50 def __unicode__(self):
51 return u"%s [%d]" % (self.courriel, self.id)
52
53 class Service(models.Model):
54 """Services (donnée de référence, source: SGRH).
55 """
56 id = models.IntegerField(primary_key=True)
57 nom = models.CharField(max_length=255)
58 actif = models.BooleanField()
59
60 class Meta:
61 db_table = u'ref_service'
62 ordering = ['nom']
63 managed = False
64
65 def __unicode__(self):
66 return "%s (%s)" % (self.nom, self.id)
67
68 class PosteType(models.Model):
69 """Postes types (donnée de référence, source: SGRH).
70 """
71 id = models.IntegerField(primary_key=True)
72 nom = models.CharField(max_length=255)
73 actif = models.BooleanField()
74
75 class Meta:
76 db_table = u'ref_poste_type'
77 managed = False
78
79 def __unicode__(self):
80 return "%s (%s)" % (self.nom, self.id)
81
82 class GroupeArh(models.Model):
83 id = models.AutoField(primary_key=True)
84 employe = models.ForeignKey('Employe', db_column='employe')
85 actif = models.BooleanField()
86
87 class Meta:
88 db_table = u'ref_groupe_arh'
89 managed = False
90
91 class GroupeDirRegion(models.Model):
92 id = models.AutoField(primary_key=True)
93 employe = models.ForeignKey('Employe', db_column='employe')
94 region = models.ForeignKey('Region', db_column='region')
95 actif = models.BooleanField()
96
97 class Meta:
98 db_table = u'ref_groupe_dir_region'
99 managed = False
100
101 class GroupeAdmRegion(models.Model):
102 id = models.AutoField(primary_key=True)
103 employe = models.ForeignKey('Employe', db_column='employe')
104 region = models.ForeignKey('Region', db_column='region')
105 actif = models.BooleanField()
106
107 class Meta:
108 db_table = u'ref_groupe_adm_region'
109 managed = False
110
111 class GroupeRespImplantation(models.Model):
112 id = models.AutoField(primary_key=True)
113 employe = models.ForeignKey('Employe', db_column='employe')
114 implantation = models.ForeignKey('Implantation', db_column='implantation')
115 type = models.CharField(max_length=255, blank=True, null=True)
116 actif = models.BooleanField()
117
118 class Meta:
119 db_table = u'ref_groupe_resp_implantation'
120 managed = False
121
122 class GroupeDirProgramme(models.Model):
123 id = models.AutoField(primary_key=True)
124 employe = models.ForeignKey('Employe', db_column='employe')
125 service = models.ForeignKey('Service', db_column='service')
126 actif = models.BooleanField()
127
128 class Meta:
129 db_table = u'ref_groupe_dir_programme'
130 managed = False
131
132 class GroupeDirDelegProgrammeReg(models.Model):
133 id = models.AutoField(primary_key=True)
134 employe = models.ForeignKey('Employe', db_column='employe')
135 region = models.ForeignKey('Region', db_column='region')
136 actif = models.BooleanField()
137
138 class Meta:
139 db_table = u'ref_groupe_dir_deleg_programme_reg'
140 managed = False
141
142 class GroupeComptable(models.Model):
143 id = models.AutoField(primary_key=True)
144 employe = models.ForeignKey('Employe', db_column='employe')
145 actif = models.BooleanField()
146
147 class Meta:
148 db_table = u'ref_groupe_comptable'
149 managed = False
150
151 class GroupeComptableRegional(models.Model):
152 id = models.AutoField(primary_key=True)
153 employe = models.ForeignKey('Employe', db_column='employe')
154 actif = models.BooleanField()
155
156 class Meta:
157 db_table = u'ref_groupe_comptable_regional'
158 managed = False
159
160 class GroupeComptableLocal(models.Model):
161 id = models.AutoField(primary_key=True)
162 employe = models.ForeignKey('Employe', db_column='employe')
163 actif = models.BooleanField()
164
165 class Meta:
166 db_table = u'ref_groupe_comptable_local'
167 managed = False
168
169 class Discipline(models.Model):
170 """ ATTENTION: DÉSUET
171 Discipline (donnée de référence, source: SQI).
172 Une discipline est une catégorie de savoirs scientifiques.
173 Le conseil scientifique fixe la liste des disciplines.
174 """
175
176 id = models.IntegerField(primary_key=True)
177 code = models.CharField(max_length=255, unique=True)
178 nom = models.CharField(max_length=255)
179 nom_long = models.CharField(max_length=255, blank=True)
180 nom_court = models.CharField(max_length=255, blank=True)
181 # meta
182 actif = models.BooleanField()
183
184 class Meta:
185 db_table = u'ref_discipline'
186 ordering = ['nom']
187 managed = False
188
189 def __unicode__(self):
190 return "%s - %s" % (self.code, self.nom)
191
192 class Programme(models.Model):
193 """ ATTENTION: DÉSUET
194 Programme (donnée de référence, source: SQI).
195 Structure interne par laquelle l'AUF exécute ses projets et activités, dispense ses produits et ses services.
196 """
197
198 id = models.IntegerField(primary_key=True)
199 code = models.CharField(max_length=255, unique=True)
200 nom = models.CharField(max_length=255)
201 nom_long = models.CharField(max_length=255, blank=True)
202 nom_court = models.CharField(max_length=255, blank=True)
203 # meta
204 actif = models.BooleanField()
205
206 class Meta:
207 db_table = u'ref_programme'
208 managed = False
209
210 def __unicode__(self):
211 return "%s - %s" % (self.code, self.nom)
212
213 #PROGRAMMATION QUADRIENNALLE
214
215 SERVICE_CHOICES = (
216 ('1', "Direction de la langue et de la communication scientifique en français"),
217 ('2', "Direction du développement et de la valorisation"),
218 ('3', "Direction de l'innovation pédagogique et de l'économie de la connaissance"),
219 ('4', "Direction du renforcement des capacités scientifiques"),
220 )
221
222 class Projet(models.Model):
223 """Projet (donnée de référence, source: programmation-quadriennalle).
224 """
225
226 id = models.IntegerField(primary_key=True)
227 code = models.CharField(max_length=255, unique=True)
228 nom = models.CharField(max_length=255)
229 presentation = models.TextField(null=True, blank=True)
230 partenaires = models.TextField(null=True, blank=True)
231 service = models.CharField(max_length=255, choices=SERVICE_CHOICES, blank=True, null=True)
232 objectif_specifique = models.ForeignKey('ObjectifSpecifique', blank=True, null=True, db_column='objectif_specifique')
233 implantation = models.ForeignKey('Implantation', null=True, blank=True, db_column='implantation')
234 etablissement = models.ForeignKey('Etablissement', null=True, blank=True, db_column='etablissement')
235 date_debut = models.DateField(null=True, blank=True)
236 date_fin = models.DateField(null=True, blank=True)
237 # meta
238 actif = models.BooleanField()
239
240 class Meta:
241 db_table = u'ref_projet'
242 ordering = ['nom']
243 managed = False
244
245 def __unicode__(self):
246 return "%s - %s" % (self.code, self.nom)
247
248 class ProjetComposante(models.Model):
249 """Composantes des projets (source: programmation-quadriennalle)
250 """
251 id = models.IntegerField(primary_key=True)
252 code = models.CharField(max_length=10)
253 nom = models.CharField(max_length=255)
254 nom_court = models.CharField(max_length=255, null=True, blank=True)
255 description = models.TextField(null=True, blank=True)
256 projet = models.ForeignKey('Projet', db_column='projet')
257 # meta
258 actif = models.BooleanField()
259
260 class Meta:
261 db_table = u'ref_projet_composante'
262 ordering = ['nom']
263 managed = False
264
265 def __unicode__(self):
266 return "%s - %s" % (self.code, self.nom)
267
268 class UniteProjet(models.Model):
269 """Unités de projet (source: programmation-quadriennalle)
270 """
271 id = models.IntegerField(primary_key=True)
272 code = models.CharField(max_length=10, unique=True)
273 nom = models.CharField(max_length=255)
274 # meta
275 actif = models.BooleanField()
276
277 class Meta:
278 db_table = u'ref_unite_projet'
279 ordering = ['nom']
280 managed = False
281
282 def __unicode__(self):
283 return "%s - %s" % (self.code, self.nom)
284
285 class ObjectifSpecifique(models.Model):
286 id = models.IntegerField(primary_key=True)
287 nom = models.CharField(max_length=255)
288 objectif_strategique = models.ForeignKey('ObjectifStrategique', db_column='objectif_strategique')
289 # meta
290 actif = models.BooleanField()
291
292 class Meta:
293 db_table = u'ref_objectif_specifique'
294 ordering = ['nom']
295 managed = False
296
297 def __unicode__(self):
298 return "%s - %s" % (self.id, self.nom)
299
300 class ObjectifStrategique(models.Model):
301 id = models.IntegerField(primary_key=True)
302 nom = models.CharField(max_length=255)
303 description = models.TextField(null=True, blank=True)
304 # meta
305 actif = models.BooleanField()
306
307 class Meta:
308 db_table = u'ref_objectif_strategique'
309 ordering = ['nom']
310 managed = False
311
312 def __unicode__(self):
313 return "%s - %s" % (self.id, self.nom)
314
315 class Thematique(models.Model):
316 id = models.IntegerField(primary_key=True)
317 nom = models.CharField(max_length=255)
318 # meta
319 actif = models.BooleanField()
320
321 class Meta:
322 db_table = u'ref_thematique'
323 ordering = ['nom']
324 managed = False
325
326 def __unicode__(self):
327 return "%s - %s" % (self.id, self.nom)
328
329 class ProjetUp(models.Model):
330 """Projet-unité de projet (source: coda)
331 => codes budgétaires
332 """
333 id = models.AutoField(primary_key=True)
334 code = models.CharField(max_length=255, unique=True)
335 nom = models.CharField(max_length=255)
336 nom_court = models.CharField(max_length=255, blank=True)
337 # meta
338 actif = models.BooleanField()
339
340 class Meta:
341 managed = False
342
343 class Poste(models.Model):
344 """ ATTENTION: DÉSUET
345 Poste (donnée de référence, source: CODA).
346 Un poste est une catégorie destinée à venir raffiner un projet.
347 """
348
349 id = models.IntegerField(primary_key=True)
350 code = models.CharField(max_length=255, unique=True)
351 nom = models.CharField(max_length=255)
352 type = models.CharField(max_length=255, blank=True)
353 # meta
354 actif = models.BooleanField()
355
356 class Meta:
357 db_table = u'ref_poste'
358 managed = False
359
360 def __unicode__(self):
361 return "%s - %s (%s)" % (self.code, self.nom, self.type)
362
363 class ProjetPoste(models.Model):
364 """ ATTENTION: DÉSUET
365 Projet-poste (donnée de référence, source: CODA).
366 Un projet-poste consiste en une raffinement d'un projet par un poste (budgétaire).
367 Subdivision utile pour le suivi budgétaire et comptable.
368 """
369
370 id = models.IntegerField(primary_key=True)
371 code = models.CharField(max_length=255, unique=True)
372 code_projet = models.ForeignKey('Projet', to_field='code', db_column='code_projet')
373 code_poste = models.ForeignKey('Poste', to_field='code', db_column='code_poste')
374 code_bureau = models.ForeignKey('Bureau', to_field='code', db_column='code_bureau')
375 code_programme = models.ForeignKey('Programme', to_field='code', db_column='code_programme')
376 # meta
377 actif = models.BooleanField()
378
379 class Meta:
380 db_table = u'ref_projet_poste'
381 managed = False
382
383 def __unicode__(self):
384 return "%s" % (self.code)
385
386 ### Proxies
387
388 class Pays(managedref.Pays):
389
390 class Meta:
391 proxy = True
392 managed = False
393
394
395 class Region(managedref.Region):
396
397 class Meta:
398 proxy = True
399 managed = False
400
401
402 class Bureau(managedref.Bureau):
403
404 class Meta:
405 proxy = True
406 managed = False
407
408
409 class Implantation(managedref.Implantation):
410
411 class Meta:
412 proxy = True
413 managed = False
414
415
416 class Etablissement(managedref.Etablissement):
417
418 class Meta:
419 proxy = True
420 managed = False
421
422
423 ### Modèles abstraits
424
425 class EtablissementBase(managedref.EtablissementBase):
426 ref = models.ForeignKey(Etablissement, blank=True, null=True)
427
428 class Meta:
429 abstract = True
430
431 def save(self, *args, **kwargs):
432 if self.ref and not self.pk:
433 # Nouvel établissement faisant référence à un établissement dans
434 # les références. On copie tous les champs.
435 for f in self.ref._meta.fields:
436 if f.attname != 'id':
437 setattr(self, f.attname, getattr(self.ref, f.attname))
438 super(EtablissementBase, self).save(*args, **kwargs)