Merge pull request #881 from Benbb96/fix-errors-on-master

Fix errors on 0.3.x branch especially relating to django 3.x
This commit is contained in:
Garret Wassermann 2020-10-13 03:35:42 -04:00 committed by GitHub
commit c9e0a51d78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 34 deletions

View File

@ -56,7 +56,7 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ]
ROOT_URLCONF = 'demodesk.config.urls' ROOT_URLCONF = 'demo.demodesk.config.urls'
TEMPLATES = [ TEMPLATES = [
{ {
@ -75,7 +75,7 @@ TEMPLATES = [
}, },
] ]
WSGI_APPLICATION = 'demodesk.config.wsgi.application' WSGI_APPLICATION = 'demo.demodesk.config.wsgi.application'
# django-helpdesk configuration settings # django-helpdesk configuration settings

View File

@ -752,7 +752,7 @@ class Ticket(models.Model):
User = get_user_model() User = get_user_model()
try: try:
return User.objects.get(email=self.submitter_email) return User.objects.get(email=self.submitter_email)
except User.DoesNotExist: except (User.DoesNotExist, User.MultipleObjectsReturned):
return None return None
class Meta: class Meta:

View File

@ -219,5 +219,4 @@ class __Query__:
'hour': date.hour, 'hour': date.hour,
'minute': date.minute, 'minute': date.minute,
'second': date.second, 'second': date.second,
'second': date.second,
} }

View File

@ -32,28 +32,30 @@ class DatatablesTicketSerializer(serializers.ModelSerializer):
'time_spent', 'kbitem') 'time_spent', 'kbitem')
def get_queue(self, obj): def get_queue(self, obj):
return ({"title": obj.queue.title, "id": obj.queue.id}) return {"title": obj.queue.title, "id": obj.queue.id}
def get_ticket(self, obj): def get_ticket(self, obj):
return (str(obj.id) + " " + obj.ticket) return str(obj.id) + " " + obj.ticket
def get_status(self, obj): def get_status(self, obj):
return (obj.get_status) return obj.get_status
def get_created(self, obj): def get_created(self, obj):
return (humanize.naturaltime(obj.created)) return humanize.naturaltime(obj.created)
def get_due_date(self, obj): def get_due_date(self, obj):
return (humanize.naturaltime(obj.due_date)) return humanize.naturaltime(obj.due_date)
def get_assigned_to(self, obj): def get_assigned_to(self, obj):
if obj.assigned_to: if obj.assigned_to:
if obj.assigned_to.get_full_name(): if obj.assigned_to.get_full_name():
return (obj.assigned_to.get_full_name()) return obj.assigned_to.get_full_name()
elif obj.assigned_to.email:
return obj.assigned_to.email
else: else:
return (obj.assigned_to.email) return obj.assigned_to.username
else: else:
return ("None") return "None"
def get_submitter(self, obj): def get_submitter(self, obj):
return obj.submitter_email return obj.submitter_email
@ -62,7 +64,7 @@ class DatatablesTicketSerializer(serializers.ModelSerializer):
return format_time_spent(obj.time_spent) return format_time_spent(obj.time_spent)
def get_row_class(self, obj): def get_row_class(self, obj):
return (obj.get_priority_css_class) return obj.get_priority_css_class
def get_kbitem(self, obj): def get_kbitem(self, obj):
return obj.kbitem.title if obj.kbitem else "" return obj.kbitem.title if obj.kbitem else ""

View File

@ -9,7 +9,6 @@ views/staff.py - The bulk of the application - provides most business logic and
from copy import deepcopy from copy import deepcopy
import json import json
from django import VERSION as DJANGO_VERSION
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
@ -20,19 +19,15 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponseRedirect, Http404, HttpResponse, JsonResponse from django.http import HttpResponseRedirect, Http404, HttpResponse, JsonResponse
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.utils.dates import MONTHS_3
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.utils.html import escape from django.utils.html import escape
from django import forms
from django.utils import timezone from django.utils import timezone
from django.views.generic.edit import FormView, UpdateView from django.views.generic.edit import FormView, UpdateView
from helpdesk.query import ( from helpdesk.query import (
get_query_class, get_query_class,
query_to_dict,
query_to_base64, query_to_base64,
query_from_base64, query_from_base64,
apply_query,
) )
from helpdesk.user import HelpdeskUser from helpdesk.user import HelpdeskUser
@ -45,12 +40,11 @@ from helpdesk.forms import (
TicketForm, UserSettingsForm, EmailIgnoreForm, EditTicketForm, TicketCCForm, TicketForm, UserSettingsForm, EmailIgnoreForm, EditTicketForm, TicketCCForm,
TicketCCEmailForm, TicketCCUserForm, EditFollowUpForm, TicketDependencyForm TicketCCEmailForm, TicketCCUserForm, EditFollowUpForm, TicketDependencyForm
) )
from helpdesk.decorators import staff_member_required, superuser_required from helpdesk.decorators import superuser_required
from helpdesk.lib import ( from helpdesk.lib import (
safe_template_context, safe_template_context,
process_attachments, process_attachments,
queue_template_context, queue_template_context,
format_time_spent,
) )
from helpdesk.models import ( from helpdesk.models import (
Ticket, Queue, FollowUp, TicketChange, PreSetReply, FollowUpAttachment, SavedSearch, Ticket, Queue, FollowUp, TicketChange, PreSetReply, FollowUpAttachment, SavedSearch,
@ -61,8 +55,7 @@ import helpdesk.views.abstract_views as abstract_views
from helpdesk.views.permissions import MustBeStaffMixin from helpdesk.views.permissions import MustBeStaffMixin
from ..lib import format_time_spent from ..lib import format_time_spent
from rest_framework import viewsets, status from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from datetime import date, datetime, timedelta from datetime import date, datetime, timedelta
@ -105,6 +98,14 @@ def dashboard(request):
showing ticket counts by queue/status, and a list of unassigned tickets showing ticket counts by queue/status, and a list of unassigned tickets
with options for them to 'Take' ownership of said tickets. with options for them to 'Take' ownership of said tickets.
""" """
# user settings num tickets per page
tickets_per_page = request.user.usersettings_helpdesk.tickets_per_page or 25
# page vars for the three ticket tables
user_tickets_page = request.GET.get(_('ut_page'), 1)
user_tickets_closed_resolved_page = request.GET.get(_('utcr_page'), 1)
all_tickets_reported_by_current_user_page = request.GET.get(_('atrbcu_page'), 1)
huser = HelpdeskUser(request.user) huser = HelpdeskUser(request.user)
active_tickets = Ticket.objects.select_related('queue').exclude( active_tickets = Ticket.objects.select_related('queue').exclude(
status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS], status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS],
@ -448,7 +449,7 @@ def subscribe_to_ticket_updates(ticket, user=None, email=None, can_view=True, ca
return ticketcc return ticketcc
def subscribe_staff_member_to_ticket(ticket, user, email=''): def subscribe_staff_member_to_ticket(ticket, user, email='', can_view=True, can_update=False):
"""used in view_ticket() and update_ticket()""" """used in view_ticket() and update_ticket()"""
return subscribe_to_ticket_updates(ticket=ticket, user=user, email=email, can_view=can_view, can_update=can_update) return subscribe_to_ticket_updates(ticket=ticket, user=user, email=email, can_view=can_view, can_update=can_update)
@ -828,7 +829,7 @@ def mass_update(request):
'submitter': ('closed_submitter', context), 'submitter': ('closed_submitter', context),
'ticket_cc': ('closed_cc', context), 'ticket_cc': ('closed_cc', context),
} }
if ticket.assigned_to and ticket.assigned_to.usersettings_helpdesk.email_on_ticket_change: if t.assigned_to and t.assigned_to.usersettings_helpdesk.email_on_ticket_change:
roles['assigned_to'] = ('closed_owner', context), roles['assigned_to'] = ('closed_owner', context),
messages_sent_to.update(t.send( messages_sent_to.update(t.send(
@ -1010,10 +1011,10 @@ def load_saved_query(request, query_params=None):
if request.GET.get('saved_query', None): if request.GET.get('saved_query', None):
try: try:
saved_query = SavedSearch.objects.get(pk=request.GET.get('saved_query')) saved_query = SavedSearch.objects.get(
except SavedSearch.DoesNotExist: Q(pk=request.GET.get('saved_query')) & (Q(shared=True) | Q(user=request.user))
raise QueryLoadError() )
if not (saved_query.shared or saved_query.user == request.user): except (SavedSearch.DoesNotExist, ValueError):
raise QueryLoadError() raise QueryLoadError()
try: try:
@ -1217,17 +1218,11 @@ def run_report(request, report):
except QueryLoadError: except QueryLoadError:
return HttpResponseRedirect(reverse('helpdesk:report_index')) return HttpResponseRedirect(reverse('helpdesk:report_index'))
if request.GET.get('saved_query', None):
report_queryset = apply_query(report_queryset, query_params)
from collections import defaultdict from collections import defaultdict
summarytable = defaultdict(int) summarytable = defaultdict(int)
# a second table for more complex queries # a second table for more complex queries
summarytable2 = defaultdict(int) summarytable2 = defaultdict(int)
def month_name(m):
MONTHS_3[m].title()
first_ticket = Ticket.objects.all().order_by('created')[0] first_ticket = Ticket.objects.all().order_by('created')[0]
first_month = first_ticket.created.month first_month = first_ticket.created.month
first_year = first_ticket.created.year first_year = first_ticket.created.year