From 57984fe942680f1c56fb9d13e5d140856da20384 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 03:43:27 +0000 Subject: [PATCH 01/24] added option for ticket reassign --- helpdesk/settings.py | 3 +++ helpdesk/templates/helpdesk/ticket_desc_table.html | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/helpdesk/settings.py b/helpdesk/settings.py index 9170803b..990a2e44 100644 --- a/helpdesk/settings.py +++ b/helpdesk/settings.py @@ -366,6 +366,9 @@ HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr( settings, "HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO", False ) +# allow users to take tickets even if a ticket is already claimed. +HELPDESK_UNLOCK_TICKET_ASSIGNMENT = False + ################# # email options # diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 1a7771b5..714d0ea6 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -76,7 +76,7 @@ {% trans "Assigned To" %} {{ ticket.get_assigned_to }} - {% if _('Unassigned') == ticket.get_assigned_to %} + {% if _('Unassigned') == ticket.get_assigned_to or helpdesk_settings.HELPDESK_UNLOCK_TICKET_REASSIGNMENT %} @@ -164,7 +164,7 @@ - + {% for dep in dependencies %} @@ -174,11 +174,11 @@ - + {{ dep.depends_on.get_status_display }} {{ dep.depends_on.ticket }} {{ dep.depends_on.title }} - + {% if forloop.last %}{% endif %} {% empty %} From 2e91aaf8294986ae7b5d9fe4a346f295592ffca7 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 03:52:09 +0000 Subject: [PATCH 02/24] the feature is for reassignment not assignment --- helpdesk/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/settings.py b/helpdesk/settings.py index 990a2e44..dbe50bbf 100644 --- a/helpdesk/settings.py +++ b/helpdesk/settings.py @@ -367,7 +367,7 @@ HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr( ) # allow users to take tickets even if a ticket is already claimed. -HELPDESK_UNLOCK_TICKET_ASSIGNMENT = False +HELPDESK_UNLOCK_TICKET_REASSIGNMENT = False ################# From 3fca77a479b674038dcb6a3c6ddcdf6250da56d1 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 17:52:57 +0000 Subject: [PATCH 03/24] Always let users take a ticket --- helpdesk/settings.py | 4 ---- helpdesk/templates/helpdesk/ticket_desc_table.html | 8 +++----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/helpdesk/settings.py b/helpdesk/settings.py index dbe50bbf..91f60afe 100644 --- a/helpdesk/settings.py +++ b/helpdesk/settings.py @@ -366,10 +366,6 @@ HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = getattr( settings, "HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO", False ) -# allow users to take tickets even if a ticket is already claimed. -HELPDESK_UNLOCK_TICKET_REASSIGNMENT = False - - ################# # email options # ################# diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 714d0ea6..b968b4e1 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -76,11 +76,9 @@ {% trans "Assigned To" %} {{ ticket.get_assigned_to }} - {% if _('Unassigned') == ticket.get_assigned_to or helpdesk_settings.HELPDESK_UNLOCK_TICKET_REASSIGNMENT %} - - - - {% endif %} + + + {% trans "Submitter E-Mail" %} From 2d92859f50b1cf0799ff3c4f02e827282d852de9 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 18:53:22 +0000 Subject: [PATCH 04/24] dropdown works for assign --- .../templates/helpdesk/ticket_desc_table.html | 22 +++++++++++++++++++ helpdesk/views/public.py | 2 +- helpdesk/views/staff.py | 15 +++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index b968b4e1..023390e9 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -73,9 +73,31 @@ {{ ticket.created|date:"DATETIME_FORMAT" }} ({{ ticket.created|naturaltime }}) + {% trans "Assigned To" %} + {{ ticket.get_assigned_to }} +
+ {% csrf_token %} + + + +
+ + +
+
+ diff --git a/helpdesk/views/public.py b/helpdesk/views/public.py index 0f142c05..13867086 100644 --- a/helpdesk/views/public.py +++ b/helpdesk/views/public.py @@ -1,7 +1,7 @@ """ django-helpdesk - A Django powered ticket tracker for small enterprise. -(c) Copyright 2008 Jutda. All Rights Reserved. See LICENSE for details. +(c) Copyright 2008-2025 Jutda. All Rights Reserved. See LICENSE for details. views/public.py - All public facing views, eg non-staff (no authentication required) views. diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 024c3b20..8a60ff03 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -1,7 +1,7 @@ """ django-helpdesk - A Django powered ticket tracker for small enterprise. -(c) Copyright 2008 Jutda. All Rights Reserved. See LICENSE for details. +(c) Copyright 2008-2025 Jutda. All Rights Reserved. See LICENSE for details. views/staff.py - The bulk of the application - provides most business logic and renders all staff-facing views. @@ -87,6 +87,7 @@ import helpdesk.views.abstract_views as abstract_views from helpdesk.views.permissions import MustBeStaffMixin import json import re +import logging from rest_framework import status from rest_framework.decorators import api_view import typing @@ -96,6 +97,9 @@ from django.utils.timezone import now if helpdesk_settings.HELPDESK_KB_ENABLED: from helpdesk.models import KBItem +logger = logging.getLogger(__name__) + + DATE_RE: re.Pattern = re.compile( r"(?P\d{1,2})/(?P\d{1,2})/(?P\d{4})$" ) @@ -473,6 +477,10 @@ def view_ticket(request, ticket_id): # add custom fields to further details panel customfields_form = EditTicketCustomFieldForm(None, instance=ticket) + # Define users that the ticket can be assigned to + assignable_users = User.objects.filter(is_active=True).order_by('username') + logger.debug("Assignable users:", assignable_users) + return render( request, "helpdesk/ticket.html", @@ -488,6 +496,7 @@ def view_ticket(request, ticket_id): "SHOW_SUBSCRIBE": show_subscribe, "checklist_form": checklist_form, "customfields_form": customfields_form, + "assignable_users": assignable_users, **extra_context_kwargs, }, ) @@ -816,7 +825,9 @@ def mass_update(request): elif action == "delete": t.delete() - return HttpResponseRedirect(reverse("helpdesk:list")) + # Go to ticket template if from ticket or list template otherwise + next_url = request.POST.get("next") or reverse("helpdesk:list") + return HttpResponseRedirect(next_url) mass_update = staff_member_required(mass_update) From 83af45939f73e11920ecd7f7d59efe4f9bf2562e Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 18:57:06 +0000 Subject: [PATCH 05/24] organize assignment box --- helpdesk/templates/helpdesk/ticket_desc_table.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 023390e9..a2e17aa0 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -92,15 +92,19 @@ {% endfor %} + + + | + + + + + - - - - {% trans "Submitter E-Mail" %} From 9428304f3f3d025170a71b32dc6092d0a52970a3 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 1 Aug 2025 18:59:30 +0000 Subject: [PATCH 06/24] ruff format staff.py --- helpdesk/views/staff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 8a60ff03..21d3efa5 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -478,7 +478,7 @@ def view_ticket(request, ticket_id): customfields_form = EditTicketCustomFieldForm(None, instance=ticket) # Define users that the ticket can be assigned to - assignable_users = User.objects.filter(is_active=True).order_by('username') + assignable_users = User.objects.filter(is_active=True).order_by("username") logger.debug("Assignable users:", assignable_users) return render( From 5aae48ca86dd4cb1c066b58c5d3efca8feb6cc36 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Sat, 2 Aug 2025 01:50:18 +0000 Subject: [PATCH 07/24] reduce redundant current user entries in assign ticket --- helpdesk/templates/helpdesk/ticket_desc_table.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index a2e17aa0..c7b2784a 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -77,7 +77,6 @@ {% trans "Assigned To" %} - {{ ticket.get_assigned_to }}
{% csrf_token %} @@ -85,7 +84,7 @@
- From 305eb0f66542f7aa8aff73dc884149e30334a0de Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Mon, 4 Aug 2025 17:24:51 +0000 Subject: [PATCH 09/24] switch assign user to use use update ticket not mass --- .../templates/helpdesk/ticket_desc_table.html | 30 +++++++++++++++---- helpdesk/views/staff.py | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index b0f4afa6..cef6dd73 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -77,16 +77,21 @@ {% trans "Assigned To" %} - + {% csrf_token %} - + + + + + +
- + {% for user in assignable_users %} - {% endfor %} @@ -104,6 +109,21 @@
+ {% if form.errors %} +
+ Form Errors: +
    + {% for field in form %} + {% for error in field.errors %} +
  • {{ field.label }}: {{ error }}
  • + {% endfor %} + {% endfor %} + {% for error in form.non_field_errors %} +
  • {{ error }}
  • + {% endfor %} +
+
+ {% endif %} {% trans "Submitter E-Mail" %} diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 21d3efa5..711d76ae 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -479,7 +479,7 @@ def view_ticket(request, ticket_id): # Define users that the ticket can be assigned to assignable_users = User.objects.filter(is_active=True).order_by("username") - logger.debug("Assignable users:", assignable_users) + logger.debug("Assignable users: %s", assignable_users) return render( request, From 5d06d4c114bcc8a2933ef56632c7c9a382dcc33e Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Mon, 4 Aug 2025 17:28:10 +0000 Subject: [PATCH 10/24] revert multi page code for mass update --- helpdesk/views/staff.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 711d76ae..d104c636 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -825,9 +825,7 @@ def mass_update(request): elif action == "delete": t.delete() - # Go to ticket template if from ticket or list template otherwise - next_url = request.POST.get("next") or reverse("helpdesk:list") - return HttpResponseRedirect(next_url) + return HttpResponseRedirect(reverse("helpdesk:list")) mass_update = staff_member_required(mass_update) From e6d218728b4842051f4657a8e1280221427de8fd Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Mon, 4 Aug 2025 17:33:10 +0000 Subject: [PATCH 11/24] also filter users for ticket assign by staff=true --- helpdesk/views/staff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index d104c636..acb5914f 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -478,7 +478,7 @@ def view_ticket(request, ticket_id): customfields_form = EditTicketCustomFieldForm(None, instance=ticket) # Define users that the ticket can be assigned to - assignable_users = User.objects.filter(is_active=True).order_by("username") + assignable_users = User.objects.filter(is_active=True, is_staff=True).order_by("username") logger.debug("Assignable users: %s", assignable_users) return render( From 513812b0f5a0b36a0ca653b027d35311b7d3491b Mon Sep 17 00:00:00 2001 From: David Vadnais <56882532+DavidVadnais@users.noreply.github.com> Date: Mon, 4 Aug 2025 17:34:45 +0000 Subject: [PATCH 12/24] Add tooltip trans to save ticket asignment Co-authored-by: Benbb96 --- helpdesk/templates/helpdesk/ticket_desc_table.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index cef6dd73..0e580765 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -97,7 +97,7 @@ {% endfor %} - From bb3b86f5e08659ce8defb4c5a27278d19507017e Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Mon, 4 Aug 2025 17:42:59 +0000 Subject: [PATCH 13/24] add unassigned translation --- helpdesk/templates/helpdesk/ticket_desc_table.html | 2 +- helpdesk/views/staff.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 0e580765..4b866b90 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -89,7 +89,7 @@
- + {% for user in assignable_users %} {% endfor %} - - - + + +
| From 14a35fe3a316075bb941e01ba7ea3b07513f9b01 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Mon, 4 Aug 2025 18:07:58 +0000 Subject: [PATCH 16/24] bump version to 1.8.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9687b890..42f237b5 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ from setuptools import find_packages, setup import sys -version = "1.7.0" +version = "1.8.0" # Provided as an attribute, so you can append to these instead From eb764292132360f6f06d6480554772505cae3f68 Mon Sep 17 00:00:00 2001 From: David Vadnais <56882532+DavidVadnais@users.noreply.github.com> Date: Fri, 8 Aug 2025 01:58:06 +0000 Subject: [PATCH 17/24] Update helpdesk/templates/helpdesk/ticket_desc_table.html Co-authored-by: Benbb96 --- helpdesk/templates/helpdesk/ticket_desc_table.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 7b8f8227..3df70135 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -90,7 +90,7 @@
- - {% for user in assignable_users %} -
| - +
From 3fc1e7b594b209324041567cd328844ab1126882 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 8 Aug 2025 02:20:10 +0000 Subject: [PATCH 19/24] Use get_assignable_users when possible --- helpdesk/views/staff.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 2809e739..656969b5 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -473,9 +473,7 @@ def view_ticket(request, ticket_id): customfields_form = EditTicketCustomFieldForm(None, instance=ticket) # Define users that the ticket can be assigned to - assignable_users = User.objects.filter(is_active=True, is_staff=True).order_by( - "username" - ) + assignable_users = get_assignable_users(True) return render( request, From 2d60cfb571f0066660e472e81a283193f1033d7a Mon Sep 17 00:00:00 2001 From: David Vadnais <56882532+DavidVadnais@users.noreply.github.com> Date: Fri, 8 Aug 2025 20:05:26 +0000 Subject: [PATCH 20/24] Allow setting to control assignable users Co-authored-by: Benbb96 --- helpdesk/views/staff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 656969b5..761bd0f4 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -473,7 +473,7 @@ def view_ticket(request, ticket_id): customfields_form = EditTicketCustomFieldForm(None, instance=ticket) # Define users that the ticket can be assigned to - assignable_users = get_assignable_users(True) + assignable_users = get_assignable_users(settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS) return render( request, From 985cf12e2da0eb07438ebcf5709bb4273dd6f1c7 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 8 Aug 2025 20:07:16 +0000 Subject: [PATCH 21/24] remove uneeded assignment of assignable_users --- helpdesk/views/staff.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 761bd0f4..87679ec0 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -472,9 +472,6 @@ def view_ticket(request, ticket_id): # add custom fields to further details panel customfields_form = EditTicketCustomFieldForm(None, instance=ticket) - # Define users that the ticket can be assigned to - assignable_users = get_assignable_users(settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS) - return render( request, "helpdesk/ticket.html", @@ -490,7 +487,7 @@ def view_ticket(request, ticket_id): "SHOW_SUBSCRIBE": show_subscribe, "checklist_form": checklist_form, "customfields_form": customfields_form, - "assignable_users": assignable_users, + "assignable_users": get_assignable_users(settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS), **extra_context_kwargs, }, ) From d2955d2dfeda46745d910c3422c2a33b5fda2d2d Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 8 Aug 2025 20:07:40 +0000 Subject: [PATCH 22/24] ruff format --- helpdesk/views/staff.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 87679ec0..b6fc3310 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -487,7 +487,9 @@ def view_ticket(request, ticket_id): "SHOW_SUBSCRIBE": show_subscribe, "checklist_form": checklist_form, "customfields_form": customfields_form, - "assignable_users": get_assignable_users(settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS), + "assignable_users": get_assignable_users( + settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS + ), **extra_context_kwargs, }, ) From 4f9fbbb261f8662ddbe5382d6e8108243b1e22d9 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 8 Aug 2025 20:10:19 +0000 Subject: [PATCH 23/24] remove unused logger from staff.py --- helpdesk/views/staff.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index b6fc3310..f98a4934 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -90,7 +90,6 @@ import helpdesk.views.abstract_views as abstract_views from helpdesk.views.permissions import MustBeStaffMixin import json import re -import logging from rest_framework import status from rest_framework.decorators import api_view import typing @@ -100,8 +99,6 @@ from django.utils.timezone import now if helpdesk_settings.HELPDESK_KB_ENABLED: from helpdesk.models import KBItem -logger = logging.getLogger(__name__) - DATE_RE: re.Pattern = re.compile( r"(?P\d{1,2})/(?P\d{1,2})/(?P\d{4})$" From 0135bd98dbc9a3773ea483469868a146a11a91e9 Mon Sep 17 00:00:00 2001 From: DavidVadnais Date: Fri, 8 Aug 2025 20:31:20 +0000 Subject: [PATCH 24/24] default HELPDESK_STAFF_ONLY_TICKET_OWNERS to false for tests --- helpdesk/views/staff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index f98a4934..b6ee8da0 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -485,7 +485,7 @@ def view_ticket(request, ticket_id): "checklist_form": checklist_form, "customfields_form": customfields_form, "assignable_users": get_assignable_users( - settings.HELPDESK_STAFF_ONLY_TICKET_OWNERS + bool(getattr(settings, "HELPDESK_STAFF_ONLY_TICKET_OWNERS", False)) ), **extra_context_kwargs, },