# Generated by Django 6.0.3 on 2026-04-25

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('orders', '0005_order_super_coin_amount_alter_order_payment_method'),
        ('geo', '0009_remove_location_unique_location_per_pincode_and_more'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Mandal',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('name', models.CharField(db_index=True, max_length=200)),
                ('district', models.ForeignKey(db_index=True, on_delete=django.db.models.deletion.CASCADE, related_name='mandals', to='geo.district')),
            ],
        ),
        migrations.CreateModel(
            name='FranchiseStore',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('code', models.CharField(db_index=True, max_length=30, unique=True)),
                ('name', models.CharField(db_index=True, max_length=200)),
                ('address_line1', models.CharField(blank=True, default='', max_length=255)),
                ('address_line2', models.CharField(blank=True, default='', max_length=255)),
                ('contact_name', models.CharField(blank=True, default='', max_length=200)),
                ('contact_mobile', models.CharField(blank=True, default='', max_length=20)),
                ('country', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_stores', to='geo.country')),
                ('district', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_stores', to='geo.district')),
                ('mandal', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_stores', to='geo.mandal')),
                ('pincode', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_stores', to='geo.pincode')),
                ('state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_stores', to='geo.state')),
            ],
            options={'ordering': ['name']},
        ),
        migrations.CreateModel(
            name='FranchiseAssignment',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('territory_level', models.CharField(choices=[('STATE', 'State'), ('DISTRICT', 'District'), ('MANDAL', 'Mandal')], db_index=True, max_length=16)),
                ('role_title', models.CharField(blank=True, default='Franchise Head', max_length=120)),
                ('performance_note', models.CharField(blank=True, default='', max_length=500)),
                ('assignment_reason', models.CharField(blank=True, default='', max_length=500)),
                ('effective_from', models.DateTimeField(auto_now_add=True)),
                ('effective_to', models.DateTimeField(blank=True, null=True)),
                ('assigned_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_franchise_records', to=settings.AUTH_USER_MODEL)),
                ('district', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_assignments', to='geo.district')),
                ('mandal', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_assignments', to='geo.mandal')),
                ('removed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='removed_franchise_records', to=settings.AUTH_USER_MODEL)),
                ('state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='franchise_assignments', to='geo.state')),
                ('store', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assignments', to='geo.franchisestore')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='franchise_assignments', to=settings.AUTH_USER_MODEL)),
            ],
            options={'ordering': ['-created_at']},
        ),
        migrations.CreateModel(
            name='StoreTransferLedger',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('transfer_type', models.CharField(choices=[('COMPANY_TO_STORE', 'Company To Store'), ('STORE_TO_CUSTOMER', 'Store To Customer'), ('CUSTOMER_PICKUP', 'Customer Pickup')], db_index=True, max_length=24)),
                ('transfer_status', models.CharField(choices=[('INITIATED', 'Initiated'), ('IN_TRANSIT', 'In Transit'), ('RECEIVED', 'Received'), ('COMPLETED', 'Completed'), ('CANCELLED', 'Cancelled')], db_index=True, default='INITIATED', max_length=16)),
                ('quantity', models.PositiveIntegerField(default=1)),
                ('remarks', models.CharField(blank=True, default='', max_length=500)),
                ('order', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='store_transfers', to='orders.order')),
                ('performed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='performed_store_transfers', to=settings.AUTH_USER_MODEL)),
                ('store', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_ledgers', to='geo.franchisestore')),
            ],
            options={'ordering': ['-created_at']},
        ),
        migrations.AddIndex(
            model_name='franchiseassignment',
            index=models.Index(fields=['territory_level', 'is_active'], name='geo_franchi_territo_4f740f_idx'),
        ),
        migrations.AddIndex(
            model_name='franchiseassignment',
            index=models.Index(fields=['user', 'is_active'], name='geo_franchi_user_id_3af5aa_idx'),
        ),
        migrations.AddIndex(
            model_name='franchiseassignment',
            index=models.Index(fields=['state', 'district', 'mandal'], name='geo_franchi_state_i_2df16f_idx'),
        ),
        migrations.AddIndex(
            model_name='storetransferledger',
            index=models.Index(fields=['store', 'created_at'], name='geo_storetr_store_i_32e176_idx'),
        ),
        migrations.AddIndex(
            model_name='storetransferledger',
            index=models.Index(fields=['order', 'created_at'], name='geo_storetr_order_i_a08e3b_idx'),
        ),
        migrations.AddIndex(
            model_name='storetransferledger',
            index=models.Index(fields=['transfer_type', 'transfer_status'], name='geo_storetr_transfe_79e9f3_idx'),
        ),
        migrations.AddConstraint(
            model_name='mandal',
            constraint=models.UniqueConstraint(fields=('name', 'district'), name='unique_mandal_per_district'),
        ),
    ]
