* General clean-up, especially for Django admin - added help_text to more fields and defined other admin options to make life easier.

This commit is contained in:
Ross Poulton 2008-01-15 00:20:00 +00:00
parent dce7731957
commit 038ea15877
2 changed files with 46 additions and 19 deletions

View File

@ -26,10 +26,11 @@
$Id$
"""
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
from django.db.models import permalink
from django.db import models
from django.conf import settings
class Queue(models.Model):
"""
@ -43,11 +44,14 @@ class Queue(models.Model):
can automatically get tickets via e-mail.
"""
title = models.CharField(maxlength=100)
slug = models.SlugField()
email_address = models.EmailField(blank=True, null=True)
slug = models.SlugField(help_text='This slug is used when building ticket ID\'s. Once set, try not to change it or e-mailing may get messy.')
email_address = models.EmailField(blank=True, null=True, help_text='All outgoing e-mails for this queue will use this e-mail address. If you use IMAP or POP3, this shoul be the e-mail address for that mailbox.')
def _from_address(self):
return '%s <%s>' % (self.title, self.email_address)
if not self.email_address:
return 'NO QUEUE EMAIL ADDRESS DEFINED <%s>' % settings.DEFAULT_FROM_EMAIL
else:
return '%s <%s>' % (self.title, self.email_address)
from_address = property(_from_address)
email_box_type = models.CharField(maxlength=5, choices=(('pop3', 'POP 3'),('imap', 'IMAP')), blank=True, null=True, help_text='E-Mail Server Type - Both POP3 and IMAP are supported. Select your email server type here.')
@ -63,13 +67,17 @@ class Queue(models.Model):
return u"%s" % self.title
class Admin:
pass
list_display = ('title', 'slug', 'email_address')
class Meta:
ordering = ('title',)
def save(self):
if self.email_box_type == 'imap' and not self.email_box_imap_folder:
self.email_box_imap_folder = 'INBOX'
super(Queue, self).save()
class Ticket(models.Model):
"""
To allow a ticket to be entered as quickly as possible, only the
@ -146,19 +154,19 @@ class Ticket(models.Model):
get_priority_img = property(_get_priority_img)
class Admin:
list_display = ('title', 'status', 'assigned_to',)
list_display = ('title', 'status', 'assigned_to', 'submitter_email',)
date_hierarchy = 'created'
list_filter = ('assigned_to',)
list_filter = ('assigned_to', 'status', )
class Meta:
get_latest_by = "created"
def __unicode__(self):
return '%s' % self.title
return u'%s' % self.title
def get_absolute_url(self):
return ('helpdesk.views.view_ticket', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)
get_absolute_url = models.permalink(get_absolute_url)
def save(self):
if not self.id:
@ -200,7 +208,7 @@ class FollowUp(models.Model):
pass
def __unicode__(self):
return '%s' % self.title
return u'%s' % self.title
def save(self):
@ -219,7 +227,7 @@ class TicketChange(models.Model):
new_value = models.TextField(blank=True, null=True, core=True)
def __unicode__(self):
str = '%s ' % field
str = u'%s ' % field
if not new_value:
str += 'removed'
elif not old_value:
@ -233,12 +241,24 @@ class TicketChange(models.Model):
#file = models.FileField()
class PreSetReply(models.Model):
queues = models.ManyToManyField(Queue, blank=True, null=True)
name = models.CharField(max_length=100)
""" We can allow the admin to define a number of pre-set replies, used to
simplify the sending of updates and resolutions. These are basically Django
templates with a limited context - however if yo uwanted to get crafy it would
be easy to write a reply that displays ALL updates in hierarchical order etc
with use of for loops over {{ ticket.followup_set.all }} and friends.
When replying to a ticket, the user can select any reply set for the current
queue, and the body text is fetched via AJAX."""
queues = models.ManyToManyField(Queue, blank=True, null=True, help_text='Leave blank to allow this reply to be used for all queues, or select those queues you wish to limit this reply to.')
name = models.CharField(max_length=100, help_text='Only used to assist users with selecting a reply - not shown to the user.')
body = models.TextField(help_text='Context available: {{ ticket }} - ticket object (eg {{ ticket.title }}); {{ queue }} - The queue; and {{ user }} - the current user.')
class Admin:
pass
list_display = ('name',)
class Meta:
ordering = ['name',]
def __unicode__(self):
return u'%s' % self.name

View File

@ -32,15 +32,16 @@ from datetime import datetime
# Django imports
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.template import loader, Context, RequestContext
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, Http404, HttpResponse
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponseRedirect, Http404, HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import loader, Context, RequestContext
# Helpdesk imports
from helpdesk.forms import TicketForm
from helpdesk.models import Ticket, Queue, FollowUp, TicketChange, PreSetReply
from helpdesk.lib import send_multipart_mail
from helpdesk.models import Ticket, Queue, FollowUp, TicketChange, PreSetReply
def dashboard(request):
tickets = Ticket.objects.filter(assigned_to=request.user).exclude(status=Ticket.CLOSED_STATUS)
@ -67,6 +68,12 @@ def view_ticket(request, ticket_id):
if request.GET.has_key('take'):
ticket.assigned_to = request.user
ticket.save()
if request.GET.has_key('delete'):
if request.method == 'GET':
else:
ticket.delete()
return HttpResponseRedirect(reverse('helpdesk_dashboard'))
if request.GET.has_key('close') and ticket.status == Ticket.RESOLVED_STATUS:
if not ticket.assigned_to: