Source code for ferrosoft.apps.ticketing.forms
# Copyright (c) 2024 Ferrosoft GmbH. All rights reserved.
from django import forms
from django.forms import Textarea
from django.utils.translation import gettext as _
from ferrosoft.apps.ferrobase.models import IDSequence, LocalUser
from ferrosoft.apps.ferrobase.services.idgenerator import IdGeneratorPostgres
from ferrosoft.apps.ticketing.models import Ticket, TicketType, TicketPriority, Comment
[docs]
class TicketCreationForm(forms.ModelForm):
[docs]
class Meta:
model = Ticket
fields = [
"title",
"type",
"priority",
"description",
"attachment",
]
type = forms.ChoiceField(
choices=TicketType.choices,
widget=forms.Select(),
)
priority = forms.ChoiceField(
choices=TicketPriority.choices,
widget=forms.Select(),
)
attachment = forms.FileField(
required=False,
widget=forms.ClearableFileInput(),
)
def __init__(self, *args, **kwargs):
self.user = kwargs.pop("user")
super().__init__(*args, **kwargs)
[docs]
def save(self, commit=True):
instance = super().save(commit=False)
tk_generator = IdGeneratorPostgres.create(IDSequence.SUPPORT_TICKET)
instance.created_by = LocalUser.load(self.user)
instance.reference = tk_generator.next_id()
if commit:
instance.save()
return instance
[docs]
class TicketCommentForm(forms.ModelForm):
[docs]
class Meta:
model = Comment
fields = ["content"]
widgets = {
"content": Textarea(attrs={"rows": 3}),
}
def __init__(self, *args, **kwargs):
self.ticket = kwargs.pop("ticket", None)
self.user = kwargs.pop("user", None)
super().__init__(*args, **kwargs)
[docs]
def save(self, commit=True):
instance = super().save(commit=False)
instance.ticket = self.ticket
instance.created_by = self.user.username
if commit:
instance.save()
return instance