Исправление конфликта сигналов при отмене трансформации

Исправлена проблема, когда при отмене проведенной трансформации оба сигнала выполнялись последовательно:
- rollback_transformation_on_cancel возвращал резервы в 'reserved'
- release_reservations_on_draft_cancel ошибочно освобождал их в 'released'

Изменена проверка в release_reservations_on_draft_cancel: вместо проверки наличия партий Output (которые уже удалены) теперь проверяется статус резервов ('converted_to_transformation') или наличие поля converted_at, что работает независимо от порядка выполнения сигналов.
This commit is contained in:
2025-12-25 22:54:39 +03:00
parent 30ee077963
commit bc13750d16
7 changed files with 624 additions and 235 deletions

View File

@@ -218,6 +218,20 @@ class TransformationService:
if not transformation.outputs.exists():
raise ValidationError("Добавьте хотя бы один выходной товар")
# Проверяем что сумма входных количеств равна сумме выходных
total_input_quantity = sum(
trans_input.quantity for trans_input in transformation.inputs.all()
)
total_output_quantity = sum(
trans_output.quantity for trans_output in transformation.outputs.all()
)
if total_input_quantity != total_output_quantity:
raise ValidationError(
f"Сумма входных количеств ({total_input_quantity}) должна быть равна "
f"сумме выходных количеств ({total_output_quantity})"
)
# Проверяем наличие всех входных товаров
for trans_input in transformation.inputs.all():
stock = Stock.objects.filter(