Exemple #1
0
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """

    tickets = Ticket.objects.filter(
            assigned_to=request.user,
        ).exclude(
            status=Ticket.CLOSED_STATUS,
        )

    ticket_table = UnpagedTicketTable(tickets)
    table_to_report = RequestConfig(request, paginate=False ).configure(ticket_table)
    if table_to_report:
        return create_report_http_response(table_to_report, request)
            
    unassigned_tickets = Ticket.objects.filter(
            assigned_to__isnull=True,
        ).exclude(
            status=Ticket.CLOSED_STATUS,
        )

    
    unassigned_ticket_table = UnassignedTicketTable(unassigned_tickets)
    table_to_report = RequestConfig(request, paginate=False ).configure(unassigned_ticket_table)
    if table_to_report:
        return create_report_http_response(table_to_report, request)
    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    cursor = connection.cursor()
    cursor.execute("""
        SELECT      q.id as queue,
                    q.title AS name,
                    COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                    COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved
            FROM    helpdesk_ticket t,
                    helpdesk_queue q
            WHERE   q.id =  t.queue_id
            GROUP BY queue, name
            ORDER BY q.id;
    """)
    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response('helpdesk/dashboard.html',
        RequestContext(request, {
            'user_tickets': tickets,
            'unassigned_tickets': unassigned_tickets,
            'dash_tickets': dash_tickets,
            'ticket_table': ticket_table,
            'unassigned_ticket_table': unassigned_ticket_table
        }))
Exemple #2
0
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """

    tickets = Ticket.objects.filter(assigned_to=request.user, ).exclude(
        status=Ticket.CLOSED_STATUS, )

    ticket_table = UnpagedTicketTable(tickets)
    table_to_report = RequestConfig(request,
                                    paginate=False).configure(ticket_table)
    if table_to_report:
        return create_report_http_response(table_to_report, request)

    unassigned_tickets = Ticket.objects.filter(
        assigned_to__isnull=True, ).exclude(status=Ticket.CLOSED_STATUS, )

    unassigned_ticket_table = UnassignedTicketTable(unassigned_tickets)
    table_to_report = RequestConfig(
        request, paginate=False).configure(unassigned_ticket_table)
    if table_to_report:
        return create_report_http_response(table_to_report, request)
    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    cursor = connection.cursor()
    cursor.execute("""
        SELECT      q.id as queue,
                    q.title AS name,
                    COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                    COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved
            FROM    helpdesk_ticket t,
                    helpdesk_queue q
            WHERE   q.id =  t.queue_id
            GROUP BY queue, name
            ORDER BY q.id;
    """)
    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response(
        'helpdesk/dashboard.html',
        RequestContext(
            request, {
                'user_tickets': tickets,
                'unassigned_tickets': unassigned_tickets,
                'dash_tickets': dash_tickets,
                'ticket_table': ticket_table,
                'unassigned_ticket_table': unassigned_ticket_table
            }))
Exemple #3
0
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """

    tickets = Ticket.objects.filter(
            assigned_to=request.user,
        ).exclude(
            status=Ticket.CLOSED_STATUS,
        )

    unassigned_tickets = Ticket.objects.filter(
            assigned_to__isnull=True,
        ).exclude(
            status=Ticket.CLOSED_STATUS,
        )

    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    condition = ''
    if not request.user.is_superuser:
        user_queues = Queue.objects.filter(users__in=[request.user]).values_list('pk', flat=True)
        queues_pk = ','.join(map(lambda x: str(x), user_queues))
        condition = 'AND q.id IN(%s)' % queues_pk


    cursor = connection.cursor()
    cursor.execute("""
        SELECT      q.id as queue,
                    q.title AS name,
                    COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                    COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved
            FROM    helpdesk_ticket t,
                    helpdesk_queue q
            WHERE   q.id =  t.queue_id %s
            GROUP BY queue, name
            ORDER BY q.id;
    """ % condition)
    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response('helpdesk/dashboard.html',
        RequestContext(request, {
            'user_tickets': tickets,
            'unassigned_tickets': unassigned_tickets,
            'dash_tickets': dash_tickets,
        }))
def run_report(request, report):
    priority_sql = []
    priority_columns = []
    for p in Ticket.PRIORITY_CHOICES:
        priority_sql.append("COUNT(CASE t.priority WHEN '%s' THEN t.id END) AS \"%s\"" % (p[0], p[1]._proxy____unicode_cast()))
        priority_columns.append("%s" % p[1]._proxy____unicode_cast())
    priority_sql = ", ".join(priority_sql)

    status_sql = []
    status_columns = []
    for s in Ticket.STATUS_CHOICES:
        status_sql.append("COUNT(CASE t.status WHEN '%s' THEN t.id END) AS \"%s\"" % (s[0], s[1]._proxy____unicode_cast()))
        status_columns.append("%s" % s[1]._proxy____unicode_cast())
    status_sql = ", ".join(status_sql)

    queue_sql = []
    queue_columns = []
    for q in Queue.objects.all():
        queue_sql.append("COUNT(CASE t.queue_id WHEN '%s' THEN t.id END) AS \"%s\"" % (q.id, q.title))
        queue_columns.append(q.title)
    queue_sql = ", ".join(queue_sql)

    month_sql = []
    months = (
        'Jan',
        'Feb',
        'Mar',
        'Apr',
        'May',
        'Jun',
        'Jul',
        'Aug',
        'Sep',
        'Oct',
        'Nov',
        'Dec',
    )
    month_columns = []
    # Throw an error if there are no tickets
    first_ticket = Ticket.objects.all().order_by('created')[0]
    first_month = first_ticket.created.month
    first_year = first_ticket.created.year

    last_ticket = Ticket.objects.all().order_by('-created')[0]
    last_month = last_ticket.created.month
    last_year = last_ticket.created.year

    periods = []
    year, month = first_year, first_month
    working = True

    while working:
        temp = (year, month)
        month += 1
        if month > 12:
            year += 1
            month = 1
        if (year > last_year) or (month > last_month and year >= last_year):
            working = False
        periods.append((temp, (year, month)))

    for (low_bound, upper_bound) in periods:
        low_sqlmonth = '%s-%02i-01' % (low_bound[0], low_bound[1])
        upper_sqlmonth = '%s-%02i-01' % (upper_bound[0], upper_bound[1])
        desc = '%s %s' % (months[low_bound[1]-1], low_bound[0])
        month_sql.append("""
          COUNT(
             CASE 1 = 1
             WHEN (date(t.created) >= date('%s')
                  AND date(t.created) < date('%s')) THEN t.id END) AS "%s"
             """ % (low_sqlmonth, upper_sqlmonth, desc))
        month_columns.append(desc)

    month_sql = ", ".join(month_sql)

    queue_base_sql = """
            SELECT      q.title as queue, %s
                FROM    helpdesk_ticket t,
                        helpdesk_queue q
                WHERE   q.id =  t.queue_id
                GROUP BY queue
                ORDER BY queue;
                """

    user_base_sql = """
            SELECT      u.username as username, %s
                FROM    helpdesk_ticket t,
                        auth_user u
                WHERE   u.id =  t.assigned_to_id
                GROUP BY u.username
                ORDER BY u.username;
                """

    if report == 'userpriority':
        sql = user_base_sql % priority_sql
        columns = ['username'] + priority_columns
        title = 'User by Priority'

    elif report == 'userqueue':
        sql = user_base_sql % queue_sql
        columns = ['username'] + queue_columns
        title = 'User by Queue'

    elif report == 'userstatus':
        sql = user_base_sql % status_sql
        columns = ['username'] + status_columns
        title = 'User by Status'

    elif report == 'usermonth':
        sql = user_base_sql % month_sql
        columns = ['username'] + month_columns
        title = 'User by Month'

    elif report == 'queuepriority':
        sql = queue_base_sql % priority_sql
        columns = ['queue'] + priority_columns
        title = 'Queue by Priority'

    elif report == 'queuestatus':
        sql = queue_base_sql % status_sql
        columns = ['queue'] + status_columns
        title = 'Queue by Status'

    elif report == 'queuemonth':
        sql = queue_base_sql % month_sql
        columns = ['queue'] + month_columns
        title = 'Queue by Month'


    cursor = connection.cursor()
    cursor.execute(sql)
    report_output = query_to_dict(cursor.fetchall(), cursor.description)

    data = []

    for record in report_output:
        line = []
        for c in columns:
            c = c.encode('utf-8')
            line.append(record[c])
        data.append(line)

    if report in ('queuemonth', 'usermonth'):
        chart_url = line_chart([columns] + data)
    elif report in ('queuestatus', 'queuepriority', 'userstatus', 'userpriority'):
        chart_url = bar_chart([columns] + data)
    else:
        chart_url = ''

    return render_to_response('helpdesk/report_output.html',
        RequestContext(request, {
            'headings': columns,
            'data': data,
            'chart': chart_url,
            'title': title,
        }))
Exemple #5
0
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """

    # open & reopened tickets, assigned to current user
    tickets = Ticket.objects.filter(
            assigned_to=request.user,
        ).exclude(
            status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS],
        )

    # closed & resolved tickets, assigned to current user
    tickets_closed_resolved =  Ticket.objects.filter(
            assigned_to=request.user, 
            status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS])

    unassigned_tickets = Ticket.objects.filter(
            assigned_to__isnull=True,
        ).exclude(
            status=Ticket.CLOSED_STATUS,
        )

    # all tickets, reported by current user
    all_tickets_reported_by_current_user = ''
    email_current_user = request.user.email
    if email_current_user:
        all_tickets_reported_by_current_user = Ticket.objects.filter(
            submitter_email=email_current_user,
        ).order_by('status')


    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    cursor = connection.cursor()
    if helpdesk_settings.HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES:
        cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                FROM    helpdesk_ticket t,
                        helpdesk_queue q
                WHERE   q.id = t.queue_id
                GROUP BY queue, name
                ORDER BY q.id;
        """)
    else:
        cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                FROM    helpdesk_queue q
                LEFT OUTER JOIN helpdesk_ticket t
                ON      q.id = t.queue_id            
                GROUP BY queue, name
                ORDER BY q.id;
        """)    
    
    
    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response('helpdesk/dashboard.html',
        RequestContext(request, {
            'user_tickets': tickets,
            'user_tickets_closed_resolved': tickets_closed_resolved,
            'unassigned_tickets': unassigned_tickets,
            'all_tickets_reported_by_current_user': all_tickets_reported_by_current_user,
            'dash_tickets': dash_tickets,
        }))
Exemple #6
0
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """

    # open & reopened tickets, assigned to current user
    tickets = Ticket.objects.filter(assigned_to=request.user, ).exclude(
        status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS], )

    # closed & resolved tickets, assigned to current user
    tickets_closed_resolved = Ticket.objects.filter(
        assigned_to=request.user,
        status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS])

    unassigned_tickets = Ticket.objects.filter(
        assigned_to__isnull=True, ).exclude(status=Ticket.CLOSED_STATUS, )

    # all tickets, reported by current user
    all_tickets_reported_by_current_user = ''
    email_current_user = request.user.email
    if email_current_user:
        all_tickets_reported_by_current_user = Ticket.objects.filter(
            submitter_email=email_current_user, ).order_by('status')

    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    cursor = connection.cursor()
    if helpdesk_settings.HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES:
        cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                FROM    helpdesk_ticket t,
                        helpdesk_queue q
                WHERE   q.id = t.queue_id
                GROUP BY queue, name
                ORDER BY q.id;
        """)
    else:
        cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                FROM    helpdesk_queue q
                LEFT OUTER JOIN helpdesk_ticket t
                ON      q.id = t.queue_id            
                GROUP BY queue, name
                ORDER BY q.id;
        """)

    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response(
        'helpdesk/dashboard.html',
        RequestContext(
            request, {
                'user_tickets': tickets,
                'user_tickets_closed_resolved': tickets_closed_resolved,
                'unassigned_tickets': unassigned_tickets,
                'all_tickets_reported_by_current_user':
                all_tickets_reported_by_current_user,
                'dash_tickets': dash_tickets,
            }))
Exemple #7
0
def run_report(request, report):
    priority_sql = []
    priority_columns = []
    for p in Ticket.PRIORITY_CHOICES:
        print dir(p[1])
        priority_sql.append(
            "COUNT(CASE t.priority WHEN '%s' THEN t.id END) AS \"%s\"" %
            (p[0], p[1]._proxy____cast()))
        priority_columns.append("%s" % p[1]._proxy____cast())
    priority_sql = ", ".join(priority_sql)

    status_sql = []
    status_columns = []
    for s in Ticket.STATUS_CHOICES:
        status_sql.append(
            "COUNT(CASE t.status WHEN '%s' THEN t.id END) AS \"%s\"" %
            (s[0], s[1]._proxy____cast()))
        status_columns.append("%s" % s[1]._proxy____cast())
    status_sql = ", ".join(status_sql)

    queue_sql = []
    queue_columns = []
    for q in Queue.objects.all():
        queue_sql.append(
            "COUNT(CASE t.queue_id WHEN '%s' THEN t.id END) AS \"%s\"" %
            (q.id, q.title))
        queue_columns.append(q.title)
    queue_sql = ", ".join(queue_sql)

    month_sql = []
    months = (
        'Jan',
        'Feb',
        'Mar',
        'Apr',
        'May',
        'Jun',
        'Jul',
        'Aug',
        'Sep',
        'Oct',
        'Nov',
        'Dec',
    )
    month_columns = []

    first_ticket = Ticket.objects.all().order_by('created')[0]
    first_month = first_ticket.created.month
    first_year = first_ticket.created.year

    last_ticket = Ticket.objects.all().order_by('-created')[0]
    last_month = last_ticket.created.month
    last_year = last_ticket.created.year

    periods = []
    year, month = first_year, first_month
    working = True

    while working:
        temp = (year, month)
        month += 1
        if month > 12:
            year += 1
            month = 1
        if (year > last_year) or (month > last_month and year >= last_year):
            working = False
        periods.append((temp, (year, month)))

    for (low_bound, upper_bound) in periods:
        low_sqlmonth = '%s-%02i-01' % (low_bound[0], low_bound[1])
        upper_sqlmonth = '%s-%02i-01' % (upper_bound[0], upper_bound[1])
        desc = '%s %s' % (months[low_bound[1] - 1], low_bound[0])
        month_sql.append("""
          COUNT(
             CASE 1 = 1
             WHEN (date(t.created) >= date('%s')
                  AND date(t.created) < date('%s')) THEN t.id END) AS "%s"
             """ % (low_sqlmonth, upper_sqlmonth, desc))
        month_columns.append(desc)

    month_sql = ", ".join(month_sql)

    queue_base_sql = """
            SELECT      q.title as queue, %s
                FROM    helpdesk_ticket t,
                        helpdesk_queue q
                WHERE   q.id =  t.queue_id
                GROUP BY queue
                ORDER BY queue;
                """

    user_base_sql = """
            SELECT      u.username as username, %s
                FROM    helpdesk_ticket t,
                        auth_user u
                WHERE   u.id =  t.assigned_to_id
                GROUP BY u.username
                ORDER BY u.username;
                """

    if report == 'userpriority':
        sql = user_base_sql % priority_sql
        columns = ['username'] + priority_columns
        title = _(u'User by priority')

    elif report == 'userqueue':
        sql = user_base_sql % queue_sql
        columns = ['username'] + queue_columns
        title = _(u'User by queue')

    elif report == 'userstatus':
        sql = user_base_sql % status_sql
        columns = ['username'] + status_columns
        title = _(u'User by status')

    elif report == 'usermonth':
        sql = user_base_sql % month_sql
        columns = ['username'] + month_columns
        title = _(u'User by month')

    elif report == 'queuepriority':
        sql = queue_base_sql % priority_sql
        columns = ['queue'] + priority_columns
        title = _(u'Queue by priority')

    elif report == 'queuestatus':
        sql = queue_base_sql % status_sql
        columns = ['queue'] + status_columns
        title = _(u'Queue by status')

    elif report == 'queuemonth':
        sql = queue_base_sql % month_sql
        columns = ['queue'] + month_columns
        title = _(u'Queue by month')

    cursor = connection.cursor()
    cursor.execute(sql)
    report_output = query_to_dict(cursor.fetchall(), cursor.description)

    data = []

    for record in report_output:
        line = []
        for c in columns:
            c = c.encode('utf-8')
            line.append(record[c])
        data.append(line)

    if report in ('queuemonth', 'usermonth'):
        chart_url = line_chart([columns] + data)
    elif report in ('queuestatus', 'queuepriority', 'userstatus',
                    'userpriority'):
        chart_url = bar_chart([columns] + data)
    else:
        chart_url = ''

    return render_to_response(
        'helpdesk/report_output.html',
        RequestContext(
            request, {
                'headings': columns,
                'data': data,
                'chart': chart_url,
                'title': title,
            }))
def dashboard(request):
    """
    A quick summary overview for users: A list of their own tickets, a table
    showing ticket counts by queue/status, and a list of unassigned tickets
    with options for them to 'Take' ownership of said tickets.
    """
    # open & reopened tickets, assigned to current user
    tickets = Ticket.objects.filter(
            assigned_to=request.user,
        ).exclude(
            status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS, Ticket.DUPLICATE_STATUS],
        )

    # closed & resolved tickets, assigned to current user
    tickets_closed_resolved =  Ticket.objects.filter(
            assigned_to=request.user,
            status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS, Ticket.DUPLICATE_STATUS])

    unassigned_tickets = Ticket.objects.filter(
            assigned_to__isnull=True,
        ).exclude(
            status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS, Ticket.DUPLICATE_STATUS]
        )

    # all tickets, reported by current user
    all_tickets_reported_by_current_user = ''
    email_current_user = request.user.email
    if email_current_user:
        all_tickets_reported_by_current_user = Ticket.objects.filter(
            submitter_email=email_current_user,
        ).order_by('status')


    # The following query builds a grid of queues & ticket statuses,
    # to be displayed to the user. EG:
    #          Open  Resolved
    # Queue 1    10     4
    # Queue 2     4    12

    # Determine whether to remove hidden queues
    if request.user.is_superuser:
      where = ''
    else:
      where = 'WHERE q.allow_public_access IS true' # Sqlite doesn't like this / Postgres needs true

    cursor = connection.cursor()
    # Removed a second query here that didn't list empty queues. Not very relevant, so is removed
    cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                FROM    helpdesk_queue q
                LEFT OUTER JOIN helpdesk_ticket t
                ON      q.id = t.queue_id
                %s
                GROUP BY queue, name
                ORDER BY q.id;
        """ % where)


    dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

    return render_to_response('helpdesk/dashboard.html',
        RequestContext(request, {
            'user_tickets': tickets,
            'user_tickets_closed_resolved': tickets_closed_resolved,
            'unassigned_tickets': unassigned_tickets,
            'all_tickets_reported_by_current_user': all_tickets_reported_by_current_user,
            'dash_tickets': dash_tickets,
        }))
Exemple #9
0
    def get_context_data(self, **kwargs):
        data  = super(Dashboard, self).get_context_data(**kwargs)
        """
        A quick summary overview for users: A list of their own tickets, a table
        showing ticket counts by queue/status, and a list of unassigned tickets
        with options for them to 'Take' ownership of said tickets.
        """

        # open & reopened tickets, assigned to current user
        tickets = Ticket.objects.select_related('queue').filter(
                assigned_to=self.request.user,
            ).exclude(
                status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS],
            )

        # closed & resolved tickets, assigned to current user
        tickets_closed_resolved =  Ticket.objects.select_related('queue').filter(
                assigned_to=self.request.user,
                status__in = [Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS])

        user_queues = _get_user_queues(self.request.user)

        unassigned_tickets = Ticket.objects.select_related('queue').filter(
                assigned_to__isnull=True,
                queue__in=user_queues
            ).exclude(
                status=Ticket.CLOSED_STATUS,
            )

        # all tickets, reported by current user
        all_tickets_reported_by_current_user = ''
        email_current_user = self.request.user.email
        if email_current_user:
            all_tickets_reported_by_current_user = Ticket.objects.select_related('queue').filter(
                submitter_email=email_current_user,
            ).order_by('status')

        Tickets = Ticket.objects.filter(
                    queue__in=user_queues,
                )
        basic_ticket_stats = calc_basic_ticket_stats(Tickets)

        # The following query builds a grid of queues & ticket statuses,
        # to be displayed to the user. EG:
        #          Open  Resolved
        # Queue 1    10     4
        # Queue 2     4    12

        queues = _get_user_queues(self.request.user).values_list('id', flat=True)

        from_clause = """FROM    helpdesk_ticket t,
                        helpdesk_queue q"""
        where_clause = """WHERE   q.id = t.queue_id AND
                        q.id IN (%s)""" % (",".join(("%d" % pk for pk in queues)))

        cursor = connection.cursor()
        cursor.execute("""
            SELECT      q.id as queue,
                        q.title AS name,
                        COUNT(CASE t.status WHEN '1' THEN t.id WHEN '2' THEN t.id END) AS open,
                        COUNT(CASE t.status WHEN '3' THEN t.id END) AS resolved,
                        COUNT(CASE t.status WHEN '4' THEN t.id END) AS closed
                %s
                %s
                GROUP BY queue, name
                ORDER BY q.id;
        """ % (from_clause, where_clause))

        dash_tickets = query_to_dict(cursor.fetchall(), cursor.description)

        data.update({
            'user_tickets': tickets,
            'user_tickets_closed_resolved': tickets_closed_resolved,
            'unassigned_tickets': unassigned_tickets,
            'all_tickets_reported_by_current_user': all_tickets_reported_by_current_user,
            'dash_tickets': dash_tickets,
            'basic_ticket_stats': basic_ticket_stats,
        })
        return data