[#2764] Ajouté le champ responsable_fonction au modèle des établissements
[auf_django_references.git] / auf / django / references / managedref / models.py
1 # encoding: utf-8
2
3 from django.db import models
4
5
6 class ActifsManager(models.Manager):
7
8 def get_query_set(self):
9 return super(ActifsManager, self).get_query_set().filter(actif=True)
10
11
12 class Employe(models.Model):
13 """
14 Personne en contrat d'employé (CDD ou CDI) à l'AUF
15 """
16 id = models.IntegerField(primary_key=True)
17 nom = models.CharField(max_length=255)
18 prenom = models.CharField(max_length=255)
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 )
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)
34 responsable = models.ForeignKey(
35 'references.Employe',
36 db_column='responsable',
37 related_name='responsable_de',
38 null=True, blank=True
39 )
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)
43 service = models.ForeignKey('references.Service', db_column='service')
44 poste_type_1 = models.ForeignKey(
45 'references.PosteType',
46 null=True, blank=True,
47 db_column='poste_type_1',
48 related_name='poste_type_1'
49 )
50 poste_type_2 = models.ForeignKey(
51 'references.PosteType',
52 null=True, blank=True,
53 db_column='poste_type_2',
54 related_name='poste_type_2'
55 )
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
67 class Authentification(models.Model):
68 """Authentification"""
69 id = models.ForeignKey(
70 'references.Employe', primary_key=True, db_column='id'
71 )
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
84 class 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
99 class 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
113 class GroupeArh(models.Model):
114 id = models.AutoField(primary_key=True)
115 employe = models.ForeignKey('references.Employe', db_column='employe')
116 actif = models.BooleanField()
117
118 class Meta:
119 db_table = u'ref_groupe_arh'
120
121
122 class GroupeDirRegion(models.Model):
123 id = models.AutoField(primary_key=True)
124 employe = models.ForeignKey('references.Employe', db_column='employe')
125 region = models.ForeignKey('references.Region', db_column='region')
126 actif = models.BooleanField()
127
128 class Meta:
129 db_table = u'ref_groupe_dir_region'
130
131
132 class GroupeAdmRegion(models.Model):
133 id = models.AutoField(primary_key=True)
134 employe = models.ForeignKey('references.Employe', db_column='employe')
135 region = models.ForeignKey('references.Region', db_column='region')
136 actif = models.BooleanField()
137
138 class Meta:
139 db_table = u'ref_groupe_adm_region'
140
141
142 class GroupeRespImplantation(models.Model):
143 id = models.AutoField(primary_key=True)
144 employe = models.ForeignKey('references.Employe', db_column='employe')
145 implantation = models.ForeignKey(
146 'references.Implantation', db_column='implantation'
147 )
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
155 class GroupeDirProgramme(models.Model):
156 id = models.AutoField(primary_key=True)
157 employe = models.ForeignKey('references.Employe', db_column='employe')
158 service = models.ForeignKey('references.Service', db_column='service')
159 actif = models.BooleanField()
160
161 class Meta:
162 db_table = u'ref_groupe_dir_programme'
163
164
165 class GroupeDirDelegProgrammeReg(models.Model):
166 id = models.AutoField(primary_key=True)
167 employe = models.ForeignKey('references.Employe', db_column='employe')
168 region = models.ForeignKey('references.Region', db_column='region')
169 actif = models.BooleanField()
170
171 class Meta:
172 db_table = u'ref_groupe_dir_deleg_programme_reg'
173
174
175 class GroupeComptable(models.Model):
176 id = models.AutoField(primary_key=True)
177 employe = models.ForeignKey('references.Employe', db_column='employe')
178 actif = models.BooleanField()
179
180 class Meta:
181 db_table = u'ref_groupe_comptable'
182
183
184 class GroupeComptableRegional(models.Model):
185 id = models.AutoField(primary_key=True)
186 employe = models.ForeignKey('references.Employe', db_column='employe')
187 actif = models.BooleanField()
188
189 class Meta:
190 db_table = u'ref_groupe_comptable_regional'
191
192
193 class GroupeComptableLocal(models.Model):
194 id = models.AutoField(primary_key=True)
195 employe = models.ForeignKey('references.Employe', db_column='employe')
196 actif = models.BooleanField()
197
198 class Meta:
199 db_table = u'ref_groupe_comptable_local'
200
201
202 class 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
225 class Programme(models.Model):
226 """ ATTENTION: DÉSUET
227 Programme (donnée de référence, source: SQI).
228 Structure interne par laquelle l'AUF exécute ses projets et activités,
229 dispense ses produits et ses services.
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
249 class Projet(models.Model):
250 """Projet (donnée de référence, source: programmation-quadriennalle).
251 """
252 SERVICE_CHOICES = (
253 ('1',
254 "Direction de la langue et de la communication scientifique "
255 "en français"),
256 ('2', "Direction du développement et de la valorisation"),
257 ('3',
258 "Direction de l'innovation pédagogique et de l'économie "
259 "de la connaissance"),
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)
268 service = models.CharField(
269 max_length=255, choices=SERVICE_CHOICES, blank=True, null=True
270 )
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')
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
293 class 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)
301 projet = models.ForeignKey('references.Projet', db_column='projet')
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
313 class 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
330 class ObjectifSpecifique(models.Model):
331 id = models.IntegerField(primary_key=True)
332 nom = models.CharField(max_length=255)
333 objectif_strategique = models.ForeignKey('references.ObjectifStrategique',
334 db_column='objectif_strategique')
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
346 class 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
361 class 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
375 class 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
387 class 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
407 class ProjetPoste(models.Model):
408 """
409 ATTENTION: DÉSUET
410 Projet-poste (donnée de référence, source: CODA).
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.
413 """
414
415 id = models.IntegerField(primary_key=True)
416 code = models.CharField(max_length=255, unique=True)
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 )
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
439 class Region(models.Model):
440 """Région (donnée de référence, source: referentiels_spip).
441 Une région est une subdivision géographique du monde pour la gestion de
442 l'AUF.
443 """
444 code = models.CharField(max_length=255, unique=True)
445 nom = models.CharField(max_length=255, db_index=True)
446 implantation_bureau = models.ForeignKey(
447 'references.Implantation', db_column='implantation_bureau',
448 related_name='gere_region', null=True, blank=True
449 )
450 # meta
451 actif = models.BooleanField()
452
453 # managers
454 objects = ActifsManager()
455 avec_inactifs = models.Manager()
456
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
467 class Bureau(models.Model):
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
474 Un bureau est :
475 - soit le bureau régional d'une région (implantations de type 'Bureau')
476 - soit la notion unique de Service central pour les 2 implantations
477 centrales (implantations de type 'Service central' et 'Siege').
478
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)
485 implantation = models.ForeignKey(
486 'references.Implantation', db_column='implantation'
487 )
488 region = models.ForeignKey('references.Region', db_column='region')
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
502 class Implantation(models.Model):
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.
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)
514 bureau_rattachement = models.ForeignKey(
515 'references.Implantation', db_column='bureau_rattachement'
516 )
517 region = models.ForeignKey('references.Region', db_column='region')
518 fuseau_horaire = models.CharField(max_length=255, blank=True)
519 code_meteo = models.CharField(max_length=255, blank=True)
520 # responsable
521 responsable_implantation = models.IntegerField(null=True, blank=True)
522 # adresse postale
523 adresse_postale_precision_avant = models.CharField(
524 max_length=255, blank=True, null=True
525 )
526 adresse_postale_no = models.CharField(max_length=30, blank=True, null=True)
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 )
539 adresse_postale_ville = models.CharField(max_length=255)
540 adresse_postale_code_postal = models.CharField(
541 max_length=20, blank=True, null=True
542 )
543 adresse_postale_code_postal_avant_ville = models.NullBooleanField()
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 )
552 # adresse physique
553 adresse_physique_precision_avant = models.CharField(
554 max_length=255, blank=True
555 )
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)
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 )
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)
583 hebergement_etablissement = models.CharField(max_length=255, blank=True)
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):
597 return super(Implantation.Managers.Ouvertes, self) \
598 .get_query_set() \
599 .filter(actif=True, statut=1)
600
601 class Actifs(models.Manager):
602
603 def get_query_set(self):
604 return super(Implantation.Managers.Actifs, self) \
605 .get_query_set() \
606 .filter(actif=True)
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
621 class Pays(models.Model):
622 """
623 Pays (donnée de référence, source: SQI).
624
625 Liste AUF basée sur la liste ISO-3166-1.
626 """
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)
630 region = models.ForeignKey('references.Region', db_column='region')
631 code_bureau = models.ForeignKey('references.Bureau', to_field='code',
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
650 class EtablissementManager(models.Manager):
651
652 def __init__(self, avec_inactifs=False):
653 super(EtablissementManager, self).__init__()
654 self.avec_inactifs = avec_inactifs
655
656 def get_query_set(self):
657 qs = super(EtablissementManager, self).get_query_set()
658 if not self.avec_inactifs:
659 qs = qs.filter(actif=True)
660 return qs.select_related('pays')
661
662
663 class EtablissementBase(models.Model):
664 """
665 Établissement (donnée de référence, source: GDE).
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.
670 """
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
683 nom = models.CharField(max_length=255)
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 )
696
697 # Membership
698 membre = models.BooleanField()
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
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 )
720
721 # Adresse
722 adresse = models.CharField(max_length=255, blank=True)
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')
726 ville = models.CharField(max_length=255, blank=True)
727 province = models.CharField(max_length=255, blank=True)
728 telephone = models.CharField(max_length=255, blank=True,
729 verbose_name='téléphone')
730 fax = models.CharField(max_length=255, blank=True)
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
741 objects = EtablissementManager()
742 avec_inactifs = EtablissementManager(avec_inactifs=True)
743
744 class Meta:
745 abstract = True
746 ordering = ['pays__nom', 'nom']
747
748 def __unicode__(self):
749 return "%s - %s" % (self.pays.nom, self.nom)
750
751
752 class Etablissement(EtablissementBase):
753
754 class Meta(EtablissementBase.Meta):
755 db_table = u'ref_etablissement'