# Generated by Django 4.2 on 2026-10-06 15:41

from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.functions.text
import myapp.models


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('myapp', '0021_delete_client'),
    ]

    operations = [
        migrations.CreateModel(
            name='Client',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('client_code', models.CharField(blank=True, max_length=20, null=True, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z0-9][A-Z0-9/_-]{0,19}$', 'Client ID can have letters, numbers, - _ / only (max 20).')])),
                ('name', models.CharField(db_index=True, max_length=200)),
                ('business_name', models.CharField(blank=True, default='', max_length=200)),
                ('address', models.TextField(blank=True, default='', validators=[django.core.validators.MaxLengthValidator(500)])),
                ('city', models.CharField(blank=True, default='', max_length=100)),
                ('pincode', models.CharField(blank=True, default='', max_length=6, validators=[django.core.validators.RegexValidator('^[1-9]\\d{5}$', 'Enter a valid 6-digit pincode.')])),
                ('phone', models.CharField(db_index=True, max_length=10, validators=[django.core.validators.RegexValidator('^[6-9]\\d{9}$', 'Enter a valid 10-digit mobile number.')])),
                ('email', models.EmailField(blank=True, default='', max_length=254)),
                ('pan', models.CharField(blank=True, default='', max_length=10, validators=[django.core.validators.RegexValidator('^[A-Z]{5}[0-9]{4}[A-Z]$', 'Enter a valid PAN (example: ABCDE1234F).')])),
                ('aadhaar', models.CharField(blank=True, default='', max_length=12, validators=[django.core.validators.RegexValidator('^[2-9][0-9]{11}$', 'Aadhaar must be 12 digits.')])),
                ('gstin', models.CharField(blank=True, default='', max_length=15, validators=[django.core.validators.RegexValidator('^\\d{2}[A-Z]{5}\\d{4}[A-Z][A-Z\\d]Z[A-Z\\d]$', 'Enter a valid 15-character GSTIN.')])),
                ('bank_name', models.CharField(blank=True, default='', max_length=100)),
                ('account_holder', models.CharField(blank=True, default='', max_length=150)),
                ('account_number', models.CharField(blank=True, default='', max_length=18, validators=[django.core.validators.RegexValidator('^\\d{9,18}$', 'Account number must be 9 to 18 digits.')])),
                ('ifsc', models.CharField(blank=True, default='', max_length=11, validators=[django.core.validators.RegexValidator('^[A-Z]{4}0[A-Z0-9]{6}$', 'Enter a valid IFSC (example: HDFC0001234).')])),
                ('file_delivered', models.BooleanField(db_index=True, default=False)),
                ('file_delivered_on', models.DateField(blank=True, null=True)),
                ('notes', models.TextField(blank=True, default='', validators=[django.core.validators.MaxLengthValidator(2000)])),
                ('status', models.SmallIntegerField(choices=[(1, 'Active'), (2, 'Inactive')], db_index=True, default=1)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='client_created_by', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'client',
                'ordering': ['-id'],
            },
        ),
        migrations.CreateModel(
            name='Service',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=150)),
                ('status', models.SmallIntegerField(choices=[(1, 'Active'), (2, 'Inactive')], default=1)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_created_by', to=settings.AUTH_USER_MODEL)),
                ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_updated_by', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'service',
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='ClientService',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('renewal_date', models.DateField(blank=True, db_index=True, null=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='client_services', to='myapp.client')),
                ('service', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='client_services', to='myapp.service')),
            ],
            options={
                'db_table': 'client_service',
            },
        ),
        migrations.CreateModel(
            name='ClientDocument',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('doc_type', models.CharField(choices=[('pan', 'PAN Card'), ('aadhaar', 'Aadhaar Card'), ('bank', 'Bank Document'), ('gst', 'GST Certificate'), ('fssai', 'FSSAI Certificate'), ('itr', 'IT Filing'), ('other', 'Other')], db_index=True, default='other', max_length=20)),
                ('file', models.FileField(max_length=255, upload_to=myapp.models.client_document_path, validators=[django.core.validators.FileExtensionValidator(['pdf', 'jpg', 'jpeg', 'png'])])),
                ('original_name', models.CharField(blank=True, default='', max_length=255)),
                ('content_type', models.CharField(blank=True, default='', max_length=100)),
                ('size', models.PositiveIntegerField(default=0)),
                ('remarks', models.CharField(blank=True, default='', max_length=255)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='myapp.client')),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clientdoc_created_by', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'client_document',
                'ordering': ['-created_at', '-id'],
            },
        ),
        migrations.AddField(
            model_name='client',
            name='services',
            field=models.ManyToManyField(blank=True, related_name='clients', through='myapp.ClientService', to='myapp.service'),
        ),
        migrations.AddField(
            model_name='client',
            name='updated_by',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='client_updated_by', to=settings.AUTH_USER_MODEL),
        ),
        migrations.AddConstraint(
            model_name='service',
            constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), name='uniq_service_name_ci'),
        ),
        migrations.AddConstraint(
            model_name='clientservice',
            constraint=models.UniqueConstraint(fields=('client', 'service'), name='uniq_client_service'),
        ),
        migrations.AddConstraint(
            model_name='client',
            constraint=models.UniqueConstraint(condition=models.Q(('pan', ''), _negated=True), fields=('pan',), name='uniq_client_pan'),
        ),
        migrations.AddConstraint(
            model_name='client',
            constraint=models.UniqueConstraint(condition=models.Q(('aadhaar', ''), _negated=True), fields=('aadhaar',), name='uniq_client_aadhaar'),
        ),
    ]
