# Generated by Django 5.2.11 on 2026-02-14 15:06

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('core_organization', '0002_company_businesspartner_and_more'),
        ('tenant', '0002_domain_ssl_enabled_tenant_activated_at_and_more'),
    ]

    operations = [
        migrations.CreateModel(
            name='BatchModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('batch_number', models.CharField(db_index=True, max_length=100, verbose_name='شماره بچ')),
                ('manufacturing_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تولید')),
                ('expiry_date', models.DateField(blank=True, db_index=True, null=True, verbose_name='تاریخ انقضا')),
                ('vendor_batch_number', models.CharField(blank=True, max_length=100, verbose_name='شماره بچ تأمین\u200cکننده')),
                ('production_order_id', models.UUIDField(blank=True, null=True, verbose_name='سفارش تولید')),
                ('batch_status', models.CharField(choices=[('ACTIVE', 'فعال'), ('EXPIRED', 'منقضی'), ('BLOCKED', 'مسدود'), ('QUARANTINE', 'قرنطینه')], default='ACTIVE', max_length=20, verbose_name='وضعیت بچ')),
                ('quality_status', models.CharField(choices=[('APPROVED', 'تأیید شده'), ('PENDING', 'در انتظار'), ('REJECTED', 'رد شده'), ('CONDITIONAL', 'مشروط')], default='PENDING', max_length=20, verbose_name='وضعیت کیفی')),
                ('batch_attributes', models.JSONField(blank=True, default=dict, verbose_name='ویژگی\u200cها')),
                ('is_active', models.BooleanField(default=True, 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='بروزرسانی توسط')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('vendor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.businesspartner', verbose_name='تأمین\u200cکننده')),
            ],
            options={
                'verbose_name': 'بچ / لات',
                'verbose_name_plural': 'بچ\u200cها / لات\u200cها',
                'db_table': 'inv_batch',
            },
        ),
        migrations.CreateModel(
            name='CostingMethodModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('method_code', models.CharField(max_length=20, verbose_name='کد')),
                ('method_name', models.CharField(max_length=100, verbose_name='نام')),
                ('description', models.TextField(blank=True, verbose_name='توضیحات')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'روش قیمت\u200cگذاری',
                'verbose_name_plural': 'روش\u200cهای قیمت\u200cگذاری',
                'db_table': 'inv_costing_method',
                'unique_together': {('tenant', 'method_code')},
            },
        ),
        migrations.CreateModel(
            name='InspectionLotModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('inspection_lot_number', models.CharField(max_length=50, unique=True, verbose_name='شماره لات بازرسی')),
                ('inspection_type', models.CharField(choices=[('INCOMING', 'ورودی'), ('IN_PROCESS', 'حین فرآیند'), ('OUTGOING', 'خروجی')], default='INCOMING', max_length=20, verbose_name='نوع')),
                ('inspection_date', models.DateField(verbose_name='تاریخ بازرسی')),
                ('source_document_type', models.CharField(blank=True, max_length=50, verbose_name='نوع سند')),
                ('source_document_id', models.UUIDField(blank=True, null=True, verbose_name='سند مبدأ')),
                ('inspection_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار بازرسی')),
                ('sample_size', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='حجم نمونه')),
                ('inspection_status', models.CharField(choices=[('PENDING', 'در انتظار'), ('IN_PROGRESS', 'در حال بازرسی'), ('COMPLETED', 'تکمیل\u200cشده')], default='PENDING', max_length=20, verbose_name='وضعیت')),
                ('quality_decision', models.CharField(choices=[('PENDING', 'در انتظار'), ('ACCEPTED', 'پذیرش'), ('REJECTED', 'رد'), ('CONDITIONAL', 'مشروط'), ('REWORK', 'بازکار')], default='PENDING', max_length=20, verbose_name='تصمیم کیفی')),
                ('inspection_start_date', models.DateField(blank=True, null=True, verbose_name='تاریخ شروع')),
                ('inspection_complete_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
                ('inspector_id', models.UUIDField(blank=True, null=True, verbose_name='بازرس')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('approved_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inspections', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', 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': 'inv_inspection_lot',
            },
        ),
        migrations.CreateModel(
            name='InspectionResultModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('inspection_characteristic', models.CharField(max_length=255, verbose_name='ویژگی بازرسی')),
                ('target_value', models.CharField(blank=True, max_length=255, verbose_name='مقدار هدف')),
                ('actual_value', models.CharField(max_length=255, verbose_name='مقدار واقعی')),
                ('tolerance_lower', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='حد پایین تلرانس')),
                ('tolerance_upper', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='حد بالای تلرانس')),
                ('result_status', models.CharField(choices=[('PASS', 'قبول'), ('FAIL', 'رد'), ('WARNING', 'هشدار')], default='PASS', max_length=20, verbose_name='نتیجه')),
                ('tested_by', models.UUIDField(blank=True, null=True, verbose_name='آزمایش\u200cکننده')),
                ('tested_date', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ آزمایش')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('inspection_lot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='results', to='inventory.inspectionlotmodel', 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': 'نتایج بازرسی',
                'db_table': 'inv_inspection_result',
            },
        ),
        migrations.CreateModel(
            name='ItemGroupModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('group_code', models.CharField(db_index=True, max_length=50, verbose_name='کد')),
                ('group_name', models.CharField(max_length=255, verbose_name='نام')),
                ('level', models.PositiveIntegerField(default=0, verbose_name='سطح')),
                ('is_active', models.BooleanField(db_index=True, default=True, 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='بروزرسانی توسط')),
                ('default_costing_method', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.costingmethodmodel', verbose_name='روش قیمت\u200cگذاری پیش\u200cفرض')),
                ('parent_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='inventory.itemgroupmodel', 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': 'inv_item_group',
            },
        ),
        migrations.CreateModel(
            name='ItemModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('item_code', models.CharField(db_index=True, max_length=50, verbose_name='کد کالا')),
                ('item_name', models.CharField(max_length=255, verbose_name='نام کالا')),
                ('item_name_local', models.CharField(blank=True, max_length=255, verbose_name='نام فارسی')),
                ('item_description', models.TextField(blank=True, verbose_name='توضیحات')),
                ('is_batch_managed', models.BooleanField(default=False, verbose_name='مدیریت بچ')),
                ('is_serial_managed', models.BooleanField(default=False, verbose_name='مدیریت سریال')),
                ('is_expiry_managed', models.BooleanField(default=False, verbose_name='مدیریت انقضا')),
                ('abc_classification', models.CharField(blank=True, choices=[('A', 'A'), ('B', 'B'), ('C', 'C')], max_length=1, verbose_name='طبقه\u200cبندی ABC')),
                ('item_status', models.CharField(choices=[('ACTIVE', 'فعال'), ('INACTIVE', 'غیرفعال'), ('OBSOLETE', 'منسوخ')], db_index=True, default='ACTIVE', max_length=20, verbose_name='وضعیت')),
                ('is_purchasable', models.BooleanField(default=True, verbose_name='قابل خرید')),
                ('is_saleable', models.BooleanField(default=True, verbose_name='قابل فروش')),
                ('is_stockable', models.BooleanField(default=True, verbose_name='قابل انبارش')),
                ('is_producible', models.BooleanField(default=False, verbose_name='قابل تولید')),
                ('lead_time_days', models.PositiveIntegerField(default=0, verbose_name='زمان تأمین (روز)')),
                ('shelf_life_days', models.PositiveIntegerField(blank=True, null=True, 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='بروزرسانی توسط')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت مالک')),
                ('item_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='items', to='inventory.itemgroupmodel', 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': 'کالاها',
                'db_table': 'inv_item',
            },
        ),
        migrations.CreateModel(
            name='ItemCostingModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('standard_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='بهای استاندارد')),
                ('moving_average_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='میانگین متحرک')),
                ('last_purchase_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='آخرین بهای خرید')),
                ('currency_code', models.CharField(default='IRR', max_length=10, verbose_name='ارز')),
                ('last_cost_update_date', models.DateField(blank=True, null=True, verbose_name='تاریخ آخرین بروزرسانی بها')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('costing_method', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.costingmethodmodel', verbose_name='روش قیمت\u200cگذاری')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('item', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='costing', to='inventory.itemmodel', verbose_name='کالا')),
            ],
            options={
                'verbose_name': 'قیمت\u200cگذاری کالا',
                'verbose_name_plural': 'قیمت\u200cگذاری کالاها',
                'db_table': 'inv_item_costing',
            },
        ),
        migrations.CreateModel(
            name='ItemAttributeModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('attribute_name', models.CharField(max_length=255, verbose_name='نام ویژگی')),
                ('attribute_value', models.TextField(verbose_name='مقدار')),
                ('attribute_data_type', models.CharField(default='Text', max_length=20, verbose_name='نوع داده')),
                ('display_order', models.PositiveIntegerField(default=0, verbose_name='ترتیب نمایش')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attributes', to='inventory.itemmodel', verbose_name='کالا')),
            ],
            options={
                'verbose_name': 'ویژگی کالا',
                'verbose_name_plural': 'ویژگی\u200cهای کالا',
                'db_table': 'inv_item_attribute',
                'ordering': ['display_order'],
            },
        ),
        migrations.AddField(
            model_name='inspectionlotmodel',
            name='item',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.itemmodel', verbose_name='کالا'),
        ),
        migrations.AddField(
            model_name='batchmodel',
            name='item',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='batches', to='inventory.itemmodel', verbose_name='کالا'),
        ),
        migrations.CreateModel(
            name='ItemTypeModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('type_code', models.CharField(db_index=True, max_length=50, verbose_name='کد')),
                ('type_name', models.CharField(max_length=100, verbose_name='نام')),
                ('description', models.TextField(blank=True, verbose_name='توضیحات')),
                ('is_active', models.BooleanField(db_index=True, default=True, 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='بروزرسانی توسط')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'نوع کالا',
                'verbose_name_plural': 'انواع کالا',
                'db_table': 'inv_item_type',
            },
        ),
        migrations.AddField(
            model_name='itemmodel',
            name='item_type',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='items', to='inventory.itemtypemodel', verbose_name='نوع کالا'),
        ),
        migrations.CreateModel(
            name='SerialNumberModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('serial_no', models.CharField(db_index=True, max_length=200, verbose_name='شماره سریال')),
                ('manufacturing_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تولید')),
                ('warranty_start_date', models.DateField(blank=True, null=True, verbose_name='شروع گارانتی')),
                ('warranty_end_date', models.DateField(blank=True, null=True, verbose_name='پایان گارانتی')),
                ('warranty_months', models.PositiveIntegerField(default=0, verbose_name='مدت گارانتی (ماه)')),
                ('current_owner_type', models.CharField(default='OWN', max_length=30, verbose_name='نوع مالکیت')),
                ('current_owner_id', models.UUIDField(blank=True, null=True, verbose_name='مالک فعلی')),
                ('serial_status', models.CharField(choices=[('IN_STOCK', 'در انبار'), ('SOLD', 'فروخته\u200cشده'), ('RETURNED', 'مرجوعی'), ('SCRAPPED', 'اسقاطی'), ('IN_REPAIR', 'در تعمیر'), ('IN_TRANSIT', 'در راه')], db_index=True, default='IN_STOCK', max_length=20, verbose_name='وضعیت سریال')),
                ('quality_status', models.CharField(choices=[('APPROVED', 'تأیید شده'), ('REJECTED', 'رد شده'), ('QUARANTINE', 'قرنطینه')], default='APPROVED', max_length=20, verbose_name='وضعیت کیفی')),
                ('supplier_serial_number', models.CharField(blank=True, max_length=200, verbose_name='سریال تأمین\u200cکننده')),
                ('vendor_id', models.UUIDField(blank=True, null=True, verbose_name='تأمین\u200cکننده')),
                ('purchase_order_id', models.UUIDField(blank=True, null=True, verbose_name='سفارش خرید')),
                ('sales_order_id', models.UUIDField(blank=True, null=True, verbose_name='سفارش فروش')),
                ('customer_id', models.UUIDField(blank=True, null=True, verbose_name='مشتری')),
                ('sold_date', models.DateField(blank=True, null=True, verbose_name='تاریخ فروش')),
                ('is_active', models.BooleanField(default=True, 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='بروزرسانی توسط')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='serial_numbers', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='serial_numbers', to='inventory.itemmodel', 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': 'inv_serial_number',
            },
        ),
        migrations.CreateModel(
            name='StockLedgerEntryModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('entry_number', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='شماره ثبت')),
                ('posting_date', models.DateField(db_index=True, verbose_name='تاریخ ثبت')),
                ('posting_time', models.TimeField(blank=True, null=True, verbose_name='ساعت ثبت')),
                ('ownership_type', models.CharField(choices=[('OWN', 'خودی'), ('CONSIGNMENT_CUSTOMER', 'امانی مشتری'), ('CONSIGNMENT_VENDOR', 'امانی تأمین\u200cکننده')], default='OWN', max_length=30, verbose_name='نوع مالکیت')),
                ('owner_id', models.UUIDField(blank=True, null=True, verbose_name='مالک')),
                ('project_id', models.UUIDField(blank=True, null=True, verbose_name='پروژه')),
                ('transaction_type', models.CharField(choices=[('GR', 'رسید کالا'), ('GI', 'حواله کالا'), ('TRANSFER', 'انتقال'), ('ADJUSTMENT', 'تعدیل'), ('RETURN', 'مرجوعی'), ('SCRAP', 'ضایعات')], db_index=True, max_length=20, verbose_name='نوع تراکنش')),
                ('transaction_sub_type', models.CharField(blank=True, max_length=50, verbose_name='زیرنوع')),
                ('source_document_type', models.CharField(blank=True, max_length=50, verbose_name='نوع سند مبدأ')),
                ('source_document_id', models.UUIDField(blank=True, null=True, verbose_name='سند مبدأ')),
                ('source_document_line_id', models.UUIDField(blank=True, null=True, verbose_name='خط سند')),
                ('quantity', models.DecimalField(decimal_places=4, help_text='مثبت=ورود، منفی=خروج', max_digits=18, verbose_name='مقدار')),
                ('quantity_in_base_uom', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار (واحد پایه)')),
                ('unit_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='بهای واحد')),
                ('total_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='بهای کل')),
                ('currency_code', models.CharField(default='IRR', max_length=10, verbose_name='ارز')),
                ('reason_code', models.CharField(blank=True, max_length=50, verbose_name='کد دلیل')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('reference_number', models.CharField(blank=True, max_length=100, verbose_name='شماره مرجع')),
                ('is_reversed', models.BooleanField(default=False, verbose_name='برگشت\u200cخورده')),
                ('fiscal_year', models.PositiveIntegerField(default=0, verbose_name='سال مالی')),
                ('fiscal_period', models.PositiveIntegerField(default=0, verbose_name='دوره مالی')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('approved_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ledger_entries', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('costing_method', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.costingmethodmodel', verbose_name='روش قیمت\u200cگذاری')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='ledger_entries', to='inventory.itemmodel', verbose_name='کالا')),
                ('reversed_by_sle', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockledgerentrymodel', verbose_name='برگشت توسط')),
                ('serial_number', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ledger_entries', to='inventory.serialnumbermodel', 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': 'inv_stock_ledger_entry',
            },
        ),
        migrations.AddField(
            model_name='inspectionlotmodel',
            name='source_sle',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockledgerentrymodel', verbose_name='ثبت دفتر'),
        ),
        migrations.CreateModel(
            name='FinancialPostingModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('posting_date', models.DateField(verbose_name='تاریخ ثبت')),
                ('journal_entry_id', models.UUIDField(blank=True, null=True, verbose_name='سند حسابداری')),
                ('debit_account', models.CharField(max_length=50, verbose_name='حساب بدهکار')),
                ('credit_account', models.CharField(max_length=50, verbose_name='حساب بستانکار')),
                ('amount', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مبلغ')),
                ('currency_code', models.CharField(default='IRR', max_length=10, verbose_name='ارز')),
                ('cost_center_id', models.UUIDField(blank=True, null=True, verbose_name='مرکز هزینه')),
                ('project_id', models.UUIDField(blank=True, null=True, verbose_name='پروژه')),
                ('posting_status', models.CharField(choices=[('PENDING', 'در انتظار'), ('POSTED', 'ثبت شده'), ('FAILED', 'ناموفق')], default='PENDING', max_length=20, verbose_name='وضعیت')),
                ('error_message', models.TextField(blank=True, verbose_name='پیام خطا')),
                ('posted_date', models.DateField(blank=True, null=True, verbose_name='تاریخ ارسال')),
                ('posted_by', models.UUIDField(blank=True, null=True, verbose_name='ارسال توسط')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('stock_ledger', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='financial_postings', to='inventory.stockledgerentrymodel', verbose_name='ثبت دفتر')),
            ],
            options={
                'verbose_name': 'ارسال مالی',
                'verbose_name_plural': 'ارسال\u200cهای مالی',
                'db_table': 'inv_financial_posting',
            },
        ),
        migrations.CreateModel(
            name='StockStatusModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('status_code', models.CharField(max_length=50, verbose_name='کد وضعیت')),
                ('status_name', models.CharField(max_length=100, verbose_name='نام وضعیت')),
                ('status_type', models.CharField(choices=[('AVAILABLE', 'در دسترس'), ('RESERVED', 'رزرو شده'), ('ALLOCATED', 'تخصیص\u200cیافته'), ('BLOCKED', 'مسدود'), ('QUALITY_INSPECTION', 'بازرسی کیفی'), ('QUARANTINE', 'قرنطینه'), ('IN_TRANSIT', 'در راه'), ('DAMAGED', 'آسیب\u200cدیده'), ('EXPIRED', 'منقضی')], default='AVAILABLE', max_length=30, verbose_name='نوع')),
                ('is_available_for_sales', models.BooleanField(default=True, verbose_name='قابل فروش')),
                ('is_available_for_production', models.BooleanField(default=True, verbose_name='قابل تولید')),
                ('is_blocked_for_movement', models.BooleanField(default=False, verbose_name='مسدود برای جابجایی')),
                ('sort_order', models.PositiveIntegerField(default=0, verbose_name='ترتیب')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, 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': 'inv_stock_status',
                'ordering': ['sort_order'],
            },
        ),
        migrations.AddField(
            model_name='stockledgerentrymodel',
            name='stock_status',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.stockstatusmodel', verbose_name='وضعیت'),
        ),
        migrations.AddField(
            model_name='serialnumbermodel',
            name='current_stock_status',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockstatusmodel', verbose_name='وضعیت فعلی'),
        ),
        migrations.CreateModel(
            name='QualityActionModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('action_type', models.CharField(choices=[('BLOCK', 'مسدود'), ('QUARANTINE', 'قرنطینه'), ('REWORK', 'بازکار'), ('SCRAP', 'ضایعات'), ('RETURN_TO_VENDOR', 'مرجوعی تأمین\u200cکننده'), ('RELEASE', 'آزادسازی')], max_length=30, verbose_name='نوع اقدام')),
                ('action_date', models.DateField(verbose_name='تاریخ اقدام')),
                ('action_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار')),
                ('action_by', models.UUIDField(blank=True, null=True, verbose_name='توسط')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('completed_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
                ('inspection_lot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='actions', to='inventory.inspectionlotmodel', verbose_name='لات بازرسی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('target_stock_status', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockstatusmodel', verbose_name='وضعیت هدف')),
            ],
            options={
                'verbose_name': 'اقدام کیفی',
                'verbose_name_plural': 'اقدامات کیفی',
                'db_table': 'inv_quality_action',
            },
        ),
        migrations.CreateModel(
            name='StorageLocationModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('location_code', models.CharField(max_length=50, verbose_name='کد مکان')),
                ('location_name', models.CharField(max_length=255, verbose_name='نام مکان')),
                ('location_type', models.CharField(choices=[('ZONE', 'ناحیه'), ('AISLE', 'راهرو'), ('RACK', 'قفسه'), ('SHELF', 'طبقه'), ('BIN', 'سلول')], default='ZONE', max_length=20, verbose_name='نوع')),
                ('level', models.PositiveIntegerField(default=0, verbose_name='سطح')),
                ('is_picking_location', models.BooleanField(default=False, verbose_name='مکان برداشت')),
                ('is_putaway_location', models.BooleanField(default=False, verbose_name='مکان چینش')),
                ('max_weight_kg', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='حداکثر وزن (kg)')),
                ('max_volume_cbm', models.DecimalField(blank=True, decimal_places=4, max_digits=12, null=True, verbose_name='حداکثر حجم (m³)')),
                ('temperature', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True, verbose_name='دما (°C)')),
                ('is_hazardous_zone', models.BooleanField(default=False, verbose_name='ناحیه خطرناک')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('parent_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='inventory.storagelocationmodel', verbose_name='مکان مادر')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'مکان ذخیره\u200cسازی',
                'verbose_name_plural': 'مکان\u200cهای ذخیره\u200cسازی',
                'db_table': 'inv_storage_location',
            },
        ),
        migrations.AddField(
            model_name='stockledgerentrymodel',
            name='location',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان'),
        ),
        migrations.AddField(
            model_name='serialnumbermodel',
            name='current_location',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان فعلی'),
        ),
        migrations.CreateModel(
            name='UnitOfMeasureModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('uom_code', models.CharField(max_length=20, verbose_name='کد')),
                ('uom_name', models.CharField(max_length=100, verbose_name='نام')),
                ('uom_name_local', models.CharField(blank=True, max_length=100, verbose_name='نام فارسی')),
                ('uom_type', models.CharField(choices=[('QUANTITY', 'تعداد'), ('WEIGHT', 'وزن'), ('VOLUME', 'حجم'), ('LENGTH', 'طول'), ('AREA', 'مساحت'), ('TIME', 'زمان')], default='QUANTITY', max_length=20, verbose_name='نوع')),
                ('decimal_places', models.PositiveSmallIntegerField(default=0, verbose_name='اعشار')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
            ],
            options={
                'verbose_name': 'واحد اندازه\u200cگیری',
                'verbose_name_plural': 'واحدهای اندازه\u200cگیری',
                'db_table': 'inv_unit_of_measure',
            },
        ),
        migrations.AddField(
            model_name='stockledgerentrymodel',
            name='uom',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد'),
        ),
        migrations.CreateModel(
            name='ItemUOMModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('conversion_factor', models.DecimalField(decimal_places=6, default=1, max_digits=18, verbose_name='ضریب تبدیل')),
                ('is_base_uom', models.BooleanField(default=False, verbose_name='واحد پایه')),
                ('is_purchase_uom', models.BooleanField(default=False, verbose_name='واحد خرید')),
                ('is_sales_uom', models.BooleanField(default=False, verbose_name='واحد فروش')),
                ('is_stock_uom', models.BooleanField(default=False, verbose_name='واحد انبار')),
                ('barcode', models.CharField(blank=True, max_length=100, verbose_name='بارکد')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='uoms', to='inventory.itemmodel', verbose_name='کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
            ],
            options={
                'verbose_name': 'واحد کالا',
                'verbose_name_plural': 'واحدهای کالا',
                'db_table': 'inv_item_uom',
            },
        ),
        migrations.AddField(
            model_name='itemmodel',
            name='base_uom',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد اندازه\u200cگیری پایه'),
        ),
        migrations.AddField(
            model_name='inspectionlotmodel',
            name='uom',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد'),
        ),
        migrations.CreateModel(
            name='WarehouseModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('warehouse_code', models.CharField(db_index=True, max_length=50, verbose_name='کد انبار')),
                ('warehouse_name', models.CharField(max_length=255, verbose_name='نام انبار')),
                ('warehouse_type', models.CharField(choices=[('PHYSICAL', 'فیزیکی'), ('VIRTUAL', 'مجازی'), ('TRANSIT', 'ترانزیت'), ('QUARANTINE', 'قرنطینه')], default='PHYSICAL', 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='تلفن')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='ایمیل')),
                ('manager_user_id', models.UUIDField(blank=True, null=True, verbose_name='مدیر انبار')),
                ('is_negative_stock_allowed', models.BooleanField(default=False, verbose_name='اجازه موجودی منفی')),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='فعال')),
                ('hrm_location_id', models.UUIDField(blank=True, help_text='ارجاع به Location ماژول HRM', null=True, verbose_name='مکان HRM')),
                ('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='بروزرسانی توسط')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', 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': 'انبارها',
                'db_table': 'inv_warehouse',
            },
        ),
        migrations.AddField(
            model_name='storagelocationmodel',
            name='warehouse',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='locations', to='inventory.warehousemodel', verbose_name='انبار'),
        ),
        migrations.CreateModel(
            name='StockReservationModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('reservation_number', models.CharField(max_length=50, unique=True, verbose_name='شماره رزرو')),
                ('reservation_date', models.DateField(verbose_name='تاریخ رزرو')),
                ('reserved_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار رزرو')),
                ('allocated_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='مقدار تخصیص')),
                ('source_document_type', models.CharField(blank=True, max_length=50, verbose_name='نوع سند مبدأ')),
                ('source_document_id', models.UUIDField(blank=True, null=True, verbose_name='سند مبدأ')),
                ('source_document_line_id', models.UUIDField(blank=True, null=True, verbose_name='خط سند')),
                ('priority_level', models.PositiveIntegerField(default=5, verbose_name='اولویت')),
                ('expiry_date', models.DateField(blank=True, null=True, verbose_name='تاریخ انقضای رزرو')),
                ('reservation_status', models.CharField(choices=[('ACTIVE', 'فعال'), ('PARTIALLY_ALLOCATED', 'تخصیص جزئی'), ('FULLY_ALLOCATED', 'تخصیص کامل'), ('EXPIRED', 'منقضی'), ('CANCELLED', 'لغو شده')], default='ACTIVE', max_length=30, verbose_name='وضعیت')),
                ('required_by_date', models.DateField(blank=True, null=True, verbose_name='نیاز تا تاریخ')),
                ('requested_by_user_id', models.UUIDField(blank=True, null=True, verbose_name='درخواست\u200cکننده')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('cancelled_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ لغو')),
                ('cancelled_by', models.UUIDField(blank=True, null=True, verbose_name='لغو توسط')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='inventory.itemmodel', verbose_name='کالا')),
                ('serial_number', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.serialnumbermodel', verbose_name='سریال')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'رزرو موجودی',
                'verbose_name_plural': 'رزروهای موجودی',
                'db_table': 'inv_stock_reservation',
            },
        ),
        migrations.CreateModel(
            name='StockMovementSummaryModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('summary_date', models.DateField(db_index=True, verbose_name='تاریخ')),
                ('transaction_type', models.CharField(db_index=True, max_length=20, verbose_name='نوع تراکنش')),
                ('total_in_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='کل ورودی')),
                ('total_out_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='کل خروجی')),
                ('net_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='خالص')),
                ('total_in_value', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='ارزش ورودی')),
                ('total_out_value', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='ارزش خروجی')),
                ('transaction_count', models.PositiveIntegerField(default=0, verbose_name='تعداد تراکنش')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.itemmodel', verbose_name='کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'خلاصه حرکات',
                'verbose_name_plural': 'خلاصه حرکات',
                'db_table': 'inv_stock_movement_summary',
            },
        ),
        migrations.AddField(
            model_name='stockledgerentrymodel',
            name='warehouse',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='ledger_entries', to='inventory.warehousemodel', verbose_name='انبار'),
        ),
        migrations.CreateModel(
            name='StockBalanceModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('ownership_type', models.CharField(choices=[('OWN', 'خودی'), ('CONSIGNMENT_CUSTOMER', 'امانی مشتری'), ('CONSIGNMENT_VENDOR', 'امانی تأمین\u200cکننده')], default='OWN', max_length=30, verbose_name='نوع مالکیت')),
                ('owner_id', models.UUIDField(blank=True, null=True, verbose_name='مالک')),
                ('project_id', models.UUIDField(blank=True, null=True, verbose_name='پروژه')),
                ('quantity_on_hand', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='موجودی کل')),
                ('quantity_reserved', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='رزرو شده')),
                ('quantity_allocated', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='تخصیص\u200cیافته')),
                ('quantity_available', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='در دسترس')),
                ('quantity_in_transit', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='در راه')),
                ('last_movement_date', models.DateField(blank=True, null=True, verbose_name='آخرین حرکت')),
                ('last_count_date', models.DateField(blank=True, null=True, verbose_name='آخرین شمارش')),
                ('average_unit_cost', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='میانگین بهای واحد')),
                ('total_value', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='ارزش کل')),
                ('last_updated', models.DateTimeField(auto_now=True, verbose_name='آخرین بروزرسانی')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='balances', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='balances', to='inventory.itemmodel', verbose_name='کالا')),
                ('serial_number', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='balances', to='inventory.serialnumbermodel', verbose_name='سریال')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('stock_status', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.stockstatusmodel', verbose_name='وضعیت')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='balances', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'موجودی فعلی',
                'verbose_name_plural': 'موجودی\u200cهای فعلی',
                'db_table': 'inv_stock_balance',
            },
        ),
        migrations.CreateModel(
            name='StockAllocationModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('allocation_number', models.CharField(max_length=50, unique=True, verbose_name='شماره تخصیص')),
                ('allocation_date', models.DateField(verbose_name='تاریخ تخصیص')),
                ('allocated_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار تخصیص')),
                ('picked_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='مقدار برداشت')),
                ('source_document_type', models.CharField(blank=True, max_length=50, verbose_name='نوع سند')),
                ('source_document_id', models.UUIDField(blank=True, null=True, verbose_name='سند')),
                ('source_document_line_id', models.UUIDField(blank=True, null=True, verbose_name='خط سند')),
                ('allocation_status', models.CharField(choices=[('ALLOCATED', 'تخصیص\u200cیافته'), ('PARTIALLY_PICKED', 'برداشت جزئی'), ('FULLY_PICKED', 'برداشت کامل'), ('CANCELLED', 'لغو شده')], default='ALLOCATED', max_length=30, verbose_name='وضعیت')),
                ('picking_user_id', models.UUIDField(blank=True, null=True, verbose_name='برداشت\u200cکننده')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.itemmodel', verbose_name='کالا')),
                ('serial_number', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.serialnumbermodel', verbose_name='سریال')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('reservation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='allocations', to='inventory.stockreservationmodel', verbose_name='رزرو')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'تخصیص موجودی',
                'verbose_name_plural': 'تخصیص\u200cهای موجودی',
                'db_table': 'inv_stock_allocation',
            },
        ),
        migrations.CreateModel(
            name='StockAgingBucketModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('age_in_days', models.PositiveIntegerField(default=0, verbose_name='سن (روز)')),
                ('aging_category', models.CharField(max_length=20, verbose_name='دسته سنی')),
                ('quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='مقدار')),
                ('value', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='ارزش')),
                ('snapshot_date', models.DateField(db_index=True, verbose_name='تاریخ عکس\u200cبرداری')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.itemmodel', verbose_name='کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'سطل عمر موجودی',
                'verbose_name_plural': 'سطل\u200cهای عمر موجودی',
                'db_table': 'inv_stock_aging_bucket',
            },
        ),
        migrations.AddField(
            model_name='serialnumbermodel',
            name='current_warehouse',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='انبار فعلی'),
        ),
        migrations.CreateModel(
            name='SerialNumberHistoryModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('transaction_date', models.DateTimeField(verbose_name='تاریخ')),
                ('transaction_type', models.CharField(max_length=50, verbose_name='نوع تراکنش')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('serial_number', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='history', to='inventory.serialnumbermodel', verbose_name='سریال')),
                ('stock_ledger', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockledgerentrymodel', verbose_name='ثبت دفتر')),
                ('from_status', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockstatusmodel', verbose_name='از وضعیت')),
                ('to_status', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockstatusmodel', verbose_name='به وضعیت')),
                ('from_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='از مکان')),
                ('to_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='به مکان')),
                ('from_warehouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='از انبار')),
                ('to_warehouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='به انبار')),
            ],
            options={
                'verbose_name': 'تاریخچه سریال',
                'verbose_name_plural': 'تاریخچه سریال\u200cها',
                'db_table': 'inv_serial_number_history',
                'ordering': ['-transaction_date'],
            },
        ),
        migrations.CreateModel(
            name='PhysicalInventoryModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('inventory_number', models.CharField(max_length=50, unique=True, verbose_name='شماره شمارش')),
                ('inventory_date', models.DateField(verbose_name='تاریخ شمارش')),
                ('inventory_type', models.CharField(choices=[('FULL', 'کامل'), ('PARTIAL', 'جزئی'), ('CYCLE_COUNT', 'چرخشی')], default='FULL', max_length=20, verbose_name='نوع')),
                ('abc_class_filter', models.CharField(blank=True, max_length=20, verbose_name='فیلتر ABC')),
                ('inventory_status', models.CharField(choices=[('DRAFT', 'پیش\u200cنویس'), ('IN_PROGRESS', 'در حال انجام'), ('COUNTING', 'شمارش'), ('COMPLETED', 'تکمیل\u200cشده'), ('CANCELLED', 'لغو شده')], default='DRAFT', max_length=20, verbose_name='وضعیت')),
                ('is_blind_count', models.BooleanField(default=False, verbose_name='شمارش کور')),
                ('is_stock_frozen', models.BooleanField(default=False, verbose_name='فریز موجودی')),
                ('required_count_times', models.PositiveIntegerField(default=1, verbose_name='تعداد دفعات شمارش')),
                ('variance_threshold_percent', models.DecimalField(decimal_places=2, default=5, max_digits=5, verbose_name='آستانه انحراف (٪)')),
                ('scheduled_start_date', models.DateField(blank=True, null=True, verbose_name='تاریخ برنامه\u200cریزی')),
                ('actual_start_date', models.DateField(blank=True, null=True, verbose_name='تاریخ شروع واقعی')),
                ('completed_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
                ('responsible_user_id', models.UUIDField(blank=True, null=True, verbose_name='مسئول')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('approved_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('remarks', models.TextField(blank=True, verbose_name='توضیحات')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('item_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.itemgroupmodel', verbose_name='گروه کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان')),
                ('warehouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'شمارش فیزیکی',
                'verbose_name_plural': 'شمارش\u200cهای فیزیکی',
                'db_table': 'inv_physical_inventory',
            },
        ),
        migrations.CreateModel(
            name='PhysicalInventoryLineModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('line_number', models.PositiveIntegerField(verbose_name='شماره ردیف')),
                ('book_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='موجودی سیستمی')),
                ('first_count_quantity', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='شمارش اول')),
                ('first_count_by', models.UUIDField(blank=True, null=True, verbose_name='شمارش\u200cکننده اول')),
                ('first_count_date', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ شمارش اول')),
                ('second_count_quantity', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='شمارش دوم')),
                ('second_count_by', models.UUIDField(blank=True, null=True, verbose_name='شمارش\u200cکننده دوم')),
                ('second_count_date', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ شمارش دوم')),
                ('third_count_quantity', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='شمارش سوم')),
                ('third_count_by', models.UUIDField(blank=True, null=True, verbose_name='شمارش\u200cکننده سوم')),
                ('third_count_date', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ شمارش سوم')),
                ('final_count_quantity', models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True, verbose_name='شمارش نهایی')),
                ('variance_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='انحراف مقداری')),
                ('variance_percent', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='انحراف درصدی')),
                ('variance_value', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='انحراف ریالی')),
                ('line_status', models.CharField(choices=[('PENDING', 'در انتظار'), ('COUNTED', 'شمارش\u200cشده'), ('VARIANCE_APPROVED', 'انحراف تأیید شده'), ('ADJUSTED', 'تعدیل\u200cشده')], default='PENDING', max_length=30, verbose_name='وضعیت')),
                ('variance_reason_code', models.CharField(blank=True, max_length=50, verbose_name='کد دلیل انحراف')),
                ('variance_remarks', models.TextField(blank=True, verbose_name='توضیحات انحراف')),
                ('approved_by', models.UUIDField(blank=True, null=True, verbose_name='تأیید توسط')),
                ('approved_date', models.DateField(blank=True, null=True, verbose_name='تاریخ تأیید')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.batchmodel', verbose_name='بچ')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.itemmodel', verbose_name='کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('physical_inventory', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='inventory.physicalinventorymodel', verbose_name='شمارش فیزیکی')),
                ('serial_number', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.serialnumbermodel', verbose_name='سریال')),
                ('adjustment_sle', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockledgerentrymodel', verbose_name='ثبت تعدیل')),
                ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'ردیف شمارش',
                'verbose_name_plural': 'ردیف\u200cهای شمارش',
                'db_table': 'inv_physical_inventory_line',
                'ordering': ['line_number'],
            },
        ),
        migrations.CreateModel(
            name='ItemWarehouseModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('min_stock_level', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='حداقل موجودی')),
                ('max_stock_level', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='حداکثر موجودی')),
                ('reorder_point', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='نقطه سفارش')),
                ('safety_stock', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='موجودی ایمنی')),
                ('reorder_quantity', models.DecimalField(decimal_places=4, default=0, max_digits=18, verbose_name='مقدار سفارش')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='warehouse_settings', to='inventory.itemmodel', verbose_name='کالا')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('default_storage_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.storagelocationmodel', verbose_name='مکان پیش\u200cفرض')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_settings', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'تنظیمات کالا-انبار',
                'verbose_name_plural': 'تنظیمات کالا-انبار',
                'db_table': 'inv_item_warehouse',
            },
        ),
        migrations.AddField(
            model_name='itemmodel',
            name='default_warehouse',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='انبار پیش\u200cفرض'),
        ),
        migrations.AddField(
            model_name='inspectionlotmodel',
            name='warehouse',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.warehousemodel', verbose_name='انبار'),
        ),
        migrations.CreateModel(
            name='CycleCountScheduleModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('schedule_name', models.CharField(max_length=255, verbose_name='نام برنامه')),
                ('count_frequency_days', models.PositiveIntegerField(default=30, verbose_name='فاصله شمارش (روز)')),
                ('abc_class', models.CharField(blank=True, max_length=5, verbose_name='طبقه ABC')),
                ('high_value_items_only', models.BooleanField(default=False, verbose_name='فقط اقلام باارزش')),
                ('next_count_date', models.DateField(blank=True, null=True, verbose_name='تاریخ شمارش بعدی')),
                ('last_count_date', models.DateField(blank=True, null=True, verbose_name='تاریخ آخرین شمارش')),
                ('is_active', models.BooleanField(default=True, verbose_name='فعال')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('created_by', models.UUIDField(blank=True, null=True, verbose_name='ایجاد توسط')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('item_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.itemgroupmodel', verbose_name='گروه کالا')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'برنامه شمارش چرخشی',
                'verbose_name_plural': 'برنامه\u200cهای شمارش چرخشی',
                'db_table': 'inv_cycle_count_schedule',
            },
        ),
        migrations.CreateModel(
            name='CostLayerModel',
            fields=[
                ('id', models.UUIDField(primary_key=True, serialize=False)),
                ('receipt_date', models.DateField(verbose_name='تاریخ رسید')),
                ('unit_cost', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='بهای واحد')),
                ('original_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار اولیه')),
                ('remaining_quantity', models.DecimalField(decimal_places=4, max_digits=18, verbose_name='مقدار باقیمانده')),
                ('currency_code', models.CharField(default='IRR', max_length=10, verbose_name='ارز')),
                ('is_fully_consumed', models.BooleanField(default=False, verbose_name='مصرف\u200cشده')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
                ('batch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.batchmodel', verbose_name='بچ')),
                ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core_organization.company', verbose_name='شرکت')),
                ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_set', to='tenant.tenant')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cost_layers', to='inventory.itemmodel', verbose_name='کالا')),
                ('receipt_sle', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='inventory.stockledgerentrymodel', verbose_name='ثبت رسید')),
                ('uom', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='inventory.unitofmeasuremodel', verbose_name='واحد')),
                ('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='inventory.warehousemodel', verbose_name='انبار')),
            ],
            options={
                'verbose_name': 'لایه هزینه',
                'verbose_name_plural': 'لایه\u200cهای هزینه',
                'db_table': 'inv_cost_layer',
            },
        ),
        migrations.AddIndex(
            model_name='itemgroupmodel',
            index=models.Index(fields=['tenant', 'is_active'], name='inv_item_gr_tenant__eaaa67_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='itemgroupmodel',
            unique_together={('tenant', 'group_code')},
        ),
        migrations.AddIndex(
            model_name='batchmodel',
            index=models.Index(fields=['tenant', 'item', 'batch_status'], name='inv_batch_tenant__79c205_idx'),
        ),
        migrations.AddIndex(
            model_name='batchmodel',
            index=models.Index(fields=['expiry_date'], name='inv_batch_expiry__4a80cc_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='batchmodel',
            unique_together={('tenant', 'batch_number')},
        ),
        migrations.AddIndex(
            model_name='itemtypemodel',
            index=models.Index(fields=['tenant', 'is_active'], name='inv_item_ty_tenant__9c1698_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='itemtypemodel',
            unique_together={('tenant', 'type_code')},
        ),
        migrations.AddIndex(
            model_name='financialpostingmodel',
            index=models.Index(fields=['tenant', 'stock_ledger'], name='inv_financi_tenant__169754_idx'),
        ),
        migrations.AddIndex(
            model_name='financialpostingmodel',
            index=models.Index(fields=['posting_status'], name='inv_financi_posting_487edd_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='stockstatusmodel',
            unique_together={('tenant', 'status_code')},
        ),
        migrations.AlterUniqueTogether(
            name='unitofmeasuremodel',
            unique_together={('tenant', 'uom_code')},
        ),
        migrations.AlterUniqueTogether(
            name='itemuommodel',
            unique_together={('item', 'uom')},
        ),
        migrations.AddIndex(
            model_name='warehousemodel',
            index=models.Index(fields=['tenant', 'is_active'], name='inv_warehou_tenant__fb6ac4_idx'),
        ),
        migrations.AddIndex(
            model_name='warehousemodel',
            index=models.Index(fields=['tenant', 'warehouse_type'], name='inv_warehou_tenant__a9fbfd_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='warehousemodel',
            unique_together={('tenant', 'warehouse_code')},
        ),
        migrations.AddIndex(
            model_name='storagelocationmodel',
            index=models.Index(fields=['tenant', 'warehouse', 'is_active'], name='inv_storage_tenant__b4bb47_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='storagelocationmodel',
            unique_together={('warehouse', 'location_code')},
        ),
        migrations.AddIndex(
            model_name='stockreservationmodel',
            index=models.Index(fields=['tenant', 'item', 'reservation_status'], name='inv_stock_r_tenant__87b078_idx'),
        ),
        migrations.AddIndex(
            model_name='stockmovementsummarymodel',
            index=models.Index(fields=['tenant', 'item', 'warehouse', 'summary_date'], name='inv_stock_m_tenant__cc6404_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'item', 'posting_date'], name='inv_stock_l_tenant__7c2c0a_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'warehouse', 'posting_date'], name='inv_stock_l_tenant__c4cc7b_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'item', 'warehouse', 'posting_date'], name='inv_stock_l_tenant__e8c2a4_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'batch'], name='inv_stock_l_tenant__e78bff_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'serial_number'], name='inv_stock_l_tenant__ed3959_idx'),
        ),
        migrations.AddIndex(
            model_name='stockledgerentrymodel',
            index=models.Index(fields=['tenant', 'transaction_type'], name='inv_stock_l_tenant__2cc9c9_idx'),
        ),
        migrations.AddIndex(
            model_name='stockbalancemodel',
            index=models.Index(fields=['tenant', 'item', 'warehouse'], name='inv_stock_b_tenant__22bfb5_idx'),
        ),
        migrations.AddIndex(
            model_name='stockbalancemodel',
            index=models.Index(fields=['tenant', 'item'], name='inv_stock_b_tenant__a4d817_idx'),
        ),
        migrations.AddIndex(
            model_name='stockbalancemodel',
            index=models.Index(fields=['tenant', 'warehouse'], name='inv_stock_b_tenant__026a48_idx'),
        ),
        migrations.AddIndex(
            model_name='stockagingbucketmodel',
            index=models.Index(fields=['tenant', 'snapshot_date'], name='inv_stock_a_tenant__5bfefd_idx'),
        ),
        migrations.AddIndex(
            model_name='serialnumbermodel',
            index=models.Index(fields=['tenant', 'item', 'serial_status'], name='inv_serial__tenant__224586_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='serialnumbermodel',
            unique_together={('tenant', 'serial_no')},
        ),
        migrations.AlterUniqueTogether(
            name='itemwarehousemodel',
            unique_together={('item', 'warehouse')},
        ),
        migrations.AddIndex(
            model_name='itemmodel',
            index=models.Index(fields=['tenant', 'item_status'], name='inv_item_tenant__89021b_idx'),
        ),
        migrations.AddIndex(
            model_name='itemmodel',
            index=models.Index(fields=['tenant', 'item_type'], name='inv_item_tenant__492e4a_idx'),
        ),
        migrations.AddIndex(
            model_name='itemmodel',
            index=models.Index(fields=['tenant', 'item_group'], name='inv_item_tenant__43769b_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='itemmodel',
            unique_together={('tenant', 'item_code')},
        ),
        migrations.AddIndex(
            model_name='costlayermodel',
            index=models.Index(fields=['tenant', 'item', 'warehouse', 'receipt_date'], name='inv_cost_la_tenant__156d22_idx'),
        ),
    ]
