[#277] Dans le manager par défaut de tous les modèles, ne lister que les objets actifs.
[auf_django_references.git] / auf / django / references / managedref / models.py
CommitLineData
652c5d02
EMS
1# encoding: utf-8
2
3from django.db import models
4
5
cda9da6f 6class ActifsManager(models.Manager):
d95f7b46
EMS
7 """
8 Manager pour ``ActifsModel``.
9 """
cda9da6f
EMS
10
11 def get_query_set(self):
12 return super(ActifsManager, self).get_query_set().filter(actif=True)
13
14
d95f7b46
EMS
15class ActifsModel(models.Model):
16 """
17 Modèle faisant la gestion des objets actifs/inactifs.
18
19 Le manager par défaut ne liste que les objets actifs. Pour avoir tous
20 les objets, utiliser le manager ``avec_inactifs``.
21 """
22 actif = models.BooleanField(default=True, editable=False)
23
24 # Managers
25 objects = ActifsManager()
26 avec_inactifs = models.Manager()
27
28 class Meta:
29 abstract = True
30
31
32class Employe(ActifsModel):
66a35422
EMS
33 """
34 Personne en contrat d'employé (CDD ou CDI) à l'AUF
a10aee41
EMS
35 """
36 id = models.IntegerField(primary_key=True)
37 nom = models.CharField(max_length=255)
38 prenom = models.CharField(max_length=255)
77f6e088
EMS
39 implantation = models.ForeignKey(
40 'references.Implantation',
41 db_column='implantation',
42 related_name='lieu_travail_theorique_de'
43 )
44 implantation_physique = models.ForeignKey(
45 'references.Implantation',
46 db_column='implantation_physique',
47 related_name='lieu_travail_reel_de'
48 )
a10aee41
EMS
49 courriel = models.CharField(max_length=255, null=True, blank=True)
50 genre = models.CharField(max_length=3)
51 fonction = models.CharField(max_length=255, null=True, blank=True)
52 telephone_poste = models.CharField(max_length=255, null=True, blank=True)
53 telephone_ip = models.CharField(max_length=255, null=True, blank=True)
77f6e088
EMS
54 responsable = models.ForeignKey(
55 'references.Employe',
56 db_column='responsable',
57 related_name='responsable_de',
58 null=True, blank=True
59 )
a10aee41
EMS
60 mandat_debut = models.DateField(null=True, blank=True)
61 mandat_fin = models.DateField(null=True, blank=True)
62 date_entree = models.DateField(null=True, blank=True)
77f6e088 63 service = models.ForeignKey('references.Service', db_column='service')
66a35422 64 poste_type_1 = models.ForeignKey(
77f6e088
EMS
65 'references.PosteType',
66 null=True, blank=True,
67 db_column='poste_type_1',
68 related_name='poste_type_1'
69 )
66a35422 70 poste_type_2 = models.ForeignKey(
77f6e088
EMS
71 'references.PosteType',
72 null=True, blank=True,
73 db_column='poste_type_2',
74 related_name='poste_type_2'
75 )
a10aee41
EMS
76
77 class Meta:
78 db_table = u'ref_employe'
79 ordering = ['nom']
80
81 def __unicode__(self):
82 return u"%s, %s [%d]" % (self.nom, self.prenom, self.id)
83
84
d95f7b46 85class Authentification(ActifsModel):
a10aee41 86 """Authentification"""
66a35422
EMS
87 id = models.ForeignKey(
88 'references.Employe', primary_key=True, db_column='id'
89 )
a10aee41
EMS
90 courriel = models.CharField(max_length=255, unique=True)
91 motdepasse = models.CharField(max_length=255)
a10aee41
EMS
92
93 class Meta:
94 db_table = u'ref_authentification'
95 ordering = ['id']
96
97 def __unicode__(self):
98 return u"%s [%d]" % (self.courriel, self.id)
99
100
d95f7b46 101class Service(ActifsModel):
a10aee41
EMS
102 """Services (donnée de référence, source: SGRH).
103 """
104 id = models.IntegerField(primary_key=True)
105 nom = models.CharField(max_length=255)
a10aee41
EMS
106
107 class Meta:
108 db_table = u'ref_service'
109 ordering = ['nom']
110
111 def __unicode__(self):
112 return "%s (%s)" % (self.nom, self.id)
113
114
d95f7b46 115class PosteType(ActifsModel):
a10aee41
EMS
116 """Postes types (donnée de référence, source: SGRH).
117 """
118 id = models.IntegerField(primary_key=True)
119 nom = models.CharField(max_length=255)
a10aee41
EMS
120
121 class Meta:
122 db_table = u'ref_poste_type'
123
124 def __unicode__(self):
125 return "%s (%s)" % (self.nom, self.id)
126
127
d95f7b46 128class GroupeArh(ActifsModel):
a10aee41 129 id = models.AutoField(primary_key=True)
77f6e088 130 employe = models.ForeignKey('references.Employe', db_column='employe')
a10aee41
EMS
131
132 class Meta:
133 db_table = u'ref_groupe_arh'
134
135
d95f7b46 136class GroupeDirRegion(ActifsModel):
a10aee41 137 id = models.AutoField(primary_key=True)
77f6e088
EMS
138 employe = models.ForeignKey('references.Employe', db_column='employe')
139 region = models.ForeignKey('references.Region', db_column='region')
a10aee41
EMS
140
141 class Meta:
142 db_table = u'ref_groupe_dir_region'
143
144
d95f7b46 145class GroupeAdmRegion(ActifsModel):
a10aee41 146 id = models.AutoField(primary_key=True)
77f6e088
EMS
147 employe = models.ForeignKey('references.Employe', db_column='employe')
148 region = models.ForeignKey('references.Region', db_column='region')
a10aee41
EMS
149
150 class Meta:
151 db_table = u'ref_groupe_adm_region'
152
153
d95f7b46 154class GroupeRespImplantation(ActifsModel):
a10aee41 155 id = models.AutoField(primary_key=True)
77f6e088 156 employe = models.ForeignKey('references.Employe', db_column='employe')
66a35422
EMS
157 implantation = models.ForeignKey(
158 'references.Implantation', db_column='implantation'
159 )
a10aee41 160 type = models.CharField(max_length=255, blank=True, null=True)
a10aee41
EMS
161
162 class Meta:
163 db_table = u'ref_groupe_resp_implantation'
164
165
d95f7b46 166class GroupeDirProgramme(ActifsModel):
a10aee41 167 id = models.AutoField(primary_key=True)
77f6e088
EMS
168 employe = models.ForeignKey('references.Employe', db_column='employe')
169 service = models.ForeignKey('references.Service', db_column='service')
a10aee41
EMS
170
171 class Meta:
172 db_table = u'ref_groupe_dir_programme'
173
174
d95f7b46 175class GroupeDirDelegProgrammeReg(ActifsModel):
a10aee41 176 id = models.AutoField(primary_key=True)
77f6e088
EMS
177 employe = models.ForeignKey('references.Employe', db_column='employe')
178 region = models.ForeignKey('references.Region', db_column='region')
a10aee41
EMS
179
180 class Meta:
181 db_table = u'ref_groupe_dir_deleg_programme_reg'
182
183
d95f7b46 184class GroupeComptable(ActifsModel):
a10aee41 185 id = models.AutoField(primary_key=True)
77f6e088 186 employe = models.ForeignKey('references.Employe', db_column='employe')
a10aee41
EMS
187
188 class Meta:
189 db_table = u'ref_groupe_comptable'
190
191
d95f7b46 192class GroupeComptableRegional(ActifsModel):
a10aee41 193 id = models.AutoField(primary_key=True)
77f6e088 194 employe = models.ForeignKey('references.Employe', db_column='employe')
a10aee41
EMS
195
196 class Meta:
197 db_table = u'ref_groupe_comptable_regional'
198
199
d95f7b46 200class GroupeComptableLocal(ActifsModel):
a10aee41 201 id = models.AutoField(primary_key=True)
77f6e088 202 employe = models.ForeignKey('references.Employe', db_column='employe')
a10aee41
EMS
203
204 class Meta:
205 db_table = u'ref_groupe_comptable_local'
206
207
d95f7b46 208class Discipline(ActifsModel):
a10aee41
EMS
209 """ ATTENTION: DÉSUET
210 Discipline (donnée de référence, source: SQI).
211 Une discipline est une catégorie de savoirs scientifiques.
212 Le conseil scientifique fixe la liste des disciplines.
213 """
214
215 id = models.IntegerField(primary_key=True)
216 code = models.CharField(max_length=255, unique=True)
217 nom = models.CharField(max_length=255)
218 nom_long = models.CharField(max_length=255, blank=True)
219 nom_court = models.CharField(max_length=255, blank=True)
a10aee41
EMS
220
221 class Meta:
222 db_table = u'ref_discipline'
223 ordering = ['nom']
224
225 def __unicode__(self):
226 return "%s - %s" % (self.code, self.nom)
227
228
d95f7b46 229class Programme(ActifsModel):
a10aee41
EMS
230 """ ATTENTION: DÉSUET
231 Programme (donnée de référence, source: SQI).
66a35422
EMS
232 Structure interne par laquelle l'AUF exécute ses projets et activités,
233 dispense ses produits et ses services.
a10aee41
EMS
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)
a10aee41
EMS
241
242 class Meta:
243 db_table = u'ref_programme'
244
245 def __unicode__(self):
246 return "%s - %s" % (self.code, self.nom)
247
248
249#PROGRAMMATION QUADRIENNALLE
250
d95f7b46 251class Projet(ActifsModel):
a10aee41
EMS
252 """Projet (donnée de référence, source: programmation-quadriennalle).
253 """
254 SERVICE_CHOICES = (
66a35422
EMS
255 ('1',
256 "Direction de la langue et de la communication scientifique "
257 "en français"),
a10aee41 258 ('2', "Direction du développement et de la valorisation"),
66a35422
EMS
259 ('3',
260 "Direction de l'innovation pédagogique et de l'économie "
261 "de la connaissance"),
a10aee41
EMS
262 ('4', "Direction du renforcement des capacités scientifiques"),
263 )
264
265 id = models.IntegerField(primary_key=True)
266 code = models.CharField(max_length=255, unique=True)
267 nom = models.CharField(max_length=255)
268 presentation = models.TextField(null=True, blank=True)
269 partenaires = models.TextField(null=True, blank=True)
66a35422
EMS
270 service = models.CharField(
271 max_length=255, choices=SERVICE_CHOICES, blank=True, null=True
272 )
77f6e088
EMS
273 objectif_specifique = models.ForeignKey(
274 'references.ObjectifSpecifique',
275 blank=True, null=True,
276 db_column='objectif_specifique'
277 )
278 implantation = models.ForeignKey('references.Implantation', null=True,
279 blank=True, db_column='implantation')
280 etablissement = models.ForeignKey('references.Etablissement', null=True,
281 blank=True, db_column='etablissement')
a10aee41
EMS
282 date_debut = models.DateField(null=True, blank=True)
283 date_fin = models.DateField(null=True, blank=True)
a10aee41
EMS
284
285 class Meta:
286 db_table = u'ref_projet'
287 ordering = ['nom']
288
289 def __unicode__(self):
290 return "%s - %s" % (self.code, self.nom)
291
292
d95f7b46 293class ProjetComposante(ActifsModel):
a10aee41
EMS
294 """Composantes des projets (source: programmation-quadriennalle)
295 """
296 id = models.IntegerField(primary_key=True)
297 code = models.CharField(max_length=10)
298 nom = models.CharField(max_length=255)
299 nom_court = models.CharField(max_length=255, null=True, blank=True)
300 description = models.TextField(null=True, blank=True)
77f6e088 301 projet = models.ForeignKey('references.Projet', db_column='projet')
a10aee41
EMS
302
303 class Meta:
304 db_table = u'ref_projet_composante'
305 ordering = ['nom']
306
307 def __unicode__(self):
308 return "%s - %s" % (self.code, self.nom)
309
310
d95f7b46 311class UniteProjet(ActifsModel):
a10aee41
EMS
312 """Unités de projet (source: programmation-quadriennalle)
313 """
314 id = models.IntegerField(primary_key=True)
315 code = models.CharField(max_length=10, unique=True)
316 nom = models.CharField(max_length=255)
a10aee41
EMS
317
318 class Meta:
319 db_table = u'ref_unite_projet'
320 ordering = ['nom']
321
322 def __unicode__(self):
323 return "%s - %s" % (self.code, self.nom)
324
325
d95f7b46 326class ObjectifSpecifique(ActifsModel):
a10aee41
EMS
327 id = models.IntegerField(primary_key=True)
328 nom = models.CharField(max_length=255)
77f6e088
EMS
329 objectif_strategique = models.ForeignKey('references.ObjectifStrategique',
330 db_column='objectif_strategique')
a10aee41
EMS
331
332 class Meta:
333 db_table = u'ref_objectif_specifique'
334 ordering = ['nom']
335
336 def __unicode__(self):
337 return "%s - %s" % (self.id, self.nom)
338
339
d95f7b46 340class ObjectifStrategique(ActifsModel):
a10aee41
EMS
341 id = models.IntegerField(primary_key=True)
342 nom = models.CharField(max_length=255)
343 description = models.TextField(null=True, blank=True)
a10aee41
EMS
344
345 class Meta:
346 db_table = u'ref_objectif_strategique'
347 ordering = ['nom']
348
349 def __unicode__(self):
350 return "%s - %s" % (self.id, self.nom)
351
352
d95f7b46 353class Thematique(ActifsModel):
a10aee41
EMS
354 id = models.IntegerField(primary_key=True)
355 nom = models.CharField(max_length=255)
a10aee41
EMS
356
357 class Meta:
358 db_table = u'ref_thematique'
359 ordering = ['nom']
360
361 def __unicode__(self):
362 return "%s - %s" % (self.id, self.nom)
363
364
d95f7b46 365class ProjetUp(ActifsModel):
a10aee41
EMS
366 """Projet-unité de projet (source: coda)
367 => codes budgétaires
368 """
369 id = models.AutoField(primary_key=True)
370 code = models.CharField(max_length=255, unique=True)
371 nom = models.CharField(max_length=255)
372 nom_court = models.CharField(max_length=255, blank=True)
a10aee41
EMS
373
374
d95f7b46 375class Poste(ActifsModel):
a10aee41
EMS
376 """ ATTENTION: DÉSUET
377 Poste (donnée de référence, source: CODA).
378 Un poste est une catégorie destinée à venir raffiner un projet.
379 """
380
381 id = models.IntegerField(primary_key=True)
382 code = models.CharField(max_length=255, unique=True)
383 nom = models.CharField(max_length=255)
384 type = models.CharField(max_length=255, blank=True)
a10aee41
EMS
385
386 class Meta:
387 db_table = u'ref_poste'
388
389 def __unicode__(self):
390 return "%s - %s (%s)" % (self.code, self.nom, self.type)
391
392
d95f7b46 393class ProjetPoste(ActifsModel):
66a35422
EMS
394 """
395 ATTENTION: DÉSUET
a10aee41 396 Projet-poste (donnée de référence, source: CODA).
66a35422
EMS
397 Un projet-poste consiste en une raffinement d'un projet par un poste
398 (budgétaire). Subdivision utile pour le suivi budgétaire et comptable.
a10aee41
EMS
399 """
400
401 id = models.IntegerField(primary_key=True)
402 code = models.CharField(max_length=255, unique=True)
66a35422
EMS
403 code_projet = models.ForeignKey(
404 'references.Projet', to_field='code', db_column='code_projet'
405 )
406 code_poste = models.ForeignKey(
407 'references.Poste', to_field='code', db_column='code_poste'
408 )
409 code_bureau = models.ForeignKey(
410 'references.Bureau', to_field='code', db_column='code_bureau'
411 )
412 code_programme = models.ForeignKey(
413 'references.Programme', to_field='code', db_column='code_programme'
414 )
a10aee41
EMS
415
416 class Meta:
417 db_table = u'ref_projet_poste'
418
419 def __unicode__(self):
420 return "%s" % (self.code)
421
422
d95f7b46 423class Region(ActifsModel):
652c5d02 424 """Région (donnée de référence, source: referentiels_spip).
66a35422
EMS
425 Une région est une subdivision géographique du monde pour la gestion de
426 l'AUF.
652c5d02
EMS
427 """
428 code = models.CharField(max_length=255, unique=True)
429 nom = models.CharField(max_length=255, db_index=True)
66a35422
EMS
430 implantation_bureau = models.ForeignKey(
431 'references.Implantation', db_column='implantation_bureau',
432 related_name='gere_region', null=True, blank=True
433 )
cda9da6f 434
652c5d02
EMS
435 class Meta:
436 db_table = u'ref_region'
437 ordering = ['nom']
438 verbose_name = u"région"
439 verbose_name_plural = u"régions"
440
441 def __unicode__(self):
442 return "%s (%s)" % (self.nom, self.code)
443
444
d95f7b46 445class Bureau(ActifsModel):
66a35422
EMS
446 """
447 Bureau (donnée de référence, source: SQI).
448
449 Référence legacy entre la notion de région et celle d'implantation
450 responsable des régions et du central.
451
652c5d02
EMS
452 Un bureau est :
453 - soit le bureau régional d'une région (implantations de type 'Bureau')
66a35422
EMS
454 - soit la notion unique de Service central pour les 2 implantations
455 centrales (implantations de type 'Service central' et 'Siege').
456
652c5d02
EMS
457 Ne pas confondre avec les seuls 'bureaux régionaux'.
458 """
459 code = models.CharField(max_length=255, unique=True)
460 nom = models.CharField(max_length=255)
461 nom_court = models.CharField(max_length=255, blank=True)
462 nom_long = models.CharField(max_length=255, blank=True)
66a35422
EMS
463 implantation = models.ForeignKey(
464 'references.Implantation', db_column='implantation'
465 )
77f6e088 466 region = models.ForeignKey('references.Region', db_column='region')
652c5d02
EMS
467
468 class Meta:
469 db_table = u'ref_bureau'
470 ordering = ['nom']
471 verbose_name = u"bureau"
472 verbose_name_plural = u"bureaux"
473
474 def __unicode__(self):
475 return "%s (%s)" % (self.nom, self.code)
476
477
d95f7b46 478class Implantation(ActifsModel):
66a35422
EMS
479 """
480 Implantation (donnée de référence, source: Implantus)
481
482 Une implantation est un endroit où l'AUF est présente et offre des
483 services spécifiques. Deux implantations peuvent être au même endroit
484 physique.
652c5d02 485 """
27cd0e44
EMS
486 STATUT_CHOICES = (
487 (0, u'Fermée ou jamais ouverte'),
488 (1, u'Ouverte'),
489 (2, u'Ouverture imminente'),
490 (3, u'En projet')
491 )
492
652c5d02
EMS
493 nom = models.CharField(max_length=255)
494 nom_court = models.CharField(max_length=255, blank=True)
495 nom_long = models.CharField(max_length=255, blank=True)
496 type = models.CharField(max_length=255)
66a35422
EMS
497 bureau_rattachement = models.ForeignKey(
498 'references.Implantation', db_column='bureau_rattachement'
499 )
77f6e088 500 region = models.ForeignKey('references.Region', db_column='region')
652c5d02
EMS
501 fuseau_horaire = models.CharField(max_length=255, blank=True)
502 code_meteo = models.CharField(max_length=255, blank=True)
503 # responsable
66a35422 504 responsable_implantation = models.IntegerField(null=True, blank=True)
652c5d02 505 # adresse postale
66a35422
EMS
506 adresse_postale_precision_avant = models.CharField(
507 max_length=255, blank=True, null=True
508 )
652c5d02 509 adresse_postale_no = models.CharField(max_length=30, blank=True, null=True)
66a35422
EMS
510 adresse_postale_rue = models.CharField(
511 max_length=255, blank=True, null=True
512 )
513 adresse_postale_bureau = models.CharField(
514 max_length=255, blank=True, null=True
515 )
516 adresse_postale_precision = models.CharField(
517 max_length=255, blank=True, null=True
518 )
519 adresse_postale_boite_postale = models.CharField(
520 max_length=255, blank=True, null=True
521 )
652c5d02 522 adresse_postale_ville = models.CharField(max_length=255)
66a35422
EMS
523 adresse_postale_code_postal = models.CharField(
524 max_length=20, blank=True, null=True
525 )
652c5d02 526 adresse_postale_code_postal_avant_ville = models.NullBooleanField()
66a35422
EMS
527 adresse_postale_region = models.CharField(
528 max_length=255, blank=True, null=True
529 )
530 adresse_postale_pays = models.ForeignKey(
531 'references.Pays', to_field='code',
532 db_column='adresse_postale_pays',
533 related_name='impl_adresse_postale'
534 )
652c5d02 535 # adresse physique
66a35422
EMS
536 adresse_physique_precision_avant = models.CharField(
537 max_length=255, blank=True
538 )
652c5d02
EMS
539 adresse_physique_no = models.CharField(max_length=30, blank=True)
540 adresse_physique_rue = models.CharField(max_length=255, blank=True)
541 adresse_physique_bureau = models.CharField(max_length=255, blank=True)
542 adresse_physique_precision = models.CharField(max_length=255, blank=True)
543 adresse_physique_ville = models.CharField(max_length=255)
544 adresse_physique_code_postal = models.CharField(max_length=30, blank=True)
545 adresse_physique_code_postal_avant_ville = models.NullBooleanField()
546 adresse_physique_region = models.CharField(max_length=255, blank=True)
66a35422
EMS
547 adresse_physique_pays = models.ForeignKey(
548 'references.Pays', to_field='code',
549 db_column='adresse_physique_pays',
550 related_name='impl_adresse_physique'
551 )
652c5d02
EMS
552 # autres coordonnées
553 telephone = models.CharField(max_length=255, blank=True)
554 telephone_interne = models.CharField(max_length=255, blank=True)
555 fax = models.CharField(max_length=255, blank=True)
556 fax_interne = models.CharField(max_length=255, blank=True)
557 courriel = models.EmailField(blank=True)
558 courriel_interne = models.EmailField(blank=True)
559 url = models.URLField(verify_exists=False, max_length=255, blank=True)
560 # traitement
27cd0e44 561 statut = models.IntegerField(choices=STATUT_CHOICES)
652c5d02
EMS
562 date_ouverture = models.DateField(null=True, blank=True)
563 date_inauguration = models.DateField(null=True, blank=True)
564 date_extension = models.DateField(null=True, blank=True)
565 date_fermeture = models.DateField(null=True, blank=True)
66a35422 566 hebergement_etablissement = models.CharField(max_length=255, blank=True)
652c5d02
EMS
567 hebergement_convention = models.NullBooleanField()
568 hebergement_convention_date = models.DateField(null=True, blank=True)
569 remarque = models.TextField()
570 commentaire = models.CharField(max_length=255, blank=True)
571 # meta
652c5d02
EMS
572 modif_date = models.DateField()
573
574 class Managers:
575
d95f7b46 576 class Ouvertes(ActifsManager):
652c5d02
EMS
577
578 def get_query_set(self):
66a35422
EMS
579 return super(Implantation.Managers.Ouvertes, self) \
580 .get_query_set() \
d95f7b46 581 .filter(statut=1)
652c5d02 582
d95f7b46 583 objects = ActifsManager()
652c5d02 584 ouvertes = Managers.Ouvertes()
652c5d02
EMS
585
586 class Meta:
587 db_table = u'ref_implantation'
588 ordering = ['nom']
589
590 def __unicode__(self):
591 return "%s (%d)" % (self.nom, self.id)
592
593
d95f7b46 594class Pays(ActifsModel):
66a35422
EMS
595 """
596 Pays (donnée de référence, source: SQI).
597
598 Liste AUF basée sur la liste ISO-3166-1.
599 """
652c5d02
EMS
600 code = models.CharField(max_length=2, unique=True)
601 code_iso3 = models.CharField(max_length=3, unique=True)
602 nom = models.CharField(max_length=255)
77f6e088
EMS
603 region = models.ForeignKey('references.Region', db_column='region')
604 code_bureau = models.ForeignKey('references.Bureau', to_field='code',
652c5d02
EMS
605 db_column='code_bureau', blank=True,
606 null=True)
607 nord_sud = models.CharField(max_length=255, blank=True, null=True)
608 developpement = models.CharField(max_length=255, blank=True, null=True)
609 monnaie = models.CharField(max_length=255, blank=True, null=True)
652c5d02
EMS
610
611 class Meta:
612 db_table = u'ref_pays'
613 ordering = ['nom']
614 verbose_name = u"pays"
615 verbose_name_plural = u"pays"
616
617 def __unicode__(self):
618 return "%s (%s)" % (self.nom, self.code)
619
620
d95f7b46 621class EtablissementBase(ActifsModel):
652c5d02
EMS
622 """
623 Établissement (donnée de référence, source: GDE).
66a35422
EMS
624
625 Un établissement peut être une université, un centre de recherche, un
626 réseau d'établissement... Un établissement peut être membre de l'AUF ou
627 non.
652c5d02 628 """
948fc6a6
EMS
629 MEMBRE_STATUT_CHOICES = (
630 ('T', 'Titulaire'),
631 ('A', 'Associé'),
632 ('C', 'Candidat'),
633 )
634 QUALITE_CHOICES = (
635 ('ESR', "Établissement d'enseignement supérieur et de recherche"),
636 ('CIR', "Centre ou institution de recherche"),
637 ('RES', "Réseau"),
638 )
639
640 # Infos de base
652c5d02 641 nom = models.CharField(max_length=255)
66a35422
EMS
642 pays = models.ForeignKey(
643 'references.Pays', to_field='code', db_column='pays',
644 related_name='+'
645 )
646 region = models.ForeignKey(
647 'references.Region', db_column='region', blank=True, null=True,
648 related_name='+', verbose_name='région'
649 )
650 implantation = models.ForeignKey(
651 'references.Implantation', db_column='implantation',
652 related_name='+', blank=True, null=True
653 )
83ca080a
EMS
654 description = models.TextField(blank=True)
655 historique = models.TextField(blank=True)
948fc6a6
EMS
656
657 # Membership
652c5d02 658 membre = models.BooleanField()
948fc6a6
EMS
659 membre_adhesion_date = models.DateField(null=True, blank=True,
660 verbose_name="date d'adhésion")
661 statut = models.CharField(max_length=1, choices=MEMBRE_STATUT_CHOICES,
662 blank=True, null=True)
663 qualite = models.CharField(max_length=3, choices=QUALITE_CHOICES,
664 verbose_name="qualité", blank=True,
665 null=True)
666
667 # Responsable
66a35422
EMS
668 responsable_genre = models.CharField(
669 max_length=1, blank=True, verbose_name='genre'
670 )
671 responsable_nom = models.CharField(
672 max_length=255, blank=True, verbose_name='nom'
673 )
674 responsable_prenom = models.CharField(
675 max_length=255, blank=True, verbose_name='prénom'
676 )
677 responsable_fonction = models.CharField(
678 max_length=255, blank=True, verbose_name='fonction'
679 )
948fc6a6
EMS
680
681 # Adresse
652c5d02 682 adresse = models.CharField(max_length=255, blank=True)
948fc6a6
EMS
683 code_postal = models.CharField(max_length=20, blank=True,
684 verbose_name='code postal')
685 cedex = models.CharField(max_length=20, blank=True, verbose_name='CEDEX')
652c5d02
EMS
686 ville = models.CharField(max_length=255, blank=True)
687 province = models.CharField(max_length=255, blank=True)
948fc6a6
EMS
688 telephone = models.CharField(max_length=255, blank=True,
689 verbose_name='téléphone')
652c5d02 690 fax = models.CharField(max_length=255, blank=True)
948fc6a6
EMS
691 url = models.URLField(verify_exists=False, max_length=255, null=True,
692 blank=True, verbose_name='URL')
693
694 # Meta-données
948fc6a6
EMS
695 date_modification = models.DateField(verbose_name='date de modification',
696 blank=True, null=True)
697 commentaire = models.TextField(blank=True)
698
652c5d02
EMS
699 class Meta:
700 abstract = True
701 ordering = ['pays__nom', 'nom']
702
703 def __unicode__(self):
948fc6a6 704 return "%s - %s" % (self.pays.nom, self.nom)
652c5d02
EMS
705
706
707class Etablissement(EtablissementBase):
708
709 class Meta(EtablissementBase.Meta):
710 db_table = u'ref_etablissement'