from django.core.exceptions import PermissionDenied from django.http.response import HttpResponseRedirect from django.http import HttpResponse from django.urls import reverse_lazy, reverse, NoReverseMatch from django.views import generic from django.contrib.auth.views import LoginView from django.db.models import Q from django.shortcuts import get_object_or_404 from django.core import serializers from django.conf import settings import simplejson from django.contrib import messages import datetime import pytz import operator from registration.views import RegistrationView from django.views.decorators.csrf import csrf_exempt from RIGS import models, forms from assets import models as asset_models from functools import reduce """ Displays the current rig count along with a few other bits and pieces """ class Index(generic.TemplateView): template_name = 'index.html' def get_context_data(self, **kwargs): context = super(Index, self).get_context_data(**kwargs) context['rig_count'] = models.Event.objects.rig_count() return context class SearchHelp(generic.TemplateView): template_name = 'search_help.html' """ Called from a modal window (e.g. when an item is submitted to an event/invoice). May optionally also include some javascript in a success message to cause a load of the new information onto the page. """ class CloseModal(generic.TemplateView): template_name = 'closemodal.html' def get_context_data(self, **kwargs): return {'messages': messages.get_messages(self.request)} class PersonList(generic.ListView): template_name = 'person_list.html' model = models.Person paginate_by = 20 def get_queryset(self): q = self.request.GET.get('query', "") filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q( phone__startswith=q) | Q(phone__endswith=q) # try and parse an int try: val = int(q) filter = filter | Q(pk=val) except: # noqa # not an integer pass object_list = self.model.objects.filter(filter) orderBy = self.request.GET.get('orderBy', 'name') if orderBy is not None: object_list = object_list.order_by(orderBy) return object_list class PersonDetail(generic.DetailView): template_name = 'person_detail.html' model = models.Person class PersonCreate(generic.CreateView): template_name = 'person_form.html' model = models.Person fields = ['name', 'phone', 'email', 'address', 'notes'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('person_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('person_detail', kwargs={ 'pk': self.object.pk, }) return url class PersonUpdate(generic.UpdateView): template_name = 'person_form.html' model = models.Person fields = ['name', 'phone', 'email', 'address', 'notes'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('person_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('person_detail', kwargs={ 'pk': self.object.pk, }) return url class OrganisationList(generic.ListView): template_name = 'organisation_list.html' model = models.Organisation paginate_by = 20 def get_queryset(self): q = self.request.GET.get('query', "") filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q( phone__startswith=q) | Q(phone__endswith=q) # try and parse an int try: val = int(q) filter = filter | Q(pk=val) except: # noqa # not an integer pass object_list = self.model.objects.filter(filter) orderBy = self.request.GET.get('orderBy', "name") if orderBy is not "": object_list = object_list.order_by(orderBy) return object_list class OrganisationDetail(generic.DetailView): template_name = 'organisation_detail.html' model = models.Organisation class OrganisationCreate(generic.CreateView): template_name = 'organisation_form.html' model = models.Organisation fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('organisation_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('organisation_detail', kwargs={ 'pk': self.object.pk, }) return url class OrganisationUpdate(generic.UpdateView): template_name = 'organisation_form.html' model = models.Organisation fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('organisation_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('organisation_detail', kwargs={ 'pk': self.object.pk, }) return url class VenueList(generic.ListView): template_name = "venue_list.html" model = models.Venue paginate_by = 20 def get_queryset(self): q = self.request.GET.get('query', "") filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q( phone__startswith=q) | Q(phone__endswith=q) # try and parse an int try: val = int(q) filter = filter | Q(pk=val) except: # noqa # not an integer pass object_list = self.model.objects.filter(filter) orderBy = self.request.GET.get('orderBy', "name") if orderBy is not "": object_list = object_list.order_by(orderBy) return object_list class VenueDetail(generic.DetailView): template_name = 'venue_detail.html' model = models.Venue class VenueCreate(generic.CreateView): template_name = 'venue_form.html' model = models.Venue fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('venue_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('venue_detail', kwargs={ 'pk': self.object.pk, }) return url class VenueUpdate(generic.UpdateView): model = models.Venue fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available'] def get_success_url(self): if self.request.is_ajax(): url = reverse_lazy('closemodal') update_url = str(reverse_lazy('venue_update', kwargs={'pk': self.object.pk})) messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object])) messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'") else: url = reverse_lazy('venue_detail', kwargs={ 'pk': self.object.pk, }) return url