From eaf2537048d5a8a5b1270ce38b40d996759a3d25 Mon Sep 17 00:00:00 2001
From: champeno <champeno@clipper.ens.fr>
Date: Sat, 13 Jun 2015 23:02:16 +0200
Subject: [PATCH] Ajout des avis sur les stages

---
 monstage/templates/monstage/stage.html        |  1 +
 monstage/templates/monstage/stage_edit.html   | 10 ++++
 .../templates/monstage/stage_edit_desc.html   | 12 +++++
 .../monstage/stage_edit_feedback.html         | 23 ++++++++
 .../templates/monstage/stage_edit_lieu.html   |  2 +-
 monstage/urls.py                              |  1 +
 monstage/views.py                             | 53 ++++++++++++++-----
 7 files changed, 89 insertions(+), 13 deletions(-)
 create mode 100644 monstage/templates/monstage/stage_edit.html
 create mode 100644 monstage/templates/monstage/stage_edit_desc.html
 create mode 100644 monstage/templates/monstage/stage_edit_feedback.html

diff --git a/monstage/templates/monstage/stage.html b/monstage/templates/monstage/stage.html
index 56dba48..d9b5e6f 100644
--- a/monstage/templates/monstage/stage.html
+++ b/monstage/templates/monstage/stage.html
@@ -3,6 +3,7 @@
 {% block content %}
   <h1>{{ stage.sujet }}</h1>
   <p><a href="{% url 'monstage:index' %}">Retour</a></p>
+  {% if modifiable %}<p><a href="{% url 'monstage:stage_edit' stage.id %}">Modifier</a></p>{% endif %}
   <p>Stage de <a href="{% url 'monstage:profil' stage.profil_user.user.username %}">{{ stage.profil_user.user.first_name }} {{ stage.profil_user.user.last_name }}</a></p>
   <p>Du {{ stage.start_date }} au {{ stage.end_date }}</p>
 {% endblock %}
diff --git a/monstage/templates/monstage/stage_edit.html b/monstage/templates/monstage/stage_edit.html
new file mode 100644
index 0000000..21f5a13
--- /dev/null
+++ b/monstage/templates/monstage/stage_edit.html
@@ -0,0 +1,10 @@
+{% extends "skeleton.html" %}
+
+{% block content %}
+  <h1>Editer le stage {{ stage.sujet }}</h1>
+  <p><a href="{% url 'monstage:stage' stage.id %}">Retour</a></p>
+  <p><a href="{% url 'monstage:stage_edit_desc' stage.id %}">Modifier la description du stage (sujet, ...)</a></p>
+  <p><a href="{% url 'monstage:stage_edit_lieu' stage.id %}">Modifier les lieux du stage</a></p>
+  <p><a href="{% url 'monstage:stage_edit_feedback' stage.id %}">Modifier son avis sur le stage</a></p>
+{% endblock %}
+
diff --git a/monstage/templates/monstage/stage_edit_desc.html b/monstage/templates/monstage/stage_edit_desc.html
new file mode 100644
index 0000000..06e00f6
--- /dev/null
+++ b/monstage/templates/monstage/stage_edit_desc.html
@@ -0,0 +1,12 @@
+{% extends "skeleton.html" %}
+
+{% block content %}
+  <h1>Modifier la description du stage "{{ stage.sujet }}"</h1>
+  <p><a href="{% url 'monstage:stage_edit' stage.id %}">Retour</a></p>
+  <form action="{% url 'monstage:stage_edit_desc' stage.id %}" method="post">
+  {% csrf_token %}
+  {{ form.as_p }}
+  <input type="submit" value="Enregistrer" />
+  </form>
+{% endblock %}
+
diff --git a/monstage/templates/monstage/stage_edit_feedback.html b/monstage/templates/monstage/stage_edit_feedback.html
new file mode 100644
index 0000000..781b252
--- /dev/null
+++ b/monstage/templates/monstage/stage_edit_feedback.html
@@ -0,0 +1,23 @@
+{% extends "skeleton.html" %}
+{% load staticfiles %}
+
+{% block content %}
+  <h1>Avis sur le stage "{{ stage.sujet }}"</h1>
+  <p><a href="{% url 'monstage:stage_edit' stage.id %}">Retour</a></p>
+  <p>{{ debug }}</p>
+  <form action="{% url 'monstage:stage_edit_feedback' stage.id %}" method="post">
+  {% csrf_token %}
+  <div class="avis_gen">
+    <h2>Le déroulement du stage</h2>
+    {{ form_gen.as_p }}
+  </div>
+  {% for obj in forms_lieux %}
+  <div class="avis_lieux">
+    <h2>Avis sur le lieu "{{ obj.1.name }}"</h2>
+    {{ obj.0.as_p }}
+  </div>
+  {% endfor %}
+  <input type="submit" value="Enregistrer" />
+  </form>
+{% endblock %}
+
diff --git a/monstage/templates/monstage/stage_edit_lieu.html b/monstage/templates/monstage/stage_edit_lieu.html
index 1c0fd61..0b5213b 100644
--- a/monstage/templates/monstage/stage_edit_lieu.html
+++ b/monstage/templates/monstage/stage_edit_lieu.html
@@ -15,7 +15,7 @@
 
 {% block content %}
   <h1>Lieux du stage "{{ stage.sujet }}"</h1>
-  <p><a href="{% url 'monstage:index' %}">Retour</a></p>
+  <p><a href="{% url 'monstage:stage_edit' stage.id %}">Retour</a></p>
   <p>{{ debug }}</p>
   <div id="map_canvas"></div>
   <input id="geocomplete" type="text" placeholder="Chercher un établissement" />
diff --git a/monstage/urls.py b/monstage/urls.py
index 9b9b326..dd77010 100644
--- a/monstage/urls.py
+++ b/monstage/urls.py
@@ -9,6 +9,7 @@ urlpatterns = patterns('',
     url(r'^stage/(?P<stage_id>\d+)/$', views.stage, name='stage'),
     url(r'^stage/new/$', views.stage_add, name='stage_add'),
     url(r'^stage/(?P<stage_id>\d+)/edit/$', views.stage_edit, name='stage_edit'),
+    url(r'^stage/(?P<stage_id>\d+)/edit/description/$', views.stage_edit_desc, name='stage_edit_desc'),
     url(r'^stage/(?P<stage_id>\d+)/edit/lieu/$', views.stage_edit_lieu, name='stage_edit_lieu'),
     url(r'^stage/(?P<stage_id>\d+)/edit/avis/$', views.stage_edit_feedback, name='stage_edit_feedback'),
 )
\ No newline at end of file
diff --git a/monstage/views.py b/monstage/views.py
index ee91e64..5fcc359 100644
--- a/monstage/views.py
+++ b/monstage/views.py
@@ -40,12 +40,10 @@ def profil_edit(request):
 
 def stage(request, stage_id):
     stage = get_object_or_404( Stage, pk = stage_id)
-    return render(request, 'monstage/stage.html', {'stage': stage})
+    stage_mod = (stage.profil_user == request.user.profil)
+    return render(request, 'monstage/stage.html', {'stage': stage, 'modifiable': stage_mod})
 
 class StageForm(forms.ModelForm):
-    def __init__(self, *args, **kw):
-        super(StageForm, self).__init__(*args, **kw)
-
     class Meta:
         model = Stage
         fields = ("type_stage", "start_date", "end_date", "matieres", "sujet", "encadrants")
@@ -63,8 +61,19 @@ def stage_add(request):
         form = StageForm()
     return render(request, 'monstage/stage_add.html', { 'form': form })
 
+def stage_edit_desc(request, stage_id):
+    stage = get_object_or_404( Stage, pk = stage_id)
+    if stage.profil_user != request.user.profil:
+        return HttpResponseForbidden("Ce stage ne vous appartient pas")
+    bullshit = ""
+    if request.POST:
+        pass
+    return render(request, 'monstage/stage_edit_desc.html', { 'stage': stage, 'debug':bullshit })
+
 def stage_edit_lieu(request, stage_id):
     stage = get_object_or_404( Stage, pk = stage_id)
+    if stage.profil_user != request.user.profil:
+        return HttpResponseForbidden("Ce stage ne vous appartient pas")
     bullshit = ""
     if request.POST:
         i = 0
@@ -81,22 +90,42 @@ def stage_edit_lieu(request, stage_id):
             i = i+1
             j = str(i)
         return HttpResponseRedirect(reverse('monstage:stage_edit_feedback', args=(new_stage.id,)))
-    if stage.profil_user != request.user.profil:
-        return HttpResponseForbidden("Ce stage ne vous appartient pas")
     return render(request, 'monstage/stage_edit_lieu.html', { 'stage': stage, 'debug':bullshit })
-    
+
+class StageFeedbackForm(forms.ModelForm):
+    class Meta:
+        model = Stage
+        fields = ("avis_encadrants", "avis_equipe", "avis_stage", "avis_admin")
+
+class LieuStageFeedbackForm(forms.ModelForm):
+    class Meta:
+        model = LieuStage
+        fields = ("avis_global", "avis_lieudevie", "avis_lieustage", "avis_pratique", "avis_visite", "avis_anecdotes")
+
 def stage_edit_feedback(request, stage_id):
     stage = get_object_or_404( Stage, pk = stage_id)
-    bullshit = ""
-    if request.POST:
-        pass
     if stage.profil_user != request.user.profil:
         return HttpResponseForbidden("Ce stage ne vous appartient pas")
-    return render(request, 'monstage/stage_edit_feedback.html', { 'stage': stage, 'debug':bullshit })
+    if request.POST:
+        form_gen = StageFeedbackForm(request.POST, instance = stage, prefix = 'gen')
+        forms_lieux = [(LieuStageFeedbackForm(request.POST, instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
+        valid = form_gen.is_valid()
+        for (form, _) in forms_lieux:
+            if not form.is_valid():
+                valid = False
+        if valid:
+            form_gen.save()
+            for (form, _) in forms_lieux:
+                form.save()
+            return HttpResponseRedirect(reverse('monstage:stage', args=(stage.id,)))
+    else:
+        form_gen = StageFeedbackForm(instance = stage, prefix = 'gen')
+        forms_lieux = [(LieuStageFeedbackForm(instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
+    return render(request, 'monstage/stage_edit_feedback.html', { 'stage': stage, 'form_gen':form_gen, 'forms_lieux':forms_lieux })
 
 def stage_edit(request, stage_id):
     stage = get_object_or_404( Stage, pk = stage_id)
-    return render(request, 'monstage/stage.html', {'stage': stage})    
+    return render(request, 'monstage/stage_edit.html', {'stage': stage})    
 
 def detail(request, question_id):
     question = get_object_or_404(Question, pk=question_id)