Commit initial: version 0.3
[auf_django_references.git] / auf / django / references / models.py
1 # -=- encoding: utf-8 -=-
2
3 from django.db import models
4
5 class Employe(models.Model):
6 """Personne en contrat d'employé (CDD ou CDI) à l'AUF
7 """
8 id = models.IntegerField(primary_key=True)
9 nom = models.CharField(max_length=255)
10 prenom = models.CharField(max_length=255)
11 implantation = models.ForeignKey(to='Implantation', db_column='implantation', related_name='lieu_travail_theorique_de') # SGRH
12 implantation_physique = models.ForeignKey(to='Implantation', db_column='implantation_physique', related_name='lieu_travail_reel_de')
13 courriel = models.CharField(max_length=255, null=True, blank=True)
14 genre = models.CharField(max_length=3)
15 fonction = models.CharField(max_length=255, null=True, blank=True)
16 telephone_poste = models.CharField(max_length=255, null=True, blank=True)
17 telephone_ip = models.CharField(max_length=255, null=True, blank=True)
18 responsable = models.ForeignKey(to='Employe', db_column='responsable', related_name='responsable_de', null=True, blank=True)
19 mandat_debut = models.DateField(null=True, blank=True)
20 mandat_fin = models.DateField(null=True, blank=True)
21 date_entree = models.DateField(null=True, blank=True)
22 service = models.ForeignKey('Service', db_column='service')
23 poste_type_1 = models.ForeignKey('PosteType', null=True, blank=True, db_column='poste_type_1', related_name='poste_type_1')
24 poste_type_2 = models.ForeignKey('PosteType', null=True, blank=True, db_column='poste_type_2', related_name='poste_type_2')
25 # meta
26 actif = models.BooleanField()
27
28 class Meta:
29 db_table = u'ref_employe'
30 ordering = ['nom']
31
32 def __unicode__(self):
33 return u"%s, %s [%d]" % (self.nom, self.prenom, self.id)
34
35 class Authentification(models.Model):
36 """Authentification"""
37 id = models.ForeignKey('Employe', primary_key=True, db_column='id')
38 courriel = models.CharField(max_length=255, unique=True)
39 motdepasse = models.CharField(max_length=255)
40 actif = models.BooleanField()
41
42 class Meta:
43 db_table = u'ref_authentification'
44 ordering = ['id']
45
46 def __unicode__(self):
47 return u"%s [%d]" % (self.courriel, self.id)
48
49 class Service(models.Model):
50 """Services (donnée de référence, source: SGRH).
51 """
52 id = models.IntegerField(primary_key=True)
53 nom = models.CharField(max_length=255)
54 actif = models.BooleanField()
55
56 class Meta:
57 db_table = u'ref_service'
58 ordering = ['nom']
59
60 def __unicode__(self):
61 return "%s (%s)" % (self.nom, self.id)
62
63 class PosteType(models.Model):
64 """Postes types (donnée de référence, source: SGRH).
65 """
66 id = models.IntegerField(primary_key=True)
67 nom = models.CharField(max_length=255)
68 actif = models.BooleanField()
69
70 class Meta:
71 db_table = u'ref_poste_type'
72
73 def __unicode__(self):
74 return "%s (%s)" % (self.nom, self.id)
75
76 class GroupeArh(models.Model):
77 id = models.AutoField(primary_key=True)
78 employe = models.ForeignKey('Employe', db_column='employe')
79 actif = models.BooleanField()
80
81 class Meta:
82 db_table = u'ref_groupe_arh'
83
84 class GroupeDirRegion(models.Model):
85 id = models.AutoField(primary_key=True)
86 employe = models.ForeignKey('Employe', db_column='employe')
87 region = models.ForeignKey('Region', db_column='region')
88 actif = models.BooleanField()
89
90 class Meta:
91 db_table = u'ref_groupe_dir_region'
92
93 class GroupeAdmRegion(models.Model):
94 id = models.AutoField(primary_key=True)
95 employe = models.ForeignKey('Employe', db_column='employe')
96 region = models.ForeignKey('Region', db_column='region')
97 actif = models.BooleanField()
98
99 class Meta:
100 db_table = u'ref_groupe_adm_region'
101
102 class GroupeRespImplantation(models.Model):
103 id = models.AutoField(primary_key=True)
104 employe = models.ForeignKey('Employe', db_column='employe')
105 implantation = models.ForeignKey('Implantation', db_column='implantation')
106 type = models.CharField(max_length=255, blank=True, null=True)
107 actif = models.BooleanField()
108
109 class Meta:
110 db_table = u'ref_groupe_resp_implantation'
111
112 class GroupeDirProgramme(models.Model):
113 id = models.AutoField(primary_key=True)
114 employe = models.ForeignKey('Employe', db_column='employe')
115 service = models.ForeignKey('Service', db_column='service')
116 actif = models.BooleanField()
117
118 class Meta:
119 db_table = u'ref_groupe_dir_programme'
120
121 class GroupeDirDelegProgrammeReg(models.Model):
122 id = models.AutoField(primary_key=True)
123 employe = models.ForeignKey('Employe', db_column='employe')
124 region = models.ForeignKey('Region', db_column='region')
125 actif = models.BooleanField()
126
127 class Meta:
128 db_table = u'ref_groupe_dir_deleg_programme_reg'
129
130 class GroupeComptable(models.Model):
131 id = models.AutoField(primary_key=True)
132 employe = models.ForeignKey('Employe', db_column='employe')
133 actif = models.BooleanField()
134
135 class Meta:
136 db_table = u'ref_groupe_comptable'
137
138 class GroupeComptableRegional(models.Model):
139 id = models.AutoField(primary_key=True)
140 employe = models.ForeignKey('Employe', db_column='employe')
141 actif = models.BooleanField()
142
143 class Meta:
144 db_table = u'ref_groupe_comptable_regional'
145
146 class GroupeComptableLocal(models.Model):
147 id = models.AutoField(primary_key=True)
148 employe = models.ForeignKey('Employe', db_column='employe')
149 actif = models.BooleanField()
150
151 class Meta:
152 db_table = u'ref_groupe_comptable_local'
153
154 class Pays(models.Model):
155 """Pays (donnée de référence, source: SQI).
156 Liste AUF basée sur la liste ISO-3166-1.
157 """
158
159 id = models.IntegerField(primary_key=True)
160 code = models.CharField(max_length=2, unique=True)
161 code_iso3 = models.CharField(max_length=3, unique=True, blank=True)
162 nom = models.CharField(max_length=255)
163 region = models.ForeignKey('Region', db_column='region')
164 code_bureau = models.ForeignKey('Bureau', to_field='code', db_column='code_bureau')
165 nord_sud = models.CharField(max_length=255, blank=True, null=True)
166 developpement = models.CharField(max_length=255, blank=True, null=True)
167 monnaie = models.CharField(max_length=255, blank=True, null=True)
168 # meta
169 actif = models.BooleanField()
170
171 class Meta:
172 db_table = u'ref_pays'
173 ordering = ['nom']
174 verbose_name = u"pays"
175 verbose_name_plural = u"pays"
176
177 def __unicode__(self):
178 return "%s (%s)" % (self.nom, self.code)
179
180 class Region(models.Model):
181 """Région (donnée de référence, source: referentiels_spip).
182 Une région est une subdivision géographique du monde pour la gestion de l'AUF.
183 """
184
185 id = models.IntegerField(primary_key=True)
186 code = models.CharField(max_length=255, unique=True)
187 nom = models.CharField(max_length=255)
188 implantation_bureau = models.ForeignKey('Implantation', db_column='implantation_bureau', related_name='gere_region')
189 # meta
190 actif = models.BooleanField()
191
192 class Meta:
193 db_table = u'ref_region'
194 ordering = ['nom']
195 verbose_name = u"région"
196 verbose_name_plural = u"régions"
197
198 def __unicode__(self):
199 return "%s (%s)" % (self.nom, self.code)
200
201 class Bureau(models.Model):
202 """Bureau (donnée de référence, source: SQI).
203 Référence legacy entre la notion de région et celle d'implantation responsable des régions et du central.
204 Un bureau est :
205 - soit le bureau régional d'une région (implantations de type 'Bureau')
206 - soit la notion unique de Service central pour les 2 implantations centrales (implantations de type 'Service central' et 'Siege').
207 Ne pas confondre avec les seuls 'bureaux régionaux'.
208 """
209
210 id = models.IntegerField(primary_key=True)
211 code = models.CharField(max_length=255, unique=True)
212 nom = models.CharField(max_length=255)
213 nom_court = models.CharField(max_length=255, blank=True)
214 nom_long = models.CharField(max_length=255, blank=True)
215 implantation = models.ForeignKey('Implantation', db_column='implantation')
216 region = models.ForeignKey('Region', db_column='region')
217 # meta
218 actif = models.BooleanField()
219
220 class Meta:
221 db_table = u'ref_bureau'
222 ordering = ['nom']
223 verbose_name = u"bureau"
224 verbose_name_plural = u"bureaux"
225
226 def __unicode__(self):
227 return "%s (%s)" % (self.nom, self.code)
228
229 class Discipline(models.Model):
230 """ ATTENTION: DÉSUET
231 Discipline (donnée de référence, source: SQI).
232 Une discipline est une catégorie de savoirs scientifiques.
233 Le conseil scientifique fixe la liste des disciplines.
234 """
235
236 id = models.IntegerField(primary_key=True)
237 code = models.CharField(max_length=255, unique=True)
238 nom = models.CharField(max_length=255)
239 nom_long = models.CharField(max_length=255, blank=True)
240 nom_court = models.CharField(max_length=255, blank=True)
241 # meta
242 actif = models.BooleanField()
243
244 class Meta:
245 db_table = u'ref_discipline'
246 ordering = ['nom']
247
248 def __unicode__(self):
249 return "%s - %s" % (self.code, self.nom)
250
251 class EtablissementManager(models.Manager):
252
253 def get_query_set(self):
254 qs = super(EtablissementManager, self).get_query_set()
255 return qs.select_related('pays')
256
257 class Etablissement(models.Model):
258 """Établissement (donnée de référence, source: GDE).
259 Un établissement peut être une université, un centre de recherche, un réseau d'établissement...
260 Un établissement peut être membre de l'AUF ou non.
261 """
262
263 id = models.IntegerField(primary_key=True)
264 nom = models.CharField(max_length=255)
265 pays = models.ForeignKey('Pays', to_field='code', db_column='pays')
266 region = models.ForeignKey('Region', db_column='region')
267 implantation = models.ForeignKey('Implantation', db_column='implantation', related_name='gere_etablissement')
268 code_implantation = models.ForeignKey('Implantation', to_field='code', db_column='code_implantation', related_name='code_gere_etablissement')
269 # membership
270 membre = models.BooleanField()
271 membre_adhesion_date = models.DateField(null=True, blank=True)
272 # responsable
273 responsable_genre = models.CharField(max_length=1, blank=True)
274 responsable_nom = models.CharField(max_length=255, blank=True)
275 responsable_prenom = models.CharField(max_length=255, blank=True)
276 # adresse
277 adresse = models.CharField(max_length=255, blank=True)
278 code_postal = models.CharField(max_length=20, blank=True)
279 cedex = models.CharField(max_length=20, blank=True)
280 ville = models.CharField(max_length=255, blank=True)
281 province = models.CharField(max_length=255, blank=True)
282 telephone = models.CharField(max_length=255, blank=True)
283 fax = models.CharField(max_length=255, blank=True)
284 url = models.URLField(verify_exists=False, max_length=255, null=True, blank=True)
285 # meta
286 actif = models.BooleanField()
287 # manager
288 objects = EtablissementManager()
289
290 class Meta:
291 db_table = u'ref_etablissement'
292 ordering = ['pays__nom', 'nom']
293
294 def __unicode__(self):
295 return "%s - %s (%d)" % (self.pays.nom, self.nom, self.id)
296
297 class Implantation(models.Model):
298 """Implantation (donnée de référence, source: Implantus)
299 Une implantation est un endroit où l'AUF est présente et offre des services spécifiques.
300 Deux implantations peuvent être au même endroit physique.
301 """
302
303 id = models.IntegerField(primary_key=True)
304 code = models.CharField(max_length=255, unique=True)
305 nom = models.CharField(max_length=255)
306 nom_court = models.CharField(max_length=255, blank=True)
307 nom_long = models.CharField(max_length=255, blank=True)
308 type = models.CharField(max_length=255)
309 bureau_rattachement = models.ForeignKey('Implantation', db_column='bureau_rattachement')
310 region = models.ForeignKey('Region', db_column='region')
311 fuseau_horaire = models.CharField(max_length=255, blank=True)
312 code_meteo = models.CharField(max_length=255, blank=True)
313 # responsable
314 responsable_implantation = models.IntegerField(null=True, blank=True) # models.ForeignKey('Employe')
315 # adresse postale
316 adresse_postale_precision_avant = models.CharField(max_length=255, blank=True, null=True)
317 adresse_postale_no = models.CharField(max_length=30, blank=True, null=True)
318 adresse_postale_rue = models.CharField(max_length=255, blank=True, null=True)
319 adresse_postale_bureau = models.CharField(max_length=255, blank=True, null=True)
320 adresse_postale_precision = models.CharField(max_length=255, blank=True, null=True)
321 adresse_postale_boite_postale = models.CharField(max_length=255, blank=True, null=True)
322 adresse_postale_ville = models.CharField(max_length=255)
323 adresse_postale_code_postal = models.CharField(max_length=20, blank=True, null=True)
324 adresse_postale_code_postal_avant_ville = models.NullBooleanField()
325 adresse_postale_region = models.CharField(max_length=255, blank=True, null=True)
326 adresse_postale_pays = models.ForeignKey('Pays', to_field='code', db_column='adresse_postale_pays', related_name='impl_adresse_postale')
327 # adresse physique
328 adresse_physique_precision_avant = models.CharField(max_length=255, blank=True)
329 adresse_physique_no = models.CharField(max_length=30, blank=True)
330 adresse_physique_rue = models.CharField(max_length=255, blank=True)
331 adresse_physique_bureau = models.CharField(max_length=255, blank=True)
332 adresse_physique_precision = models.CharField(max_length=255, blank=True)
333 adresse_physique_ville = models.CharField(max_length=255)
334 adresse_physique_code_postal = models.CharField(max_length=30, blank=True)
335 adresse_physique_code_postal_avant_ville = models.NullBooleanField()
336 adresse_physique_region = models.CharField(max_length=255, blank=True)
337 adresse_physique_pays = models.ForeignKey('Pays', to_field='code', db_column='adresse_physique_pays', related_name='impl_adresse_physique')
338 # autres coordonnées
339 telephone = models.CharField(max_length=255, blank=True)
340 telephone_interne = models.CharField(max_length=255, blank=True)
341 fax = models.CharField(max_length=255, blank=True)
342 fax_interne = models.CharField(max_length=255, blank=True)
343 courriel = models.EmailField(blank=True)
344 courriel_interne = models.EmailField(blank=True)
345 url = models.URLField(verify_exists=False, max_length=255, blank=True)
346 # traitement
347 statut = models.IntegerField()
348 date_ouverture = models.DateField(null=True, blank=True)
349 date_inauguration = models.DateField(null=True, blank=True)
350 date_extension = models.DateField(null=True, blank=True)
351 date_fermeture = models.DateField(null=True, blank=True)
352 hebergement_etablissement = models.CharField(max_length=255, blank=True) # models.ForeignKey('Etablissement', db_column='hebergement_etablissement')
353 hebergement_convention = models.NullBooleanField()
354 hebergement_convention_date = models.DateField(null=True, blank=True)
355 remarque = models.TextField()
356 commentaire = models.CharField(max_length=255, blank=True)
357 # meta
358 actif = models.BooleanField()
359 modif_date = models.DateField()
360
361 class Managers:
362
363 class Ouvertes(models.Manager):
364
365 def get_query_set(self):
366 return super(Implantation.Managers.Ouvertes, self).get_query_set().filter(
367 actif=True, statut=1
368 )
369
370 class Actifs(models.Manager):
371
372 def get_query_set(self):
373 return super(Implantation.Managers.Actifs, self).get_query_set().filter(actif=True)
374
375 ouvertes = Managers.Ouvertes()
376 actifs = Managers.Actifs()
377 actives = actifs
378
379 class Meta:
380 db_table = u'ref_implantation'
381 ordering = ['nom']
382
383 def __unicode__(self):
384 return "%s (%d)" % (self.nom, self.id)
385
386 class Programme(models.Model):
387 """ ATTENTION: DÉSUET
388 Programme (donnée de référence, source: SQI).
389 Structure interne par laquelle l'AUF exécute ses projets et activités, dispense ses produits et ses services.
390 """
391
392 id = models.IntegerField(primary_key=True)
393 code = models.CharField(max_length=255, unique=True)
394 nom = models.CharField(max_length=255)
395 nom_long = models.CharField(max_length=255, blank=True)
396 nom_court = models.CharField(max_length=255, blank=True)
397 # meta
398 actif = models.BooleanField()
399
400 class Meta:
401 db_table = u'ref_programme'
402
403 def __unicode__(self):
404 return "%s - %s" % (self.code, self.nom)
405
406 #PROGRAMMATION QUADRIENNALLE
407
408 SERVICE_CHOICES = (
409 ('1', "Direction de la langue et de la communication scientifique en français"),
410 ('2', "Direction du développement et de la valorisation"),
411 ('3', "Direction de l'innovation pédagogique et de l'économie de la connaissance"),
412 ('4', "Direction du renforcement des capacités scientifiques"),
413 )
414
415 class Projet(models.Model):
416 """Projet (donnée de référence, source: programmation-quadriennalle).
417 """
418
419 id = models.IntegerField(primary_key=True)
420 code = models.CharField(max_length=255, unique=True)
421 nom = models.CharField(max_length=255)
422 presentation = models.TextField(null=True, blank=True)
423 partenaires = models.TextField(null=True, blank=True)
424 service = models.CharField(max_length=255, choices=SERVICE_CHOICES, blank=True, null=True)
425 objectif_specifique = models.ForeignKey('ObjectifSpecifique', blank=True, null=True, db_column='objectif_specifique')
426 implantation = models.ForeignKey('Implantation', null=True, blank=True, db_column='implantation')
427 etablissement = models.ForeignKey('Etablissement', null=True, blank=True, db_column='etablissement')
428 date_debut = models.DateField(null=True, blank=True)
429 date_fin = models.DateField(null=True, blank=True)
430 # meta
431 actif = models.BooleanField()
432
433 class Meta:
434 db_table = u'ref_projet'
435 ordering = ['nom']
436
437 def __unicode__(self):
438 return "%s - %s" % (self.code, self.nom)
439
440 class ProjetComposante(models.Model):
441 """Composantes des projets (source: programmation-quadriennalle)
442 """
443 id = models.IntegerField(primary_key=True)
444 code = models.CharField(max_length=10)
445 nom = models.CharField(max_length=255)
446 nom_court = models.CharField(max_length=255, null=True, blank=True)
447 description = models.TextField(null=True, blank=True)
448 projet = models.ForeignKey('Projet', db_column='projet')
449 # meta
450 actif = models.BooleanField()
451
452 class Meta:
453 db_table = u'ref_projet_composante'
454 ordering = ['nom']
455
456 def __unicode__(self):
457 return "%s - %s" % (self.code, self.nom)
458
459 class UniteProjet(models.Model):
460 """Unités de projet (source: programmation-quadriennalle)
461 """
462 id = models.IntegerField(primary_key=True)
463 code = models.CharField(max_length=10, unique=True)
464 nom = models.CharField(max_length=255)
465 # meta
466 actif = models.BooleanField()
467
468 class Meta:
469 db_table = u'ref_unite_projet'
470 ordering = ['nom']
471
472 def __unicode__(self):
473 return "%s - %s" % (self.code, self.nom)
474
475 class ObjectifSpecifique(models.Model):
476 id = models.IntegerField(primary_key=True)
477 nom = models.CharField(max_length=255)
478 objectif_strategique = models.ForeignKey('ObjectifStrategique', db_column='objectif_strategique')
479 # meta
480 actif = models.BooleanField()
481
482 class Meta:
483 db_table = u'ref_objectif_specifique'
484 ordering = ['nom']
485
486 def __unicode__(self):
487 return "%s - %s" % (self.id, self.nom)
488
489 class ObjectifStrategique(models.Model):
490 id = models.IntegerField(primary_key=True)
491 nom = models.CharField(max_length=255)
492 description = models.TextField(null=True, blank=True)
493 # meta
494 actif = models.BooleanField()
495
496 class Meta:
497 db_table = u'ref_objectif_strategique'
498 ordering = ['nom']
499
500 def __unicode__(self):
501 return "%s - %s" % (self.id, self.nom)
502
503 class Thematique(models.Model):
504 id = models.IntegerField(primary_key=True)
505 nom = models.CharField(max_length=255)
506 # meta
507 actif = models.BooleanField()
508
509 class Meta:
510 db_table = u'ref_thematique'
511 ordering = ['nom']
512
513 def __unicode__(self):
514 return "%s - %s" % (self.id, self.nom)
515
516 class ProjetUp(models.Model):
517 """Projet-unité de projet (source: coda)
518 => codes budgétaires
519 """
520 id = models.AutoField(primary_key=True)
521 code = models.CharField(max_length=255, unique=True)
522 nom = models.CharField(max_length=255)
523 nom_court = models.CharField(max_length=255, blank=True)
524 # meta
525 actif = models.BooleanField()
526
527 class Poste(models.Model):
528 """ ATTENTION: DÉSUET
529 Poste (donnée de référence, source: CODA).
530 Un poste est une catégorie destinée à venir raffiner un projet.
531 """
532
533 id = models.IntegerField(primary_key=True)
534 code = models.CharField(max_length=255, unique=True)
535 nom = models.CharField(max_length=255)
536 type = models.CharField(max_length=255, blank=True)
537 # meta
538 actif = models.BooleanField()
539
540 class Meta:
541 db_table = u'ref_poste'
542
543 def __unicode__(self):
544 return "%s - %s (%s)" % (self.code, self.nom, self.type)
545
546 class ProjetPoste(models.Model):
547 """ ATTENTION: DÉSUET
548 Projet-poste (donnée de référence, source: CODA).
549 Un projet-poste consiste en une raffinement d'un projet par un poste (budgétaire).
550 Subdivision utile pour le suivi budgétaire et comptable.
551 """
552
553 id = models.IntegerField(primary_key=True)
554 code = models.CharField(max_length=255, unique=True)
555 code_projet = models.ForeignKey('Projet', to_field='code', db_column='code_projet')
556 code_poste = models.ForeignKey('Poste', to_field='code', db_column='code_poste')
557 code_bureau = models.ForeignKey('Bureau', to_field='code', db_column='code_bureau')
558 code_programme = models.ForeignKey('Programme', to_field='code', db_column='code_programme')
559 # meta
560 actif = models.BooleanField()
561
562 class Meta:
563 db_table = u'ref_projet_poste'
564
565 def __unicode__(self):
566 return "%s" % (self.code)
567