diff --git a/smash/web/templates/appointments/edit.html b/smash/web/templates/appointments/edit.html index 029dcca76dde7d0688eed472d96c3b2ea6a0a7e9..d87475c2b2e8403a4e619da027ff9c7b53db6ace 100644 --- a/smash/web/templates/appointments/edit.html +++ b/smash/web/templates/appointments/edit.html @@ -89,18 +89,26 @@ </fieldset> {% endif %} <div class="box-footer"> - <div class="col-sm-4"> + <div class="col-sm-3"> <button type="submit" class="btn btn-block btn-success">Save</button> </div> - <div class="col-sm-4"> + <div class="col-sm-3"> <button id="save-and-continue" type="button" class="btn btn-block btn-success">Save and Continue </button> </div> - <div class="col-sm-4"> + <div class="col-sm-3"> <a href="{% url 'web.views.appointments' %}" class="btn btn-block btn-default" onclick="history.back()">Cancel</a> </div> + {% if not appointment.visit %} + {% ifequal appointment.status "SCHEDULED" %} + <div class="col-sm-3"> + <a href="{% url 'web.views.appointment_delete' appointment.id %}" + class="btn btn-block btn-danger">Delete</a> + </div> + {% endifequal %} + {% endif %} </div><!-- /.box-footer --> </form> </div> @@ -111,8 +119,6 @@ {% endblock %} - - {% endblock maincontent %} {% block scripts %} diff --git a/smash/web/tests/view/test_appointments.py b/smash/web/tests/view/test_appointments.py index f3e269fe2e139a33baf831f42e33aebdae427653..239fb666b8b039fe5a5c0bc3783fe65105ec23db 100644 --- a/smash/web/tests/view/test_appointments.py +++ b/smash/web/tests/view/test_appointments.py @@ -150,3 +150,19 @@ class AppointmentsViewTests(LoggedInTestCase): updated_subject = Subject.objects.get(id=subject.id) self.assertIsNotNone(updated_subject.flying_team) + + def test_delete_appointment(self): + appointment = create_appointment() + appointment.visit = None + appointment.save() + + self.client.post(reverse('web.views.appointment_delete', kwargs={'appointment_id': appointment.id})) + + self.assertEqual(0, Appointment.objects.all().count()) + + def test_delete_invalid_appointment_with_visit(self): + appointment = create_appointment() + + self.client.post(reverse('web.views.appointment_delete', kwargs={'appointment_id': appointment.id})) + + self.assertEqual(1, Appointment.objects.all().count()) diff --git a/smash/web/urls.py b/smash/web/urls.py index 984f6ca1e978d64565f016b2baa8e6df94d3d0ec..6376c8d2a6300e3a9beaea96528ec2e919ec5d5d 100644 --- a/smash/web/urls.py +++ b/smash/web/urls.py @@ -45,6 +45,8 @@ urlpatterns = [ url(r'^appointments/add/(?P<visit_id>\d+)$', views.appointment.appointment_add, name='web.views.appointment_add'), url(r'^appointments/add/general$', views.appointment.appointment_add, name='web.views.appointment_add_general'), url(r'^appointments/edit/(?P<id>\d+)$', views.appointment.appointment_edit, name='web.views.appointment_edit'), + url(r'^appointments/delete/(?P<appointment_id>\d+)$', views.appointment.appointment_delete, + name='web.views.appointment_delete'), #################### # VISITS # diff --git a/smash/web/views/appointment.py b/smash/web/views/appointment.py index 9f4c8a129cdfdf4aef5aeef440750f883518ccba..2ec6de2acb48e7232dfe72f5afe13d2d3bf59745 100644 --- a/smash/web/views/appointment.py +++ b/smash/web/views/appointment.py @@ -1,6 +1,7 @@ # coding=utf-8 import logging import re + from django.contrib import messages from django.core.exceptions import ValidationError from django.shortcuts import get_object_or_404, redirect @@ -125,3 +126,14 @@ def appointment_edit(request, id): 'contact_attempts': contact_attempts, 'mail_templates': MailTemplate.get_appointment_mail_templates(languages) }) + + +def appointment_delete(request, appointment_id): + appointment = get_object_or_404(Appointment, id=appointment_id) + if appointment.visit is not None or appointment.status != Appointment.APPOINTMENT_STATUS_SCHEDULED: + messages.error(request, "Appointment cannot be deleted") + return redirect('web.views.appointment_edit', id=appointment_id) + else: + appointment.delete() + messages.success(request, "Appointment deleted successfully") + return redirect('web.views.appointments')