Skip to content

Commit

Permalink
feat(core): add basic ticketing system
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-nfc committed Aug 25, 2024
1 parent 52db44e commit c5a5c39
Show file tree
Hide file tree
Showing 33 changed files with 2,865 additions and 4 deletions.
5 changes: 4 additions & 1 deletion app/app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

from .views import home

from core.views import history
from core.views import history, related_ticket

from settings.views import user_settings

Expand All @@ -50,6 +50,9 @@
path("history/<str:model_name>/<int:model_pk>", history.View.as_view(), name='_history'),
re_path(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),


path('ticket/<str:ticket_type>/<int:ticket_id>/relate/add', related_ticket.Add.as_view(), name="_ticket_related_add"),

]


Expand Down
37 changes: 37 additions & 0 deletions app/core/forms/related_ticket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from django import forms
from django.db.models import Q

from app import settings

from core.forms.common import CommonModelForm

from core.models.ticket.ticket import RelatedTickets


class RelatedTicketForm(CommonModelForm):

prefix = 'ticket'

class Meta:
model = RelatedTickets
fields = '__all__'


def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.fields['from_ticket_id'].widget = self.fields['from_ticket_id'].hidden_widget()


def clean(self):

cleaned_data = super().clean()

return cleaned_data

def is_valid(self) -> bool:

is_valid = super().is_valid()

return is_valid
139 changes: 139 additions & 0 deletions app/core/forms/ticket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
from django import forms
from django.db.models import Q

from app import settings

from core.forms.common import CommonModelForm

from core.models.ticket.ticket import Ticket, RelatedTickets



class TicketForm(CommonModelForm):

prefix = 'ticket'

class Meta:
model = Ticket
fields = '__all__'


def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.fields['planned_start_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local', 'format': "%Y-%m-%dT%H:%M"})
self.fields['planned_start_date'].input_formats = settings.DATETIME_FORMAT
self.fields['planned_start_date'].format="%Y-%m-%dT%H:%M"

self.fields['planned_finish_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['planned_finish_date'].input_formats = settings.DATETIME_FORMAT
self.fields['planned_finish_date'].format="%Y-%m-%dT%H:%M"

self.fields['real_start_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['real_start_date'].input_formats = settings.DATETIME_FORMAT
self.fields['real_start_date'].format="%Y-%m-%dT%H:%M"

self.fields['real_finish_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['real_finish_date'].input_formats = settings.DATETIME_FORMAT
self.fields['real_finish_date'].format="%Y-%m-%dT%H:%M"

self.fields['description'].widget.attrs = {'style': "height: 800px; width: 900px"}

self.fields['opened_by'].initial = kwargs['user'].pk

self.fields['ticket_type'].widget = self.fields['ticket_type'].hidden_widget()


original_fields = self.fields.copy()
ticket_type = []

if kwargs['initial']['type_ticket'] == 'request':

ticket_type = self.Meta.model.fields_itsm_request

self.fields['status'].choices = self.Meta.model.TicketStatus.Request

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

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

ticket_type = self.Meta.model.fields_itsm_incident

self.fields['status'].choices = self.Meta.model.TicketStatus.Incident

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

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

ticket_type = self.Meta.model.fields_itsm_problem

self.fields['status'].choices = self.Meta.model.TicketStatus.Problem

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

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

ticket_type = self.Meta.model.fields_itsm_change

self.fields['status'].choices = self.Meta.model.TicketStatus.Change

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

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

ticket_type = self.Meta.model.fields_git_issue

self.fields['status'].choices = self.Meta.model.TicketStatus.Git

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

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

ticket_type = self.Meta.model.fields_git_merge

self.fields['status'].choices = self.Meta.model.TicketStatus.Git

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

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

ticket_type = self.Meta.model.fields_project_task

self.fields['status'].choices = self.Meta.model.TicketStatus.ProjectTask

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


if kwargs['user'].is_superuser:

ticket_type += self.Meta.model.tech_fields


for field in original_fields:

if field not in ticket_type:

del self.fields[field]

def clean(self):

cleaned_data = super().clean()

return cleaned_data

def is_valid(self) -> bool:

is_valid = super().is_valid()

return is_valid



class DetailForm(CommonModelForm):

prefix = 'ticket'

class Meta:
model = Ticket
fields = '__all__'
137 changes: 137 additions & 0 deletions app/core/forms/ticket_comment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
from django import forms
from django.db.models import Q

from app import settings

from core.forms.common import CommonModelForm

from core.models.ticket.ticket_comment import TicketComment


class CommentForm(CommonModelForm):

prefix = 'ticket'

class Meta:
model = TicketComment
fields = '__all__'


def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.fields['planned_start_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local', 'format': "%Y-%m-%dT%H:%M"})
self.fields['planned_start_date'].input_formats = settings.DATETIME_FORMAT
self.fields['planned_start_date'].format="%Y-%m-%dT%H:%M"

self.fields['planned_finish_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['planned_finish_date'].input_formats = settings.DATETIME_FORMAT
self.fields['planned_finish_date'].format="%Y-%m-%dT%H:%M"

self.fields['real_start_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['real_start_date'].input_formats = settings.DATETIME_FORMAT
self.fields['real_start_date'].format="%Y-%m-%dT%H:%M"

self.fields['real_finish_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
self.fields['real_finish_date'].input_formats = settings.DATETIME_FORMAT
self.fields['real_finish_date'].format="%Y-%m-%dT%H:%M"

self.fields['body'].widget.attrs = {'style': "height: 800px; width: 900px"}

self.fields['user'].initial = kwargs['user'].pk
self.fields['user'].widget = self.fields['user'].hidden_widget()

self.fields['ticket'].widget = self.fields['ticket'].hidden_widget()

if 'qs_comment_type' in kwargs['initial']:

comment_type = kwargs['initial']['qs_comment_type']

else:

comment_type = str(self.instance.get_comment_type_display()).lower()


original_fields = self.fields.copy()
comment_fields = []


if (
kwargs['initial']['type_ticket'] == 'request'
or
kwargs['initial']['type_ticket'] == 'incident'
or
kwargs['initial']['type_ticket'] == 'problem'
or
kwargs['initial']['type_ticket'] == 'change'
or
kwargs['initial']['type_ticket'] == 'project_task'
):

if comment_type == 'task':

comment_fields = self.Meta.model.fields_itsm_task

self.fields['comment_type'].initial = self.Meta.model.CommentType.TASK

elif comment_type == 'comment':

comment_fields = self.Meta.model.common_itsm_fields

self.fields['comment_type'].initial = self.Meta.model.CommentType.COMMENT


elif comment_type == 'solution':

comment_fields = self.Meta.model.common_itsm_fields

self.fields['comment_type'].initial = self.Meta.model.CommentType.SOLUTION

elif comment_type == 'notification':

comment_fields = self.Meta.model.fields_itsm_notification

self.fields['comment_type'].initial = self.Meta.model.CommentType.NOTIFICATION

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

comment_fields = self.Meta.model.fields_git_issue

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

comment_fields = self.Meta.model.fields_git_merge


for field in original_fields:

if field not in comment_fields:

del self.fields[field]

def clean(self):

cleaned_data = super().clean()

return cleaned_data

def is_valid(self) -> bool:

is_valid = super().is_valid()

return is_valid



class DetailForm(CommentForm):

prefix = 'ticket'

class Meta:
model = TicketComment
fields = '__all__'


def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)
Loading

0 comments on commit c5a5c39

Please sign in to comment.