feat(project_management): Add manager and users for projects and tasks
!30 #14
This commit is contained in:
@ -34,3 +34,5 @@ class ProjectForm(forms.ModelForm):
|
||||
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"}
|
||||
|
||||
|
@ -0,0 +1,42 @@
|
||||
# Generated by Django 5.0.6 on 2024-06-17 23:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('access', '0005_organization_manager_organization_model_notes'),
|
||||
('project_management', '0002_projecttask'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='manager_team',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='access.team'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='manager_user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='manager_user', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='project',
|
||||
name='team_members',
|
||||
field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='projecttask',
|
||||
name='task_members',
|
||||
field=models.ManyToManyField(help_text='User whom is responsible for completing the task.', related_name='task_members', to=settings.AUTH_USER_MODEL, verbose_name='Team Members'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='projecttask',
|
||||
name='task_owner',
|
||||
field=models.ForeignKey(blank=True, help_text='User whom is considered the task owner.', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Task Owner'),
|
||||
),
|
||||
]
|
@ -1,8 +1,11 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
||||
from .projects import Project
|
||||
from .project_common import ProjectCommonFieldsName
|
||||
|
||||
from access.models import Team
|
||||
|
||||
from core.mixin.history_save import SaveHistory
|
||||
|
||||
|
||||
@ -100,3 +103,19 @@ class ProjectTask(ProjectCommonFieldsName, SaveHistory):
|
||||
|
||||
model_notes = None
|
||||
|
||||
task_owner = models.ForeignKey(
|
||||
User,
|
||||
blank= True,
|
||||
help_text = 'User whom is considered the task owner.',
|
||||
on_delete=models.SET_NULL,
|
||||
null = True,
|
||||
verbose_name = 'Task Owner',
|
||||
)
|
||||
|
||||
task_members = models.ManyToManyField(
|
||||
to = User,
|
||||
blank = False,
|
||||
help_text = 'User whom is responsible for completing the task.',
|
||||
related_name = 'task_members',
|
||||
verbose_name = 'Team Members',
|
||||
)
|
@ -1,5 +1,8 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
||||
from access.models import Team
|
||||
|
||||
from core.mixin.history_save import SaveHistory
|
||||
|
||||
from .project_common import ProjectCommonFieldsName
|
||||
@ -35,7 +38,6 @@ class Project(ProjectCommonFieldsName, SaveHistory):
|
||||
|
||||
# state
|
||||
|
||||
|
||||
# project_type
|
||||
|
||||
code = models.CharField(
|
||||
@ -73,8 +75,30 @@ class Project(ProjectCommonFieldsName, SaveHistory):
|
||||
verbose_name = 'Real Finish Date',
|
||||
)
|
||||
|
||||
manager_user = models.ForeignKey(
|
||||
User,
|
||||
blank= True,
|
||||
help_text = '',
|
||||
on_delete=models.SET_NULL,
|
||||
null = True,
|
||||
related_name = 'manager_user'
|
||||
)
|
||||
|
||||
manager_team = models.ForeignKey(
|
||||
Team,
|
||||
blank= True,
|
||||
help_text = '',
|
||||
on_delete=models.SET_NULL,
|
||||
null = True,
|
||||
)
|
||||
|
||||
model_notes = None
|
||||
|
||||
team_members = models.ManyToManyField(
|
||||
to = User,
|
||||
blank = True,
|
||||
)
|
||||
|
||||
|
||||
@property
|
||||
def percent_completed(self) -> str: # Auto-Calculate
|
||||
|
@ -71,6 +71,10 @@
|
||||
line-height: 30px;
|
||||
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0; border-top: 1px solid #ccc;
|
||||
}
|
||||
</style>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
@ -146,10 +150,40 @@
|
||||
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<div style="display: inline; width: 40%; margin: 30px;">
|
||||
<h3>Manager</h3>
|
||||
<div style="display: inline; width: 40%; margin: 30px;">
|
||||
|
||||
<div class="detail-view-field">
|
||||
<label>{{ form.manager_user.label }}</label>
|
||||
<span>{{ form.manager_user.value }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div style="display: inline; width: 40%; margin: 30px;">
|
||||
|
||||
<div class="detail-view-field">
|
||||
<label>{{ form.team_members.label }}</label>
|
||||
<span>{{ form.team_members.value }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<hr />
|
||||
|
||||
<div style="display: inline; width: 40%; margin: 30px;">
|
||||
<h3>Description</h3>
|
||||
<div style="display:block; border: 1px solid #ccc;">
|
||||
{{ form.description.value | markdown | safe }}
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
|
||||
<input type="button" value="Edit"
|
||||
|
Reference in New Issue
Block a user