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, }