Добавлено сохранение snapshot-значений для проведенных инвентаризаций
- Добавлены поля snapshot_* в модель InventoryLine для фиксации значений на момент завершения - Обновлен InventoryProcessor для сохранения snapshot перед обработкой - Обновлен InventoryDetailView для отображения snapshot-значений в проведенных инвентаризациях - Добавлена миграция 0018 для новых полей - Теперь в проведенных инвентаризациях отображаются оригинальные значения и правильная разница, а не текущие скорректированные остатки
This commit is contained in:
@@ -46,12 +46,47 @@ class InventoryProcessor:
|
||||
}
|
||||
"""
|
||||
inventory = Inventory.objects.get(id=inventory_id)
|
||||
lines = InventoryLine.objects.filter(inventory=inventory, processed=False)
|
||||
# Получаем все строки инвентаризации для сохранения snapshot
|
||||
all_lines = InventoryLine.objects.filter(inventory=inventory)
|
||||
# Получаем только необработанные строки для обработки
|
||||
lines = all_lines.filter(processed=False)
|
||||
|
||||
errors = []
|
||||
writeoff_document = None
|
||||
incoming_document = None
|
||||
|
||||
# Сохраняем snapshot-значения для ВСЕХ строк ПЕРЕД обработкой
|
||||
# Это нужно чтобы зафиксировать состояние на момент подсчета
|
||||
from inventory.models import Stock
|
||||
for line in all_lines:
|
||||
try:
|
||||
stock, _ = Stock.objects.get_or_create(
|
||||
product=line.product,
|
||||
warehouse=inventory.warehouse
|
||||
)
|
||||
stock.refresh_from_batches()
|
||||
|
||||
# Пересчитываем разницу перед сохранением snapshot
|
||||
# чтобы убедиться что она актуальна
|
||||
current_difference = (line.quantity_fact + stock.quantity_reserved) - stock.quantity_available
|
||||
|
||||
# Сохраняем snapshot-значения на момент завершения
|
||||
line.snapshot_quantity_available = stock.quantity_available
|
||||
line.snapshot_quantity_reserved = stock.quantity_reserved
|
||||
line.snapshot_quantity_system = stock.quantity_free
|
||||
line.snapshot_difference = current_difference
|
||||
line.save(update_fields=[
|
||||
'snapshot_quantity_available',
|
||||
'snapshot_quantity_reserved',
|
||||
'snapshot_quantity_system',
|
||||
'snapshot_difference'
|
||||
])
|
||||
except Exception as e:
|
||||
errors.append({
|
||||
'line': line,
|
||||
'error': f'Ошибка сохранения snapshot: {str(e)}'
|
||||
})
|
||||
|
||||
# Собираем недостачи и излишки
|
||||
deficit_lines = []
|
||||
surplus_lines = []
|
||||
|
||||
Reference in New Issue
Block a user