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:
@@ -14,7 +14,7 @@ from django.utils import timezone
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from inventory.models import (
|
||||
IncomingDocument, IncomingDocumentItem, IncomingBatch, Incoming
|
||||
IncomingDocument, IncomingDocumentItem, StockBatch, Stock
|
||||
)
|
||||
from inventory.utils.document_generator import generate_incoming_document_number
|
||||
|
||||
@@ -165,10 +165,9 @@ class IncomingDocumentService:
|
||||
|
||||
Процесс:
|
||||
1. Проверяем что документ - черновик и имеет позиции
|
||||
2. Создаем IncomingBatch с номером документа
|
||||
3. Для каждой позиции создаем Incoming запись
|
||||
4. Сигнал create_stock_batch_on_incoming автоматически создаст StockBatch
|
||||
5. Меняем статус документа на 'confirmed'
|
||||
2. Для каждой позиции создаем StockBatch напрямую
|
||||
3. Обновляем Stock
|
||||
4. Меняем статус документа на 'confirmed'
|
||||
|
||||
Args:
|
||||
document: IncomingDocument
|
||||
@@ -188,30 +187,30 @@ class IncomingDocumentService:
|
||||
if not document.items.exists():
|
||||
raise ValidationError("Нельзя провести пустой документ")
|
||||
|
||||
# Создаем IncomingBatch
|
||||
incoming_batch = IncomingBatch.objects.create(
|
||||
warehouse=document.warehouse,
|
||||
document_number=document.document_number,
|
||||
receipt_type=document.receipt_type,
|
||||
supplier_name=document.supplier_name if document.receipt_type == 'supplier' else '',
|
||||
notes=document.notes
|
||||
)
|
||||
|
||||
# Создаем Incoming записи для каждого товара
|
||||
incomings_created = []
|
||||
# Создаем StockBatch напрямую для каждого товара
|
||||
batches_created = []
|
||||
total_cost = Decimal('0')
|
||||
|
||||
for item in document.items.select_related('product'):
|
||||
incoming = Incoming.objects.create(
|
||||
batch=incoming_batch,
|
||||
# Создаем партию товара на складе
|
||||
stock_batch = StockBatch.objects.create(
|
||||
product=item.product,
|
||||
warehouse=document.warehouse,
|
||||
quantity=item.quantity,
|
||||
cost_price=item.cost_price,
|
||||
notes=item.notes
|
||||
is_active=True
|
||||
)
|
||||
incomings_created.append(incoming)
|
||||
batches_created.append(stock_batch)
|
||||
total_cost += item.total_cost
|
||||
|
||||
# Обновляем или создаем запись в Stock
|
||||
stock, _ = Stock.objects.get_or_create(
|
||||
product=item.product,
|
||||
warehouse=document.warehouse
|
||||
)
|
||||
# Пересчитываем остаток из всех активных партий
|
||||
stock.refresh_from_batches()
|
||||
|
||||
# Обновляем статус документа
|
||||
document.status = 'confirmed'
|
||||
document.confirmed_by = confirmed_by
|
||||
@@ -220,8 +219,7 @@ class IncomingDocumentService:
|
||||
|
||||
return {
|
||||
'document': document,
|
||||
'incoming_batch': incoming_batch,
|
||||
'incomings_created': len(incomings_created),
|
||||
'batches_created': len(batches_created),
|
||||
'total_quantity': document.total_quantity,
|
||||
'total_cost': total_cost
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user