From 27ba5788460741029f20a1bf47e9b26916ddb535 Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Tue, 18 Sep 2018 18:00:14 +0200 Subject: [PATCH] dev --- teleforma/models/appointment.py | 26 +++++- .../templates/teleforma/appointments.html | 90 +++++++++++++++---- teleforma/urls.py | 2 + teleforma/views/appointment.py | 31 +++++-- 4 files changed, 121 insertions(+), 28 deletions(-) diff --git a/teleforma/models/appointment.py b/teleforma/models/appointment.py index d770b504..447a2eb7 100644 --- a/teleforma/models/appointment.py +++ b/teleforma/models/appointment.py @@ -196,15 +196,33 @@ class Appointment(Model): return self.slot.day @property - def real_time(self): + def start(self): start = self.slot.start delta = self.slot_nb * self.period.appointment_slot_size - dt = datetime.datetime.combine(date.today(), start) + datetime.timedelta(minutes = delta) - return datetime.time(dt.hour,dt.minute,0) + dt = datetime.datetime.combine(date.today(), start) + datetime.timedelta(minutes=delta) + return datetime.time(dt.hour, dt.minute, 0) + + @property + def end(self): + dt = datetime.datetime.combine(date.today(), self.start) + datetime.timedelta(minutes=self.period.appointment_slot_size) + return datetime.time(dt.hour, dt.minute, 0) + + @property + def arrival(self): + dt = datetime.datetime.combine(date.today(), self.start) - datetime.timedelta(minutes=60) + return datetime.time(dt.hour, dt.minute, 0) + + + # @property + # def real_time(self): + # start = self.slot.start + # delta = self.slot_nb * self.period.appointment_slot_size + # dt = datetime.datetime.combine(date.today(), start) + datetime.timedelta(minutes = delta) + # return datetime.time(dt.hour,dt.minute,0) @property def real_date(self): - return datetime.datetime.combine(self.day.date, self.real_time) + return datetime.datetime.combine(self.day.date, self.start) @property def real_date_human(self): diff --git a/teleforma/templates/teleforma/appointments.html b/teleforma/templates/teleforma/appointments.html index 13322712..c42b6421 100644 --- a/teleforma/templates/teleforma/appointments.html +++ b/teleforma/templates/teleforma/appointments.html @@ -32,6 +32,19 @@ } } }); + $("#cancel-confirm").dialog({ + autoOpen: false, + resizable: false, + modal: true, + buttons: { + 'Confirmer': function () { + currentForm.submit(); + }, + "Annuler": function () { + $(this).dialog('close'); + } + } + }); $('.booking_form').submit(function () { currentForm = this; @@ -54,25 +67,32 @@ return false; }); + $('.cancel_form').submit(function () { + currentForm = this; + $('#cancel-confirm').dialog('open'); + return false; + }); + $('[name="day-to-show"]').bind('change', updateDisplayedDays); updateDisplayedDays(); - $('.previous_day').click(function() { + $('.previous_day').click(function () { var $select = $(this).parent().find('select'); - if($select.find('option:selected').prev().size()) { - var $selected = $select.find('option:selected'); + if ($select.find('option:selected').prev().size()) { + var selected = $select.val(); $select.find('option').removeAttr('selected'); - $selected.prev().attr('selected', 'selected'); + $select.find('option[value="' + selected + '"]').prev().attr('selected', 'selected'); + $select.trigger('change'); } }); - $('.next_day').click(function() { + $('.next_day').click(function () { var $select = $(this).parent().find('select'); - if($select.find('option:selected').next().size()) { - var $selected = $select.find('option:selected'); + if ($select.find('option:selected').next().size()) { + var selected = $select.val(); $select.find('option').removeAttr('selected'); - console.log($selected) - $selected.next().attr('selected', 'selected'); + $select.find('option[value="' + selected + '"]').next().attr('selected', 'selected'); + $select.trigger('change'); } }); }) @@ -83,7 +103,17 @@ {% block content %} -
+ {% if messages %} + + {% endif %} + + + +

Êtes-vous sûr de vouloir réserver ce créneau ?

@@ -98,30 +128,52 @@ Epreuve : -
Vous devrez arrivez à - -
- +
+

+ Êtes-vous sûr de vouloir annuler votre rendez-vous ? +

+
{% for ap_period in ap_periods %} - {% if ap_period.appointments %} - Rendez-vous pour la 1ère période : {{ ap_period.appointments }} +

{{ ap_period.name }}

+ + {% if ap_period.appointment %} +

+ Vous avez réservé pour cette période le {{ ap_period.appointment.real_date|date:'d/m/Y' }}. +
+ {{ ap_period.appointment.jury.name }} +
+ {{ ap_period.appointment.jury.address|linebreaks }} + Heure d'arrivé : {{ ap_period.appointment.arrival|date:'H:i' }} +
+ Heure de début : {{ ap_period.appointment.start|date:'H:i' }} +
+ Heure de fin : {{ ap_period.appointment.end|date:'H:i' }} +
+

+
+ {% csrf_token %} + + + +
{% endif %} - {% if not ap_period.appointments %} + {% if not ap_period.appointment %} -

Vous n'avez pas encore pris de rendez-vous pour la seconde période

+

Vous n'avez pas encore pris de rendez-vous pour cette période

-{# Précédent#} + Précédent -{# Suivant#} + Suivant
{% for day in ap_period.days.all %} diff --git a/teleforma/urls.py b/teleforma/urls.py index 3912480c..de2e5901 100644 --- a/teleforma/urls.py +++ b/teleforma/urls.py @@ -106,6 +106,8 @@ urlpatterns = patterns('', # APPOINTMENTS url(r'^desk/periods/(?P.*)/appointments/$', Appointments.as_view(), name="teleforma-appointments"), + url(r'^desk/periods/appointments/cancel$', cancel_appointment, + name="teleforma-appointment-cancel"), # Postman url(r'^messages/', include('postman.urls')), diff --git a/teleforma/views/appointment.py b/teleforma/views/appointment.py index 184584e7..fbfbddb6 100644 --- a/teleforma/views/appointment.py +++ b/teleforma/views/appointment.py @@ -1,5 +1,9 @@ +# -*- coding: utf-8 -*- + from django.views.generic import View -from django.shortcuts import render +from django.shortcuts import render, redirect +from django.contrib import messages +from django.http import HttpResponse from teleforma.models.appointment import AppointmentPeriod, Appointment @@ -12,15 +16,14 @@ class Appointments(View): for ap_period in AppointmentPeriod.objects.filter(period=period_id).order_by('id'): ap_periods.append({ 'days':ap_period.days.all(), - 'appointments':ap_period.get_appointment(request.user) + 'name': ap_period.name, + 'appointment':ap_period.get_appointment(request.user) }) # for ap_period in ap_periods: # appointments[ap_period.id] = ap_period.get_appointments(request.user) - return render(request, self.template_name, {'ap_periods': ap_periods}) + return render(request, self.template_name, {'ap_periods': ap_periods, 'period_id':period_id}) def post(self, request, period_id): - - slot_nb = int(request.POST.get('slot_nb')) slot_id = int(request.POST.get('slot')) jury_id = int(request.POST.get('jury')) @@ -34,8 +37,26 @@ class Appointments(View): ap.day_id = day_id ap.student = request.user ap.save() + messages.add_message(request, messages.INFO, "Votre réservation a bien été prise en compte.") return self.render(request, period_id) def get(self, request, period_id): return self.render(request, period_id) + + +def cancel_appointment(request): + period_id = request.POST['period_id'] + appointment_id = request.POST['appointment_id'] + try: + app = Appointment.objects.get(id=appointment_id) + except Appointment.DoesNotExist: + pass + + if app.student != request.user: + return HttpResponse('Unauthorized', status=401) + + app.delete() + messages.add_message(request, messages.INFO, 'Votre réservation a été annulé.') + return redirect('teleforma-appointments', period_id=period_id) + -- 2.39.5