From 8aec9ae94baef178263301311fc5646915502a11 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Fri, 9 Nov 2012 15:32:00 +0100 Subject: [PATCH] Adapt database schema --- docs/SchemaRelationnel.odg | Bin 18771 -> 19165 bytes stages/admin.py | 9 ++++++--- stages/fixtures/test_fixture.json | 2 ++ stages/models.py | 8 +++++--- stages/views.py | 4 +++- templates/attribution.html | 2 ++ templates/trainings_list.html | 4 +++- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/SchemaRelationnel.odg b/docs/SchemaRelationnel.odg index 08fc5a56d7277d90cdd4077cef3b85f142340451..65d07779d71324d954dd8c80c831c1611efa3ed7 100644 GIT binary patch delta 14123 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 Put5USsL=6}f0_P2g$?IG delta 13766 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 diff --git a/stages/admin.py b/stages/admin.py index d6533f8..bda0f3d 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -12,11 +12,14 @@ class StudentAdmin(admin.ModelAdmin): class CorpContactAdmin(admin.ModelAdmin): - list_display = ('__unicode__', 'corporation') - fields = ('corporation', ('last_name', 'first_name'), ('tel', 'email')) + list_display = ('__unicode__', 'corporation', 'role') + fields = ('corporation', ('title', 'last_name', 'first_name'), + 'role', ('tel', 'email')) -class ContactInline(admin.TabularInline): +class ContactInline(admin.StackedInline): model = CorpContact + fields = (('title', 'last_name', 'first_name'), + ('role', 'tel', 'email')) extra = 1 class CorporationAdmin(admin.ModelAdmin): diff --git a/stages/fixtures/test_fixture.json b/stages/fixtures/test_fixture.json index f481ded..4750377 100644 --- a/stages/fixtures/test_fixture.json +++ b/stages/fixtures/test_fixture.json @@ -101,8 +101,10 @@ "model": "stages.corpcontact", "fields": { "corporation": 1, + "title": "Monsieur", "first_name": "Jean", "last_name": "Horner", + "role": "Responsable formation", "tel": "", "email": "" } diff --git a/stages/models.py b/stages/models.py index cde563f..6101aa6 100644 --- a/stages/models.py +++ b/stages/models.py @@ -54,7 +54,7 @@ class Referent(models.Model): class Corporation(models.Model): name = models.CharField(max_length=100, verbose_name='Nom') - street = models.CharField(max_length=100, verbose_name='Rue') + street = models.CharField(max_length=100, blank=True, verbose_name='Rue') pcode = models.CharField(max_length=4, verbose_name='Code postal') city = models.CharField(max_length=40, verbose_name='Localité') tel = models.CharField(max_length=20, blank=True, verbose_name='Téléphone') @@ -69,8 +69,10 @@ class Corporation(models.Model): class CorpContact(models.Model): corporation = models.ForeignKey(Corporation, verbose_name='Institution') - first_name = models.CharField(max_length=40, verbose_name='Prénom') + title = models.CharField(max_length=40, blank=True, verbose_name='Civilité') + first_name = models.CharField(max_length=40, blank=True, verbose_name='Prénom') last_name = models.CharField(max_length=40, verbose_name='Nom') + role = models.CharField(max_length=40, verbose_name='Fonction') tel = models.CharField(max_length=20, blank=True, verbose_name='Téléphone') email = models.CharField(max_length=40, blank=True, verbose_name='Courriel') @@ -134,7 +136,7 @@ class Training(models.Model): """ Stages """ student = models.ForeignKey(Student, verbose_name='Étudiant') availability = models.OneToOneField(Availability, verbose_name='Disponibilité') - referent = models.ForeignKey(Referent, verbose_name='Référent') + referent = models.ForeignKey(Referent, null=True, blank=True, verbose_name='Référent') comment = models.TextField(blank=True, verbose_name='Remarques') class Meta: diff --git a/stages/views.py b/stages/views.py index c18f9cd..e42c687 100644 --- a/stages/views.py +++ b/stages/views.py @@ -76,11 +76,13 @@ def period_availabilities(request, pk): def new_training(request): if request.method != 'POST': return HttpResponseNotAllowed() + ref_key = request.POST.get('referent') try: + ref = Referent.objects.get(pk=ref_key) if ref_key else None training = Training.objects.create( student=Student.objects.get(pk=request.POST.get('student')), availability=Availability.objects.get(pk=request.POST.get('avail')), - referent=Referent.objects.get(pk=request.POST.get('referent')), + referent=ref, ) except Exception as exc: return HttpResponse(str(exc)) diff --git a/templates/attribution.html b/templates/attribution.html index 92ae812..ebf673e 100644 --- a/templates/attribution.html +++ b/templates/attribution.html @@ -23,6 +23,8 @@ input#valid_training { display: none; } div#trainings { clear: both; padding-top: 1em; } + + .missing { font-style: italic; color: red; } {% endblock %} diff --git a/templates/trainings_list.html b/templates/trainings_list.html index 6ef8486..b123511 100644 --- a/templates/trainings_list.html +++ b/templates/trainings_list.html @@ -1,3 +1,5 @@ {% for obj in trainings %} -
  • {{ obj.student }} - {{ obj.availability.corporation }} - {{ obj.availability.domain }}
  • +
  • {{ obj.student }} - {{ obj.availability.corporation }} - {{ obj.availability.domain }} + {% if obj.referent %} (réf: {{ obj.referent }}){% else %}- Pas de référent{% endif %} +
  • {% endfor %}