You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.9 KiB

from . import models
from .models import StockOperation
def register_incoming_stock(product, quantity, warehouse, expiration_date=None):
operation = StockOperation.objects.create(
product=product,
quantity=quantity,
warehouse=warehouse,
operation_type='Incoming',
expiration_date=expiration_date
)
# Распределение по местам хранения
if product.storage_temperature:
storage_location = "Холодильник" if product.storage_temperature == "+4C" else "Полка"
operation.storage_location = storage_location
operation.save()
return operation
def transfer_stock(product, quantity, from_warehouse, to_location):
total_stock = StockOperation.objects.filter(
product=product, warehouse=from_warehouse, operation_type='Incoming'
).aggregate(total=models.Sum('quantity'))['total'] or 0
if total_stock < quantity:
raise ValueError("Недостаточно товара на складе для перемещения.")
transfer_operation = StockOperation.objects.create(
product=product,
quantity=quantity,
warehouse=from_warehouse,
storage_location=to_location,
operation_type='Transfer'
)
return transfer_operation
def write_off_stock(product, quantity, warehouse, reason):
total_stock = StockOperation.objects.filter(
product=product, warehouse=warehouse, operation_type='Incoming'
).aggregate(total=models.Sum('quantity'))['total'] or 0
if total_stock < quantity:
raise ValueError("Недостаточно товара на складе для списания.")
write_off_operation = StockOperation.objects.create(
product=product,
quantity=quantity,
warehouse=warehouse,
operation_type='WriteOff',
reason=reason
)
return write_off_operation