-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
27 changed files
with
2,224 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'], | ||
}, | ||
), | ||
] |
21 changes: 21 additions & 0 deletions
21
app/core/migrations/0006_remove_ticket_is_global_remove_ticket_model_notes.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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', | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
Oops, something went wrong.