diff options
author | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2018-02-13 17:53:56 -0500 |
---|---|---|
committer | Sawyer Bergeron <sbergeron@iol.unh.edu> | 2018-02-19 21:16:25 +0000 |
commit | e5c2305cea0d7359dce6fc04fb23ad032735b1fd (patch) | |
tree | b421a718fbcdfd0ec62cd6b6c988422cb2beb6c3 | |
parent | 2a82d24ab1b57fe0254345997af211bc139c4629 (diff) |
Provide Interface for Booking Deletion
Jira: PHAROS-355
User can now delete their own booking by going to the detail view of their booking
and clicking 'delete'
Change-Id: I279da364c2a5dfd03b877d1236c610d0fef563bc
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
-rw-r--r-- | src/booking/urls.py | 8 | ||||
-rw-r--r-- | src/booking/views.py | 19 | ||||
-rw-r--r-- | src/templates/booking/booking_calendar.html | 3 | ||||
-rw-r--r-- | src/templates/booking/booking_delete.html | 11 | ||||
-rw-r--r-- | src/templates/booking/booking_detail.html | 34 |
5 files changed, 71 insertions, 4 deletions
diff --git a/src/booking/urls.py b/src/booking/urls.py index 403e32f..ed3b1d4 100644 --- a/src/booking/urls.py +++ b/src/booking/urls.py @@ -30,11 +30,17 @@ from booking.views import * urlpatterns = [ url(r'^(?P<resource_id>[0-9]+)/$', BookingFormView.as_view(), name='create'), url(r'^(?P<resource_id>[0-9]+)/edit/(?P<booking_id>[0-9]+)/$', BookingEditFormView.as_view(), name='edit'), + url(r'^(?P<resource_id>[0-9]+)/bookings_json/$', ResourceBookingsJSON.as_view(), name='bookings_json'), url(r'^detail/$', BookingView.as_view(), name='detail_prefix'), url(r'^detail/(?P<booking_id>[0-9]+)/$', BookingView.as_view(), name='detail'), + url(r'^delete/$', BookingDeleteView.as_view(), name='delete_prefix'), + url(r'^delete/(?P<booking_id>[0-9]+)/$', BookingDeleteView.as_view(), name='delete'), + + url(r'^delete/(?P<booking_id>[0-9]+)/confirm/$', bookingDelete, name='delete_booking'), + url(r'^list/$', BookingListView.as_view(), name='list') -] +]
\ No newline at end of file diff --git a/src/booking/views.py b/src/booking/views.py index ab3a04e..7e35af2 100644 --- a/src/booking/views.py +++ b/src/booking/views.py @@ -18,6 +18,7 @@ from django.views import View from django.views.generic import FormView from django.views.generic import TemplateView from jira import JIRAError +from django.shortcuts import redirect from account.jira_util import get_jira from booking.forms import BookingForm, BookingEditForm @@ -163,6 +164,7 @@ class BookingEditFormView(FormView): class BookingView(TemplateView): template_name = "booking/booking_detail.html" + def get_context_data(self, **kwargs): booking = get_object_or_404(Booking, id=self.kwargs['booking_id']) title = 'Booking Details' @@ -170,6 +172,21 @@ class BookingView(TemplateView): context.update({'title': title, 'booking': booking}) return context +class BookingDeleteView(TemplateView): + template_name = "booking/booking_delete.html" + + def get_context_data(self, **kwargs): + booking = get_object_or_404(Booking, id=self.kwargs['booking_id']) + title = 'Delete Booking' + context = super(BookingDeleteView, self).get_context_data(**kwargs) + context.update({'title': title, 'booking': booking}) + return context + +def bookingDelete(request, booking_id): + booking = get_object_or_404(Booking, id=booking_id) + booking.delete() + messages.add_message(request, messages.SUCCESS, 'Booking deleted') + return redirect('../../../../') class BookingListView(TemplateView): template_name = "booking/booking_list.html" @@ -188,4 +205,4 @@ class ResourceBookingsJSON(View): bookings = resource.booking_set.get_queryset().values('id', 'start', 'end', 'purpose', 'jira_issue_status', 'opsys__name', 'installer__name', 'scenario__name') - return JsonResponse({'bookings': list(bookings)}) + return JsonResponse({'bookings': list(bookings)})
\ No newline at end of file diff --git a/src/templates/booking/booking_calendar.html b/src/templates/booking/booking_calendar.html index 52193d5..2e3f970 100644 --- a/src/templates/booking/booking_calendar.html +++ b/src/templates/booking/booking_calendar.html @@ -113,6 +113,7 @@ <script type="text/javascript"> var bookings_url = "{% url 'booking:bookings_json' resource_id=resource.id %}"; var booking_detail_prefix = "{% url 'booking:detail_prefix' %}"; + var booking_delete_prefix = "{% url 'booking:delete_prefix' %}"; var user_timezone = "{{ request.user.userprofile.timezone }}" </script> @@ -123,4 +124,4 @@ <script src={% static "js/fullcalendar-options.js" %}></script> <script src={% static "js/datetimepicker-options.js" %}></script> <script src={% static "js/booking-calendar.js" %}></script> -{% endblock extrajs %} +{% endblock extrajs %}
\ No newline at end of file diff --git a/src/templates/booking/booking_delete.html b/src/templates/booking/booking_delete.html new file mode 100644 index 0000000..76a5634 --- /dev/null +++ b/src/templates/booking/booking_delete.html @@ -0,0 +1,11 @@ +{% load jira_filters %} +{% load bootstrap3 %} + +<p> + Really delete Booking from {{ booking.start}} to {{ booking.end }}? +</p> +<p> + <div id="booking_delete_form_div"> + <a href="{% url 'booking:delete_booking' booking_id=booking.id %}" class="btn btn btn-danger">Delete Booking</a> + </div> +</p>
\ No newline at end of file diff --git a/src/templates/booking/booking_detail.html b/src/templates/booking/booking_detail.html index dd0bf03..c88cd84 100644 --- a/src/templates/booking/booking_detail.html +++ b/src/templates/booking/booking_detail.html @@ -1,5 +1,22 @@ {% load jira_filters %} +<script type="text/javascript"> + function deleteClick(id) { + var booking_delete_url = booking_delete_prefix + id + $.ajax({ + url: booking_delete_url, + type: 'get', + success: function (data) { + $('#booking_delete_content').html(data); + }, + failure: function (data) { + alert('Error finding that booking'); + } + }); + $('#booking_delete_modal').modal('show'); + } +</script> + <p> <b>Resource: </b> <a href="{{ booking.resource.url }}"> @@ -33,6 +50,21 @@ <a href="{% url 'booking:edit' booking_id=booking.id resource_id=booking.resource.id %}" class="btn btn btn-success"> Edit Booking </a> + <a href="javascript:deleteClick({{ booking.id }})" class="btn btn btn-danger"> + Delete Booking + </a> + <div id="booking_delete_modal" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title">Delete Booking</h4> + </div> + <div class="modal-body" id="booking_delete_content"> + </div> + </div> + </div> + </div> </p> {% endif %} -{% endif %} +{% endif %}
\ No newline at end of file |