experiENS/monstage/views.py
2015-06-13 23:02:16 +02:00

132 lines
No EOL
5.3 KiB
Python

from django.shortcuts import get_object_or_404, render
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden
from django.core.urlresolvers import reverse
from django import forms
from django.contrib.gis.geos import GEOSGeometry
from monstage.models import *
@login_required
def index(request):
stages = Stage.objects.filter( profil_user = request.user.profil )
return render(request, 'monstage/index.html', {"stages" : stages})
#
# Utilisateurs et profils
#
def profil(request, profil_id):
user = get_object_or_404( User, username = profil_id )
profil = user.profil
stages = Stage.objects.filter( profil_user = profil )
return render(request, 'monstage/profil.html', {'profil': profil, 'stages': stages})
@login_required
def profil_edit(request):
if request.POST:
user = request.user
user.first_name = request.POST['first_name']
user.last_name = request.POST['last_name']
user.save()
return HttpResponseRedirect(reverse('monstage:profil', args=(request.user.username,)))
else:
(profil, _) = Normalien.objects.get_or_create( user = request.user )
return render(request, 'monstage/profil_edit.html', {'normalien': profil})
#
# Stages
#
def stage(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
stage_mod = (stage.profil_user == request.user.profil)
return render(request, 'monstage/stage.html', {'stage': stage, 'modifiable': stage_mod})
class StageForm(forms.ModelForm):
class Meta:
model = Stage
fields = ("type_stage", "start_date", "end_date", "matieres", "sujet", "encadrants")
@login_required
def stage_add(request):
if request.POST:
form = StageForm(request.POST)
if form.is_valid:
new_stage = form.save(commit = False)
new_stage.user = request.user.profil
new_stage.save()
return HttpResponseRedirect(reverse('monstage:stage_edit_lieu', args=(new_stage.id,)))
else:
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
j = str(i)
bullshit = ", ".join([k for k in request.POST])
while request.POST.get('name'+j, False):
lieu = Lieu()
lieu.name = request.POST['name'+j]
lieu.ville = request.POST['ville'+j]
lieu.pays = request.POST['pays'+j]
lieu.coord = GEOSGeometry('POINT(%f %f)' % (float(request.POST['latitude'+j]), float(request.POST['longitude'+j])), srid=4326)
lieu.save()
LieuStage.objects.create(lieu = lieu, stage = stage)
i = i+1
j = str(i)
return HttpResponseRedirect(reverse('monstage:stage_edit_feedback', args=(new_stage.id,)))
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)
if stage.profil_user != request.user.profil:
return HttpResponseForbidden("Ce stage ne vous appartient pas")
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_edit.html', {'stage': stage})
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'monstage/detail.html', {'question': question})