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 get_form_kwargs(self): return super().get_form_kwargs() | { "user": self.request.user, }
[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)