Skip to content

Commit

Permalink
temp-commit
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-nfc committed Aug 23, 2024
1 parent 91d85d9 commit 2c03cbe
Show file tree
Hide file tree
Showing 27 changed files with 2,224 additions and 8 deletions.
4 changes: 2 additions & 2 deletions app/app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,8 @@

# Apps Under Development
INSTALLED_APPS += [
'project_management.apps.ProjectManagementConfig',
'information.apps.InformationConfig',
# 'project_management.apps.ProjectManagementConfig',
# 'assistance.apps.AssistanceConfig',
]


Expand Down
15 changes: 11 additions & 4 deletions 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, ticket

from settings.views import user_settings

Expand All @@ -50,6 +50,13 @@
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/', ticket.View.as_view(), name="_ticket"),

path('ticket/add', ticket.Add.as_view(), name="_ticket"),

path('ticket/<str:ticket_type>/add', ticket.Add.as_view(), name="_ticket"),

]


Expand All @@ -74,10 +81,10 @@
urlpatterns += [

path("__debug__/", include("debug_toolbar.urls"), name='_debug'),
path("project_management/", include("project_management.urls")),
# path("project_management/", include("project_management.urls")),
# Apps Under Development
path("itim/", include("itim.urls")),
path("information/", include("information.urls")),
# path("itim/", include("itim.urls")),
# path("information/", include("information.urls")),
]

# must be after above
Expand Down
7 changes: 7 additions & 0 deletions app/assistance/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from assistance.views import knowledge_base

from core.views import ticket

app_name = "Assistance"

urlpatterns = [
Expand All @@ -12,4 +14,9 @@
path("information/<int:pk>/delete", knowledge_base.Delete.as_view(), name="_knowledge_base_delete"),
path("information/<int:pk>", knowledge_base.View.as_view(), name="_knowledge_base_view"),

path('ticket/<str:ticket_type>', ticket.Index.as_view(), name="Requests"),
path('ticket/<str:ticket_type>/add', ticket.Add.as_view(), name="_ticket_request_add"),
path('ticket/<str:ticket_type>/<int:pk>/edit', ticket.Change.as_view(), name="_ticket_request_change"),
path('ticket/<str:ticket_type>/<int:pk>', ticket.View.as_view(), name="_ticket_request_view"),

]
164 changes: 164 additions & 0 deletions app/core/forms/ticket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
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"}

# choices = kwargs.pop('camp_dates_choices', ())


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

# self.fields['ticket_type'] = forms.IntegerField(
# )

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


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

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

ticket_type = self.Meta.model.fields_itsm_request

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

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

elif kwargs['initial']['ticket_type'] == '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']['ticket_type'] == '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']['ticket_type'] == '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']['ticket_type'] == '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']['ticket_type'] == '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']['ticket_type'] == '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

# else

# self.fields['opened_by'].widget = self.fields['opened_by'].hidden_widget()


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__'


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

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

# self.fields['related_tickts'] = forms.fields.Field(
# # verbose_name = 'Related Tickts',
# )

# self.fields['related_tickts'].queryset = RelatedTickets.objects.filter(
# Q(from_ticket_id=self.instance.pk)
# |
# Q(to_ticket_id=self.instance.pk)
# )
# a ='d'
73 changes: 73 additions & 0 deletions app/core/migrations/0005_ticket_relatedtickets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generated by Django 5.0.7 on 2024-08-23 16:32

import access.fields
import access.models
import core.models.ticket.change_ticket
import core.models.ticket.markdown
import core.models.ticket.problem_ticket
import core.models.ticket.request_ticket
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('access', '0001_initial'),
('core', '0004_notes_service'),
('project_management', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Ticket',
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='Ticket 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.AutoCreatedField(default=django.utils.timezone.now, editable=False)),
('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'New'), (3, 'Assigned'), (6, 'Assigned (Planning)'), (7, 'Pending'), (8, 'Solved'), (4, 'Closed'), (5, 'Invalid')], default=2, help_text='Status of ticket', verbose_name='Status')),
('title', models.CharField(help_text='Title of the Ticket', max_length=50, unique=True, verbose_name='Title')),
('description', models.TextField(default=None, help_text='Ticket Description', verbose_name='Description')),
('external_ref', models.IntegerField(blank=True, default=None, help_text='External System reference', null=True, verbose_name='Reference Number')),
('external_system', models.IntegerField(blank=True, choices=[(1, 'Github'), (2, 'Gitlab')], default=None, help_text='External system this item derives', null=True, verbose_name='External System')),
('ticket_type', models.IntegerField(choices=[(1, 'Request'), (2, 'Incident'), (3, 'Change'), (4, 'Problem'), (5, 'Issue'), (6, 'Merge Request'), (7, 'Project Task')], default=None, help_text='The type of ticket this is', null=True, verbose_name='Type')),
('is_deleted', models.BooleanField(default=False, help_text='Is the ticket deleted? And ready to be purged', verbose_name='Deleted')),
('date_closed', models.DateTimeField(blank=True, help_text='Date ticket closed', null=True, verbose_name='Closed Date')),
('planned_start_date', models.DateTimeField(blank=True, help_text='Planned start date.', null=True, verbose_name='Planned Start Date')),
('planned_finish_date', models.DateTimeField(blank=True, help_text='Planned finish date', null=True, verbose_name='Planned Finish Date')),
('real_start_date', models.DateTimeField(blank=True, help_text='Real start date', null=True, verbose_name='Real Start Date')),
('real_finish_date', models.DateTimeField(blank=True, help_text='Real finish date', null=True, verbose_name='Real Finish Date')),
('assigned_teams', models.ManyToManyField(blank=True, default=True, help_text='Assign the ticket to a Team(s)', related_name='assigned_teams', to='access.team', verbose_name='Assigned Team(s)')),
('assigned_users', models.ManyToManyField(blank=True, default=True, help_text='Assign the ticket to a User(s)', related_name='assigned_users', to=settings.AUTH_USER_MODEL, verbose_name='Assigned User(s)')),
('opened_by', models.ForeignKey(help_text='Who is the ticket for', on_delete=django.db.models.deletion.DO_NOTHING, related_name='opened_by', to=settings.AUTH_USER_MODEL, verbose_name='Opened By')),
('organization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='access.organization', validators=[access.models.TenancyObject.validatate_organization_exists])),
('project', models.ForeignKey(blank=True, help_text='Assign to a project', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='project_management.project', verbose_name='Project')),
('subscribed_teams', models.ManyToManyField(blank=True, default=True, help_text='Subscribe a Team(s) to the ticket to receive updates', related_name='subscribed_teams', to='access.team', verbose_name='Subscribed Team(s)')),
('subscribed_users', models.ManyToManyField(blank=True, default=True, help_text='Subscribe a User(s) to the ticket to receive updates', related_name='subscribed_users', to=settings.AUTH_USER_MODEL, verbose_name='Subscribed User(s)')),
],
options={
'verbose_name': 'Ticket',
'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'), ('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'), ('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'), ('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'), ('purge_ticket_change', 'Can purge a change ticket'), ('triage_ticket_change', 'Can triage all change ticket'), ('view_ticket_change', 'Can view all change ticket')],
},
bases=(models.Model, core.models.ticket.change_ticket.ChangeTicket, core.models.ticket.problem_ticket.ProblemTicket, core.models.ticket.request_ticket.RequestTicket, core.models.ticket.markdown.TicketMarkdown),
),
migrations.CreateModel(
name='RelatedTickets',
fields=[
('id', models.AutoField(help_text='Ticket ID Number', primary_key=True, serialize=False, unique=True, verbose_name='Number')),
('how_related', models.IntegerField(choices=[(1, 'Related'), (2, 'Blocks'), (3, 'Blocked By')], help_text='How is the ticket related', verbose_name='How Related')),
('from_ticket_id', models.ForeignKey(help_text='This Ticket', on_delete=django.db.models.deletion.CASCADE, related_name='from_ticket_id', to='core.ticket', verbose_name='Ticket')),
('to_ticket_id', models.ForeignKey(help_text='The Related Ticket', on_delete=django.db.models.deletion.CASCADE, related_name='to_ticket_id', to='core.ticket', verbose_name='Related Ticket')),
],
options={
'ordering': ['id'],
},
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 5.0.7 on 2024-08-23 16:39

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core', '0005_ticket_relatedtickets'),
]

operations = [
migrations.RemoveField(
model_name='ticket',
name='is_global',
),
migrations.RemoveField(
model_name='ticket',
name='model_notes',
),
]
19 changes: 19 additions & 0 deletions app/core/migrations/0007_alter_ticket_ticket_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 5.0.7 on 2024-08-23 16:41

import core.models.ticket.ticket
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0006_remove_ticket_is_global_remove_ticket_model_notes'),
]

operations = [
migrations.AlterField(
model_name='ticket',
name='ticket_type',
field=models.IntegerField(choices=[(1, 'Request'), (2, 'Incident'), (3, 'Change'), (4, 'Problem'), (5, 'Issue'), (6, 'Merge Request'), (7, 'Project Task')], default=None, help_text='The type of ticket this is', null=True, validators=[core.models.ticket.ticket.Ticket.validation_ticket_type], verbose_name='Type'),
),
]
20 changes: 20 additions & 0 deletions app/core/migrations/0008_alter_ticket_ticket_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 5.0.7 on 2024-08-23 16:43

import core.models.ticket.ticket
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0007_alter_ticket_ticket_type'),
]

operations = [
migrations.AlterField(
model_name='ticket',
name='ticket_type',
field=models.IntegerField(choices=[(1, 'Request'), (2, 'Incident'), (3, 'Change'), (4, 'Problem'), (5, 'Issue'), (6, 'Merge Request'), (7, 'Project Task')], default=1, help_text='The type of ticket this is', validators=[core.models.ticket.ticket.Ticket.validation_ticket_type], verbose_name='Type'),
preserve_default=False,
),
]
Empty file added app/core/models/__init__.py
Empty file.
Loading

0 comments on commit 2c03cbe

Please sign in to comment.