Merged branch master into search

This commit is contained in:
2020-01-26 14:08:55 +00:00
220 changed files with 8937 additions and 2300 deletions

View File

@@ -1,7 +1,7 @@
from django.core.exceptions import PermissionDenied
from django.http.response import HttpResponseRedirect
from django.http import HttpResponse
from django.core.urlresolvers import reverse_lazy, reverse, NoReverseMatch
from django.urls import reverse_lazy, reverse, NoReverseMatch
from django.views import generic
from django.db.models import Q
from django.shortcuts import get_object_or_404
@@ -9,15 +9,22 @@ from django.core import serializers
from django.conf import settings
import simplejson
from django.contrib import messages
import datetime, pytz
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 = 'RIGS/index.html'
@@ -26,23 +33,50 @@ class Index(generic.TemplateView):
context['rig_count'] = models.Event.objects.rig_count()
return context
def login(request, **kwargs):
if request.user.is_authenticated():
next = request.REQUEST.get('next', '/')
return HttpResponseRedirect(request.REQUEST.get('next', '/'))
if request.user.is_authenticated:
next = request.GET.get('next', '/')
return HttpResponseRedirect(next)
else:
from django.contrib.auth.views import login
return login(request)
class SearchHelp(generic.TemplateView):
template_name = 'RIGS/search_help.html'
# This view should be exempt from requiring CSRF token.
# Then we can check for it and show a nice error
# Don't worry, django.contrib.auth.views.login will
# check for it before logging the user in
@csrf_exempt
def login_embed(request, **kwargs):
if request.user.is_authenticated:
next = request.GET.get('next', '/')
return HttpResponseRedirect(next)
else:
from django.contrib.auth.views import login
if request.method == "POST":
csrf_cookie = request.COOKIES.get('csrftoken', None)
if csrf_cookie is None:
messages.warning(request, 'Cookies do not seem to be enabled. Try logging in using a new tab.')
request.method = 'GET' # Render the page without trying to login
return login(request, template_name="registration/login_embed.html", authentication_form=forms.EmbeddedAuthenticationForm)
"""
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'
@@ -66,9 +100,9 @@ class PersonList(generic.ListView):
except:
#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)
@@ -81,16 +115,16 @@ class PersonDetail(generic.DetailView):
class PersonCreate(generic.CreateView):
model = models.Person
fields = ['name','phone','email','address','notes']
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+"'")
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={
url = reverse_lazy('person_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -98,16 +132,16 @@ class PersonCreate(generic.CreateView):
class PersonUpdate(generic.UpdateView):
model = models.Person
fields = ['name','phone','email','address','notes']
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+"'")
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={
url = reverse_lazy('person_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -119,7 +153,7 @@ class OrganisationList(generic.ListView):
def get_queryset(self):
q = self.request.GET.get('q', "")
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
@@ -129,7 +163,7 @@ class OrganisationList(generic.ListView):
except:
#not an integer
pass
object_list = self.model.objects.filter(filter)
orderBy = self.request.GET.get('orderBy', "name")
@@ -144,16 +178,16 @@ class OrganisationDetail(generic.DetailView):
class OrganisationCreate(generic.CreateView):
model = models.Organisation
fields = ['name','phone','email','address','notes','union_account']
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+"'")
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={
url = reverse_lazy('organisation_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -161,16 +195,16 @@ class OrganisationCreate(generic.CreateView):
class OrganisationUpdate(generic.UpdateView):
model = models.Organisation
fields = ['name','phone','email','address','notes','union_account']
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+"'")
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={
url = reverse_lazy('organisation_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -182,7 +216,7 @@ class VenueList(generic.ListView):
def get_queryset(self):
q = self.request.GET.get('q', "")
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
@@ -192,7 +226,7 @@ class VenueList(generic.ListView):
except:
#not an integer
pass
object_list = self.model.objects.filter(filter)
orderBy = self.request.GET.get('orderBy', "name")
@@ -207,16 +241,16 @@ class VenueDetail(generic.DetailView):
class VenueCreate(generic.CreateView):
model = models.Venue
fields = ['name','phone','email','address','notes','three_phase_available']
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+"'")
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={
url = reverse_lazy('venue_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -224,16 +258,16 @@ class VenueCreate(generic.CreateView):
class VenueUpdate(generic.UpdateView):
model = models.Venue
fields = ['name','phone','email','address','notes','three_phase_available']
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+"'")
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={
url = reverse_lazy('venue_detail', kwargs={
'pk': self.object.pk,
})
return url
@@ -246,6 +280,7 @@ class SecureAPIRequest(generic.View):
'organisation': models.Organisation,
'profile': models.Profile,
'event': models.Event,
'supplier': asset_models.Supplier
}
perms = {
@@ -254,6 +289,7 @@ class SecureAPIRequest(generic.View):
'organisation': 'RIGS.view_organisation',
'profile': 'RIGS.view_profile',
'event': None,
'supplier': None
}
'''
@@ -291,9 +327,9 @@ class SecureAPIRequest(generic.View):
# Supply data for autocomplete ajax request in json form
term = request.GET.get('term', None)
if term:
if fields is None: # Default to just name
if fields is None: # Default to just name
fields = ['name']
# Build a list of Q objects for use later
queries = []
for part in term.split(" "):
@@ -303,7 +339,6 @@ class SecureAPIRequest(generic.View):
qs.append(q)
queries.append(reduce(operator.or_, qs))
# Build the data response list
results = []
query = reduce(operator.and_, queries)
@@ -314,7 +349,7 @@ class SecureAPIRequest(generic.View):
'value': o.pk,
'label': o.name,
}
try: # See if there is a valid update URL
try: # See if there is a valid update URL
data['update'] = reverse("%s_update" % model, kwargs={'pk': o.pk})
except NoReverseMatch:
pass
@@ -329,10 +364,10 @@ class SecureAPIRequest(generic.View):
if model == "event" and start and end:
# Probably a calendar request
start_datetime = datetime.datetime.strptime( start, "%Y-%m-%dT%H:%M:%S" )
end_datetime = datetime.datetime.strptime( end, "%Y-%m-%dT%H:%M:%S" )
start_datetime = datetime.datetime.strptime(start, "%Y-%m-%dT%H:%M:%S")
end_datetime = datetime.datetime.strptime(end, "%Y-%m-%dT%H:%M:%S")
objects = self.models[model].objects.events_in_bounds(start_datetime,end_datetime)
objects = self.models[model].objects.events_in_bounds(start_datetime, end_datetime)
results = []
for item in objects:
@@ -352,6 +387,7 @@ class SecureAPIRequest(generic.View):
return HttpResponse(model)
class ProfileDetail(generic.DetailView):
model = models.Profile
@@ -364,6 +400,7 @@ class ProfileDetail(generic.DetailView):
return self.model.objects.filter(pk=pk)
class ProfileUpdateSelf(generic.UpdateView):
model = models.Profile
fields = ['first_name', 'last_name', 'email', 'initials', 'phone']
@@ -375,13 +412,18 @@ class ProfileUpdateSelf(generic.UpdateView):
return self.model.objects.filter(pk=pk)
def get_success_url(self):
url = reverse_lazy('profile_detail')
url = reverse_lazy('profile_detail')
return url
class ResetApiKey(generic.RedirectView):
def get_redirect_url(self, *args, **kwargs):
self.request.user.api_key = self.request.user.make_api_key()
self.request.user.save()
return reverse_lazy('profile_detail')
class PasswordResetDisabled(generic.TemplateView):
template_name = "RIGS/password_reset_disable.html"