############################################################################## # Copyright (c) 2016 Max Breitenfeldt and others. # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## from django.contrib import messages from django.shortcuts import get_object_or_404 from django.http import JsonResponse from django.urls import reverse from django.utils import timezone from django.views import View from django.views.generic import FormView from django.views.generic import TemplateView from django.shortcuts import redirect, render import json from resource_inventory.models import ResourceBundle from resource_inventory.resource_manager import ResourceManager from booking.models import Booking, Installer, Opsys from booking.stats import StatisticsManager def drop_filter(context): installer_filter = {} for os in Opsys.objects.all(): installer_filter[os.id] = [] for installer in os.sup_installers.all(): installer_filter[os.id].append(installer.id) scenario_filter = {} for installer in Installer.objects.all(): scenario_filter[installer.id] = [] for scenario in installer.sup_scenarios.all(): scenario_filter[installer.id].append(scenario.id) context.update({'installer_filter': json.dumps(installer_filter), 'scenario_filter': json.dumps(scenario_filter)}) 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' context = super(BookingView, self).get_context_data(**kwargs) 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" def get_context_data(self, **kwargs): bookings = Booking.objects.filter(end__gte=timezone.now()) title = 'Search Booking' context = super(BookingListView, self).get_context_data(**kwargs) context.update({'title': title, 'bookings': bookings}) return context class ResourceBookingsJSON(View): def get(self, request, *args, **kwargs): resource = get_object_or_404(ResourceBundle, id=self.kwargs['resource_id']) bookings = resource.booking_set.get_queryset().values( 'id', 'start', 'end', 'purpose', 'jira_issue_status', 'config_bundle__name' ) return JsonResponse({'bookings': list(bookings)}) def booking_detail_view(request, booking_id): user = None if request.user.is_authenticated: user = request.user else: return render(request, "dashboard/login.html", {'title': 'Authentication Required'}) booking = get_object_or_404(Booking, id=booking_id) allowed_users = set(list(booking.collaborators.all())) allowed_users.add(booking.owner) if user not in allowed_users: return render(request, "dashboard/login.html", {'title': 'This page is private'}) return render(request, "booking/booking_detail.html", { 'title': 'Booking Details', 'booking': booking, 'pdf': ResourceManager().makePDF(booking.resource), 'user_id': user.id}) def booking_stats_view(request): return render( request, "booking/stats.html", context={ "data": StatisticsManager.getContinuousBookingTimeSeries(), "title": "Booking Statistics" } ) def booking_stats_json(request): try: span = int(request.GET.get("days", 14)) except: span = 14 return JsonResponse(StatisticsManager.getContinuousBookingTimeSeries(span), safe=False)