chore(project_management): Remove no longer used Django UI

ref: #788 #757
This commit is contained in:
2025-06-05 14:11:18 +09:30
parent 882c2afc9f
commit 764e631be6
25 changed files with 0 additions and 2486 deletions

View File

@ -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')

View File

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

View File

@ -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')

View File

@ -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')

View File

@ -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

View File

@ -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 %}

View File

@ -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>&nbsp;</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>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; 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 &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -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 %}

View File

@ -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 %}

View File

@ -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>&nbsp;</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>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; 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 &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -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 %}

View File

@ -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>&nbsp;</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>&nbsp;</td>
</tr>
{% endfor %}
</table>
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="?page=1">&laquo; 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 &raquo;</a>
{% endif %}
</span>
</div>
{% endblock %}

View File

@ -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
)

View File

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

View File

@ -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
)

View File

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

View File

@ -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
)

View File

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

View File

@ -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
)

View File

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

View File

@ -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"),
]

View File

@ -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)

View File

@ -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)

View File

@ -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'],))

View File

@ -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')