chore(project_management): Remove no longer used Django UI
ref: #788 #757
This commit is contained in:
@ -1,150 +0,0 @@
|
|||||||
from django import forms
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.db.models import Q
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from core.forms.common import CommonModelForm
|
|
||||||
from core.templatetags.markdown import to_duration
|
|
||||||
|
|
||||||
from project_management.models.projects import Project
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectForm(CommonModelForm):
|
|
||||||
|
|
||||||
prefix = 'project'
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
|
|
||||||
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: 1000px"}
|
|
||||||
|
|
||||||
|
|
||||||
class DetailForm(ProjectForm):
|
|
||||||
|
|
||||||
|
|
||||||
tabs: dict = {
|
|
||||||
"details": {
|
|
||||||
"name": "Details",
|
|
||||||
"slug": "details",
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"layout": "double",
|
|
||||||
"left": [
|
|
||||||
'organization',
|
|
||||||
'code',
|
|
||||||
'name',
|
|
||||||
'priority',
|
|
||||||
'project_type',
|
|
||||||
'state',
|
|
||||||
'completed',
|
|
||||||
'organization'
|
|
||||||
],
|
|
||||||
"right": [
|
|
||||||
'planned_start_date',
|
|
||||||
'planned_finish_date',
|
|
||||||
'real_start_date',
|
|
||||||
'real_finish_date',
|
|
||||||
'duration'
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"layout": "double",
|
|
||||||
"name": "Manager",
|
|
||||||
"left": [
|
|
||||||
'manager_user',
|
|
||||||
],
|
|
||||||
"right": [
|
|
||||||
'manager_team',
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"layout": "single",
|
|
||||||
"name": "Description",
|
|
||||||
"fields": [
|
|
||||||
'description',
|
|
||||||
],
|
|
||||||
"markdown": [
|
|
||||||
'description',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tasks": {
|
|
||||||
"name": "Tasks",
|
|
||||||
"slug": "tasks",
|
|
||||||
"sections": []
|
|
||||||
},
|
|
||||||
"milestones": {
|
|
||||||
"name": "Milestones",
|
|
||||||
"slug": "milestones",
|
|
||||||
"sections": []
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"name": "Notes",
|
|
||||||
"slug": "notes",
|
|
||||||
"sections": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.fields['c_created'] = forms.DateTimeField(
|
|
||||||
label = 'Created',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.created,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['c_modified'] = forms.DateTimeField(
|
|
||||||
label = 'Modified',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.modified,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['duration'] = forms.IntegerField(
|
|
||||||
label = 'Duration',
|
|
||||||
disabled = True,
|
|
||||||
initial = to_duration(self.instance.duration_project),
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['completed'] = forms.CharField(
|
|
||||||
disabled = True,
|
|
||||||
help_text = 'Project completion percentage.',
|
|
||||||
initial = self.instance.percent_completed,
|
|
||||||
label = 'Completed',
|
|
||||||
)
|
|
||||||
|
|
||||||
self.tabs['details'].update({
|
|
||||||
"edit_url": reverse('Project Management:_project_change', args=(self.instance.pk,))
|
|
||||||
})
|
|
||||||
|
|
||||||
self.url_index_view = reverse('Project Management:Projects')
|
|
@ -1,109 +0,0 @@
|
|||||||
from django import forms
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.db.models import Q
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from core.forms.common import CommonModelForm
|
|
||||||
from core.templatetags.markdown import to_duration
|
|
||||||
|
|
||||||
from project_management.models.project_milestone import ProjectMilestone
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectMilestoneForm(CommonModelForm):
|
|
||||||
|
|
||||||
prefix = 'project'
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
fields = [
|
|
||||||
'id',
|
|
||||||
'organization',
|
|
||||||
'name',
|
|
||||||
'description',
|
|
||||||
'project',
|
|
||||||
'start_date',
|
|
||||||
'finish_date',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.fields['start_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local', 'format': "%Y-%m-%dT%H:%M"})
|
|
||||||
self.fields['start_date'].input_formats = settings.DATETIME_FORMAT
|
|
||||||
self.fields['start_date'].format="%Y-%m-%dT%H:%M"
|
|
||||||
|
|
||||||
self.fields['finish_date'].widget = forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'})
|
|
||||||
self.fields['finish_date'].input_formats = settings.DATETIME_FORMAT
|
|
||||||
self.fields['finish_date'].format="%Y-%m-%dT%H:%M"
|
|
||||||
|
|
||||||
self.fields['description'].widget.attrs = {'style': "height: 800px; width: 1000px"}
|
|
||||||
|
|
||||||
self.fields['project'].widget = self.fields['project'].hidden_widget()
|
|
||||||
|
|
||||||
|
|
||||||
class DetailForm(ProjectMilestoneForm):
|
|
||||||
|
|
||||||
|
|
||||||
tabs: dict = {
|
|
||||||
"details": {
|
|
||||||
"name": "Details",
|
|
||||||
"slug": "details",
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"layout": "double",
|
|
||||||
"left": [
|
|
||||||
'name',
|
|
||||||
'percent_completed',
|
|
||||||
'organization'
|
|
||||||
'c_created',
|
|
||||||
'c_modified',
|
|
||||||
],
|
|
||||||
"right": [
|
|
||||||
'start_date',
|
|
||||||
'finish_date',
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"layout": "single",
|
|
||||||
"name": "Description",
|
|
||||||
"fields": [
|
|
||||||
'description',
|
|
||||||
],
|
|
||||||
"markdown": [
|
|
||||||
'description',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tasks": {
|
|
||||||
"name": "Tasks",
|
|
||||||
"slug": "tasks",
|
|
||||||
"sections": []
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.fields['c_created'] = forms.DateTimeField(
|
|
||||||
label = 'Created',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.created,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['c_modified'] = forms.DateTimeField(
|
|
||||||
label = 'Modified',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.modified,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.url_index_view = reverse('Project Management:_project_view', kwargs={'pk': self.instance.project.id}) + '?tab=milestones'
|
|
@ -1,79 +0,0 @@
|
|||||||
|
|
||||||
from django import forms
|
|
||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from core.forms.common import CommonModelForm
|
|
||||||
|
|
||||||
from project_management.models.project_states import ProjectState
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectStateForm(CommonModelForm):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
prefix = 'project_state'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DetailForm(ProjectStateForm):
|
|
||||||
|
|
||||||
tabs: dict = {
|
|
||||||
"details": {
|
|
||||||
"name": "Details",
|
|
||||||
"slug": "details",
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"layout": "double",
|
|
||||||
"left": [
|
|
||||||
'organization',
|
|
||||||
'name',
|
|
||||||
'is_completed',
|
|
||||||
'runbook',
|
|
||||||
'c_created',
|
|
||||||
'c_modified',
|
|
||||||
],
|
|
||||||
"right": [
|
|
||||||
'model_notes',
|
|
||||||
]
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"name": "Notes",
|
|
||||||
"slug": "notes",
|
|
||||||
"sections": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.fields['c_created'] = forms.DateTimeField(
|
|
||||||
label = 'Created',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.created,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['c_modified'] = forms.DateTimeField(
|
|
||||||
label = 'Modified',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.modified,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.tabs['details'].update({
|
|
||||||
"edit_url": reverse('Settings:_project_state_change', kwargs={'pk': self.instance.pk})
|
|
||||||
})
|
|
||||||
|
|
||||||
self.url_index_view = reverse('Settings:_project_states')
|
|
@ -1,85 +0,0 @@
|
|||||||
|
|
||||||
from django import forms
|
|
||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from core.forms.common import CommonModelForm
|
|
||||||
|
|
||||||
from project_management.models.project_types import ProjectType
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectTypeForm(CommonModelForm):
|
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
prefix = 'project_type'
|
|
||||||
|
|
||||||
|
|
||||||
def clean(self):
|
|
||||||
|
|
||||||
cleaned_data = super().clean()
|
|
||||||
|
|
||||||
return cleaned_data
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DetailForm(ProjectTypeForm):
|
|
||||||
|
|
||||||
tabs: dict = {
|
|
||||||
"details": {
|
|
||||||
"name": "Details",
|
|
||||||
"slug": "details",
|
|
||||||
"sections": [
|
|
||||||
{
|
|
||||||
"layout": "double",
|
|
||||||
"left": [
|
|
||||||
'organization',
|
|
||||||
'name',
|
|
||||||
'runbook',
|
|
||||||
'c_created',
|
|
||||||
'c_modified',
|
|
||||||
],
|
|
||||||
"right": [
|
|
||||||
'model_notes',
|
|
||||||
]
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"name": "Notes",
|
|
||||||
"slug": "notes",
|
|
||||||
"sections": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.fields['c_created'] = forms.DateTimeField(
|
|
||||||
label = 'Created',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.created,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.fields['c_modified'] = forms.DateTimeField(
|
|
||||||
label = 'Modified',
|
|
||||||
input_formats=settings.DATETIME_FORMAT,
|
|
||||||
disabled = True,
|
|
||||||
initial = self.instance.modified,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.tabs['details'].update({
|
|
||||||
"edit_url": reverse('Settings:_project_type_change', kwargs={'pk': self.instance.pk})
|
|
||||||
})
|
|
||||||
|
|
||||||
self.url_index_view = reverse('Settings:_project_types')
|
|
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2,5H10V2H12V22H10V18H6V15H10V13H4V10H10V8H2V5M14,5H17V8H14V5M14,10H19V13H14V10M14,15H22V18H14V15Z" /></svg>
|
|
Before Width: | Height: | Size: 177 B |
@ -1,117 +0,0 @@
|
|||||||
{% extends 'detail.html.j2' %}
|
|
||||||
|
|
||||||
{% block additional-stylesheet %}
|
|
||||||
{% load static %}
|
|
||||||
<link rel="stylesheet" href="{% static 'ticketing.css' %}">
|
|
||||||
{% endblock additional-stylesheet %}
|
|
||||||
|
|
||||||
{% load json %}
|
|
||||||
{% load markdown %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block tabs %}
|
|
||||||
|
|
||||||
<div id="details" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.details %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="milestones" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.milestones %}
|
|
||||||
|
|
||||||
<input type="button" value="New Milestone" onclick="window.location='{% url 'Project Management:_project_milestone_add' project_id=project.id %}';">
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Completed</th>
|
|
||||||
<th>Started</th>
|
|
||||||
<th>Finished</th>
|
|
||||||
</thead>
|
|
||||||
{% if milestones %}
|
|
||||||
{% for milestone in milestones %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'Project Management:_project_milestone_view' project_id=project.id pk=milestone.id %}">
|
|
||||||
{{ milestone.name }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ milestone.percent_completed }}</td>
|
|
||||||
<td>{{ milestone.start_date }}</td>
|
|
||||||
<td>{{ milestone.finish_date }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
<tr><td colspan="4">Nothing Found</td></tr>
|
|
||||||
{% endif %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="tasks" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.tasks %}
|
|
||||||
|
|
||||||
<input type="button" value="New Task" onclick="window.location='{% url 'Project Management:_project_task_add' ticket_type='project_task' project_id=project.id %}';">
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>id</th>
|
|
||||||
<th>title</th>
|
|
||||||
<th>status</th>
|
|
||||||
<th>type</th>
|
|
||||||
<th>created</th>
|
|
||||||
</tr>
|
|
||||||
{% for project_task in project_tasks %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ project_task.id }}</td>
|
|
||||||
<td>
|
|
||||||
{% if project_task.get_ticket_type_display|lower == 'change' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_change_view' ticket_type='change' pk=project_task.id %}">
|
|
||||||
{% elif project_task.get_ticket_type_display|lower == 'incident' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_incident_view' ticket_type='incident' pk=project_task.id %}">
|
|
||||||
{% elif project_task.get_ticket_type_display|lower == 'problem' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_problem_view' ticket_type='problem' pk=project_task.id %}">
|
|
||||||
{% elif project_task.get_ticket_type_display|lower == 'request' %}
|
|
||||||
<a href="{% url 'Assistance:_ticket_request_view' ticket_type='request' pk=project_task.id %}">
|
|
||||||
{% elif project_task.get_ticket_type_display|lower == 'project task' %}
|
|
||||||
<a href="{% url 'Project Management:_project_task_view' ticket_type='project_task' project_id=project.id pk=project_task.id %}">
|
|
||||||
{% else %}
|
|
||||||
<a href=""></a>
|
|
||||||
{% endif %}
|
|
||||||
{{ project_task.title }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% include 'core/ticket/badge_ticket_status.html.j2' with ticket_status_text=project_task.get_status_display ticket_status=project_task.get_status_display|ticket_status %}
|
|
||||||
</td>
|
|
||||||
<td>{{ project_task.get_ticket_type_display }}</td>
|
|
||||||
<td>{{ project_task.created }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="notes" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
|
|
||||||
|
|
||||||
{{ notes_form }}
|
|
||||||
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
|
|
||||||
<div class="comments">
|
|
||||||
{% if notes %}
|
|
||||||
{% for note in notes%}
|
|
||||||
{% include 'note.html.j2' %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
@ -1,64 +0,0 @@
|
|||||||
{% extends 'base.html.j2' %}
|
|
||||||
|
|
||||||
{% block content_header_icon %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<input type="button" value="New Project" onclick="window.location='{% url 'Project Management:_project_add' %}';">
|
|
||||||
|
|
||||||
<table class="data">
|
|
||||||
<tr>
|
|
||||||
<th>Code</th>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Type</th>
|
|
||||||
<th>State</th>
|
|
||||||
<th>Organization</th>
|
|
||||||
<th> </th>
|
|
||||||
</tr>
|
|
||||||
{% for project in projects %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ project.code }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'Project Management:_project_view' pk=project.id %}">{{ project.name }}</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if project.project_type %}
|
|
||||||
{{ project.project_type }}
|
|
||||||
{% else%}
|
|
||||||
-
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if project.state %}
|
|
||||||
{{ project.state }}
|
|
||||||
{% else%}
|
|
||||||
-
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>{% if project.is_global %}Global{% else %}{{ project.organization }}{% endif %}</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div class="pagination">
|
|
||||||
<span class="step-links">
|
|
||||||
{% if page_obj.has_previous %}
|
|
||||||
<a href="?page=1">« first</a>
|
|
||||||
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<span class="current">
|
|
||||||
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
|
|
||||||
</span>
|
|
||||||
|
|
||||||
{% if page_obj.has_next %}
|
|
||||||
<a href="?page={{ page_obj.next_page_number }}">next</a>
|
|
||||||
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
@ -1,79 +0,0 @@
|
|||||||
{% extends 'detail.html.j2' %}
|
|
||||||
|
|
||||||
{% block additional-stylesheet %}
|
|
||||||
{% load static %}
|
|
||||||
<link rel="stylesheet" href="{% static 'ticketing.css' %}">
|
|
||||||
{% endblock additional-stylesheet %}
|
|
||||||
|
|
||||||
{% load json %}
|
|
||||||
{% load markdown %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block tabs %}
|
|
||||||
|
|
||||||
<div id="details" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.details %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="tasks" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.tasks %}
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>ID</th>
|
|
||||||
<th>Title</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Type</th>
|
|
||||||
<th>Created</th>
|
|
||||||
</tr>
|
|
||||||
{% for task in tasks %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ task.id }}</td>
|
|
||||||
<td>
|
|
||||||
{% if task.get_ticket_type_display|lower == 'change' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_change_view' ticket_type='change' pk=task.id %}">
|
|
||||||
{% elif task.get_ticket_type_display|lower == 'incident' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_incident_view' ticket_type='incident' pk=task.id %}">
|
|
||||||
{% elif task.get_ticket_type_display|lower == 'problem' %}
|
|
||||||
<a href="{% url 'ITIM:_ticket_problem_view' ticket_type='problem' pk=task.id %}">
|
|
||||||
{% elif task.get_ticket_type_display|lower == 'request' %}
|
|
||||||
<a href="{% url 'Assistance:_ticket_request_view' ticket_type='request' pk=task.id %}">
|
|
||||||
{% elif task.get_ticket_type_display|lower == 'project task' %}
|
|
||||||
<a href="{% url 'Project Management:_project_task_view' ticket_type='project_task' project_id=project.id pk=task.id %}">
|
|
||||||
{% else %}
|
|
||||||
<a href=""></a>
|
|
||||||
{% endif %}
|
|
||||||
{{ task.title }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% include 'core/ticket/badge_ticket_status.html.j2' with ticket_status_text=task.get_status_display ticket_status=task.get_status_display|ticket_status %}
|
|
||||||
</td>
|
|
||||||
<td>{{ task.get_ticket_type_display }}</td>
|
|
||||||
<td>{{ task.created }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="notes" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
|
|
||||||
|
|
||||||
{{ notes_form }}
|
|
||||||
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
|
|
||||||
<div class="comments">
|
|
||||||
{% if notes %}
|
|
||||||
{% for note in notes%}
|
|
||||||
{% include 'note.html.j2' %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
@ -1,42 +0,0 @@
|
|||||||
{% extends 'detail.html.j2' %}
|
|
||||||
|
|
||||||
{% block additional-stylesheet %}
|
|
||||||
{% load static %}
|
|
||||||
<link rel="stylesheet" href="{% static 'ticketing.css' %}">
|
|
||||||
{% endblock additional-stylesheet %}
|
|
||||||
|
|
||||||
{% load json %}
|
|
||||||
{% load markdown %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block tabs %}
|
|
||||||
|
|
||||||
<div id="details" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.details %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="tasks" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.tasks %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="notes" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
|
|
||||||
|
|
||||||
{{ notes_form }}
|
|
||||||
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
|
|
||||||
<div class="comments">
|
|
||||||
{% if notes %}
|
|
||||||
{% for note in notes %}
|
|
||||||
{% include 'note.html.j2' %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
@ -1,48 +0,0 @@
|
|||||||
{% extends 'base.html.j2' %}
|
|
||||||
|
|
||||||
{% block content_header_icon %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<input type="button" value="New Project State" onclick="window.location='{% url 'Settings:_project_state_add' %}';">
|
|
||||||
|
|
||||||
<table class="data">
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Organization</th>
|
|
||||||
<th>Created</th>
|
|
||||||
<th>Modified</th>
|
|
||||||
<th> </th>
|
|
||||||
</tr>
|
|
||||||
{% for project_state in project_states %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'Settings:_project_state_view' pk=project_state.id %}">{{ project_state.name }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{% if project_state.is_global %}Global{% else %}{{ project_state.organization }}{% endif %}</td>
|
|
||||||
<td>{{ project_state.created }}</td>
|
|
||||||
<td>{{ project_state.modified }}</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div class="pagination">
|
|
||||||
<span class="step-links">
|
|
||||||
{% if page_obj.has_previous %}
|
|
||||||
<a href="?page=1">« first</a>
|
|
||||||
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<span class="current">
|
|
||||||
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
|
|
||||||
</span>
|
|
||||||
|
|
||||||
{% if page_obj.has_next %}
|
|
||||||
<a href="?page={{ page_obj.next_page_number }}">next</a>
|
|
||||||
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
@ -1,42 +0,0 @@
|
|||||||
{% extends 'detail.html.j2' %}
|
|
||||||
|
|
||||||
{% block additional-stylesheet %}
|
|
||||||
{% load static %}
|
|
||||||
<link rel="stylesheet" href="{% static 'ticketing.css' %}">
|
|
||||||
{% endblock additional-stylesheet %}
|
|
||||||
|
|
||||||
{% load json %}
|
|
||||||
{% load markdown %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block tabs %}
|
|
||||||
|
|
||||||
<div id="details" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.details %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="tasks" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.tasks %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="notes" class="content-tab">
|
|
||||||
|
|
||||||
{% include 'content/section.html.j2' with tab=form.tabs.notes %}
|
|
||||||
|
|
||||||
{{ notes_form }}
|
|
||||||
<input type="submit" name="{{notes_form.prefix}}" value="Submit" />
|
|
||||||
<div class="comments">
|
|
||||||
{% if notes %}
|
|
||||||
{% for note in notes %}
|
|
||||||
{% include 'note.html.j2' %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
@ -1,48 +0,0 @@
|
|||||||
{% extends 'base.html.j2' %}
|
|
||||||
|
|
||||||
{% block content_header_icon %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<input type="button" value="New Project Type" onclick="window.location='{% url 'Settings:_project_type_add' %}';">
|
|
||||||
|
|
||||||
<table class="data">
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Organization</th>
|
|
||||||
<th>Created</th>
|
|
||||||
<th>Modified</th>
|
|
||||||
<th> </th>
|
|
||||||
</tr>
|
|
||||||
{% for project_type in project_types %}
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'Settings:_project_type_view' pk=project_type.id %}">{{ project_type.name }}</a>
|
|
||||||
</td>
|
|
||||||
<td>{% if project_type.is_global %}Global{% else %}{{ project_type.organization }}{% endif %}</td>
|
|
||||||
<td>{{ project_type.created }}</td>
|
|
||||||
<td>{{ project_type.modified }}</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div class="pagination">
|
|
||||||
<span class="step-links">
|
|
||||||
{% if page_obj.has_previous %}
|
|
||||||
<a href="?page=1">« first</a>
|
|
||||||
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<span class="current">
|
|
||||||
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
|
|
||||||
</span>
|
|
||||||
|
|
||||||
{% if page_obj.has_next %}
|
|
||||||
<a href="?page={{ page_obj.next_page_number }}">next</a>
|
|
||||||
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
@ -1,192 +0,0 @@
|
|||||||
import django
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import AnonymousUser, Permission
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase, Client
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from access.models.tenant import Tenant as Organization
|
|
||||||
from access.models.team import Team
|
|
||||||
from access.models.team_user import TeamUsers
|
|
||||||
|
|
||||||
from centurion.tests.abstract.model_permissions import ModelPermissions
|
|
||||||
|
|
||||||
from project_management.models.projects import Project
|
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectPermissions(TestCase, ModelPermissions):
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
app_namespace = 'Project Management'
|
|
||||||
|
|
||||||
url_name_view = '_project_view'
|
|
||||||
|
|
||||||
url_name_add = '_project_add'
|
|
||||||
|
|
||||||
url_name_change = '_project_change'
|
|
||||||
|
|
||||||
url_name_delete = '_project_delete'
|
|
||||||
|
|
||||||
url_delete_response = reverse('Project Management:Projects')
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setUpTestData(self):
|
|
||||||
"""Setup Test
|
|
||||||
|
|
||||||
1. Create an organization for user and item
|
|
||||||
. create an organization that is different to item
|
|
||||||
2. Create a category
|
|
||||||
3. create teams with each permission: view, add, change, delete
|
|
||||||
4. create a user per team
|
|
||||||
"""
|
|
||||||
|
|
||||||
organization = Organization.objects.create(name='test_org')
|
|
||||||
|
|
||||||
self.organization = organization
|
|
||||||
|
|
||||||
different_organization = Organization.objects.create(name='test_different_organization')
|
|
||||||
|
|
||||||
|
|
||||||
self.item = self.model.objects.create(
|
|
||||||
organization=organization,
|
|
||||||
name = 'manufacturerone'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.url_view_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
# self.url_add_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.add_data = {'name': 'manufacturer', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_change_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.change_data = {'name': 'manufacturer', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_delete_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.delete_data = {'name': 'manufacturer'}
|
|
||||||
|
|
||||||
|
|
||||||
view_permissions = Permission.objects.get(
|
|
||||||
codename = 'view_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team = Team.objects.create(
|
|
||||||
team_name = 'view_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team.permissions.set([view_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_permissions = Permission.objects.get(
|
|
||||||
codename = 'add_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team = Team.objects.create(
|
|
||||||
team_name = 'add_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team.permissions.set([add_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
change_permissions = Permission.objects.get(
|
|
||||||
codename = 'change_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team = Team.objects.create(
|
|
||||||
team_name = 'change_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team.permissions.set([change_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delete_permissions = Permission.objects.get(
|
|
||||||
codename = 'delete_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team = Team.objects.create(
|
|
||||||
team_name = 'delete_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team.permissions.set([delete_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = view_team,
|
|
||||||
user = self.view_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = add_team,
|
|
||||||
user = self.add_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = change_team,
|
|
||||||
user = self.change_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = delete_team,
|
|
||||||
user = self.delete_user
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
different_organization_team = Team.objects.create(
|
|
||||||
team_name = 'different_organization_team',
|
|
||||||
organization = different_organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
different_organization_team.permissions.set([
|
|
||||||
view_permissions,
|
|
||||||
add_permissions,
|
|
||||||
change_permissions,
|
|
||||||
delete_permissions,
|
|
||||||
])
|
|
||||||
|
|
||||||
TeamUsers.objects.create(
|
|
||||||
team = different_organization_team,
|
|
||||||
user = self.different_organization_user
|
|
||||||
)
|
|
@ -1,25 +0,0 @@
|
|||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from centurion.tests.abstract.models import PrimaryModel
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectViews(
|
|
||||||
PrimaryModel,
|
|
||||||
TestCase,
|
|
||||||
):
|
|
||||||
|
|
||||||
add_module = 'project_management.views.project'
|
|
||||||
add_view = 'Add'
|
|
||||||
|
|
||||||
change_module = add_module
|
|
||||||
change_view = 'Change'
|
|
||||||
|
|
||||||
delete_module = add_module
|
|
||||||
delete_view = 'Delete'
|
|
||||||
|
|
||||||
display_module = add_module
|
|
||||||
display_view = 'View'
|
|
||||||
|
|
||||||
index_module = add_module
|
|
||||||
index_view = 'Index'
|
|
@ -1,199 +0,0 @@
|
|||||||
import django
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import AnonymousUser, Permission
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase, Client
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from access.models.tenant import Tenant as Organization
|
|
||||||
from access.models.team import Team
|
|
||||||
from access.models.team_user import TeamUsers
|
|
||||||
|
|
||||||
from centurion.tests.abstract.model_permissions import ModelPermissions
|
|
||||||
|
|
||||||
from project_management.models.project_milestone import Project, ProjectMilestone
|
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectMilestonePermissions(TestCase, ModelPermissions):
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
app_namespace = 'Project Management'
|
|
||||||
|
|
||||||
url_name_view = '_project_milestone_view'
|
|
||||||
|
|
||||||
url_name_add = '_project_milestone_add'
|
|
||||||
|
|
||||||
url_name_change = '_project_milestone_change'
|
|
||||||
|
|
||||||
url_name_delete = '_project_milestone_delete'
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setUpTestData(self):
|
|
||||||
"""Setup Test
|
|
||||||
|
|
||||||
1. Create an organization for user and item
|
|
||||||
. create an organization that is different to item
|
|
||||||
2. Create a category
|
|
||||||
3. create teams with each permission: view, add, change, delete
|
|
||||||
4. create a user per team
|
|
||||||
"""
|
|
||||||
|
|
||||||
organization = Organization.objects.create(name='test_org')
|
|
||||||
|
|
||||||
self.organization = organization
|
|
||||||
|
|
||||||
different_organization = Organization.objects.create(name='test_different_organization')
|
|
||||||
|
|
||||||
|
|
||||||
self.project = Project.objects.create(
|
|
||||||
name = 'test_item_' + self.model._meta.model_name,
|
|
||||||
organization = self.organization
|
|
||||||
)
|
|
||||||
|
|
||||||
self.url_delete_response = reverse('Project Management:_project_view', kwargs={'pk': self.project.id}) + '?tab=milestones'
|
|
||||||
|
|
||||||
self.item = self.model.objects.create(
|
|
||||||
name = 'test_item_' + self.model._meta.model_name,
|
|
||||||
organization = self.organization,
|
|
||||||
project = self.project,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.url_view_kwargs = {'project_id': self.project.id, 'pk': self.item.id}
|
|
||||||
|
|
||||||
self.url_add_kwargs = {'project_id': self.project.id }
|
|
||||||
|
|
||||||
self.add_data = {'name': 'manufacturer', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_change_kwargs = {'project_id': self.project.id, 'pk': self.item.id}
|
|
||||||
|
|
||||||
self.change_data = {'name': 'manufacturer', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_delete_kwargs = {'project_id': self.project.id, 'pk': self.item.id}
|
|
||||||
|
|
||||||
self.delete_data = {'name': 'manufacturer'}
|
|
||||||
|
|
||||||
|
|
||||||
view_permissions = Permission.objects.get(
|
|
||||||
codename = 'view_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team = Team.objects.create(
|
|
||||||
team_name = 'view_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team.permissions.set([view_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_permissions = Permission.objects.get(
|
|
||||||
codename = 'add_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team = Team.objects.create(
|
|
||||||
team_name = 'add_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team.permissions.set([add_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
change_permissions = Permission.objects.get(
|
|
||||||
codename = 'change_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team = Team.objects.create(
|
|
||||||
team_name = 'change_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team.permissions.set([change_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delete_permissions = Permission.objects.get(
|
|
||||||
codename = 'delete_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team = Team.objects.create(
|
|
||||||
team_name = 'delete_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team.permissions.set([delete_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = view_team,
|
|
||||||
user = self.view_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = add_team,
|
|
||||||
user = self.add_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = change_team,
|
|
||||||
user = self.change_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = delete_team,
|
|
||||||
user = self.delete_user
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
different_organization_team = Team.objects.create(
|
|
||||||
team_name = 'different_organization_team',
|
|
||||||
organization = different_organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
different_organization_team.permissions.set([
|
|
||||||
view_permissions,
|
|
||||||
add_permissions,
|
|
||||||
change_permissions,
|
|
||||||
delete_permissions,
|
|
||||||
])
|
|
||||||
|
|
||||||
TeamUsers.objects.create(
|
|
||||||
team = different_organization_team,
|
|
||||||
user = self.different_organization_user
|
|
||||||
)
|
|
@ -1,29 +0,0 @@
|
|||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from centurion.tests.abstract.models import ModelCommon
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectMilestoneViews(
|
|
||||||
TestCase,
|
|
||||||
ModelCommon
|
|
||||||
):
|
|
||||||
|
|
||||||
add_module = 'project_management.views.project_milestones'
|
|
||||||
add_view = 'Add'
|
|
||||||
|
|
||||||
change_module = add_module
|
|
||||||
change_view = 'Change'
|
|
||||||
|
|
||||||
delete_module = add_module
|
|
||||||
delete_view = 'Delete'
|
|
||||||
|
|
||||||
display_module = add_module
|
|
||||||
display_view = 'View'
|
|
||||||
|
|
||||||
# index_module = add_module
|
|
||||||
# index_view = 'Index'
|
|
@ -1,194 +0,0 @@
|
|||||||
import django
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import AnonymousUser, Permission
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase, Client
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from access.models.tenant import Tenant as Organization
|
|
||||||
from access.models.team import Team
|
|
||||||
from access.models.team_user import TeamUsers
|
|
||||||
|
|
||||||
from centurion.tests.abstract.model_permissions import ModelPermissions
|
|
||||||
|
|
||||||
from project_management.models.project_states import ProjectState
|
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectStatePermissions(TestCase, ModelPermissions):
|
|
||||||
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
app_namespace = 'Settings'
|
|
||||||
|
|
||||||
url_name_view = '_project_state_view'
|
|
||||||
|
|
||||||
url_name_add = '_project_state_add'
|
|
||||||
|
|
||||||
url_name_change = '_project_state_change'
|
|
||||||
|
|
||||||
url_name_delete = '_project_state_delete'
|
|
||||||
|
|
||||||
url_delete_response = reverse('Settings:_project_states')
|
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setUpTestData(self):
|
|
||||||
"""Setup Test
|
|
||||||
|
|
||||||
1. Create an organization for user and item
|
|
||||||
. create an organization that is different to item
|
|
||||||
2. Create a device
|
|
||||||
3. create teams with each permission: view, add, change, delete
|
|
||||||
4. create a user per team
|
|
||||||
"""
|
|
||||||
|
|
||||||
organization = Organization.objects.create(name='test_org')
|
|
||||||
|
|
||||||
self.organization = organization
|
|
||||||
|
|
||||||
different_organization = Organization.objects.create(name='test_different_organization')
|
|
||||||
|
|
||||||
|
|
||||||
self.item = self.model.objects.create(
|
|
||||||
organization=organization,
|
|
||||||
name = 'a project state'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.url_view_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
# self.url_add_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.add_data = {'name': 'a added project state', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_change_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.change_data = {'name': 'a changed project state', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_delete_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.delete_data = {'name': 'device', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
|
|
||||||
view_permissions = Permission.objects.get(
|
|
||||||
codename = 'view_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team = Team.objects.create(
|
|
||||||
team_name = 'view_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team.permissions.set([view_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_permissions = Permission.objects.get(
|
|
||||||
codename = 'add_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team = Team.objects.create(
|
|
||||||
team_name = 'add_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team.permissions.set([add_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
change_permissions = Permission.objects.get(
|
|
||||||
codename = 'change_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team = Team.objects.create(
|
|
||||||
team_name = 'change_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team.permissions.set([change_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delete_permissions = Permission.objects.get(
|
|
||||||
codename = 'delete_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team = Team.objects.create(
|
|
||||||
team_name = 'delete_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team.permissions.set([delete_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = view_team,
|
|
||||||
user = self.view_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = add_team,
|
|
||||||
user = self.add_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = change_team,
|
|
||||||
user = self.change_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = delete_team,
|
|
||||||
user = self.delete_user
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
different_organization_team = Team.objects.create(
|
|
||||||
team_name = 'different_organization_team',
|
|
||||||
organization = different_organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
different_organization_team.permissions.set([
|
|
||||||
view_permissions,
|
|
||||||
add_permissions,
|
|
||||||
change_permissions,
|
|
||||||
delete_permissions,
|
|
||||||
])
|
|
||||||
|
|
||||||
TeamUsers.objects.create(
|
|
||||||
team = different_organization_team,
|
|
||||||
user = self.different_organization_user
|
|
||||||
)
|
|
@ -1,29 +0,0 @@
|
|||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from centurion.tests.abstract.models import PrimaryModel
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectStateViews(
|
|
||||||
TestCase,
|
|
||||||
PrimaryModel
|
|
||||||
):
|
|
||||||
|
|
||||||
add_module = 'project_management.views.project_states'
|
|
||||||
add_view = 'Add'
|
|
||||||
|
|
||||||
change_module = add_module
|
|
||||||
change_view = 'Change'
|
|
||||||
|
|
||||||
delete_module = add_module
|
|
||||||
delete_view = 'Delete'
|
|
||||||
|
|
||||||
display_module = add_module
|
|
||||||
display_view = 'View'
|
|
||||||
|
|
||||||
index_module = add_module
|
|
||||||
index_view = 'Index'
|
|
@ -1,195 +0,0 @@
|
|||||||
import django
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.contrib.auth.models import AnonymousUser, Permission
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase, Client
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from access.models.tenant import Tenant as Organization
|
|
||||||
from access.models.team import Team
|
|
||||||
from access.models.team_user import TeamUsers
|
|
||||||
|
|
||||||
from centurion.tests.abstract.model_permissions import ModelPermissions
|
|
||||||
|
|
||||||
from project_management.models.project_types import ProjectType
|
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectTypePermissions(TestCase, ModelPermissions):
|
|
||||||
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
app_namespace = 'Settings'
|
|
||||||
|
|
||||||
url_name_view = '_project_type_view'
|
|
||||||
|
|
||||||
url_name_add = '_project_type_add'
|
|
||||||
|
|
||||||
url_name_change = '_project_type_change'
|
|
||||||
|
|
||||||
url_name_delete = '_project_type_delete'
|
|
||||||
|
|
||||||
url_delete_response = reverse('Settings:_project_types')
|
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setUpTestData(self):
|
|
||||||
"""Setup Test
|
|
||||||
|
|
||||||
1. Create an organization for user and item
|
|
||||||
. create an organization that is different to item
|
|
||||||
2. Create a device
|
|
||||||
3. create teams with each permission: view, add, change, delete
|
|
||||||
4. create a user per team
|
|
||||||
"""
|
|
||||||
|
|
||||||
organization = Organization.objects.create(name='test_org')
|
|
||||||
|
|
||||||
self.organization = organization
|
|
||||||
|
|
||||||
different_organization = Organization.objects.create(name='test_different_organization')
|
|
||||||
|
|
||||||
|
|
||||||
self.item = self.model.objects.create(
|
|
||||||
organization=organization,
|
|
||||||
name = 'deviceone'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.url_view_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
# self.url_add_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.add_data = {'device': 'device', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_change_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.change_data = {'device': 'device', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
self.url_delete_kwargs = {'pk': self.item.id}
|
|
||||||
|
|
||||||
self.delete_data = {'device': 'device', 'organization': self.organization.id}
|
|
||||||
|
|
||||||
|
|
||||||
view_permissions = Permission.objects.get(
|
|
||||||
codename = 'view_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team = Team.objects.create(
|
|
||||||
team_name = 'view_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
view_team.permissions.set([view_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_permissions = Permission.objects.get(
|
|
||||||
codename = 'add_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team = Team.objects.create(
|
|
||||||
team_name = 'add_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
add_team.permissions.set([add_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
change_permissions = Permission.objects.get(
|
|
||||||
codename = 'change_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team = Team.objects.create(
|
|
||||||
team_name = 'change_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
change_team.permissions.set([change_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delete_permissions = Permission.objects.get(
|
|
||||||
codename = 'delete_' + self.model._meta.model_name,
|
|
||||||
content_type = ContentType.objects.get(
|
|
||||||
app_label = self.model._meta.app_label,
|
|
||||||
model = self.model._meta.model_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team = Team.objects.create(
|
|
||||||
team_name = 'delete_team',
|
|
||||||
organization = organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_team.permissions.set([delete_permissions])
|
|
||||||
|
|
||||||
|
|
||||||
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = view_team,
|
|
||||||
user = self.view_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.add_user = User.objects.create_user(username="test_user_add", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = add_team,
|
|
||||||
user = self.add_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.change_user = User.objects.create_user(username="test_user_change", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = change_team,
|
|
||||||
user = self.change_user
|
|
||||||
)
|
|
||||||
|
|
||||||
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
|
|
||||||
teamuser = TeamUsers.objects.create(
|
|
||||||
team = delete_team,
|
|
||||||
user = self.delete_user
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
|
|
||||||
|
|
||||||
|
|
||||||
different_organization_team = Team.objects.create(
|
|
||||||
team_name = 'different_organization_team',
|
|
||||||
organization = different_organization,
|
|
||||||
)
|
|
||||||
|
|
||||||
different_organization_team.permissions.set([
|
|
||||||
view_permissions,
|
|
||||||
add_permissions,
|
|
||||||
change_permissions,
|
|
||||||
delete_permissions,
|
|
||||||
])
|
|
||||||
|
|
||||||
TeamUsers.objects.create(
|
|
||||||
team = different_organization_team,
|
|
||||||
user = self.different_organization_user
|
|
||||||
)
|
|
@ -1,29 +0,0 @@
|
|||||||
import pytest
|
|
||||||
import unittest
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from centurion.tests.abstract.models import PrimaryModel
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectTYpeViews(
|
|
||||||
TestCase,
|
|
||||||
PrimaryModel
|
|
||||||
):
|
|
||||||
|
|
||||||
add_module = 'project_management.views.project_types'
|
|
||||||
add_view = 'Add'
|
|
||||||
|
|
||||||
change_module = add_module
|
|
||||||
change_view = 'Change'
|
|
||||||
|
|
||||||
delete_module = add_module
|
|
||||||
delete_view = 'Delete'
|
|
||||||
|
|
||||||
display_module = add_module
|
|
||||||
display_view = 'View'
|
|
||||||
|
|
||||||
index_module = add_module
|
|
||||||
index_view = 'Index'
|
|
@ -1,32 +0,0 @@
|
|||||||
from django.urls import path
|
|
||||||
|
|
||||||
from .views import project, project_milestones
|
|
||||||
|
|
||||||
from core.views import ticket, ticket_comment
|
|
||||||
|
|
||||||
|
|
||||||
app_name = "Project Management"
|
|
||||||
urlpatterns = [
|
|
||||||
path('', project.Index.as_view(), name='Projects'),
|
|
||||||
|
|
||||||
path("project/add", project.Add.as_view(), name="_project_add"),
|
|
||||||
path("project/<int:pk>", project.View.as_view(), name="_project_view"),
|
|
||||||
path("project/<int:pk>/edit", project.Change.as_view(), name="_project_change"),
|
|
||||||
path("project/<int:pk>/delete", project.Delete.as_view(), name="_project_delete"),
|
|
||||||
|
|
||||||
path('project/<int:project_id>/milestone/add', project_milestones.Add.as_view(), name="_project_milestone_add"),
|
|
||||||
path('project/<int:project_id>/milestone/<int:pk>/edit', project_milestones.Change.as_view(), name="_project_milestone_change"),
|
|
||||||
path('project/<int:project_id>/milestone/<int:pk>/delete', project_milestones.Delete.as_view(), name="_project_milestone_delete"),
|
|
||||||
path('project/<int:project_id>/milestone/<int:pk>', project_milestones.View.as_view(), name="_project_milestone_view"),
|
|
||||||
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/add', ticket.Add.as_view(), name="_project_task_add"),
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:pk>/edit', ticket.Change.as_view(), name="_project_task_change"),
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:pk>/delete', ticket.Delete.as_view(), name="_project_task_delete"),
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:pk>', ticket.View.as_view(), name="_project_task_view"),
|
|
||||||
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:ticket_id>/comment/add', ticket_comment.Add.as_view(), name="_project_task_comment_add"),
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:ticket_id>/comment/<int:pk>/edit', ticket_comment.Change.as_view(), name="_project_task_comment_change"),
|
|
||||||
path('project/<int:project_id>/<str:ticket_type>/<int:ticket_id>/comment/<int:parent_id>/add', ticket_comment.Add.as_view(), name="_project_task_comment_reply_add"),
|
|
||||||
|
|
||||||
|
|
||||||
]
|
|
@ -1,209 +0,0 @@
|
|||||||
import json
|
|
||||||
|
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
||||||
from django.core.paginator import Paginator
|
|
||||||
from django.db.models import Q
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.views import generic
|
|
||||||
|
|
||||||
from access.mixin import OrganizationPermission
|
|
||||||
|
|
||||||
from core.forms.comment import AddNoteForm
|
|
||||||
from core.models.notes import Notes
|
|
||||||
from core.models.ticket.ticket import Ticket
|
|
||||||
from core.views.common import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
|
||||||
|
|
||||||
from project_management.forms.project import Project, ProjectForm, DetailForm
|
|
||||||
from project_management.models.project_milestone import ProjectMilestone
|
|
||||||
|
|
||||||
from settings.models.user_settings import UserSettings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Add(AddView):
|
|
||||||
|
|
||||||
form_class = ProjectForm
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.add_project',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_initial(self):
|
|
||||||
return {
|
|
||||||
'organization': UserSettings.objects.get(user = self.request.user).default_organization
|
|
||||||
}
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
form.instance.is_global = False
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:Projects')
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Create a Project'
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Change(ChangeView):
|
|
||||||
|
|
||||||
form_class = ProjectForm
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.change_project',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
form.instance.is_global = False
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:_project_view', kwargs={'pk': self.kwargs['pk']})
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Edit'
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Delete(DeleteView):
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.delete_project',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:Projects')
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Delete ' + self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Index(IndexView):
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_project',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_index.html.j2'
|
|
||||||
|
|
||||||
context_object_name = "projects"
|
|
||||||
|
|
||||||
paginate_by = 10
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Projects'
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
|
|
||||||
if self.request.user.is_superuser:
|
|
||||||
|
|
||||||
return self.model.objects.filter().order_by('name')
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
return self.model.objects.filter(Q(organization__in=self.user_organizations()) | Q(is_global = True)).order_by('name')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class View(ChangeView):
|
|
||||||
|
|
||||||
model = Project
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_project'
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project.html.j2'
|
|
||||||
|
|
||||||
form_class = DetailForm
|
|
||||||
|
|
||||||
context_object_name = "project"
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
# context['notes_form'] = AddNoteForm(prefix='note')
|
|
||||||
# context['notes'] = Notes.objects.filter(service=self.kwargs['pk'])
|
|
||||||
|
|
||||||
context['milestones'] = ProjectMilestone.objects.filter(project__id=self.kwargs['pk'])
|
|
||||||
|
|
||||||
context['project_tasks'] = Ticket.objects.filter(
|
|
||||||
project = self.object,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
context['model_docs_path'] = self.model._meta.app_label + '/' + self.model._meta.model_name + '/'
|
|
||||||
|
|
||||||
context['model_pk'] = self.kwargs['pk']
|
|
||||||
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
|
|
||||||
|
|
||||||
context['model_delete_url'] = reverse('Project Management:_project_delete', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
context['content_title'] = context['project'].name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
# def post(self, request, *args, **kwargs):
|
|
||||||
|
|
||||||
# project = self.model.objects.get(pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
# notes = AddNoteForm(request.POST, prefix='note')
|
|
||||||
|
|
||||||
# if notes.is_bound and notes.is_valid() and notes.instance.note != '':
|
|
||||||
|
|
||||||
# if request.user.has_perm('core.add_notes'):
|
|
||||||
|
|
||||||
# notes.instance.organization = device.organization
|
|
||||||
# notes.instance.project = project
|
|
||||||
# notes.instance.usercreated = request.user
|
|
||||||
|
|
||||||
# notes.save()
|
|
||||||
|
|
||||||
# return super().post(request, *args, **kwargs)
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
|||||||
import json
|
|
||||||
|
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
||||||
from django.core.paginator import Paginator
|
|
||||||
from django.db.models import Q
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.views import generic
|
|
||||||
|
|
||||||
from access.mixin import OrganizationPermission
|
|
||||||
|
|
||||||
from core.forms.comment import AddNoteForm
|
|
||||||
from core.models.notes import Notes
|
|
||||||
from core.models.ticket.ticket import Ticket
|
|
||||||
from core.views.common import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
|
||||||
|
|
||||||
from project_management.forms.project_milestone import DetailForm, ProjectMilestone, ProjectMilestoneForm
|
|
||||||
|
|
||||||
from settings.models.user_settings import UserSettings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Add(AddView):
|
|
||||||
|
|
||||||
form_class = ProjectMilestoneForm
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.add_projectmilestone',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_initial(self):
|
|
||||||
initial = super().get_initial()
|
|
||||||
|
|
||||||
initial.update({
|
|
||||||
'project': self.kwargs['project_id']
|
|
||||||
})
|
|
||||||
|
|
||||||
return initial
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
form.instance.is_global = False
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:_project_view', kwargs={'pk': self.kwargs['project_id']}) + '?tab=milestones'
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Create a Project Milestone'
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Change(ChangeView):
|
|
||||||
|
|
||||||
form_class = ProjectMilestoneForm
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.change_projectmilestone',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
form.instance.is_global = False
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:_project_view', kwargs={'pk': self.kwargs['pk']})
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Edit'
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Delete(DeleteView):
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.delete_projectmilestone',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'form.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Project Management:_project_view', kwargs={'pk': self.kwargs['project_id']}) + '?tab=milestones'
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Delete ' + self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class View(ChangeView):
|
|
||||||
|
|
||||||
model = ProjectMilestone
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_projectmilestone'
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_milestone.html.j2'
|
|
||||||
|
|
||||||
form_class = DetailForm
|
|
||||||
|
|
||||||
context_object_name = "project"
|
|
||||||
|
|
||||||
|
|
||||||
def get_initial(self):
|
|
||||||
initial = super().get_initial()
|
|
||||||
|
|
||||||
initial.update({
|
|
||||||
'project': self.kwargs['project_id']
|
|
||||||
})
|
|
||||||
|
|
||||||
return initial
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['tasks'] = Ticket.objects.filter(
|
|
||||||
project = self.object.project,
|
|
||||||
milestone = self.kwargs['pk'],
|
|
||||||
)
|
|
||||||
|
|
||||||
context['model_docs_path'] = self.model._meta.app_label + '/' + self.model._meta.model_name + '/'
|
|
||||||
|
|
||||||
context['model_pk'] = self.kwargs['pk']
|
|
||||||
context['model_name'] = self.model._meta.verbose_name.replace(' ', '')
|
|
||||||
|
|
||||||
context['model_delete_url'] = reverse('Project Management:_project_milestone_delete', kwargs={'project_id': self.kwargs['project_id'], 'pk': self.kwargs['pk']})
|
|
||||||
|
|
||||||
context['content_title'] = context['project'].name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
# def post(self, request, *args, **kwargs):
|
|
||||||
|
|
||||||
# project = self.model.objects.get(pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
# notes = AddNoteForm(request.POST, prefix='note')
|
|
||||||
|
|
||||||
# if notes.is_bound and notes.is_valid() and notes.instance.note != '':
|
|
||||||
|
|
||||||
# if request.user.has_perm('core.add_notes'):
|
|
||||||
|
|
||||||
# notes.instance.organization = device.organization
|
|
||||||
# notes.instance.project = project
|
|
||||||
# notes.instance.usercreated = request.user
|
|
||||||
|
|
||||||
# notes.save()
|
|
||||||
|
|
||||||
# return super().post(request, *args, **kwargs)
|
|
@ -1,150 +0,0 @@
|
|||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
from core.forms.comment import AddNoteForm
|
|
||||||
from core.models.notes import Notes
|
|
||||||
from core.views.common import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
|
||||||
|
|
||||||
from project_management.forms.project_states import DetailForm, ProjectState, ProjectStateForm
|
|
||||||
|
|
||||||
from settings.models.user_settings import UserSettings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Add(AddView):
|
|
||||||
|
|
||||||
form_class = ProjectStateForm
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.add_projectstate',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_states')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Change(ChangeView):
|
|
||||||
|
|
||||||
context_object_name = "project_state"
|
|
||||||
|
|
||||||
form_class = ProjectStateForm
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.change_projectstate',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_state_view', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Delete(DeleteView):
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.delete_projectstate',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Delete ' + self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_states')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Index(IndexView):
|
|
||||||
|
|
||||||
context_object_name = "project_states"
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
paginate_by = 10
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_projectstate'
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_state_index.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class View(ChangeView):
|
|
||||||
|
|
||||||
context_object_name = "project_state"
|
|
||||||
|
|
||||||
form_class = DetailForm
|
|
||||||
|
|
||||||
model = ProjectState
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_projectstate',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_state.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['notes_form'] = AddNoteForm(prefix='note')
|
|
||||||
context['notes'] = Notes.objects.filter(config_group=self.kwargs['pk'])
|
|
||||||
|
|
||||||
context['model_pk'] = self.kwargs['pk']
|
|
||||||
context['model_name'] = self.model._meta.model_name
|
|
||||||
|
|
||||||
context['model_delete_url'] = reverse('Settings:_project_state_delete', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
|
|
||||||
context['content_title'] = self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
|
|
||||||
item = KnowledgeBase.objects.get(pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
notes = AddNoteForm(request.POST, prefix='note')
|
|
||||||
|
|
||||||
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
|
|
||||||
|
|
||||||
notes.instance.organization = item.organization
|
|
||||||
|
|
||||||
notes.save()
|
|
||||||
|
|
||||||
# dont allow saving any post data outside notes.
|
|
||||||
# todo: figure out what needs to be returned
|
|
||||||
# return super().post(request, *args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_state_view', args=(self.kwargs['pk'],))
|
|
@ -1,157 +0,0 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from django.contrib.auth import decorators as auth_decorator
|
|
||||||
from django.db.models import Q
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
|
|
||||||
from access.models.team_user import TeamUsers
|
|
||||||
|
|
||||||
from core.forms.comment import AddNoteForm
|
|
||||||
from core.models.notes import Notes
|
|
||||||
from core.views.common import AddView, ChangeView, DeleteView, DisplayView, IndexView
|
|
||||||
|
|
||||||
from project_management.forms.project_types import DetailForm, ProjectType, ProjectTypeForm
|
|
||||||
|
|
||||||
from settings.models.user_settings import UserSettings
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Add(AddView):
|
|
||||||
|
|
||||||
form_class = ProjectTypeForm
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.add_projecttype',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_types')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Change(ChangeView):
|
|
||||||
|
|
||||||
context_object_name = "project_type"
|
|
||||||
|
|
||||||
form_class = ProjectTypeForm
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.change_projecttype',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_type_view', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Index(IndexView):
|
|
||||||
|
|
||||||
context_object_name = "project_types"
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
paginate_by = 10
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_projecttype'
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_type_index.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class View(ChangeView):
|
|
||||||
|
|
||||||
context_object_name = "project_type"
|
|
||||||
|
|
||||||
form_class = DetailForm
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.view_projecttype',
|
|
||||||
]
|
|
||||||
|
|
||||||
template_name = 'project_management/project_type.html.j2'
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['notes_form'] = AddNoteForm(prefix='note')
|
|
||||||
context['notes'] = Notes.objects.filter(config_group=self.kwargs['pk'])
|
|
||||||
|
|
||||||
context['model_pk'] = self.kwargs['pk']
|
|
||||||
context['model_name'] = self.model._meta.model_name
|
|
||||||
|
|
||||||
context['model_delete_url'] = reverse('Settings:_project_type_delete', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
|
|
||||||
context['content_title'] = self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
|
|
||||||
item = KnowledgeBase.objects.get(pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
notes = AddNoteForm(request.POST, prefix='note')
|
|
||||||
|
|
||||||
if notes.is_bound and notes.is_valid() and notes.instance.note != '':
|
|
||||||
|
|
||||||
notes.instance.organization = item.organization
|
|
||||||
|
|
||||||
notes.save()
|
|
||||||
|
|
||||||
# dont allow saving any post data outside notes.
|
|
||||||
# todo: figure out what needs to be returned
|
|
||||||
# return super().post(request, *args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_type_view', args=(self.kwargs['pk'],))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Delete(DeleteView):
|
|
||||||
|
|
||||||
model = ProjectType
|
|
||||||
|
|
||||||
permission_required = [
|
|
||||||
'project_management.delete_projecttype',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
context['content_title'] = 'Delete ' + self.object.name
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self, **kwargs):
|
|
||||||
|
|
||||||
return reverse('Settings:_project_types')
|
|
Reference in New Issue
Block a user