Source code for ferrosoft.apps.ticketing.views
import logging
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import redirect
from django.views.generic import DetailView, CreateView
from django.utils.translation import gettext_lazy as _
from ferrosoft.apps.ferrobase.models import LocalUser
from ferrosoft.apps.ferrobase.services.taskqueue import background_task_tenant
from ferrosoft.apps.ferrobase.views import PlatformActivityMixin
from ferrosoft.apps.ticketing.forms import TicketCreationForm, TicketCommentForm
from ferrosoft.apps.ticketing.models import Ticket, Comment
[docs]
class TicketCreateView(LoginRequiredMixin, PlatformActivityMixin, CreateView):
form_class = TicketCreationForm
template_name = "ticketing/index.html"
activity_title = _("New ticket")
[docs]
def form_valid(self, form):
response = super().form_valid(form)
try:
background_task_tenant(
"ferrosoft.apps.ticketing.tasks.create_ticket",
ticket=self.object,
)
background_task_tenant(
"ferrosoft.apps.ticketing.tasks.send_ticket_email",
ticket_url=self.request.build_absolute_uri(
self.object.get_absolute_url()
),
email=self.request.user.email,
ticket=self.object,
)
except Exception:
logging.exception("Could not run tasks after ticket creation")
return response
[docs]
class TicketDetailView(LoginRequiredMixin, PlatformActivityMixin, DetailView):
model = Ticket
template_name = "ticketing/ticket_detail.html"
activity_title = _("Ticket")
context_object_name = "ticket"
[docs]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["comments"] = self.object.comments.all()
context["comment_form"] = TicketCommentForm()
return context
[docs]
class AddCommentView(LoginRequiredMixin, CreateView):
model = Comment
form_class = TicketCommentForm
template_name = "ticketing/comment.html"
[docs]
def get_form_kwargs(self):
kwargs = super().get_form_kwargs() | {
"user": LocalUser.load(self.request.user),
"ticket": Ticket.objects.get(pk=self.kwargs["pk"]),
}
return kwargs
[docs]
def form_valid(self, form):
comment = form.save()
background_task_tenant(
"ferrosoft.apps.ticketing.tasks.add_comment",
ticket_id=comment.ticket.foreign_id,
content=comment.content,
)
return redirect("ticketing:ticket_detail", pk=comment.ticket.id)