import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('catalog_app', '0001_initial'),
        ('inventory', '0005_alter_customer_id'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='PendingInventoryTransaction',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('op_type', models.CharField(
                    choices=[
                        ('receive',  'Receive from Author / Supplier'),
                        ('transfer', 'Internal Transfer'),
                        ('adjust',   'Stock Adjustment'),
                    ],
                    db_index=True, max_length=20,
                )),
                ('quantity',     models.PositiveIntegerField(blank=True, null=True)),
                ('new_quantity', models.IntegerField(blank=True, null=True)),
                ('reference',    models.CharField(blank=True, max_length=100)),
                ('notes',        models.TextField(blank=True)),
                ('status', models.CharField(
                    choices=[
                        ('pending',  'Pending'),
                        ('approved', 'Approved'),
                        ('rejected', 'Rejected'),
                    ],
                    db_index=True, default='pending', max_length=20,
                )),
                ('submitted_at',     models.DateTimeField(auto_now_add=True)),
                ('reviewed_at',      models.DateTimeField(blank=True, null=True)),
                ('rejection_reason', models.TextField(blank=True)),
                ('book', models.ForeignKey(
                    on_delete=django.db.models.deletion.PROTECT,
                    related_name='pending_transactions',
                    to='catalog_app.book',
                )),
                ('dest_location', models.ForeignKey(
                    blank=True, null=True,
                    on_delete=django.db.models.deletion.PROTECT,
                    related_name='pending_incoming',
                    to='inventory.stocklocation',
                )),
                ('linked_tx', models.OneToOneField(
                    blank=True, null=True,
                    on_delete=django.db.models.deletion.SET_NULL,
                    related_name='pending_source',
                    to='inventory.inventorytransaction',
                )),
                ('reviewed_by', models.ForeignKey(
                    blank=True, null=True,
                    on_delete=django.db.models.deletion.SET_NULL,
                    related_name='reviewed_pending_transactions',
                    to=settings.AUTH_USER_MODEL,
                )),
                ('source_location', models.ForeignKey(
                    blank=True, null=True,
                    on_delete=django.db.models.deletion.PROTECT,
                    related_name='pending_outgoing',
                    to='inventory.stocklocation',
                )),
                ('submitted_by', models.ForeignKey(
                    null=True,
                    on_delete=django.db.models.deletion.SET_NULL,
                    related_name='submitted_pending_transactions',
                    to=settings.AUTH_USER_MODEL,
                )),
            ],
            options={
                'verbose_name': 'Pending Inventory Transaction',
                'verbose_name_plural': 'Pending Inventory Transactions',
                'ordering': ['-submitted_at'],
                'indexes': [
                    models.Index(fields=['status', 'submitted_at'],
                                 name='inventory_p_status_submitt_idx'),
                ],
            },
        ),
    ]
