From 71dcfb6f37adbc5fa1d7fddfdf98b39e8cc32296 Mon Sep 17 00:00:00 2001 From: Stefano Brentegani Date: Fri, 20 Apr 2012 00:02:28 +0200 Subject: [PATCH 1/4] Replacing undocumented ADMIN_URL setting --- helpdesk/templates/helpdesk/system_settings.html | 14 +++++++------- helpdesk/urls.py | 13 ++++--------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/helpdesk/templates/helpdesk/system_settings.html b/helpdesk/templates/helpdesk/system_settings.html index 44d52f74..22f8f47a 100644 --- a/helpdesk/templates/helpdesk/system_settings.html +++ b/helpdesk/templates/helpdesk/system_settings.html @@ -8,12 +8,12 @@

The following items can be maintained by you or other superusers:

{% endblocktrans %} {% endblock %} diff --git a/helpdesk/urls.py b/helpdesk/urls.py index 7c059be4..c61774e4 100644 --- a/helpdesk/urls.py +++ b/helpdesk/urls.py @@ -80,7 +80,7 @@ urlpatterns = patterns('helpdesk.views.staff', url(r'^tickets/(?P[0-9]+)/dependency/delete/(?P[0-9]+)/$', 'ticket_dependency_del', name='helpdesk_ticket_dependency_del'), - + url(r'^tickets/(?P[0-9]+)/attachment_delete/(?P[0-9]+)/$', 'attachment_del', name='helpdesk_attachment_del'), @@ -137,7 +137,7 @@ urlpatterns += patterns('helpdesk.views.public', url(r'^change_language/$', 'change_language', - name='helpdesk_public_change_language'), + name='helpdesk_public_change_language'), ) urlpatterns += patterns('', @@ -165,7 +165,7 @@ if helpdesk_settings.HELPDESK_KB_ENABLED: urlpatterns += patterns('helpdesk.views.kb', url(r'^kb/$', 'index', name='helpdesk_kb_index'), - + url(r'^kb/(?P[0-9]+)/$', 'item', name='helpdesk_kb_item'), @@ -189,11 +189,6 @@ urlpatterns += patterns('', url(r'^system_settings/$', 'django.views.generic.simple.direct_to_template', - { - 'template': 'helpdesk/system_settings.html', - 'extra_context': { - 'ADMIN_URL': getattr(settings, 'ADMIN_URL', '/admin/'), - }, - }, + {'template': 'helpdesk/system_settings.html',}, name='helpdesk_system_settings'), ) From c477f575dbaa471df9255524e32eb5f38989484b Mon Sep 17 00:00:00 2001 From: Stefano Brentegani Date: Mon, 21 Jul 2014 09:12:27 +0200 Subject: [PATCH 2/4] use django.utils.dates.MONTHS_3 for short month names (resolves #225) --- helpdesk/views/staff.py | 63 ++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 38 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index e491c2d8..9bf3ab8f 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -26,6 +26,7 @@ from django.db.models import Q from django.http import HttpResponseRedirect, Http404, HttpResponse, HttpResponseForbidden from django.shortcuts import render_to_response, get_object_or_404 from django.template import loader, Context, RequestContext +from django.utils.dates import MONTHS_3 from django.utils.translation import ugettext as _ from django.utils.html import escape from django import forms @@ -39,7 +40,7 @@ from helpdesk.forms import TicketForm, UserSettingsForm, EmailIgnoreForm, EditTi from helpdesk.lib import send_templated_mail, query_to_dict, apply_query, safe_template_context from helpdesk.models import Ticket, Queue, FollowUp, TicketChange, PreSetReply, Attachment, SavedSearch, IgnoreEmail, TicketCC, TicketDependency from helpdesk import settings as helpdesk_settings - + if helpdesk_settings.HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE: # treat 'normal' users like 'staff' staff_member_required = user_passes_test(lambda u: u.is_authenticated() and u.is_active) @@ -69,7 +70,7 @@ def dashboard(request): # closed & resolved tickets, assigned to current user tickets_closed_resolved = Ticket.objects.filter( - assigned_to=request.user, + assigned_to=request.user, status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS]) unassigned_tickets = Ticket.objects.filter( @@ -107,7 +108,7 @@ def dashboard(request): GROUP BY queue, name ORDER BY q.id; """) - + dash_tickets = query_to_dict(cursor.fetchall(), cursor.description) return render_to_response('helpdesk/dashboard.html', @@ -200,7 +201,7 @@ def view_ticket(request, ticket_id): if request.GET.has_key('take'): # Allow the user to assign the ticket to themselves whilst viewing it. - + # Trick the update_ticket() view into thinking it's being called with # a valid POST. request.POST = { @@ -261,7 +262,7 @@ view_ticket = staff_member_required(view_ticket) def return_ticketccstring_and_show_subscribe(user, ticket): ''' used in view_ticket() and followup_edit()''' - # create the ticketcc_string and check whether current user is already + # create the ticketcc_string and check whether current user is already # subscribed username = user.username.upper() useremail = user.email.upper() @@ -448,7 +449,7 @@ def update_ticket(request, ticket_id, public=False): messages_sent_to = [] - # ticket might have changed above, so we re-instantiate context with the + # ticket might have changed above, so we re-instantiate context with the # (possibly) updated ticket. context = safe_template_context(ticket) context.update( @@ -457,7 +458,7 @@ def update_ticket(request, ticket_id, public=False): ) if public and (f.comment or (f.new_status in (Ticket.RESOLVED_STATUS, Ticket.CLOSED_STATUS))): - + if f.new_status == Ticket.RESOLVED_STATUS: template = 'resolved_' @@ -712,7 +713,7 @@ def ticket_list(request): or request.GET.has_key('status') or request.GET.has_key('q') or request.GET.has_key('sort') - or request.GET.has_key('sortreverse') + or request.GET.has_key('sortreverse') ): # Fall-back if no querying is being done, force the list to only @@ -751,7 +752,7 @@ def ticket_list(request): date_from = request.GET.get('date_from') if date_from: query_params['filtering']['created__gte'] = date_from - + date_to = request.GET.get('date_to') if date_to: query_params['filtering']['created__lte'] = date_to @@ -842,7 +843,7 @@ def edit_ticket(request, ticket_id): return HttpResponseRedirect(ticket.get_absolute_url()) else: form = EditTicketForm(instance=ticket) - + return render_to_response('helpdesk/edit_ticket.html', RequestContext(request, { 'form': form, @@ -854,7 +855,7 @@ def create_ticket(request): assignable_users = User.objects.filter(is_active=True, is_staff=True).order_by('username') else: assignable_users = User.objects.filter(is_active=True).order_by('username') - + if request.method == 'POST': form = TicketForm(request.POST, request.FILES) form.fields['queue'].choices = [('', '--------')] + [[q.id, q.title] for q in Queue.objects.all()] @@ -955,7 +956,7 @@ def run_report(request, report): return HttpResponseRedirect(reverse("helpdesk_report_index")) report_queryset = Ticket.objects.all().select_related() - + from_saved_query = False saved_query = None @@ -978,22 +979,8 @@ def run_report(request, report): # a second table for more complex queries summarytable2 = defaultdict(int) + month_name = lambda m: MONTHS_3[m].title() - months = ( - _('Jan'), - _('Feb'), - _('Mar'), - _('Apr'), - _('May'), - _('Jun'), - _('Jul'), - _('Aug'), - _('Sep'), - _('Oct'), - _('Nov'), - _('Dec'), - ) - first_ticket = Ticket.objects.all().order_by('created')[0] first_month = first_ticket.created.month first_year = first_ticket.created.year @@ -1005,7 +992,7 @@ def run_report(request, report): periods = [] year, month = first_year, first_month working = True - periods.append("%s %s" % (months[month - 1], year)) + periods.append("%s %s" % (month_name(month), year)) while working: month += 1 @@ -1014,7 +1001,7 @@ def run_report(request, report): month = 1 if (year > last_year) or (month > last_month and year >= last_year): working = False - periods.append("%s %s" % (months[month - 1], year)) + periods.append("%s %s" % (month_name(month), year)) if report == 'userpriority': title = _('User by Priority') @@ -1080,7 +1067,7 @@ def run_report(request, report): elif report == 'usermonth': metric1 = u'%s' % ticket.get_assigned_to - metric2 = u'%s %s' % (months[ticket.created.month - 1], ticket.created.year) + metric2 = u'%s %s' % (month_name(ticket.created.month), ticket.created.year) elif report == 'queuepriority': metric1 = u'%s' % ticket.queue.title @@ -1092,11 +1079,11 @@ def run_report(request, report): elif report == 'queuemonth': metric1 = u'%s' % ticket.queue.title - metric2 = u'%s %s' % (months[ticket.created.month - 1], ticket.created.year) + metric2 = u'%s %s' % (month_name(ticket.created.month), ticket.created.year) elif report == 'daysuntilticketclosedbymonth': metric1 = u'%s' % ticket.queue.title - metric2 = u'%s %s' % (months[ticket.created.month - 1], ticket.created.year) + metric2 = u'%s %s' % (month_name(ticket.created.month), ticket.created.year) metric3 = ticket.modified - ticket.created metric3 = metric3.days @@ -1106,15 +1093,15 @@ def run_report(request, report): if report == 'daysuntilticketclosedbymonth': summarytable2[metric1, metric2] += metric3 - + table = [] - + if report == 'daysuntilticketclosedbymonth': for key in summarytable2.keys(): summarytable[key] = summarytable2[key] / summarytable[key] header1 = sorted(set(list( i.encode('utf-8') for i,_ in summarytable.keys() ))) - + column_headings = [col1heading] + possible_options # Pivot the data so that 'header1' fields are always first column @@ -1330,11 +1317,11 @@ def calc_basic_ticket_stats(Ticket): date_30_str = date_30.strftime('%Y-%m-%d') date_60_str = date_60.strftime('%Y-%m-%d') - # > 0 & <= 30 + # > 0 & <= 30 ota_le_30 = all_open_tickets.filter(created__gte = date_30_str) N_ota_le_30 = len(ota_le_30) - # >= 30 & <= 60 + # >= 30 & <= 60 ota_le_60_ge_30 = all_open_tickets.filter(created__gte = date_60_str, created__lte = date_30_str) N_ota_le_60_ge_30 = len(ota_le_60_ge_30) @@ -1357,7 +1344,7 @@ def calc_basic_ticket_stats(Ticket): average_nbr_days_until_ticket_closed_last_60_days = calc_average_nbr_days_until_ticket_resolved(all_closed_last_60_days) # put together basic stats - basic_ticket_stats = { 'average_nbr_days_until_ticket_closed': average_nbr_days_until_ticket_closed, + basic_ticket_stats = { 'average_nbr_days_until_ticket_closed': average_nbr_days_until_ticket_closed, 'average_nbr_days_until_ticket_closed_last_60_days': average_nbr_days_until_ticket_closed_last_60_days, 'open_ticket_stats': ots, } From fe5c7135a6af55179db5e87976f177ab2282e996 Mon Sep 17 00:00:00 2001 From: Stefano Brentegani Date: Mon, 21 Jul 2014 18:44:54 +0200 Subject: [PATCH 3/4] exclude KB from navigation if HELPDESK_KB_ENABLED is False (fixes #223) --- helpdesk/templates/helpdesk/navigation.html | 2 ++ helpdesk/tests/__init__.py | 1 + helpdesk/tests/helpers.py | 33 ++++++++++++++++++ helpdesk/tests/navigation.py | 38 +++++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 helpdesk/tests/helpers.py create mode 100644 helpdesk/tests/navigation.py diff --git a/helpdesk/templates/helpdesk/navigation.html b/helpdesk/templates/helpdesk/navigation.html index 371babd3..123b1bfa 100644 --- a/helpdesk/templates/helpdesk/navigation.html +++ b/helpdesk/templates/helpdesk/navigation.html @@ -17,7 +17,9 @@
  • {% trans "Tickets" %}
  • {% trans "New Ticket" %}
  • {% trans "Stats" %}
  • + {% if helpdesk_settings.HELPDESK_KB_ENABLED %}
  • {% trans "Knowledgebase" %}
  • + {% endif %} {% if user_saved_queries_ %}