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

Исправлена проблема, когда при отмене проведенной трансформации оба сигнала выполнялись последовательно:
- 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

@@ -747,6 +747,23 @@ class TransformationOutputForm(forms.Form):
# Проверяем что товар еще не добавлен
if self.transformation and self.transformation.outputs.filter(product=product).exists():
raise ValidationError(f'Товар "{product.name}" уже добавлен в качестве выходного')
# Проверяем что сумма выходных не превышает сумму входных
if self.transformation:
total_input = sum(
trans_input.quantity for trans_input in self.transformation.inputs.all()
)
total_output_existing = sum(
trans_output.quantity for trans_output in self.transformation.outputs.all()
)
total_output_new = total_output_existing + quantity
if total_output_new > total_input:
raise ValidationError(
f'Сумма выходных количеств ({total_output_new}) не может превышать '
f'сумму входных количеств ({total_input}). '
f'Максимально можно добавить: {total_input - total_output_existing}'
)
return cleaned_data