You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

105 lines
7.4 KiB

# Generated by Django 4.2.30 on 2026-09-15 11:57
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('profiles', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='KanbanColumn',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, verbose_name='Column Name')),
('code', models.CharField(default='todo', max_length=50, verbose_name='Column Code Identifier')),
('order', models.IntegerField(default=0, verbose_name='Display Order')),
('color', models.CharField(blank=True, default='#6366f1', max_length=20, null=True, verbose_name='Badge / Header Color')),
],
options={
'verbose_name': 'Kanban Column',
'verbose_name_plural': 'Kanban Columns',
'ordering': ('order', 'id'),
},
),
migrations.CreateModel(
name='Project',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='Project Title')),
('slug', models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True, verbose_name='Slug / URL Identifier')),
('description', models.TextField(blank=True, null=True, verbose_name='Project Description & Objectives')),
('category', models.CharField(blank=True, help_text='e.g. Cultural Diplomacy, Educational Academy, Interfaith Dialogue, Humanitarian Relief', max_length=100, null=True, verbose_name='Project Category')),
('status', models.CharField(choices=[('planning', 'Planning'), ('active', 'Active / In Progress'), ('on_hold', 'On Hold'), ('completed', 'Completed')], default='active', max_length=20, verbose_name='Project Status')),
('progress_percentage', models.PositiveSmallIntegerField(default=0, verbose_name='Progress Percentage (0-100)')),
('budget', models.CharField(blank=True, help_text='e.g. $50,000 or €35,000', max_length=100, null=True, verbose_name='Estimated Budget')),
('team_size', models.PositiveIntegerField(default=1, verbose_name='Team Size')),
('cover_image', models.ImageField(blank=True, null=True, upload_to='projects/covers/%Y/%m/', verbose_name='Cover Image')),
('start_date', models.DateField(blank=True, null=True, verbose_name='Start Date')),
('estimated_end_date', models.DateField(blank=True, null=True, verbose_name='Estimated End Date')),
('actual_end_date', models.DateField(blank=True, null=True, verbose_name='Actual Completion Date')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('collaborating_institutions', models.ManyToManyField(blank=True, related_name='collaborative_projects', to='profiles.institution', verbose_name='Collaborating Institutions')),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_projects', to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
('owner_institution', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owned_projects', to='profiles.institution', verbose_name='Lead / Owner Institution')),
],
options={
'verbose_name': 'Collaborative Project',
'verbose_name_plural': 'Collaborative Projects',
'ordering': ('-created_at',),
},
),
migrations.CreateModel(
name='ProjectDocument',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='Document Title')),
('file', models.FileField(upload_to='projects/docs/%Y/%m/', verbose_name='Document File')),
('doc_type', models.CharField(choices=[('mou', 'MOU / Bilateral Agreement'), ('report', 'Progress / Milestone Report'), ('contract', 'Contract / Agreement'), ('other', 'Other Document')], default='mou', max_length=50, verbose_name='Document Type')),
('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='Uploaded At')),
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='projects.project', verbose_name='Project')),
('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_project_documents', to=settings.AUTH_USER_MODEL, verbose_name='Uploaded By')),
],
options={
'verbose_name': 'Project Document',
'verbose_name_plural': 'Project Documents',
'ordering': ('-uploaded_at',),
},
),
migrations.CreateModel(
name='KanbanTask',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='Task Title')),
('description', models.TextField(blank=True, null=True, verbose_name='Task Description')),
('priority', models.CharField(choices=[('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('urgent', 'Urgent')], default='medium', max_length=20, verbose_name='Priority')),
('due_date', models.DateField(blank=True, null=True, verbose_name='Due Date')),
('labels', models.JSONField(blank=True, default=list, verbose_name='Task Labels')),
('order', models.IntegerField(default=0, verbose_name='Display Order within Column')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('assignee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_tasks', to=settings.AUTH_USER_MODEL, verbose_name='Assignee User')),
('column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks', to='projects.kanbancolumn', verbose_name='Kanban Column')),
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks', to='projects.project', verbose_name='Project')),
],
options={
'verbose_name': 'Kanban Task',
'verbose_name_plural': 'Kanban Tasks',
'ordering': ('order', '-updated_at'),
},
),
migrations.AddField(
model_name='kanbancolumn',
name='project',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='columns', to='projects.project', verbose_name='Project'),
),
]