262 lines
7.6 KiB
Python
262 lines
7.6 KiB
Python
"""
|
|
forms.py
|
|
|
|
This module contains the form classes used in the application.
|
|
|
|
Each form represents a specific functionality or data input in the
|
|
application. They are responsible for validating
|
|
and processing user input data.
|
|
|
|
Classes:
|
|
- YourForm: Represents a form for handling specific data input.
|
|
|
|
Usage:
|
|
from django import forms
|
|
|
|
class YourForm(forms.Form):
|
|
field_name = forms.CharField()
|
|
|
|
def clean_field_name(self):
|
|
# Custom validation logic goes here
|
|
pass
|
|
"""
|
|
|
|
from typing import Any
|
|
|
|
from django import forms
|
|
from django.template.loader import render_to_string
|
|
|
|
from base.forms import ModelForm
|
|
from base.methods import filtersubordinatesemployeemodel, is_reportingmanager
|
|
from base.models import Department, JobPosition
|
|
from employee.forms import MultipleFileField
|
|
from employee.models import Employee
|
|
from helpdesk.models import (
|
|
FAQ,
|
|
Attachment,
|
|
Comment,
|
|
DepartmentManager,
|
|
FAQCategory,
|
|
Ticket,
|
|
TicketType,
|
|
)
|
|
from horilla import horilla_middlewares
|
|
|
|
|
|
class TicketTypeForm(ModelForm):
|
|
|
|
class Meta:
|
|
model = TicketType
|
|
fields = "__all__"
|
|
exclude = ["is_active"]
|
|
|
|
def as_p(self, *args, **kwargs):
|
|
"""
|
|
Render the form fields as HTML table rows with Bootstrap styling.
|
|
"""
|
|
context = {"form": self}
|
|
table_html = render_to_string("horilla_form.html", context)
|
|
return table_html
|
|
|
|
|
|
class FAQForm(ModelForm):
|
|
class Meta:
|
|
model = FAQ
|
|
fields = "__all__"
|
|
exclude = ["is_active"]
|
|
widgets = {
|
|
"category": forms.HiddenInput(),
|
|
"tags": forms.SelectMultiple(
|
|
attrs={
|
|
"class": "oh-select oh-select-2 select2-hidden-accessible",
|
|
"onchange": "updateTag(this)",
|
|
}
|
|
),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
"""
|
|
Initializes the Ticket tag form instance.
|
|
If an instance is provided, sets the initial value for the form's .
|
|
"""
|
|
super().__init__(*args, **kwargs)
|
|
self.fields["tags"].choices = list(self.fields["tags"].choices)
|
|
self.fields["tags"].choices.append(("create_new_tag", "Create new tag"))
|
|
|
|
|
|
class TicketForm(ModelForm):
|
|
|
|
class Meta:
|
|
model = Ticket
|
|
fields = [
|
|
"id",
|
|
"title",
|
|
"employee_id",
|
|
"description",
|
|
"ticket_type",
|
|
"priority",
|
|
"assigning_type",
|
|
"raised_on",
|
|
"deadline",
|
|
"status",
|
|
"tags",
|
|
]
|
|
widgets = {
|
|
"raised_on": forms.Select(
|
|
attrs={"class": "oh-select oh-select-2", "required": "true"}
|
|
),
|
|
"description": forms.Textarea(
|
|
attrs={
|
|
"data-summernote": True,
|
|
"hidden": True,
|
|
}
|
|
),
|
|
}
|
|
|
|
def as_p(self, *args, **kwargs):
|
|
"""
|
|
Render the form fields as HTML table rows with Bootstrap styling.
|
|
"""
|
|
context = {"form": self}
|
|
table_html = render_to_string("horilla_form.html", context)
|
|
return table_html
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
if self.instance and self.instance.pk:
|
|
self.fields.pop("attachment", None)
|
|
else:
|
|
self.fields["attachment"] = MultipleFileField(
|
|
label="Attachements", required=False
|
|
)
|
|
request = getattr(horilla_middlewares._thread_locals, "request", None)
|
|
instance = kwargs.get("instance")
|
|
if instance:
|
|
employee = instance.employee_id
|
|
else:
|
|
employee = request.user.employee_get
|
|
# initialising employee queryset according to the user
|
|
self.fields["employee_id"].queryset = filtersubordinatesemployeemodel(
|
|
request, Employee.objects.filter(is_active=True), perm="helpdesk.add_ticket"
|
|
) | Employee.objects.filter(employee_user_id=request.user)
|
|
self.fields["employee_id"].initial = employee
|
|
# appending dynamic create option according to user
|
|
if is_reportingmanager(request) or request.user.has_perm(
|
|
"helpdesk.add_tickettype"
|
|
):
|
|
self.fields["ticket_type"].choices = list(
|
|
self.fields["ticket_type"].choices
|
|
)
|
|
self.fields["ticket_type"].choices.append(
|
|
("create_new_ticket_type", "Create new ticket type")
|
|
)
|
|
if is_reportingmanager(request) or request.user.has_perm("base.add_tags"):
|
|
self.fields["tags"].choices = list(self.fields["tags"].choices)
|
|
self.fields["tags"].choices.append(("create_new_tag", "Create new tag"))
|
|
|
|
|
|
class TicketTagForm(ModelForm):
|
|
class Meta:
|
|
model = Ticket
|
|
fields = [
|
|
"tags",
|
|
]
|
|
widgets = {
|
|
"tags": forms.SelectMultiple(
|
|
attrs={
|
|
"class": "oh-select oh-select-2 select2-hidden-accessible",
|
|
"onchange": "updateTag()",
|
|
}
|
|
),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
"""
|
|
Initializes the Ticket tag form instance.
|
|
If an instance is provided, sets the initial value for the form's .
|
|
"""
|
|
super().__init__(*args, **kwargs)
|
|
request = getattr(horilla_middlewares._thread_locals, "request", None)
|
|
if is_reportingmanager(request) or request.user.has_perm("base.add_tags"):
|
|
self.fields["tags"].choices = list(self.fields["tags"].choices)
|
|
self.fields["tags"].choices.append(("create_new_tag", "Create new tag"))
|
|
|
|
|
|
class TicketRaisedOnForm(ModelForm):
|
|
class Meta:
|
|
model = Ticket
|
|
fields = ["assigning_type", "raised_on"]
|
|
widgets = {
|
|
"raised_on": forms.Select(
|
|
attrs={"class": "oh-select oh-select-2", "required": "true"},
|
|
),
|
|
}
|
|
|
|
|
|
class TicketAssigneesForm(ModelForm):
|
|
class Meta:
|
|
model = Ticket
|
|
fields = [
|
|
"assigned_to",
|
|
]
|
|
|
|
|
|
class FAQCategoryForm(ModelForm):
|
|
class Meta:
|
|
model = FAQCategory
|
|
fields = "__all__"
|
|
exclude = ["is_active"]
|
|
|
|
|
|
class CommentForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Comment
|
|
fields = [
|
|
"comment",
|
|
]
|
|
exclude = ["is_active"]
|
|
widgets = {"employee_id": forms.HiddenInput()}
|
|
|
|
|
|
class AttachmentForm(forms.ModelForm):
|
|
file = forms.FileField(
|
|
widget=forms.TextInput(
|
|
attrs={
|
|
"name": "file",
|
|
"type": "File",
|
|
"class": "form-control",
|
|
"multiple": "True",
|
|
}
|
|
),
|
|
label="",
|
|
)
|
|
|
|
class Meta:
|
|
model = Attachment
|
|
fields = ["file", "comment", "ticket"]
|
|
exclude = ["is_active"]
|
|
|
|
|
|
class DepartmentManagerCreateForm(ModelForm):
|
|
class Meta:
|
|
model = DepartmentManager
|
|
fields = ["department", "manager"]
|
|
widgets = {
|
|
"department": forms.Select(
|
|
attrs={
|
|
"onchange": "getDepartmentEmployees($(this))",
|
|
}
|
|
),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
if "instance" in kwargs:
|
|
department = kwargs["instance"].department
|
|
# Get the employees related to this department
|
|
employees = department.employeeworkinformation_set.values_list(
|
|
"employee_id", flat=True
|
|
)
|
|
# Set the manager field queryset to be those employees
|
|
self.fields["manager"].queryset = Employee.objects.filter(id__in=employees)
|