# Generated by Django 4.2.27 on 2026-01-22 15:30

from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('inventory', '0001_initial'),
        ('business', '0002_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='Transfer',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('transfer_number', models.CharField(db_index=True, help_text='Auto-generated: TRF-YYYYMMDD-XXXXX', max_length=50, unique=True)),
                ('status', models.CharField(choices=[('PENDING', 'Pending Approval'), ('APPROVED', 'Approved'), ('IN_TRANSIT', 'In Transit'), ('DELIVERED', 'Delivered'), ('RECEIVED', 'Received'), ('PARTIALLY_RECEIVED', 'Partially Received'), ('REJECTED', 'Rejected'), ('CANCELLED', 'Cancelled'), ('CHANGES_REQUESTED', 'Changes Requested')], db_index=True, default='PENDING', max_length=20)),
                ('priority', models.CharField(choices=[('LOW', 'Low'), ('MEDIUM', 'Medium'), ('HIGH', 'High'), ('URGENT', 'Urgent')], default='MEDIUM', max_length=10)),
                ('requested_date', models.DateTimeField(auto_now_add=True)),
                ('approved_date', models.DateTimeField(blank=True, null=True)),
                ('shipped_date', models.DateTimeField(blank=True, null=True)),
                ('expected_delivery_date', models.DateField(blank=True, null=True)),
                ('delivered_date', models.DateTimeField(blank=True, null=True)),
                ('received_date', models.DateTimeField(blank=True, null=True)),
                ('rejected_at', models.DateTimeField(blank=True, null=True)),
                ('rejection_reason', models.TextField(blank=True)),
                ('carrier_name', models.CharField(blank=True, max_length=200)),
                ('tracking_number', models.CharField(blank=True, max_length=200)),
                ('shipping_method', models.CharField(blank=True, max_length=100)),
                ('estimated_cost', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
                ('actual_cost', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
                ('has_discrepancies', models.BooleanField(default=False)),
                ('discrepancy_report', models.TextField(blank=True)),
                ('notes', models.TextField(blank=True)),
                ('internal_notes', models.TextField(blank=True, help_text='Internal notes not visible to all users')),
                ('attachments', models.JSONField(blank=True, default=list, help_text='File attachments (receipts, photos, etc.)')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('approved_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_approved', to=settings.AUTH_USER_MODEL)),
                ('business', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers', to='business.business')),
                ('destination_location', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='transfers_incoming', to='business.location')),
                ('received_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_received', to=settings.AUTH_USER_MODEL)),
                ('rejected_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_rejected', to=settings.AUTH_USER_MODEL)),
                ('requested_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='transfers_requested', to=settings.AUTH_USER_MODEL)),
                ('source_location', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='transfers_outgoing', to='business.location')),
            ],
            options={
                'verbose_name': 'Transfer',
                'verbose_name_plural': 'Transfers',
                'db_table': 'transfers',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='TransferItem',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('quantity', models.IntegerField(help_text='Quantity being transferred', validators=[django.core.validators.MinValueValidator(1)])),
                ('received_quantity', models.IntegerField(blank=True, help_text='Actual quantity received', null=True, validators=[django.core.validators.MinValueValidator(0)])),
                ('condition', models.CharField(choices=[('Good', 'Good Condition'), ('Damaged', 'Damaged'), ('Missing', 'Missing')], default='Good', max_length=20)),
                ('status', models.CharField(choices=[('PENDING', 'Pending'), ('IN_TRANSIT', 'In Transit'), ('RECEIVED', 'Received'), ('DAMAGED', 'Damaged'), ('MISSING', 'Missing')], default='PENDING', max_length=20)),
                ('notes', models.TextField(blank=True)),
                ('received_notes', models.TextField(blank=True, help_text='Notes added during receiving')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('inventory_item', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='transfer_items', to='inventory.inventoryitem')),
                ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='transfers.transfer')),
            ],
            options={
                'db_table': 'transfer_items',
                'indexes': [models.Index(fields=['transfer', 'status'], name='transfer_it_transfe_31b590_idx'), models.Index(fields=['inventory_item'], name='transfer_it_invento_2d8336_idx')],
                'unique_together': {('transfer', 'inventory_item')},
            },
        ),
        migrations.CreateModel(
            name='TransferEvent',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('event_type', models.CharField(choices=[('CREATED', 'Transfer Created'), ('APPROVED', 'Transfer Approved'), ('REJECTED', 'Transfer Rejected'), ('SHIPPED', 'Transfer Shipped'), ('IN_TRANSIT', 'In Transit Update'), ('DELIVERED', 'Transfer Delivered'), ('RECEIVED', 'Transfer Received'), ('CANCELLED', 'Transfer Cancelled'), ('COMMENT_ADDED', 'Comment Added'), ('STATUS_CHANGED', 'Status Changed')], max_length=20)),
                ('notes', models.TextField(blank=True)),
                ('metadata', models.JSONField(blank=True, default=dict, help_text='Additional event data')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='events', to='transfers.transfer')),
                ('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'transfer_events',
                'ordering': ['created_at'],
                'indexes': [models.Index(fields=['transfer', 'created_at'], name='transfer_ev_transfe_f0361e_idx'), models.Index(fields=['event_type', 'created_at'], name='transfer_ev_event_t_2faa86_idx')],
            },
        ),
        migrations.CreateModel(
            name='TransferComment',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('text', models.TextField()),
                ('is_internal', models.BooleanField(default=False, help_text='Internal comments visible only to specific roles')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('transfer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='transfers.transfer')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'transfer_comments',
                'ordering': ['created_at'],
                'indexes': [models.Index(fields=['transfer', 'created_at'], name='transfer_co_transfe_c0e651_idx')],
            },
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['business', 'status'], name='transfers_busines_e521cc_idx'),
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['source_location', 'status'], name='transfers_source__dc60e3_idx'),
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['destination_location', 'status'], name='transfers_destina_962c83_idx'),
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['transfer_number'], name='transfers_transfe_cef4e7_idx'),
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['created_at'], name='transfers_created_c46a4f_idx'),
        ),
        migrations.AddIndex(
            model_name='transfer',
            index=models.Index(fields=['status', 'priority'], name='transfers_status_7ddabf_idx'),
        ),
    ]
