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