feat(project_management): Change model to inherit from CenturionModel for ProjectManagement model

ref: #833 #830 closes #591
This commit is contained in:
2025-06-14 12:56:07 +09:30
parent 60b38cc61b
commit c9a21bc3e9
2 changed files with 153 additions and 32 deletions

View File

@ -0,0 +1,129 @@
# Generated by Django 5.1.9 on 2025-06-14 03:23
import access.models.tenancy_abstract
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("access", "0016_remove_tenant_slug_alter_tenant_manager_and_more"),
("core", "0033_alter_ticketcommentcategory_parent_and_more"),
(
"project_management",
"0007_remove_project_is_global_remove_project_slug_and_more",
),
]
operations = [
migrations.RemoveField(
model_name="projectmilestone",
name="is_global",
),
migrations.RemoveField(
model_name="projectmilestone",
name="slug",
),
migrations.AlterField(
model_name="projectmilestone",
name="description",
field=models.TextField(
blank=True,
help_text="Description of milestone. Markdown supported",
null=True,
verbose_name="Description",
),
),
migrations.AlterField(
model_name="projectmilestone",
name="id",
field=models.AutoField(
help_text="ID of the item",
primary_key=True,
serialize=False,
unique=True,
verbose_name="ID",
),
),
migrations.AlterField(
model_name="projectmilestone",
name="organization",
field=models.ForeignKey(
help_text="Tenant this belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="access.tenant",
validators=[
access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists
],
verbose_name="Tenant",
),
),
migrations.CreateModel(
name="ProjectMilestoneAuditHistory",
fields=[
(
"centurionaudit_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="core.centurionaudit",
),
),
(
"model",
models.ForeignKey(
help_text="Model this history belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="audit_history",
to="project_management.projectmilestone",
verbose_name="Model",
),
),
],
options={
"verbose_name": "Project Milestone History",
"verbose_name_plural": "Project Milestone Histories",
"db_table": "project_management_projectmilestone_audithistory",
"managed": True,
},
bases=("core.centurionaudit",),
),
migrations.CreateModel(
name="ProjectMilestoneCenturionModelNote",
fields=[
(
"centurionmodelnote_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="core.centurionmodelnote",
),
),
(
"model",
models.ForeignKey(
help_text="Model this note belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="project_management.projectmilestone",
verbose_name="Model",
),
),
],
options={
"verbose_name": "Project Milestone Note",
"verbose_name_plural": "Project Milestone Notes",
"db_table": "project_management_projectmilestone_centurionmodelnote",
"managed": True,
},
bases=("core.centurionmodelnote",),
),
]

View File

@ -1,13 +1,18 @@
from django.db import models
from access.fields import AutoCreatedField
from access.fields import AutoLastModifiedField
from core.models.centurion import CenturionModel
from .projects import Project
from .project_common import ProjectCommonFieldsName
class ProjectMilestone(ProjectCommonFieldsName):
class ProjectMilestone(
CenturionModel
):
model_tag = 'project_milestone'
class Meta:
@ -21,9 +26,16 @@ class ProjectMilestone(ProjectCommonFieldsName):
verbose_name_plural = 'Project Milestones'
name = models.CharField(
blank = False,
help_text = 'Name of the item',
max_length = 100,
unique = True,
verbose_name = 'Name'
)
description = models.TextField(
blank = True,
default = None,
help_text = 'Description of milestone. Markdown supported',
null= True,
verbose_name = 'Description',
@ -47,16 +59,13 @@ class ProjectMilestone(ProjectCommonFieldsName):
Project,
blank= False,
help_text = 'Project this milestone belongs.',
on_delete=models.CASCADE,
on_delete = models.CASCADE,
null = False,
)
model_notes = None
created = AutoCreatedField(
editable = False,
)
modified = AutoLastModifiedField()
# model not intended to be vieable on its own page
@ -124,31 +133,15 @@ class ProjectMilestone(ProjectCommonFieldsName):
return self.name
def get_url_kwargs(self) -> dict:
def get_url_kwargs(self, many = False) -> dict:
return {
'project_id': self.project.id,
'pk': self.id
}
kwargs = super().get_url_kwargs( many = many )
def get_url_kwargs_notes(self) -> dict:
"""Fetch the URL kwargs for model notes
kwargs.update({
'project_id': self.project.id
})
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
return kwargs
@property
@ -173,4 +166,3 @@ class ProjectMilestone(ProjectCommonFieldsName):
return history