Добавлена поддержка документов списания в админке и сигналах
- Зарегистрированы модели WriteOffDocument и WriteOffDocumentItem в админке - Настроен inline для позиций документа в админке - Добавлены цветовые индикаторы статусов документа - Настроены фильтры, поиск и сортировка для удобной работы - Добавлен сигнал release_reservation_on_writeoff_item_delete - Автоматическое освобождение резервов при удалении позиций через админку - Защита от утечки резервов при прямом удалении через ORM
This commit is contained in:
@@ -11,7 +11,7 @@ from django.utils import timezone
|
||||
from decimal import Decimal
|
||||
|
||||
from orders.models import Order, OrderItem
|
||||
from inventory.models import Reservation, Warehouse, Incoming, StockBatch, Sale, SaleBatchAllocation, Inventory, WriteOff, Stock
|
||||
from inventory.models import Reservation, Warehouse, Incoming, StockBatch, Sale, SaleBatchAllocation, Inventory, WriteOff, Stock, WriteOffDocumentItem
|
||||
from inventory.services import SaleProcessor
|
||||
from inventory.services.batch_manager import StockBatchManager
|
||||
from inventory.services.inventory_processor import InventoryProcessor
|
||||
@@ -1357,3 +1357,19 @@ def update_kit_prices_on_product_change(sender, instance, created, **kwargs):
|
||||
f"после изменения цены товара {instance.sku}: {e}",
|
||||
exc_info=True
|
||||
)
|
||||
|
||||
|
||||
# ==================== WRITEOFF DOCUMENT SIGNALS ====================
|
||||
|
||||
@receiver(pre_delete, sender=WriteOffDocumentItem)
|
||||
def release_reservation_on_writeoff_item_delete(sender, instance, **kwargs):
|
||||
"""
|
||||
Сигнал: При удалении позиции документа списания освобождаем связанный резерв.
|
||||
|
||||
Это fallback для случаев удаления напрямую через ORM/Admin,
|
||||
минуя WriteOffDocumentService.remove_item().
|
||||
"""
|
||||
if instance.reservation and instance.reservation.status == 'reserved':
|
||||
instance.reservation.status = 'released'
|
||||
instance.reservation.released_at = timezone.now()
|
||||
instance.reservation.save(update_fields=['status', 'released_at'])
|
||||
|
||||
Reference in New Issue
Block a user