refactor: подготовка к стандартизации Transfer моделей
Текущее состояние перед рефакторингом Transfer → TransferDocument. Все изменения с последнего коммита по улучшению системы поступлений. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -74,40 +74,30 @@ def _initialize_incoming_counter_if_needed():
|
||||
Вызывается только если счетчик равен 0 (не инициализирован).
|
||||
Thread-safe через select_for_update.
|
||||
"""
|
||||
from inventory.models import IncomingBatch, IncomingDocument
|
||||
from inventory.models import IncomingDocument
|
||||
from django.db import transaction
|
||||
|
||||
|
||||
# Быстрая проверка без блокировки - если счетчик существует и > 0, выходим
|
||||
if DocumentCounter.objects.filter(
|
||||
counter_type='incoming',
|
||||
current_value__gt=0
|
||||
).exists():
|
||||
return
|
||||
|
||||
|
||||
# Только если счетчик не инициализирован - делаем полную проверку с блокировкой
|
||||
with transaction.atomic():
|
||||
counter = DocumentCounter.objects.select_for_update().filter(
|
||||
counter_type='incoming'
|
||||
).first()
|
||||
|
||||
|
||||
# Двойная проверка: возможно другой поток уже инициализировал
|
||||
if counter and counter.current_value > 0:
|
||||
return
|
||||
|
||||
# Собираем все номера документов
|
||||
all_numbers = []
|
||||
|
||||
# Номера из IncomingBatch
|
||||
batch_numbers = IncomingBatch.objects.filter(
|
||||
|
||||
# Собираем все номера документов из IncomingDocument
|
||||
all_numbers = list(IncomingDocument.objects.filter(
|
||||
document_number__startswith='IN-'
|
||||
).values_list('document_number', flat=True)
|
||||
all_numbers.extend(batch_numbers)
|
||||
|
||||
# Номера из IncomingDocument
|
||||
doc_numbers = IncomingDocument.objects.filter(
|
||||
document_number__startswith='IN-'
|
||||
).values_list('document_number', flat=True)
|
||||
all_numbers.extend(doc_numbers)
|
||||
).values_list('document_number', flat=True))
|
||||
|
||||
if all_numbers:
|
||||
# Извлекаем максимальный номер из всех форматов
|
||||
@@ -135,7 +125,7 @@ def generate_incoming_document_number():
|
||||
Thread-safe через DocumentCounter.
|
||||
|
||||
При первом использовании автоматически инициализирует DocumentCounter
|
||||
максимальным номером из существующих документов (IncomingBatch и IncomingDocument).
|
||||
максимальным номером из существующих документов IncomingDocument.
|
||||
|
||||
Returns:
|
||||
str: Сгенерированный номер документа (например, IN-000001)
|
||||
|
||||
Reference in New Issue
Block a user