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