# Generated by Django 5.2.16 on 2026-07-31 06:19

import django.core.validators
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Agency',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('company_name', models.CharField(max_length=255)),
                ('address', models.TextField(blank=True, null=True)),
                ('phone', models.CharField(blank=True, max_length=20, null=True)),
                ('email', models.EmailField(blank=True, max_length=254, null=True)),
                ('logo', models.ImageField(blank=True, null=True, upload_to='agency/logos/')),
                ('gst', models.CharField(blank=True, max_length=20, null=True)),
                ('pan', models.CharField(blank=True, max_length=20, null=True)),
                ('website', models.URLField(blank=True, null=True)),
                ('signature', models.ImageField(blank=True, null=True, upload_to='agency/signatures/')),
            ],
        ),
        migrations.CreateModel(
            name='AgreementTemplate',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True, null=True)),
                ('structure', models.JSONField(default=dict)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
            ],
        ),
        migrations.CreateModel(
            name='AnnexureTemplate',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('content', models.TextField()),
            ],
        ),
        migrations.CreateModel(
            name='Client',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('company_name', models.CharField(max_length=255)),
                ('contact_person', models.CharField(max_length=255)),
                ('designation', models.CharField(blank=True, max_length=255, null=True)),
                ('email', models.EmailField(max_length=254)),
                ('phone', models.CharField(blank=True, max_length=20, null=True)),
                ('address', models.TextField(blank=True, null=True)),
                ('gst', models.CharField(blank=True, max_length=20, null=True)),
                ('pan', models.CharField(blank=True, max_length=20, null=True)),
                ('website', models.URLField(blank=True, null=True)),
                ('description', models.TextField(blank=True, null=True)),
            ],
        ),
        migrations.CreateModel(
            name='Terms',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('content', models.TextField()),
            ],
        ),
        migrations.CreateModel(
            name='Agreement',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('agreement_no', models.CharField(editable=False, max_length=20, unique=True)),
                ('title', models.CharField(max_length=255)),
                ('agreement_date', models.DateField()),
                ('purpose', models.TextField()),
                ('status', models.CharField(choices=[('DRAFT', 'Draft'), ('APPROVED', 'Approved'), ('SIGNED', 'Signed')], default='DRAFT', max_length=20)),
                ('version_number', models.PositiveIntegerField(default=1)),
                ('is_latest', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='agreements', to='agreements.agency')),
                ('parent_agreement', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='versions', to='agreements.agreement')),
                ('template_used', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agreements.agreementtemplate')),
                ('principal', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='agreements', to='agreements.client')),
            ],
            options={
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Annexure',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('content', models.TextField()),
                ('agreement', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='annexure', to='agreements.agreement')),
                ('template', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='agreements.annexuretemplate')),
            ],
        ),
        migrations.CreateModel(
            name='Employee',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('designation', models.CharField(blank=True, max_length=255, null=True)),
                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='employee_profile', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.AddField(
            model_name='agreement',
            name='referred_by',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='referred_agreements', to='agreements.employee'),
        ),
        migrations.CreateModel(
            name='PaymentSection',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('currency', models.CharField(default='USD', max_length=10)),
                ('total_amount', models.DecimalField(decimal_places=2, max_digits=12)),
                ('gst_percent', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
                ('discount_percent', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
                ('tds_percent', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
                ('advance_amount', models.DecimalField(decimal_places=2, default=0, max_digits=12)),
                ('payment_terms', models.TextField(blank=True, null=True)),
                ('agreement', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='payment', to='agreements.agreement')),
            ],
        ),
        migrations.CreateModel(
            name='Signature',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('agency_name', models.CharField(max_length=255)),
                ('agency_designation', models.CharField(blank=True, max_length=255, null=True)),
                ('agency_signature', models.ImageField(blank=True, null=True, upload_to='signatures/agency/')),
                ('client_name', models.CharField(max_length=255)),
                ('client_signature', models.ImageField(blank=True, null=True, upload_to='signatures/client/')),
                ('signed_date', models.DateField(blank=True, null=True)),
                ('agreement', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='signature', to='agreements.agreement')),
            ],
        ),
        migrations.CreateModel(
            name='CustomSection',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('section_type', models.CharField(max_length=100)),
                ('name', models.CharField(max_length=255)),
                ('content', models.TextField()),
                ('order', models.PositiveIntegerField()),
                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='custom_sections', to='agreements.agreement')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('agreement', 'order')},
            },
        ),
        migrations.AlterUniqueTogether(
            name='agreement',
            unique_together={('agreement_no', 'version_number')},
        ),
        migrations.CreateModel(
            name='PaymentMilestone',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('milestone_name', models.CharField(max_length=255)),
                ('percentage', models.DecimalField(decimal_places=2, max_digits=5, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100)])),
                ('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True)),
                ('due_date', models.DateField()),
                ('order', models.PositiveIntegerField()),
                ('payment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='milestones', to='agreements.paymentsection')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('payment', 'order')},
            },
        ),
        migrations.CreateModel(
            name='ResponsibilityNode',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True, null=True)),
                ('order', models.PositiveIntegerField()),
                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='responsibility_nodes', to='agreements.agreement')),
                ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='agreements.responsibilitynode')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('agreement', 'parent', 'order')},
            },
        ),
        migrations.CreateModel(
            name='ScopeNode',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True, null=True)),
                ('order', models.PositiveIntegerField()),
                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='scope_nodes', to='agreements.agreement')),
                ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='agreements.scopenode')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('agreement', 'parent', 'order')},
            },
        ),
        migrations.CreateModel(
            name='AgreementTerms',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('order', models.PositiveIntegerField()),
                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terms_links', to='agreements.agreement')),
                ('terms', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='agreements.terms')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('agreement', 'order')},
            },
        ),
        migrations.CreateModel(
            name='TimelinePhase',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('phase_name', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True, null=True)),
                ('duration_days', models.PositiveIntegerField()),
                ('start_day', models.PositiveIntegerField()),
                ('end_day', models.PositiveIntegerField()),
                ('order', models.PositiveIntegerField()),
                ('color', models.CharField(default='#007bff', max_length=7)),
                ('icon', models.CharField(blank=True, max_length=50, null=True)),
                ('progress', models.PositiveIntegerField(default=0, validators=[django.core.validators.MaxValueValidator(100)])),
                ('is_milestone', models.BooleanField(default=False)),
                ('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='timeline_phases', to='agreements.agreement')),
            ],
            options={
                'ordering': ['order'],
                'unique_together': {('agreement', 'order')},
            },
        ),
    ]
