# Generated by Django 5.0.10 on 2025-12-23 20:38 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('inventory', '0001_initial'), ('orders', '0001_initial'), ('products', '0001_initial'), ('user_roles', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.AddField( model_name='incoming', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incomings', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='incoming', name='batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='inventory.incomingbatch', verbose_name='Партия'), ), migrations.AddField( model_name='incomingdocument', name='confirmed_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='confirmed_incoming_documents', to=settings.AUTH_USER_MODEL, verbose_name='Провёл'), ), migrations.AddField( model_name='incomingdocument', name='created_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_incoming_documents', to=settings.AUTH_USER_MODEL, verbose_name='Создал'), ), migrations.AddField( model_name='incomingdocumentitem', name='document', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='inventory.incomingdocument', verbose_name='Документ'), ), migrations.AddField( model_name='incomingdocumentitem', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='incoming_document_items', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='inventory', name='conducted_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventories', to='user_roles.userrole', verbose_name='Провел инвентаризацию'), ), migrations.AddField( model_name='incomingdocument', name='inventory', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='incoming_documents', to='inventory.inventory', verbose_name='Инвентаризация'), ), migrations.AddField( model_name='inventoryline', name='inventory', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='inventory.inventory', verbose_name='Инвентаризация'), ), migrations.AddField( model_name='inventoryline', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='reservation', name='locked_by_user', field=models.ForeignKey(blank=True, help_text='Кассир, который добавил комплект в корзину', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cart_locks', to=settings.AUTH_USER_MODEL, verbose_name='Заблокировано пользователем'), ), migrations.AddField( model_name='reservation', name='order_item', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='orders.orderitem', verbose_name='Позиция заказа'), ), migrations.AddField( model_name='reservation', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='reservation', name='product_kit', field=models.ForeignKey(blank=True, help_text='Временный комплект, для которого создан резерв', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='products.productkit', verbose_name='Комплект'), ), migrations.AddField( model_name='sale', name='order', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sales', to='orders.order', verbose_name='Заказ'), ), migrations.AddField( model_name='sale', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sales', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='salebatchallocation', name='sale', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='batch_allocations', to='inventory.sale', verbose_name='Продажа'), ), migrations.AddField( model_name='reservation', name='showcase', field=models.ForeignKey(blank=True, help_text='Витрина, на которой выложен букет', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='inventory.showcase', verbose_name='Витрина'), ), migrations.AddField( model_name='showcaseitem', name='locked_by_user', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='locked_showcase_items', to=settings.AUTH_USER_MODEL, verbose_name='Заблокировано пользователем'), ), migrations.AddField( model_name='showcaseitem', name='product_kit', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='showcase_items', to='products.productkit', verbose_name='Шаблон комплекта'), ), migrations.AddField( model_name='showcaseitem', name='showcase', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='showcase_items', to='inventory.showcase', verbose_name='Витрина'), ), migrations.AddField( model_name='showcaseitem', name='sold_order_item', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sold_showcase_items', to='orders.orderitem', verbose_name='Позиция заказа (продажа)'), ), migrations.AddField( model_name='reservation', name='showcase_item', field=models.ForeignKey(blank=True, help_text='Для какого физического экземпляра создан резерв', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='inventory.showcaseitem', verbose_name='Экземпляр на витрине'), ), migrations.AddField( model_name='stock', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stocks', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='stockbatch', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stock_batches', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='salebatchallocation', name='batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sale_allocations', to='inventory.stockbatch', verbose_name='Партия'), ), migrations.AddField( model_name='incoming', name='stock_batch', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='incomings', to='inventory.stockbatch', verbose_name='Складская партия'), ), migrations.AddField( model_name='stockmovement', name='order', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stock_movements', to='orders.order', verbose_name='Заказ'), ), migrations.AddField( model_name='stockmovement', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='movements', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='transfer', name='batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers', to='inventory.stockbatch', verbose_name='Партия'), ), migrations.AddField( model_name='transfer', name='new_batch', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_sources', to='inventory.stockbatch', verbose_name='Новая партия'), ), migrations.AddField( model_name='transferitem', name='batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_items', to='inventory.stockbatch', verbose_name='Исходная партия (FIFO)'), ), migrations.AddField( model_name='transferitem', name='new_batch', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_items_created', to='inventory.stockbatch', verbose_name='Созданная партия на целевом складе'), ), migrations.AddField( model_name='transferitem', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_items', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='transferitem', name='transfer_batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='inventory.transferbatch', verbose_name='Документ перемещения'), ), migrations.AddIndex( model_name='warehouse', index=models.Index(fields=['is_active'], name='inventory_w_is_acti_3ddeac_idx'), ), migrations.AddIndex( model_name='warehouse', index=models.Index(fields=['is_default'], name='inventory_w_is_defa_4b7615_idx'), ), migrations.AddIndex( model_name='warehouse', index=models.Index(fields=['is_pickup_point'], name='inventory_w_is_pick_e86268_idx'), ), migrations.AddField( model_name='transferbatch', name='from_warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_batches_from', to='inventory.warehouse', verbose_name='Склад-отгрузки'), ), migrations.AddField( model_name='transferbatch', name='to_warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfer_batches_to', to='inventory.warehouse', verbose_name='Склад-приемки'), ), migrations.AddField( model_name='transfer', name='from_warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_from', to='inventory.warehouse', verbose_name='Из склада'), ), migrations.AddField( model_name='transfer', name='to_warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_to', to='inventory.warehouse', verbose_name='На склад'), ), migrations.AddField( model_name='stockbatch', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stock_batches', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='stock', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stocks', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='showcase', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='showcases', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='sale', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sales', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='reservation', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='inventory', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inventories', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='incomingdocument', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='incoming_documents', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='incomingbatch', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incoming_batches', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='writeoff', name='batch', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='writeoffs', to='inventory.stockbatch', verbose_name='Партия'), ), migrations.AddField( model_name='writeoffdocument', name='confirmed_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='confirmed_writeoff_documents', to=settings.AUTH_USER_MODEL, verbose_name='Провёл'), ), migrations.AddField( model_name='writeoffdocument', name='created_by', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_writeoff_documents', to=settings.AUTH_USER_MODEL, verbose_name='Создал'), ), migrations.AddField( model_name='writeoffdocument', name='inventory', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='writeoff_documents', to='inventory.inventory', verbose_name='Инвентаризация'), ), migrations.AddField( model_name='writeoffdocument', name='warehouse', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='writeoff_documents', to='inventory.warehouse', verbose_name='Склад'), ), migrations.AddField( model_name='writeoffdocumentitem', name='document', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='inventory.writeoffdocument', verbose_name='Документ'), ), migrations.AddField( model_name='writeoffdocumentitem', name='product', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='writeoff_document_items', to='products.product', verbose_name='Товар'), ), migrations.AddField( model_name='writeoffdocumentitem', name='reservation', field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='writeoff_document_item_reverse', to='inventory.reservation', verbose_name='Резерв'), ), migrations.AddField( model_name='reservation', name='writeoff_document_item', field=models.ForeignKey(blank=True, help_text='Резерв для документа списания (черновик)', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='inventory.writeoffdocumentitem', verbose_name='Позиция документа списания'), ), migrations.AddIndex( model_name='incomingdocumentitem', index=models.Index(fields=['document'], name='inventory_i_documen_96d470_idx'), ), migrations.AddIndex( model_name='incomingdocumentitem', index=models.Index(fields=['product'], name='inventory_i_product_932432_idx'), ), migrations.AddIndex( model_name='showcaseitem', index=models.Index(fields=['showcase', 'status'], name='inventory_s_showcas_116f7f_idx'), ), migrations.AddIndex( model_name='showcaseitem', index=models.Index(fields=['product_kit', 'status'], name='inventory_s_product_785870_idx'), ), migrations.AddIndex( model_name='showcaseitem', index=models.Index(fields=['status', 'cart_lock_expires_at'], name='inventory_s_status_6acf05_idx'), ), migrations.AddIndex( model_name='showcaseitem', index=models.Index(fields=['locked_by_user', 'status'], name='inventory_s_locked__88eac9_idx'), ), migrations.AddIndex( model_name='incoming', index=models.Index(fields=['batch'], name='inventory_i_batch_i_c50b63_idx'), ), migrations.AddIndex( model_name='incoming', index=models.Index(fields=['product'], name='inventory_i_product_39b00d_idx'), ), migrations.AddIndex( model_name='incoming', index=models.Index(fields=['-created_at'], name='inventory_i_created_563ec0_idx'), ), migrations.AlterUniqueTogether( name='incoming', unique_together={('batch', 'product')}, ), migrations.AddIndex( model_name='stockmovement', index=models.Index(fields=['product'], name='inventory_s_product_cbdc37_idx'), ), migrations.AddIndex( model_name='stockmovement', index=models.Index(fields=['created_at'], name='inventory_s_created_05ebf5_idx'), ), migrations.AddIndex( model_name='transferitem', index=models.Index(fields=['transfer_batch'], name='inventory_t_transfe_f7479b_idx'), ), migrations.AddIndex( model_name='transferitem', index=models.Index(fields=['product'], name='inventory_t_product_0e0ec9_idx'), ), migrations.AlterUniqueTogether( name='transferitem', unique_together={('transfer_batch', 'batch')}, ), migrations.AddIndex( model_name='transferbatch', index=models.Index(fields=['document_number'], name='inventory_t_documen_143275_idx'), ), migrations.AddIndex( model_name='transferbatch', index=models.Index(fields=['from_warehouse', 'to_warehouse'], name='inventory_t_from_wa_2a41f1_idx'), ), migrations.AddIndex( model_name='transferbatch', index=models.Index(fields=['-created_at'], name='inventory_t_created_b6fd05_idx'), ), migrations.AddIndex( model_name='transfer', index=models.Index(fields=['from_warehouse', 'to_warehouse'], name='inventory_t_from_wa_578feb_idx'), ), migrations.AddIndex( model_name='transfer', index=models.Index(fields=['date'], name='inventory_t_date_e1402d_idx'), ), migrations.AddIndex( model_name='stockbatch', index=models.Index(fields=['product', 'warehouse'], name='inventory_s_product_022460_idx'), ), migrations.AddIndex( model_name='stockbatch', index=models.Index(fields=['created_at'], name='inventory_s_created_10279b_idx'), ), migrations.AddIndex( model_name='stockbatch', index=models.Index(fields=['is_active'], name='inventory_s_is_acti_0dd559_idx'), ), migrations.AddIndex( model_name='stock', index=models.Index(fields=['product', 'warehouse'], name='inventory_s_product_112b63_idx'), ), migrations.AlterUniqueTogether( name='stock', unique_together={('product', 'warehouse')}, ), migrations.AddIndex( model_name='showcase', index=models.Index(fields=['warehouse'], name='inventory_s_warehou_1e4a8a_idx'), ), migrations.AddIndex( model_name='showcase', index=models.Index(fields=['is_active'], name='inventory_s_is_acti_387bfb_idx'), ), migrations.AddIndex( model_name='showcase', index=models.Index(fields=['is_default'], name='inventory_s_is_defa_bf9a7c_idx'), ), migrations.AddIndex( model_name='sale', index=models.Index(fields=['product', 'warehouse'], name='inventory_s_product_084314_idx'), ), migrations.AddIndex( model_name='sale', index=models.Index(fields=['date'], name='inventory_s_date_8972d4_idx'), ), migrations.AddIndex( model_name='sale', index=models.Index(fields=['order'], name='inventory_s_order_i_7d13ea_idx'), ), migrations.AddIndex( model_name='inventory', index=models.Index(fields=['document_number'], name='inventory_i_documen_8df782_idx'), ), migrations.AddIndex( model_name='incomingdocument', index=models.Index(fields=['document_number'], name='inventory_i_documen_5b89ad_idx'), ), migrations.AddIndex( model_name='incomingdocument', index=models.Index(fields=['warehouse', 'status'], name='inventory_i_warehou_8f141d_idx'), ), migrations.AddIndex( model_name='incomingdocument', index=models.Index(fields=['date'], name='inventory_i_date_8ace9b_idx'), ), migrations.AddIndex( model_name='incomingdocument', index=models.Index(fields=['receipt_type'], name='inventory_i_receipt_92f322_idx'), ), migrations.AddIndex( model_name='incomingdocument', index=models.Index(fields=['-created_at'], name='inventory_i_created_174930_idx'), ), migrations.AddIndex( model_name='incomingbatch', index=models.Index(fields=['document_number'], name='inventory_i_documen_679096_idx'), ), migrations.AddIndex( model_name='incomingbatch', index=models.Index(fields=['warehouse'], name='inventory_i_warehou_cc3a73_idx'), ), migrations.AddIndex( model_name='incomingbatch', index=models.Index(fields=['receipt_type'], name='inventory_i_receipt_ce70c1_idx'), ), migrations.AddIndex( model_name='incomingbatch', index=models.Index(fields=['-created_at'], name='inventory_i_created_59ee8b_idx'), ), migrations.AddIndex( model_name='writeoff', index=models.Index(fields=['batch'], name='inventory_w_batch_i_b098ce_idx'), ), migrations.AddIndex( model_name='writeoff', index=models.Index(fields=['date'], name='inventory_w_date_70c7e3_idx'), ), migrations.AddIndex( model_name='writeoffdocument', index=models.Index(fields=['document_number'], name='inventory_w_documen_a9ae00_idx'), ), migrations.AddIndex( model_name='writeoffdocument', index=models.Index(fields=['warehouse', 'status'], name='inventory_w_warehou_69fbf6_idx'), ), migrations.AddIndex( model_name='writeoffdocument', index=models.Index(fields=['date'], name='inventory_w_date_a853cb_idx'), ), migrations.AddIndex( model_name='writeoffdocument', index=models.Index(fields=['-created_at'], name='inventory_w_created_02c298_idx'), ), migrations.AddIndex( model_name='writeoffdocumentitem', index=models.Index(fields=['document'], name='inventory_w_documen_d77c5e_idx'), ), migrations.AddIndex( model_name='writeoffdocumentitem', index=models.Index(fields=['product'], name='inventory_w_product_6e32fc_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['product', 'warehouse'], name='inventory_r_product_fa0d33_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['status'], name='inventory_r_status_806333_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['order_item'], name='inventory_r_order_i_ae991f_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['showcase'], name='inventory_r_showcas_bd3508_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['product_kit'], name='inventory_r_product_70aed5_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['cart_lock_expires_at'], name='inventory_r_cart_lo_e9b52a_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['locked_by_user'], name='inventory_r_locked__706cbf_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['product_kit', 'cart_lock_expires_at'], name='inventory_r_product_5dacdf_idx'), ), migrations.AddIndex( model_name='reservation', index=models.Index(fields=['showcase_item'], name='inventory_r_showcas_8cfff5_idx'), ), ]