438 lines
16 KiB
Python
438 lines
16 KiB
Python
# Generated by Django 5.2.7 on 2025-10-25 14:02
|
|
|
|
import django.db.models.deletion
|
|
import django.utils.timezone
|
|
import horilla.models
|
|
import project.models
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
initial = True
|
|
|
|
dependencies = [
|
|
("base", "0001_initial"),
|
|
("employee", "0001_initial"),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="Project",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"title",
|
|
models.CharField(max_length=200, unique=True, verbose_name="Name"),
|
|
),
|
|
(
|
|
"status",
|
|
models.CharField(
|
|
choices=[
|
|
("new", "New"),
|
|
("in_progress", "In Progress"),
|
|
("completed", "Completed"),
|
|
("on_hold", "On Hold"),
|
|
("cancelled", "Cancelled"),
|
|
("expired", "Expired"),
|
|
],
|
|
default="new",
|
|
max_length=250,
|
|
verbose_name="Status",
|
|
),
|
|
),
|
|
("start_date", models.DateField(verbose_name="Start Date")),
|
|
(
|
|
"end_date",
|
|
models.DateField(blank=True, null=True, verbose_name="End Date"),
|
|
),
|
|
(
|
|
"document",
|
|
models.FileField(
|
|
blank=True,
|
|
null=True,
|
|
upload_to=horilla.models.upload_path,
|
|
verbose_name="Project File",
|
|
),
|
|
),
|
|
("description", models.TextField(verbose_name="Description")),
|
|
(
|
|
"company_id",
|
|
models.ForeignKey(
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.PROTECT,
|
|
to="base.company",
|
|
),
|
|
),
|
|
(
|
|
"created_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Created By",
|
|
),
|
|
),
|
|
(
|
|
"managers",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="project_managers",
|
|
to="employee.employee",
|
|
verbose_name="Project Managers",
|
|
),
|
|
),
|
|
(
|
|
"members",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="project_members",
|
|
to="employee.employee",
|
|
verbose_name="Project Members",
|
|
),
|
|
),
|
|
(
|
|
"modified_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(class)s_modified_by",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Modified By",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Project",
|
|
"verbose_name_plural": "Projects",
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="ProjectStage",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("title", models.CharField(max_length=200, verbose_name="Title")),
|
|
(
|
|
"sequence",
|
|
models.IntegerField(blank=True, editable=False, null=True),
|
|
),
|
|
(
|
|
"is_end_stage",
|
|
models.BooleanField(default=False, verbose_name="Is end stage"),
|
|
),
|
|
(
|
|
"created_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Created By",
|
|
),
|
|
),
|
|
(
|
|
"modified_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(class)s_modified_by",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Modified By",
|
|
),
|
|
),
|
|
(
|
|
"project",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="project_stages",
|
|
to="project.project",
|
|
verbose_name="Project",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Project Stage",
|
|
"verbose_name_plural": "Project Stages",
|
|
"unique_together": {("project", "title")},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="Task",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
("title", models.CharField(max_length=200, verbose_name="Title")),
|
|
(
|
|
"status",
|
|
models.CharField(
|
|
choices=[
|
|
("to_do", "To Do"),
|
|
("in_progress", "In Progress"),
|
|
("completed", "Completed"),
|
|
("expired", "Expired"),
|
|
],
|
|
default="to_do",
|
|
max_length=250,
|
|
verbose_name="Status",
|
|
),
|
|
),
|
|
(
|
|
"start_date",
|
|
models.DateField(blank=True, null=True, verbose_name="Start Date"),
|
|
),
|
|
(
|
|
"end_date",
|
|
models.DateField(blank=True, null=True, verbose_name="End Date"),
|
|
),
|
|
(
|
|
"document",
|
|
models.FileField(
|
|
blank=True,
|
|
null=True,
|
|
upload_to=horilla.models.upload_path,
|
|
verbose_name="Task File",
|
|
),
|
|
),
|
|
("description", models.TextField(verbose_name="Description")),
|
|
("sequence", models.IntegerField(default=0)),
|
|
(
|
|
"created_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Created By",
|
|
),
|
|
),
|
|
(
|
|
"modified_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(class)s_modified_by",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Modified By",
|
|
),
|
|
),
|
|
(
|
|
"project",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
to="project.project",
|
|
verbose_name="Project",
|
|
),
|
|
),
|
|
(
|
|
"stage",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="tasks",
|
|
to="project.projectstage",
|
|
verbose_name="Project Stage",
|
|
),
|
|
),
|
|
(
|
|
"task_managers",
|
|
models.ManyToManyField(
|
|
blank=True, to="employee.employee", verbose_name="Task Managers"
|
|
),
|
|
),
|
|
(
|
|
"task_members",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
related_name="tasks",
|
|
to="employee.employee",
|
|
verbose_name="Task Members",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Task",
|
|
"verbose_name_plural": "Tasks",
|
|
"unique_together": {("project", "title")},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="TimeSheet",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(
|
|
auto_now_add=True, null=True, verbose_name="Created At"
|
|
),
|
|
),
|
|
(
|
|
"is_active",
|
|
models.BooleanField(default=True, verbose_name="Is Active"),
|
|
),
|
|
(
|
|
"date",
|
|
models.DateField(
|
|
default=django.utils.timezone.now, verbose_name="Date"
|
|
),
|
|
),
|
|
(
|
|
"time_spent",
|
|
models.CharField(
|
|
default="00:00",
|
|
max_length=10,
|
|
null=True,
|
|
validators=[project.models.validate_time_format],
|
|
verbose_name="Hours Spent",
|
|
),
|
|
),
|
|
(
|
|
"status",
|
|
models.CharField(
|
|
choices=[
|
|
("in_Progress", "In Progress"),
|
|
("completed", "Completed"),
|
|
],
|
|
default="in_Progress",
|
|
max_length=250,
|
|
verbose_name="Status",
|
|
),
|
|
),
|
|
(
|
|
"description",
|
|
models.TextField(blank=True, null=True, verbose_name="Description"),
|
|
),
|
|
(
|
|
"created_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Created By",
|
|
),
|
|
),
|
|
(
|
|
"employee_id",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
to="employee.employee",
|
|
verbose_name="Employee",
|
|
),
|
|
),
|
|
(
|
|
"modified_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
editable=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(class)s_modified_by",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Modified By",
|
|
),
|
|
),
|
|
(
|
|
"project_id",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="project_timesheet",
|
|
to="project.project",
|
|
verbose_name="Project",
|
|
),
|
|
),
|
|
(
|
|
"task_id",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="task_timesheet",
|
|
to="project.task",
|
|
verbose_name="Task",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "Time Sheet",
|
|
"verbose_name_plural": "Time Sheets",
|
|
},
|
|
),
|
|
]
|