]> git.parisson.com Git - teleforma.git/commitdiff
dev
authorYoan Le Clanche <yoan@ellington.pilotsystems.net>
Tue, 18 Sep 2018 16:00:14 +0000 (18:00 +0200)
committerYoan Le Clanche <yoan@ellington.pilotsystems.net>
Tue, 18 Sep 2018 16:00:14 +0000 (18:00 +0200)
teleforma/models/appointment.py
teleforma/templates/teleforma/appointments.html
teleforma/urls.py
teleforma/views/appointment.py

index d770b50429d03b96387eb12ac9de250843c593da..447a2eb712b93d7f2696628af5c62e75465788f8 100644 (file)
@@ -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):
index 13322712bd00574747192029c810124fa700fd8d..c42b6421be8ac66afc28149f312cafa165312d9b 100644 (file)
                     }
                 }
             });
+            $("#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;
                 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');
                 }
             });
         })
 
 {% block content %}
 
-    <div id="booking-confirm" title="Confirmez votre réservation">
+    {% if messages %}
+        <ul class="messages">
+            {% for message in messages %}
+                <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
+            {% endfor %}
+        </ul>
+    {% endif %}
+
+
+
+    <div id="booking-confirm" title="Réservation">
         <p>
             Êtes-vous sûr de vouloir réserver ce créneau ?
         </p>
         Epreuve : <strong id="start_placeholder"></strong> - <strong id="end_placeholder"></strong>
         <br/>
         Vous devrez arrivez à <strong id="arrival_placeholder"></strong>
-
-
     </div>
 
-
+    <div id="cancel-confirm" title="Annulation">
+        <p>
+            Êtes-vous sûr de vouloir annuler votre rendez-vous ?
+        </p>
+    </div>
 
     {% for ap_period in ap_periods %}
 
-        {% if ap_period.appointments %}
-            Rendez-vous pour la 1ère période : {{ ap_period.appointments }}
+        <h2>{{ ap_period.name }}</h2>
+
+        {% if ap_period.appointment %}
+            <p>
+                Vous avez réservé pour cette période le {{ ap_period.appointment.real_date|date:'d/m/Y' }}.
+                <br/>
+                <strong>{{ ap_period.appointment.jury.name }}</strong>
+                <br/>
+                {{ ap_period.appointment.jury.address|linebreaks }}
+                Heure d'arrivé : {{ ap_period.appointment.arrival|date:'H:i' }}
+                <br/>
+                Heure de début : {{ ap_period.appointment.start|date:'H:i' }}
+                <br/>
+                Heure de fin : {{ ap_period.appointment.end|date:'H:i' }}
+                <br/>
+            </p>
+            <form class="cancel_form" action="{% url teleforma-appointment-cancel %}" method="POST">
+                {% csrf_token %}
+                <input type="hidden" name="period_id" value="{{ period_id }}"/>
+                <input type="hidden" name="appointment_id" value="{{ ap_period.appointment.id }}"/>
+                <button type="submit">Annuler</button>
+            </form>
         {% endif %}
 
-        {% if not ap_period.appointments %}
+        {% if not ap_period.appointment %}
 
-            <p>Vous n'avez pas encore pris de rendez-vous pour la seconde période</p>
+            <p>Vous n'avez pas encore pris de rendez-vous pour cette période</p>
 
             <div class="select-day">
-{#                <a class="previous_day">Précédent</a>#}
+                <a class="previous_day">Précédent</a>
                 <select name="day-to-show">
                     {% for day in ap_period.days %}
                         <option value="{{ day.id }}">{{ day }}</option>
                     {% endfor %}
                 </select>
-{#                <a class="next_day">Suivant</a>#}
+                <a class="next_day">Suivant</a>
             </div>
 
             {% for day in ap_period.days.all %}
index 3912480c6e69f5d6f9d7f8e94bcb34bbc908d809..de2e59012edc0d462f5f64c3b352dd3754f29abf 100644 (file)
@@ -106,6 +106,8 @@ urlpatterns = patterns('',
     # APPOINTMENTS
     url(r'^desk/periods/(?P<period_id>.*)/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')),
index 184584e795922ecc5d15053e48b8097dea53534c..fbfbddb6cae440a6df3e400b072810b993b89db8 100644 (file)
@@ -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)
+