mirror of
https://gitea.mueller.network/extern/django-helpdesk.git
synced 2025-02-02 19:39:14 +01:00
* Fix inline models in Admin
* Use signals correctly (Thanks, David Clymer)
This commit is contained in:
parent
c762313e08
commit
4d6859ba42
23
admin.py
23
admin.py
@ -1,6 +1,7 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from helpdesk.models import Queue, Ticket, FollowUp, PreSetReply, KBCategory
|
from helpdesk.models import Queue, Ticket, FollowUp, PreSetReply, KBCategory
|
||||||
from helpdesk.models import EscalationExclusion, EmailTemplate, KBItem
|
from helpdesk.models import EscalationExclusion, EmailTemplate, KBItem
|
||||||
|
from helpdesk.models import TicketChange, Attachment
|
||||||
|
|
||||||
class QueueAdmin(admin.ModelAdmin):
|
class QueueAdmin(admin.ModelAdmin):
|
||||||
list_display = ('title', 'slug', 'email_address')
|
list_display = ('title', 'slug', 'email_address')
|
||||||
@ -10,17 +11,23 @@ class TicketAdmin(admin.ModelAdmin):
|
|||||||
date_hierarchy = 'created'
|
date_hierarchy = 'created'
|
||||||
list_filter = ('assigned_to', 'status', )
|
list_filter = ('assigned_to', 'status', )
|
||||||
|
|
||||||
class GenericAdmin(admin.ModelAdmin):
|
class TicketChangeInline(admin.StackedInline):
|
||||||
pass
|
model = TicketChange
|
||||||
|
|
||||||
|
class AttachmentInline(admin.StackedInline):
|
||||||
|
model = Attachment
|
||||||
|
|
||||||
|
class FollowUpAdmin(admin.ModelAdmin):
|
||||||
|
inlines = [TicketChangeInline, AttachmentInline]
|
||||||
|
|
||||||
class PreSetReplyAdmin(admin.ModelAdmin):
|
class PreSetReplyAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name',)
|
list_display = ('name',)
|
||||||
|
|
||||||
admin.site.register(Ticket, TicketAdmin)
|
admin.site.register(Ticket, TicketAdmin)
|
||||||
admin.site.register(Queue, QueueAdmin)
|
admin.site.register(Queue, QueueAdmin)
|
||||||
admin.site.register(FollowUp, GenericAdmin)
|
admin.site.register(FollowUp, FollowUpAdmin)
|
||||||
admin.site.register(PreSetReply, GenericAdmin)
|
admin.site.register(PreSetReply)
|
||||||
admin.site.register(EscalationExclusion, GenericAdmin)
|
admin.site.register(EscalationExclusion)
|
||||||
admin.site.register(EmailTemplate, GenericAdmin)
|
admin.site.register(EmailTemplate)
|
||||||
admin.site.register(KBCategory, GenericAdmin)
|
admin.site.register(KBCategory)
|
||||||
admin.site.register(KBItem, GenericAdmin)
|
admin.site.register(KBItem)
|
||||||
|
17
models.py
17
models.py
@ -12,7 +12,6 @@ from datetime import datetime
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.dispatch import dispatcher
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
class Queue(models.Model):
|
class Queue(models.Model):
|
||||||
@ -243,10 +242,10 @@ class TicketChange(models.Model):
|
|||||||
""" For each FollowUp, any changes to the parent ticket (eg Title, Priority,
|
""" For each FollowUp, any changes to the parent ticket (eg Title, Priority,
|
||||||
etc) are tracked here for display purposes.
|
etc) are tracked here for display purposes.
|
||||||
"""
|
"""
|
||||||
followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
|
followup = models.ForeignKey(FollowUp)
|
||||||
field = models.CharField(_('Field'), max_length=100, core=True)
|
field = models.CharField(_('Field'), max_length=100)
|
||||||
old_value = models.TextField(_('Old Value'), blank=True, null=True, core=True)
|
old_value = models.TextField(_('Old Value'), blank=True, null=True)
|
||||||
new_value = models.TextField(_('New Value'), blank=True, null=True, core=True)
|
new_value = models.TextField(_('New Value'), blank=True, null=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
str = u'%s ' % field
|
str = u'%s ' % field
|
||||||
@ -274,9 +273,9 @@ class DynamicFileField(models.FileField):
|
|||||||
def contribute_to_class(self, cls, name):
|
def contribute_to_class(self, cls, name):
|
||||||
"""Hook up events so we can access the instance."""
|
"""Hook up events so we can access the instance."""
|
||||||
super(DynamicFileField, self).contribute_to_class(cls, name)
|
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."""
|
"""Get dynamic upload_to value from the model instance."""
|
||||||
if hasattr(instance, 'get_upload_to'):
|
if hasattr(instance, 'get_upload_to'):
|
||||||
self.upload_to = instance.get_upload_to(self.attname)
|
self.upload_to = instance.get_upload_to(self.attname)
|
||||||
@ -286,8 +285,8 @@ class DynamicFileField(models.FileField):
|
|||||||
return 'varchar(100)'
|
return 'varchar(100)'
|
||||||
|
|
||||||
class Attachment(models.Model):
|
class Attachment(models.Model):
|
||||||
followup = models.ForeignKey(FollowUp, edit_inline=models.TABULAR)
|
followup = models.ForeignKey(FollowUp)
|
||||||
file = DynamicFileField(_('File'), upload_to='helpdesk/attachments', core=True)
|
file = DynamicFileField(_('File'), upload_to='helpdesk/attachments')
|
||||||
filename = models.CharField(_('Filename'), max_length=100)
|
filename = models.CharField(_('Filename'), max_length=100)
|
||||||
mime_type = models.CharField(_('MIME Type'), max_length=30)
|
mime_type = models.CharField(_('MIME Type'), max_length=30)
|
||||||
size = models.IntegerField(_('Size'), help_text=_('Size of this file in bytes'))
|
size = models.IntegerField(_('Size'), help_text=_('Size of this file in bytes'))
|
||||||
|
@ -17,6 +17,8 @@ from email.Utils import parseaddr
|
|||||||
from helpdesk.models import Queue, Ticket, FollowUp, Attachment
|
from helpdesk.models import Queue, Ticket, FollowUp, Attachment
|
||||||
from helpdesk.lib import send_templated_mail
|
from helpdesk.lib import send_templated_mail
|
||||||
|
|
||||||
|
from django.core.files.base import ContentFile
|
||||||
|
|
||||||
def process_email():
|
def process_email():
|
||||||
for q in Queue.objects.filter(email_box_type__isnull=False, allow_email_submission=True):
|
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)
|
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:
|
for file in files:
|
||||||
filename = file['filename'].replace(' ', '_')
|
filename = file['filename'].replace(' ', '_')
|
||||||
a = Attachment(followup=f, filename=filename, mime_type=file['type'], size=len(file['content']))
|
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()
|
a.save()
|
||||||
print " - %s" % file['filename']
|
print " - %s" % file['filename']
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.core.files.base import ContentFile
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import HttpResponseRedirect, Http404, HttpResponse
|
from django.http import HttpResponseRedirect, Http404, HttpResponse
|
||||||
@ -194,7 +195,8 @@ def update_ticket(request, ticket_id):
|
|||||||
for file in request.FILES.getlist('attachment'):
|
for file in request.FILES.getlist('attachment'):
|
||||||
filename = file['filename'].replace(' ', '_')
|
filename = file['filename'].replace(' ', '_')
|
||||||
a = Attachment(followup=f, filename=filename, mime_type=file['content-type'], size=len(file['content']))
|
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()
|
a.save()
|
||||||
|
|
||||||
ticket.save()
|
ticket.save()
|
||||||
|
Loading…
Reference in New Issue
Block a user