diff --git a/admin.py b/admin.py index 97802584..170f5c80 100644 --- a/admin.py +++ b/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin from helpdesk.models import Queue, Ticket, FollowUp, PreSetReply, KBCategory from helpdesk.models import EscalationExclusion, EmailTemplate, KBItem +from helpdesk.models import TicketChange, Attachment class QueueAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'email_address') @@ -10,17 +11,23 @@ class TicketAdmin(admin.ModelAdmin): date_hierarchy = 'created' list_filter = ('assigned_to', 'status', ) -class GenericAdmin(admin.ModelAdmin): - pass +class TicketChangeInline(admin.StackedInline): + model = TicketChange + +class AttachmentInline(admin.StackedInline): + model = Attachment + +class FollowUpAdmin(admin.ModelAdmin): + inlines = [TicketChangeInline, AttachmentInline] class PreSetReplyAdmin(admin.ModelAdmin): list_display = ('name',) admin.site.register(Ticket, TicketAdmin) admin.site.register(Queue, QueueAdmin) -admin.site.register(FollowUp, GenericAdmin) -admin.site.register(PreSetReply, GenericAdmin) -admin.site.register(EscalationExclusion, GenericAdmin) -admin.site.register(EmailTemplate, GenericAdmin) -admin.site.register(KBCategory, GenericAdmin) -admin.site.register(KBItem, GenericAdmin) +admin.site.register(FollowUp, FollowUpAdmin) +admin.site.register(PreSetReply) +admin.site.register(EscalationExclusion) +admin.site.register(EmailTemplate) +admin.site.register(KBCategory) +admin.site.register(KBItem) diff --git a/models.py b/models.py index ec89ebfa..4518b367 100644 --- a/models.py +++ b/models.py @@ -12,7 +12,6 @@ from datetime import datetime from django.contrib.auth.models import User from django.db import models from django.conf import settings -from django.dispatch import dispatcher from django.utils.translation import ugettext_lazy as _ class Queue(models.Model): @@ -243,10 +242,10 @@ class TicketChange(models.Model): """ For each FollowUp, any changes to the parent ticket (eg Title, Priority, etc) are tracked here for display purposes. """ - followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR) - field = models.CharField(_('Field'), max_length=100, core=True) - old_value = models.TextField(_('Old Value'), blank=True, null=True, core=True) - new_value = models.TextField(_('New Value'), blank=True, null=True, core=True) + followup = models.ForeignKey(FollowUp) + field = models.CharField(_('Field'), max_length=100) + old_value = models.TextField(_('Old Value'), blank=True, null=True) + new_value = models.TextField(_('New Value'), blank=True, null=True) def __unicode__(self): str = u'%s ' % field @@ -274,9 +273,9 @@ class DynamicFileField(models.FileField): def contribute_to_class(self, cls, name): """Hook up events so we can access the instance.""" super(DynamicFileField, self).contribute_to_class(cls, name) - dispatcher.connect(self._post_init, models.signals.post_init, sender=cls) + models.signals.post_init.connect(self._post_init, sender=cls) - def _post_init(self, instance=None): + def _post_init(self, instance=None, **kwargs): """Get dynamic upload_to value from the model instance.""" if hasattr(instance, 'get_upload_to'): self.upload_to = instance.get_upload_to(self.attname) @@ -286,8 +285,8 @@ class DynamicFileField(models.FileField): return 'varchar(100)' class Attachment(models.Model): - followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR) - file = DynamicFileField(_('File'), upload_to='helpdesk/attachments', core=True) + followup = models.ForeignKey(FollowUp) + file = DynamicFileField(_('File'), upload_to='helpdesk/attachments') filename = models.CharField(_('Filename'), max_length=100) mime_type = models.CharField(_('MIME Type'), max_length=30) size = models.IntegerField(_('Size'), help_text=_('Size of this file in bytes')) diff --git a/scripts/get_email.py b/scripts/get_email.py index 22285b25..94147dc0 100644 --- a/scripts/get_email.py +++ b/scripts/get_email.py @@ -17,6 +17,8 @@ from email.Utils import parseaddr from helpdesk.models import Queue, Ticket, FollowUp, Attachment from helpdesk.lib import send_templated_mail +from django.core.files.base import ContentFile + def process_email(): for q in Queue.objects.filter(email_box_type__isnull=False, allow_email_submission=True): if not q.email_box_last_check: q.email_box_last_check = datetime.now()-timedelta(minutes=30) @@ -173,7 +175,8 @@ def ticket_from_message(message, queue): for file in files: filename = file['filename'].replace(' ', '_') a = Attachment(followup=f, filename=filename, mime_type=file['type'], size=len(file['content'])) - a.save_file_file(file['filename'], file['content']) + #a.save_file_file(file['filename'], file['content']) + a.file.save(file['filename'], ContentFile(file['content'])) a.save() print " - %s" % file['filename'] diff --git a/views/staff.py b/views/staff.py index cbae660c..dc91ac24 100644 --- a/views/staff.py +++ b/views/staff.py @@ -10,6 +10,7 @@ from datetime import datetime from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required +from django.core.files.base import ContentFile from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponseRedirect, Http404, HttpResponse @@ -194,7 +195,8 @@ def update_ticket(request, ticket_id): for file in request.FILES.getlist('attachment'): filename = file['filename'].replace(' ', '_') a = Attachment(followup=f, filename=filename, mime_type=file['content-type'], size=len(file['content'])) - a.save_file_file(file['filename'], file['content']) + #a.save_file_file(file['filename'], file['content']) + a.file.save(file['filename'], ContentFile(file['content'])) a.save() ticket.save()