Skip to content

Commit

Permalink
feat(core): Ability to assign categories to tickets
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-nfc committed Sep 13, 2024
1 parent 09bb2d8 commit 5f7d0e4
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 53 deletions.
18 changes: 17 additions & 1 deletion app/core/forms/ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ def __init__(self, request, *args, **kwargs):

self.fields['ticket_type'].initial = '1'

self.fields['category'].queryset = self.fields['category'].queryset.filter(
request=True
)

elif kwargs['initial']['type_ticket'] == 'incident':

ticket_type = self.Meta.model.fields_itsm_incident
Expand All @@ -72,6 +76,10 @@ def __init__(self, request, *args, **kwargs):

self.fields['ticket_type'].initial = self.Meta.model.TicketType.INCIDENT.value

self.fields['category'].queryset = self.fields['category'].queryset.filter(
incident=True
)

elif kwargs['initial']['type_ticket'] == 'problem':

ticket_type = self.Meta.model.fields_itsm_problem
Expand All @@ -80,6 +88,9 @@ def __init__(self, request, *args, **kwargs):

self.fields['ticket_type'].initial = self.Meta.model.TicketType.PROBLEM.value

self.fields['category'].queryset = self.fields['category'].queryset.filter(
problem=True
)
elif kwargs['initial']['type_ticket'] == 'change':

ticket_type = self.Meta.model.fields_itsm_change
Expand All @@ -88,6 +99,9 @@ def __init__(self, request, *args, **kwargs):

self.fields['ticket_type'].initial = self.Meta.model.TicketType.CHANGE.value

self.fields['category'].queryset = self.fields['category'].queryset.filter(
change=True
)
elif kwargs['initial']['type_ticket'] == 'issue':

ticket_type = self.Meta.model.fields_git_issue
Expand Down Expand Up @@ -117,7 +131,9 @@ def __init__(self, request, *args, **kwargs):

self.fields['ticket_type'].initial = self.Meta.model.TicketType.PROJECT_TASK.value

# self.fields['status'].widget = self.fields['status'].hidden_widget()
self.fields['category'].queryset = self.fields['category'].queryset.filter(
project_task=True
)

if kwargs['user'].is_superuser:

Expand Down
1 change: 1 addition & 0 deletions app/core/forms/validate_ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class TicketValidation(
]

triage_fields: list = [
'category',
'assigned_users',
'assigned_teams',
'status',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 5.0.8 on 2024-09-12 06:18
# Generated by Django 5.0.8 on 2024-09-13 01:31

import access.fields
import access.models
Expand All @@ -14,6 +14,7 @@ class Migration(migrations.Migration):

dependencies = [
('access', '0001_initial'),
('assistance', '0001_initial'),
('core', '0004_notes_service'),
('project_management', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
Expand Down Expand Up @@ -54,7 +55,6 @@ class Migration(migrations.Migration):
'verbose_name_plural': 'Tickets',
'ordering': ['id'],
'permissions': [('add_ticket_request', 'Can add a request ticket'), ('change_ticket_request', 'Can change any request ticket'), ('delete_ticket_request', 'Can delete a request ticket'), ('import_ticket_request', 'Can import a request ticket'), ('purge_ticket_request', 'Can purge a request ticket'), ('triage_ticket_request', 'Can triage all request ticket'), ('view_ticket_request', 'Can view all request ticket'), ('add_ticket_incident', 'Can add a incident ticket'), ('change_ticket_incident', 'Can change any incident ticket'), ('delete_ticket_incident', 'Can delete a incident ticket'), ('import_ticket_incident', 'Can import a incident ticket'), ('purge_ticket_incident', 'Can purge a incident ticket'), ('triage_ticket_incident', 'Can triage all incident ticket'), ('view_ticket_incident', 'Can view all incident ticket'), ('add_ticket_problem', 'Can add a problem ticket'), ('change_ticket_problem', 'Can change any problem ticket'), ('delete_ticket_problem', 'Can delete a problem ticket'), ('import_ticket_problem', 'Can import a problem ticket'), ('purge_ticket_problem', 'Can purge a problem ticket'), ('triage_ticket_problem', 'Can triage all problem ticket'), ('view_ticket_problem', 'Can view all problem ticket'), ('add_ticket_change', 'Can add a change ticket'), ('change_ticket_change', 'Can change any change ticket'), ('delete_ticket_change', 'Can delete a change ticket'), ('import_ticket_change', 'Can import a change ticket'), ('purge_ticket_change', 'Can purge a change ticket'), ('triage_ticket_change', 'Can triage all change ticket'), ('view_ticket_change', 'Can view all change ticket'), ('add_ticket_project_task', 'Can add a project task'), ('change_ticket_project_task', 'Can change any project task'), ('delete_ticket_project_task', 'Can delete a project task'), ('import_ticket_project_task', 'Can import a project task'), ('purge_ticket_project_task', 'Can purge a project task'), ('triage_ticket_project_task', 'Can triage all project task'), ('view_ticket_project_task', 'Can view all project task')],
'unique_together': {('external_system', 'external_ref')},
},
),
migrations.CreateModel(
Expand All @@ -70,6 +70,39 @@ class Migration(migrations.Migration):
'ordering': ['id'],
},
),
migrations.CreateModel(
name='TicketCategory',
fields=[
('is_global', models.BooleanField(default=False)),
('model_notes', models.TextField(blank=True, default=None, null=True, verbose_name='Notes')),
('id', models.AutoField(help_text='Category ID Number', primary_key=True, serialize=False, unique=True, verbose_name='Number')),
('created', access.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False)),
('modified', access.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False)),
('name', models.CharField(help_text='Category Name', max_length=50, verbose_name='Name')),
('change', models.BooleanField(default=True, help_text='Use category for change tickets', verbose_name='Change Tickets')),
('incident', models.BooleanField(default=True, help_text='Use category for incident tickets', verbose_name='Incident Tickets')),
('problem', models.BooleanField(default=True, help_text='Use category for problem tickets', verbose_name='Problem Tickets')),
('project_task', models.BooleanField(default=True, help_text='Use category for Project tasks', verbose_name='Project Tasks')),
('request', models.BooleanField(default=True, help_text='Use category for request tickets', verbose_name='Request Tickets')),
('organization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='access.organization', validators=[access.models.TenancyObject.validatate_organization_exists])),
('parent', models.ForeignKey(blank=True, help_text='The Parent Category', null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ticketcategory', verbose_name='Parent Category')),
('runbook', models.ForeignKey(blank=True, help_text='The runbook for this category', null=True, on_delete=django.db.models.deletion.SET_NULL, to='assistance.knowledgebase', verbose_name='Runbook')),
],
options={
'verbose_name': 'Ticket Category',
'verbose_name_plural': 'Ticket Categories',
'ordering': ['name'],
},
),
migrations.AddField(
model_name='ticket',
name='category',
field=models.ForeignKey(blank=True, help_text='Category for this ticket', null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ticketcategory', verbose_name='Category'),
),
migrations.AlterUniqueTogether(
name='ticket',
unique_together={('external_system', 'external_ref')},
),
migrations.CreateModel(
name='TicketComment',
fields=[
Expand Down
43 changes: 0 additions & 43 deletions app/core/migrations/0006_ticketcategory.py

This file was deleted.

17 changes: 10 additions & 7 deletions app/core/models/ticket/ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from access.models import TenancyObject, Team

from core.middleware.get_request import get_request
from core.models.ticket.ticket_category import TicketCategory

from project_management.models.projects import Project

Expand Down Expand Up @@ -433,13 +434,14 @@ def validation_title(field):
verbose_name = 'Status',
)

# category = models.CharField(
# blank = False,
# help_text = "Category of the Ticket",
# max_length = 50,
# unique = True,
# verbose_name = 'Category',
# )
category = models.ForeignKey(
TicketCategory,
blank= True,
help_text = 'Category for this ticket',
null = True,
on_delete = models.SET_NULL,
verbose_name = 'Category',
)

title = models.CharField(
blank = False,
Expand Down Expand Up @@ -634,6 +636,7 @@ def __str__(self):

common_itsm_fields: list(str()) = common_fields + [
'status',
'category'
'urgency',
'project',
'priority',
Expand Down
8 changes: 8 additions & 0 deletions app/core/templates/core/ticket.html.j2
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,14 @@
<label>Labels</label>
<span class="text">val</span>
</fieldset>
<fieldset>
<label>Category</label>
<span class="text">
<a href="{% url 'Settings:_ticket_category_view' pk=ticket.category.id %}">
{{ ticket.category }}
</a>
</span>
</fieldset>
<fieldset>
<label>Project</label>
<span class="text">
Expand Down

0 comments on commit 5f7d0e4

Please sign in to comment.