# Generated by Django 5.2.11 on 2026-02-14 15:06

import django.core.validators
import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('core_currency', '__first__'),
        ('core_organization', '0001_initial'),
        ('tenant', '0002_domain_ssl_enabled_tenant_activated_at_and_more'),
    ]

    operations = [
        migrations.CreateModel(
            name='Company',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255, verbose_name='نام شرکت')),
                ('name_en', models.CharField(blank=True, max_length=255, verbose_name='نام انگلیسی')),
                ('code', models.CharField(max_length=50, validators=[django.core.validators.RegexValidator(message='Code must be uppercase alphanumeric with underscores or hyphens', regex='^[A-Z0-9_-]+$')], verbose_name='کد شرکت')),
                ('registration_number', models.CharField(blank=True, db_index=True, max_length=50, verbose_name='شماره ثبت')),
                ('national_id', models.CharField(blank=True, db_index=True, max_length=20, verbose_name='شناسه ملی')),
                ('economic_code', models.CharField(blank=True, max_length=20, verbose_name='کد اقتصادی')),
                ('address', models.TextField(blank=True, verbose_name='آدرس')),
                ('city', models.CharField(blank=True, max_length=100, verbose_name='شهر')),
                ('province', models.CharField(blank=True, max_length=100, verbose_name='استان')),
                ('country', models.CharField(default='IR', max_length=5, verbose_name='کشور')),
                ('postal_code', models.CharField(blank=True, max_length=20, verbose_name='کد پستی')),
                ('phone', models.CharField(blank=True, max_length=50, verbose_name='تلفن')),
                ('fax', models.CharField(blank=True, max_length=50, verbose_name='فکس')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='ایمیل')),
                ('website', models.URLField(blank=True, verbose_name='وبسایت')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('updated_by', models.UUIDField(blank=True, null=True, verbose_name='بروزرسانی توسط')),
                ('base_currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='companies', to='core_currency.currency', verbose_name='ارز پایه')),
                ('org_unit', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='company', to='core_organization.organizationalunit', verbose_name='واحد سازمانی')),
                ('parent_company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subsidiaries', to='core_organization.company', verbose_name='شرکت مادر')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'شرکت',
                'verbose_name_plural': 'شرکت\u200cها',
                'db_table': 'companies',
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='BusinessPartner',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('code', models.CharField(max_length=50, validators=[django.core.validators.RegexValidator(message='Code must be uppercase alphanumeric with underscores or hyphens', regex='^[A-Z0-9_-]+$')], verbose_name='کد')),
                ('name', models.CharField(max_length=255, verbose_name='نام')),
                ('name_en', models.CharField(blank=True, max_length=255, verbose_name='نام انگلیسی')),
                ('partner_type', models.CharField(choices=[('CUSTOMER', 'مشتری'), ('VENDOR', 'تأمین\u200cکننده'), ('BOTH', 'مشتری و تأمین\u200cکننده')], db_index=True, default='VENDOR', max_length=20, verbose_name='نوع')),
                ('national_id', models.CharField(blank=True, db_index=True, max_length=20, verbose_name='شناسه ملی / کد ملی')),
                ('economic_code', models.CharField(blank=True, max_length=20, verbose_name='کد اقتصادی')),
                ('tax_id', models.CharField(blank=True, max_length=50, verbose_name='شناسه مالیاتی')),
                ('contact_person', models.CharField(blank=True, max_length=255, verbose_name='نام مسئول')),
                ('phone', models.CharField(blank=True, max_length=50, verbose_name='تلفن')),
                ('mobile', models.CharField(blank=True, max_length=20, verbose_name='موبایل')),
                ('fax', models.CharField(blank=True, max_length=50, verbose_name='فکس')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='ایمیل')),
                ('website', models.URLField(blank=True, verbose_name='وبسایت')),
                ('address', models.TextField(blank=True, verbose_name='آدرس')),
                ('city', models.CharField(blank=True, max_length=100, verbose_name='شهر')),
                ('province', models.CharField(blank=True, max_length=100, verbose_name='استان')),
                ('country', models.CharField(default='IR', max_length=5, verbose_name='کشور')),
                ('postal_code', models.CharField(blank=True, max_length=20, verbose_name='کد پستی')),
                ('payment_terms_days', models.PositiveIntegerField(default=0, verbose_name='شرایط پرداخت (روز)')),
                ('credit_limit', models.DecimalField(decimal_places=0, default=0, max_digits=18, verbose_name='سقف اعتبار')),
                ('bank_name', models.CharField(blank=True, max_length=100, verbose_name='نام بانک')),
                ('bank_account', models.CharField(blank=True, max_length=50, verbose_name='شماره حساب')),
                ('sheba', models.CharField(blank=True, max_length=30, verbose_name='شماره شبا')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('metadata', models.JSONField(blank=True, default=dict, verbose_name='متادیتا')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('updated_by', models.UUIDField(blank=True, null=True, verbose_name='بروزرسانی توسط')),
                ('currency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='business_partners', to='core_currency.currency', verbose_name='ارز')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('company', models.ForeignKey(blank=True, help_text='شرکتی که این شریک تجاری مربوط به آن است', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='business_partners', to='core_organization.company', verbose_name='شرکت')),
            ],
            options={
                'verbose_name': 'شریک تجاری',
                'verbose_name_plural': 'شرکای تجاری',
                'db_table': 'business_partners',
                'ordering': ['name'],
            },
        ),
        migrations.AddIndex(
            model_name='company',
            index=models.Index(fields=['tenant', 'is_active'], name='companies_tenant__2843cd_idx'),
        ),
        migrations.AddIndex(
            model_name='company',
            index=models.Index(fields=['tenant', 'code'], name='companies_tenant__8eebb1_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='company',
            unique_together={('tenant', 'code')},
        ),
        migrations.AddIndex(
            model_name='businesspartner',
            index=models.Index(fields=['tenant', 'is_active'], name='business_pa_tenant__d5c784_idx'),
        ),
        migrations.AddIndex(
            model_name='businesspartner',
            index=models.Index(fields=['tenant', 'partner_type'], name='business_pa_tenant__ea97cd_idx'),
        ),
        migrations.AddIndex(
            model_name='businesspartner',
            index=models.Index(fields=['tenant', 'code'], name='business_pa_tenant__7c1e51_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='businesspartner',
            unique_together={('tenant', 'code')},
        ),
    ]
