fix unassign action in update ticket + refactor the get_active_users function into lib

This commit is contained in:
Benbb96
2025-08-05 10:27:02 +02:00
parent 948ac56b29
commit 901f2c176e
4 changed files with 33 additions and 38 deletions

View File

@@ -15,7 +15,12 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from helpdesk import settings as helpdesk_settings from helpdesk import settings as helpdesk_settings
from helpdesk.lib import convert_value, process_attachments, safe_template_context from helpdesk.lib import (
convert_value,
process_attachments,
safe_template_context,
get_active_users,
)
from helpdesk.models import ( from helpdesk.models import (
Checklist, Checklist,
ChecklistTemplate, ChecklistTemplate,
@@ -472,16 +477,8 @@ class TicketForm(AbstractTicketForm):
if queue_choices: if queue_choices:
self.fields["queue"].choices = queue_choices self.fields["queue"].choices = queue_choices
self.fields["body"].required = body_reqd self.fields["body"].required = body_reqd
if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
assignable_users = User.objects.filter(
is_active=True, is_staff=True
).order_by(User.USERNAME_FIELD)
else:
assignable_users = User.objects.filter(is_active=True).order_by(
User.USERNAME_FIELD
)
self.fields["assigned_to"].choices = [("", "--------")] + [ self.fields["assigned_to"].choices = [("", "--------")] + [
(u.id, u.get_username()) for u in assignable_users (u.id, u.get_username()) for u in get_active_users()
] ]
self._add_form_custom_fields() self._add_form_custom_fields()

View File

@@ -6,21 +6,21 @@ django-helpdesk - A Django powered ticket tracker for small enterprise.
lib.py - Common functions (eg multipart e-mail) lib.py - Common functions (eg multipart e-mail)
""" """
from datetime import date, datetime, time
from django.conf import settings
from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.utils.encoding import smart_str
from helpdesk.settings import (
CUSTOMFIELD_DATE_FORMAT,
CUSTOMFIELD_DATETIME_FORMAT,
CUSTOMFIELD_TIME_FORMAT,
)
import logging import logging
import mimetypes import mimetypes
from datetime import date, datetime, time
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.db.models.query import QuerySet
from django.utils.encoding import smart_str
from helpdesk import settings as helpdesk_settings
logger = logging.getLogger("helpdesk") logger = logging.getLogger("helpdesk")
User = get_user_model()
def ticket_template_context(ticket): def ticket_template_context(ticket):
context = {} context = {}
@@ -205,11 +205,11 @@ def format_time_spent(time_spent):
def convert_value(value): def convert_value(value):
"""Convert date/time data type to known fixed format string""" """Convert date/time data type to known fixed format string"""
if type(value) is datetime: if type(value) is datetime:
return value.strftime(CUSTOMFIELD_DATETIME_FORMAT) return value.strftime(helpdesk_settings.CUSTOMFIELD_DATETIME_FORMAT)
elif type(value) is date: elif type(value) is date:
return value.strftime(CUSTOMFIELD_DATE_FORMAT) return value.strftime(helpdesk_settings.CUSTOMFIELD_DATE_FORMAT)
elif type(value) is time: elif type(value) is time:
return value.strftime(CUSTOMFIELD_TIME_FORMAT) return value.strftime(helpdesk_settings.CUSTOMFIELD_TIME_FORMAT)
else: else:
return value return value
@@ -282,3 +282,12 @@ def daily_time_spent_calculation(earliest, latest, open_hours):
time_spent_seconds += day_delta.seconds time_spent_seconds += day_delta.seconds
return time_spent_seconds return time_spent_seconds
def get_active_users() -> QuerySet:
users = User.objects.filter(is_active=True).order_by(User.USERNAME_FIELD)
if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
users = users.filter(is_staff=True)
return users

View File

@@ -299,7 +299,7 @@ def update_ticket(
f.ticketchange_set.create( f.ticketchange_set.create(
field=_("Owner"), field=_("Owner"),
old_value=old_owner, old_value=old_owner,
new_value=ticket.assigned_to, new_value=ticket.assigned_to if ticket.assigned_to else _("Unassigned"),
) )
if priority != ticket.priority: if priority != ticket.priority:

View File

@@ -21,7 +21,6 @@ from django.core.exceptions import PermissionDenied
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.db.models import Q, Case, When from django.db.models import Q, Case, When
from django.db.models.query import QuerySet
from django.forms import HiddenInput, inlineformset_factory, TextInput from django.forms import HiddenInput, inlineformset_factory, TextInput
from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
@@ -57,7 +56,7 @@ from helpdesk.forms import (
TicketResolvesForm, TicketResolvesForm,
UserSettingsForm, UserSettingsForm,
) )
from helpdesk.lib import queue_template_context, safe_template_context from helpdesk.lib import queue_template_context, safe_template_context, get_active_users
from helpdesk.models import ( from helpdesk.models import (
Checklist, Checklist,
ChecklistTask, ChecklistTask,
@@ -127,16 +126,6 @@ def _get_queue_choices(queues):
return queue_choices return queue_choices
def get_active_users() -> QuerySet:
if helpdesk_settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS:
users = User.objects.filter(is_active=True, is_staff=True).order_by(
User.USERNAME_FIELD
)
else:
users = User.objects.filter(is_active=True).order_by(User.USERNAME_FIELD)
return users
def get_user_queues(user) -> dict[str, str]: def get_user_queues(user) -> dict[str, str]:
queues = HelpdeskUser(user).get_queues() queues = HelpdeskUser(user).get_queues()
return _get_queue_choices(queues) return _get_queue_choices(queues)
@@ -675,9 +664,9 @@ def save_ticket_update(form, ticket, user):
comment=comment, comment=comment,
files=form.files.getlist("attachment"), files=form.files.getlist("attachment"),
public=form.data.get("public", False), public=form.data.get("public", False),
owner=owner or -1, owner=owner,
priority=priority or -1, priority=priority,
queue=queue or -1, queue=queue,
new_status=new_status, new_status=new_status,
time_spent=get_time_spent_from_form(form), time_spent=get_time_spent_from_form(form),
due_date=due_date, due_date=due_date,