From 901f2c176eb71faf6ec0735bbe56f95e756acf3c Mon Sep 17 00:00:00 2001 From: Benbb96 Date: Tue, 5 Aug 2025 10:27:02 +0200 Subject: [PATCH] fix unassign action in update ticket + refactor the get_active_users function into lib --- helpdesk/forms.py | 17 +++++++---------- helpdesk/lib.py | 33 +++++++++++++++++++++------------ helpdesk/update_ticket.py | 2 +- helpdesk/views/staff.py | 19 ++++--------------- 4 files changed, 33 insertions(+), 38 deletions(-) diff --git a/helpdesk/forms.py b/helpdesk/forms.py index 0733828c..4d811a15 100644 --- a/helpdesk/forms.py +++ b/helpdesk/forms.py @@ -15,7 +15,12 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.utils import timezone from django.utils.translation import gettext_lazy as _ 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 ( Checklist, ChecklistTemplate, @@ -472,16 +477,8 @@ class TicketForm(AbstractTicketForm): if queue_choices: self.fields["queue"].choices = queue_choices 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 = [("", "--------")] + [ - (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() diff --git a/helpdesk/lib.py b/helpdesk/lib.py index 5f7697e4..9132650d 100644 --- a/helpdesk/lib.py +++ b/helpdesk/lib.py @@ -6,21 +6,21 @@ django-helpdesk - A Django powered ticket tracker for small enterprise. 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 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") +User = get_user_model() + def ticket_template_context(ticket): context = {} @@ -205,11 +205,11 @@ def format_time_spent(time_spent): def convert_value(value): """Convert date/time data type to known fixed format string""" if type(value) is datetime: - return value.strftime(CUSTOMFIELD_DATETIME_FORMAT) + return value.strftime(helpdesk_settings.CUSTOMFIELD_DATETIME_FORMAT) elif type(value) is date: - return value.strftime(CUSTOMFIELD_DATE_FORMAT) + return value.strftime(helpdesk_settings.CUSTOMFIELD_DATE_FORMAT) elif type(value) is time: - return value.strftime(CUSTOMFIELD_TIME_FORMAT) + return value.strftime(helpdesk_settings.CUSTOMFIELD_TIME_FORMAT) else: return value @@ -282,3 +282,12 @@ def daily_time_spent_calculation(earliest, latest, open_hours): time_spent_seconds += day_delta.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 diff --git a/helpdesk/update_ticket.py b/helpdesk/update_ticket.py index 9922275e..626a50e8 100644 --- a/helpdesk/update_ticket.py +++ b/helpdesk/update_ticket.py @@ -299,7 +299,7 @@ def update_ticket( f.ticketchange_set.create( field=_("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: diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 024c3b20..c7b5c855 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -21,7 +21,6 @@ from django.core.exceptions import PermissionDenied from django.core.handlers.wsgi import WSGIRequest from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator 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.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import get_object_or_404, redirect, render @@ -57,7 +56,7 @@ from helpdesk.forms import ( TicketResolvesForm, 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 ( Checklist, ChecklistTask, @@ -127,16 +126,6 @@ def _get_queue_choices(queues): 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]: queues = HelpdeskUser(user).get_queues() return _get_queue_choices(queues) @@ -675,9 +664,9 @@ def save_ticket_update(form, ticket, user): comment=comment, files=form.files.getlist("attachment"), public=form.data.get("public", False), - owner=owner or -1, - priority=priority or -1, - queue=queue or -1, + owner=owner, + priority=priority, + queue=queue, new_status=new_status, time_spent=get_time_spent_from_form(form), due_date=due_date,