* Add ability to place a ticket on hold, stopping automatic escalation.

This commit is contained in:
Ross Poulton 2008-01-16 04:52:30 +00:00
parent 1524c37941
commit 379f68ed4b
5 changed files with 45 additions and 2 deletions

View File

@ -125,6 +125,8 @@ class Ticket(models.Model):
assigned_to = models.ForeignKey(User, related_name='assigned_to', blank=True, null=True)
status = models.IntegerField(choices=STATUS_CHOICES, default=OPEN_STATUS)
on_hold = models.BooleanField(blank=True, null=True)
description = models.TextField(blank=True, null=True)
resolution = models.TextField(blank=True, null=True)
@ -159,6 +161,12 @@ class Ticket(models.Model):
return "%s/helpdesk/priorities/priority%s.png" % (settings.MEDIA_URL, self.priority)
get_priority_img = property(_get_priority_img)
def _get_status(self):
held_msg = ''
if self.on_hold: held_msg = ' (Held)'
return '%s%s' % (self.get_status_display, held_msg)
get_status = property(_get_status)
def _get_ticket_url(self):
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse

View File

@ -44,7 +44,7 @@ def escalate_tickets():
q.last_escalation = datetime.now()
q.save()
for t in q.ticket_set.filter(Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)).exclude(priority=1):
for t in q.ticket_set.filter(Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)).exclude(priority=1).exclude(on_hold=True):
t.priority -= 1
t.save()

View File

@ -25,7 +25,7 @@
{% block helpdesk_body %}
<table width='100%'>
<tr class='row_tablehead'><td>{{ ticket.id }}. {{ ticket.title }} [{{ ticket.get_status_display }}]</td><td align='right'><a href='#edit'><img src='{{ MEDIA_URL }}/helpdesk/buttons/edit.png' alt='Edit' title='Edit' width='60' height='15' /></a><a href='{% url helpdesk_delete ticket.id %}'><img src='{{ MEDIA_URL }}/helpdesk/buttons/delete.png' alt='Delete' title='Delete' width='60' height='15' /></a></td></tr>
<tr class='row_tablehead'><td>{{ ticket.id }}. {{ ticket.title }} [{{ ticket.get_status }}]</td><td align='right'><a href='#edit'><img src='{{ MEDIA_URL }}/helpdesk/buttons/edit.png' alt='Edit' title='Edit' width='60' height='15' /></a><a href='{% url helpdesk_delete ticket.id %}'><img src='{{ MEDIA_URL }}/helpdesk/buttons/delete.png' alt='Delete' title='Delete' width='60' height='15' /></a>{% if ticket.on_hold %}<a href='unhold/'>Unhold</a>{% else %}<a href='hold/'>Hold</a>{% endif %}</td></tr>
<tr class='row_columnheads'><th colspan='2'>Queue: {{ ticket.queue }}</th></tr>
<tr class='row_odd'>

View File

@ -54,6 +54,13 @@ urlpatterns = patterns('helpdesk.views',
'delete_ticket',
name='helpdesk_delete'),
url(r'^tickets/(?P<ticket_id>[0-9]+)/hold/$',
'hold_ticket',
name='helpdesk_hold'),
url(r'^tickets/(?P<ticket_id>[0-9]+)/unhold/$',
'unhold_ticket',
name='helpdesk_unhold'),
url(r'^raw/(?P<type>\w+)/$',
'raw_details',

View File

@ -303,3 +303,31 @@ def public_view(request):
'email': email,
'error_message': error_message,
}))
def hold_ticket(request, ticket_id, unhold=False):
ticket = get_object_or_404(Ticket, id=ticket_id)
if unhold:
ticket.on_hold = False
title = 'Ticket placed on hold'
else:
ticket.on_hold = True
title = 'Ticket taken off hold'
f = FollowUp(
ticket = ticket,
user = request.user,
title = title,
date = datetime.now(),
)
f.save()
ticket.save()
return HttpResponseRedirect(ticket.get_absolute_url())
hold_ticket = login_required(hold_ticket)
def unhold_ticket(request, ticket_id):
return hold_ticket(request, ticket_id, unhold=True)
unhold_ticket = login_required(unhold_ticket)