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