# Generated by Django 6.0.4 on 2026-07-12 18:07

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('order_module', '0006_alter_shippingrate_options_shippingrate_min_weight_and_more'),
        ('product_module', '0005_color_product_colors'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='city',
            options={'ordering': ('province__name', 'name'), 'verbose_name': 'شهر', 'verbose_name_plural': 'شهرها'},
        ),
        migrations.AlterModelOptions(
            name='province',
            options={'ordering': ('name',), 'verbose_name': 'استان', 'verbose_name_plural': 'استان\u200cها'},
        ),
        migrations.AlterModelOptions(
            name='shippingmethod',
            options={'ordering': ('name',), 'verbose_name': 'روش ارسال', 'verbose_name_plural': 'روش\u200cهای ارسال'},
        ),
        migrations.AlterModelOptions(
            name='zone',
            options={'ordering': ('name',), 'verbose_name': 'زون منطقه\u200cای', 'verbose_name_plural': 'زون\u200cهای منطقه\u200cای'},
        ),
        migrations.RemoveConstraint(
            model_name='shippingrate',
            name='unique_shipping_rate_method_zone_weight_range',
        ),
        migrations.RemoveConstraint(
            model_name='shippingrate',
            name='shipping_rate_max_weight_gte_min_weight',
        ),
        migrations.RemoveIndex(
            model_name='shippingrate',
            name='shipping_rate_lookup_idx',
        ),
        migrations.AddField(
            model_name='order',
            name='shipping_calculated_at',
            field=models.DateTimeField(blank=True, null=True, verbose_name='زمان محاسبه هزینه ارسال'),
        ),
        migrations.AddField(
            model_name='order',
            name='shipping_cost',
            field=models.DecimalField(decimal_places=0, default=0, max_digits=12, verbose_name='هزینه ارسال ثبت\u200cشده'),
        ),
        migrations.AddField(
            model_name='province',
            name='zone',
            field=models.ForeignKey(blank=True, help_text='اگر شهر زون اختصاصی نداشته باشد، این زون استفاده می\u200cشود.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='provinces', to='order_module.zone', verbose_name='زون پیش\u200cفرض استان'),
        ),
        migrations.AddField(
            model_name='shippingmethod',
            name='code',
            field=models.SlugField(blank=True, help_text='مثال: tipax، post، courier', null=True, verbose_name='کد سیستمی'),
        ),
        migrations.AddField(
            model_name='shippingrate',
            name='is_active',
            field=models.BooleanField(default=True, verbose_name='فعال'),
        ),
        migrations.AddField(
            model_name='zone',
            name='description',
            field=models.TextField(blank=True, verbose_name='توضیحات'),
        ),
        migrations.AddField(
            model_name='zone',
            name='is_active',
            field=models.BooleanField(default=True, verbose_name='فعال'),
        ),
        migrations.AlterField(
            model_name='address',
            name='city',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='addresses', to='order_module.city', verbose_name='شهر'),
        ),
        migrations.AlterField(
            model_name='address',
            name='province',
            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='addresses', to='order_module.province', verbose_name='استان'),
        ),
        migrations.AlterField(
            model_name='city',
            name='zone',
            field=models.ForeignKey(blank=True, help_text='فقط زمانی انتخاب شود که زون شهر با زون پیش\u200cفرض استان متفاوت باشد.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cities', to='order_module.zone', verbose_name='زون اختصاصی شهر'),
        ),
        migrations.AlterField(
            model_name='province',
            name='name',
            field=models.CharField(max_length=100, unique=True, verbose_name='نام استان'),
        ),
        migrations.AlterField(
            model_name='shippingmethod',
            name='name',
            field=models.CharField(max_length=100, unique=True, verbose_name='نام'),
        ),
        migrations.AlterField(
            model_name='shippingrate',
            name='price',
            field=models.DecimalField(decimal_places=0, help_text='هزینه ارسال به تومان', max_digits=12, verbose_name='قیمت'),
        ),
        migrations.AlterField(
            model_name='zone',
            name='name',
            field=models.CharField(max_length=50, unique=True, verbose_name='نام زون'),
        ),
        migrations.AddIndex(
            model_name='address',
            index=models.Index(fields=['user', 'province', 'city'], name='address_user_location_idx'),
        ),
        migrations.AddIndex(
            model_name='city',
            index=models.Index(fields=['province', 'name'], name='city_province_name_idx'),
        ),
        migrations.AddIndex(
            model_name='shippingrate',
            index=models.Index(fields=['method', 'zone', 'is_active', 'min_weight', 'max_weight'], name='shipping_rate_lookup_idx'),
        ),
        migrations.AddConstraint(
            model_name='city',
            constraint=models.UniqueConstraint(fields=('province', 'name'), name='unique_city_name_per_province'),
        ),
        migrations.AddConstraint(
            model_name='orderdetail',
            constraint=models.CheckConstraint(check=models.Q(('count__gte', 1)), name='order_detail_count_gte_one'),
        ),
        migrations.AddConstraint(
            model_name='shippingoption',
            constraint=models.UniqueConstraint(fields=('method', 'title'), name='unique_shipping_option_per_method'),
        ),
        migrations.AddConstraint(
            model_name='shippingrate',
            constraint=models.UniqueConstraint(fields=('method', 'zone', 'min_weight', 'max_weight'), name='unique_shipping_rate_method_zone_range'),
        ),
        migrations.AddConstraint(
            model_name='shippingrate',
            constraint=models.CheckConstraint(check=models.Q(('max_weight__gte', models.F('min_weight'))), name='shipping_rate_valid_weight_range'),
        ),
        migrations.AddConstraint(
            model_name='shippingrate',
            constraint=models.CheckConstraint(check=models.Q(('price__gte', 0)), name='shipping_rate_non_negative_price'),
        ),
    ]
