# Generated by Django 5.2.6 on 2026-01-23 16:25

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