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