mirror of
https://github.com/django-helpdesk/django-helpdesk.git
synced 2024-12-14 02:41:26 +01:00
Merge pull request #215 from Inboxen/form-mixin
Move CustomField to field class code to a mixin
This commit is contained in:
commit
c4fdbb554c
@ -24,29 +24,11 @@ from helpdesk.lib import send_templated_mail, safe_template_context
|
||||
from helpdesk.models import Ticket, Queue, FollowUp, Attachment, IgnoreEmail, TicketCC, CustomField, TicketCustomFieldValue, TicketDependency
|
||||
from helpdesk import settings as helpdesk_settings
|
||||
|
||||
class EditTicketForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
exclude = ('created', 'modified', 'status', 'on_hold', 'resolution', 'last_escalation', 'assigned_to')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
class CustomFieldMixin(object):
|
||||
"""
|
||||
Add any custom fields that are defined to the form
|
||||
Mixin that provides a method to turn CustomFields into an actual field
|
||||
"""
|
||||
super(EditTicketForm, self).__init__(*args, **kwargs)
|
||||
|
||||
for field in CustomField.objects.all():
|
||||
try:
|
||||
current_value = TicketCustomFieldValue.objects.get(ticket=self.instance, field=field)
|
||||
initial_value = current_value.value
|
||||
except TicketCustomFieldValue.DoesNotExist:
|
||||
initial_value = None
|
||||
instanceargs = {
|
||||
'label': field.label,
|
||||
'help_text': field.help_text,
|
||||
'required': field.required,
|
||||
'initial': initial_value,
|
||||
}
|
||||
def customfield_to_field(self, field, instanceargs):
|
||||
if field.data_type == 'varchar':
|
||||
fieldclass = forms.CharField
|
||||
instanceargs['max_length'] = field.max_length
|
||||
@ -85,6 +67,32 @@ class EditTicketForm(forms.ModelForm):
|
||||
|
||||
self.fields['custom_%s' % field.name] = fieldclass(**instanceargs)
|
||||
|
||||
class EditTicketForm(CustomFieldMixin, forms.ModelForm):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
exclude = ('created', 'modified', 'status', 'on_hold', 'resolution', 'last_escalation', 'assigned_to')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""
|
||||
Add any custom fields that are defined to the form
|
||||
"""
|
||||
super(EditTicketForm, self).__init__(*args, **kwargs)
|
||||
|
||||
for field in CustomField.objects.all():
|
||||
try:
|
||||
current_value = TicketCustomFieldValue.objects.get(ticket=self.instance, field=field)
|
||||
initial_value = current_value.value
|
||||
except TicketCustomFieldValue.DoesNotExist:
|
||||
initial_value = None
|
||||
instanceargs = {
|
||||
'label': field.label,
|
||||
'help_text': field.help_text,
|
||||
'required': field.required,
|
||||
'initial': initial_value,
|
||||
}
|
||||
|
||||
self.customfield_to_field(field, instanceargs)
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
@ -111,7 +119,7 @@ class EditFollowUpForm(forms.ModelForm):
|
||||
model = FollowUp
|
||||
exclude = ('date', 'user',)
|
||||
|
||||
class TicketForm(forms.Form):
|
||||
class TicketForm(CustomFieldMixin, forms.Form):
|
||||
queue = forms.ChoiceField(
|
||||
label=_('Queue'),
|
||||
required=True,
|
||||
@ -186,44 +194,8 @@ class TicketForm(forms.Form):
|
||||
'help_text': field.help_text,
|
||||
'required': field.required,
|
||||
}
|
||||
if field.data_type == 'varchar':
|
||||
fieldclass = forms.CharField
|
||||
instanceargs['max_length'] = field.max_length
|
||||
elif field.data_type == 'text':
|
||||
fieldclass = forms.CharField
|
||||
instanceargs['widget'] = forms.Textarea
|
||||
instanceargs['max_length'] = field.max_length
|
||||
elif field.data_type == 'integer':
|
||||
fieldclass = forms.IntegerField
|
||||
elif field.data_type == 'decimal':
|
||||
fieldclass = forms.DecimalField
|
||||
instanceargs['decimal_places'] = field.decimal_places
|
||||
instanceargs['max_digits'] = field.max_length
|
||||
elif field.data_type == 'list':
|
||||
fieldclass = forms.ChoiceField
|
||||
choices = field.choices_as_array
|
||||
if field.empty_selection_list:
|
||||
choices.insert(0, ('','---------' ) )
|
||||
instanceargs['choices'] = choices
|
||||
elif field.data_type == 'boolean':
|
||||
fieldclass = forms.BooleanField
|
||||
elif field.data_type == 'date':
|
||||
fieldclass = forms.DateField
|
||||
instanceargs['widget'] = extras.SelectDateWidget
|
||||
elif field.data_type == 'time':
|
||||
fieldclass = forms.TimeField
|
||||
elif field.data_type == 'datetime':
|
||||
fieldclass = forms.DateTimeField
|
||||
elif field.data_type == 'email':
|
||||
fieldclass = forms.EmailField
|
||||
elif field.data_type == 'url':
|
||||
fieldclass = forms.URLField
|
||||
elif field.data_type == 'ipaddress':
|
||||
fieldclass = forms.IPAddressField
|
||||
elif field.data_type == 'slug':
|
||||
fieldclass = forms.SlugField
|
||||
|
||||
self.fields['custom_%s' % field.name] = fieldclass(**instanceargs)
|
||||
self.customfield_to_field(field, instanceargs)
|
||||
|
||||
|
||||
def save(self, user):
|
||||
@ -347,7 +319,7 @@ class TicketForm(forms.Form):
|
||||
return t
|
||||
|
||||
|
||||
class PublicTicketForm(forms.Form):
|
||||
class PublicTicketForm(CustomFieldMixin, forms.Form):
|
||||
queue = forms.ChoiceField(
|
||||
label=_('Queue'),
|
||||
required=True,
|
||||
@ -406,43 +378,8 @@ class PublicTicketForm(forms.Form):
|
||||
'help_text': field.help_text,
|
||||
'required': field.required,
|
||||
}
|
||||
if field.data_type == 'varchar':
|
||||
fieldclass = forms.CharField
|
||||
instanceargs['max_length'] = field.max_length
|
||||
elif field.data_type == 'text':
|
||||
fieldclass = forms.CharField
|
||||
instanceargs['widget'] = forms.Textarea
|
||||
instanceargs['max_length'] = field.max_length
|
||||
elif field.data_type == 'integer':
|
||||
fieldclass = forms.IntegerField
|
||||
elif field.data_type == 'decimal':
|
||||
fieldclass = forms.DecimalField
|
||||
instanceargs['decimal_places'] = field.decimal_places
|
||||
instanceargs['max_digits'] = field.max_length
|
||||
elif field.data_type == 'list':
|
||||
fieldclass = forms.ChoiceField
|
||||
choices = field.choices_as_array
|
||||
if field.empty_selection_list:
|
||||
choices.insert(0, ('','---------' ) )
|
||||
instanceargs['choices'] = choices
|
||||
elif field.data_type == 'boolean':
|
||||
fieldclass = forms.BooleanField
|
||||
elif field.data_type == 'date':
|
||||
fieldclass = forms.DateField
|
||||
elif field.data_type == 'time':
|
||||
fieldclass = forms.TimeField
|
||||
elif field.data_type == 'datetime':
|
||||
fieldclass = forms.DateTimeField
|
||||
elif field.data_type == 'email':
|
||||
fieldclass = forms.EmailField
|
||||
elif field.data_type == 'url':
|
||||
fieldclass = forms.URLField
|
||||
elif field.data_type == 'ipaddress':
|
||||
fieldclass = forms.IPAddressField
|
||||
elif field.data_type == 'slug':
|
||||
fieldclass = forms.SlugField
|
||||
|
||||
self.fields['custom_%s' % field.name] = fieldclass(**instanceargs)
|
||||
self.customfield_to_field(field, instanceargs)
|
||||
|
||||
def save(self):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user