Files
centurion_erp/app/project_management/models/project_milestone.py

177 lines
3.8 KiB
Python

from django.db import models
from access.fields import AutoCreatedField
from .projects import Project, ProjectCommonFieldsName
class ProjectMilestone(ProjectCommonFieldsName):
class Meta:
ordering = [
'name',
]
verbose_name = 'Project Milestone'
verbose_name_plural = 'Project Milestones'
description = models.TextField(
blank = True,
default = None,
help_text = 'Description of milestone. Markdown supported',
null= True,
verbose_name = 'Description',
)
start_date = models.DateTimeField(
blank = True,
help_text = 'When work commenced on the project.',
null = True,
verbose_name = 'Real Start Date',
)
finish_date = models.DateTimeField(
blank = True,
help_text = 'When work was completed for the project',
null = True,
verbose_name = 'Real Finish Date',
)
project = models.ForeignKey(
Project,
blank= False,
help_text = 'Project this milestone belongs.',
on_delete=models.CASCADE,
null = False,
)
model_notes = None
created = AutoCreatedField(
editable = False,
)
# model not intended to be vieable on its own page
# as this model is a sub-model.
page_layout: dict = [
{
"name": "Details",
"slug": "details",
"sections": [
{
"layout": "double",
"left": [
'organization',
'project',
'name',
'start_date',
'finish_date',
'created',
'modified',
],
"right": [
'description',
'is_global',
]
}
]
},
{
"name": "Knowledge Base",
"slug": "kb_articles",
"sections": [
{
"layout": "table",
"field": "knowledge_base",
}
]
},
{
"name": "Tickets",
"slug": "tickets",
"sections": [
# {
# "layout": "table",
# "field": "tickets",
# }
],
},
{
"name": "Notes",
"slug": "notes",
"sections": []
},
]
table_fields: list = [
'name',
'percent_completed'
'start_date',
'finish_date',
]
def __str__(self):
return self.name
def get_url_kwargs(self) -> dict:
return {
'project_id': self.project.id,
'pk': self.id
}
def get_url_kwargs_notes(self) -> dict:
"""Fetch the URL kwargs for model notes
Returns:
dict: notes kwargs required for generating the URL with `reverse`
"""
return {
'project_id': self.project.id,
'model_id': self.id
}
# @property
# def parent_object(self):
# """ Fetch the parent object """
# return self.project
@property
def percent_completed(self) -> str: # Auto-Calculate
""" How much of the milestone is completed.
Returns:
str: Calculated percentage of project completion.
"""
return 'xx %'
def save_history(self, before: dict, after: dict) -> bool:
from project_management.models.project_milestone_history import ProjectMilestoneAuditHistory
history = super().save_history(
before = before,
after = after,
history_model = ProjectMilestoneAuditHistory,
)
return history