From 6abfe6487a9921e317f78788bf762fbafebdc7b9 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 13 Nov 2012 15:02:03 +0100 Subject: [PATCH] Implement stage deletion from attribution interface --- common/urls.py | 1 + stages/views.py | 11 ++++++++--- templates/attribution.html | 24 +++++++++++++++++++----- templates/trainings_list.html | 3 ++- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/common/urls.py b/common/urls.py index 10c8505..6d839d5 100644 --- a/common/urls.py +++ b/common/urls.py @@ -26,6 +26,7 @@ urlpatterns = patterns('', url(r'^period/(?P\d+)/corporations/', 'stages.views.period_availabilities'), # Training params in POST: url(r'^training/new/', 'stages.views.new_training', name="new_training"), + url(r'^training/del/', 'stages.views.del_training', name="del_training"), url(r'^training/by_period/(?P\d+)/', views.TrainingsByPeriodView.as_view()), url(r'^student/(?P\d+)/summary/', views.StudentSummaryView.as_view()), diff --git a/stages/views.py b/stages/views.py index 263a1c3..01bd92f 100644 --- a/stages/views.py +++ b/stages/views.py @@ -5,7 +5,6 @@ import json from django.http import HttpResponse, HttpResponseNotAllowed from django.shortcuts import get_object_or_404 -from django.views.decorators.csrf import csrf_exempt from django.views.generic import DetailView, TemplateView, ListView from .forms import PeriodForm @@ -27,7 +26,7 @@ class TrainingsByPeriodView(ListView): context_object_name = 'trainings' def get_queryset(self): - return Training.objects.select_related('student', 'availability__corporation', 'availability__domain' + return Training.objects.select_related('student__klass', 'availability__corporation', 'availability__domain' ).filter(availability__period__pk=self.kwargs['pk']) @@ -78,7 +77,6 @@ def period_availabilities(request, pk): for av in period.availability_set.select_related('corporation').all()] return HttpResponse(json.dumps(corps), content_type="application/json") -@csrf_exempt def new_training(request): if request.method != 'POST': return HttpResponseNotAllowed() @@ -94,6 +92,13 @@ def new_training(request): return HttpResponse(str(exc)) return HttpResponse('OK') +def del_training(request): + if request.method != 'POST': + return HttpResponseNotAllowed() + training = get_object_or_404(Training, pk=request.POST.get('pk')) + training.delete() + return HttpResponse('OK') + def stages_export(request): from datetime import date diff --git a/templates/attribution.html b/templates/attribution.html index fb33dc8..0072161 100644 --- a/templates/attribution.html +++ b/templates/attribution.html @@ -94,7 +94,20 @@ function update_corporations(period_id) { function update_trainings(period_id) { if (period_id == '') $('ul#training_list').html(''); - else $('ul#training_list').load('/training/by_period/' + period_id + '/'); + else $('ul#training_list').load('/training/by_period/' + period_id + '/', function() { + $('img.delete_training').click(function() { + if (!confirm("Voulez-vous vraiment supprimer ce stage ?")) return; + var li = $(this).parents('li'); + $.post('/training/del/', + {pk: li.attr('id').split('_')[1], + csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val()}, function() { + li.remove(); + // dispatch student and corp in their listings + update_students($('#period_select').val()); + update_corporations($('#period_select').val()); + }); + }); + }); } $(document).ready(function() { @@ -140,15 +153,15 @@ $(document).ready(function() { $('#valid_training').click(function() { $.post('/training/new/', { student: current_student, avail: current_avail, - referent: $('#referent_select').val()}, + referent: $('#referent_select').val(), + csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val()}, function(data) { if (data != 'OK') { alert(data); return; } // Clear selected student/corp - $('ul#training_list').append('
  • ' + $('option:selected', '#student_select').html() + ' - ' + $('option:selected', '#corp_select').html() + '
  • '); - $('option:selected', '#student_select').remove(); + $('option:selected', '#student_select').remove(); $('#student_detail').html('').removeClass("filled"); $('option:selected', '#corp_select').remove(); $('#corp_detail').html('').removeClass("filled"); @@ -156,6 +169,7 @@ $(document).ready(function() { current_avail = null; $('input#valid_training').hide(); $('#referent_select').val(''); + update_trainings($('#period_select').val()); } ); }); @@ -206,7 +220,7 @@ var current_avail = null;
    -
    + {% csrf_token %}
    diff --git a/templates/trainings_list.html b/templates/trainings_list.html index b123511..327dd92 100644 --- a/templates/trainings_list.html +++ b/templates/trainings_list.html @@ -1,5 +1,6 @@ {% for obj in trainings %} -
  • {{ obj.student }} - {{ obj.availability.corporation }} - {{ obj.availability.domain }} +
  • {{ obj.student }} ({{ obj.student.klass }}) - {{ obj.availability.corporation }} - {{ obj.availability.domain }} {% if obj.referent %} (réf: {{ obj.referent }}){% else %}- Pas de référent{% endif %} +
  • {% endfor %}