39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from app.extensions import db
|
||
from app.models.stock import StockBuy
|
||
from sqlalchemy.exc import SQLAlchemyError
|
||
|
||
|
||
def create_inbound_stock(data):
|
||
"""
|
||
处理采购入库逻辑
|
||
"""
|
||
try:
|
||
# 1. 计算总价
|
||
qty = data.get('qty_inbound')
|
||
price = data.get('price_unit', 0)
|
||
total = float(qty) * float(price)
|
||
|
||
# 2. 创建库存记录
|
||
# 注意:入库时,当前库存(current)和可用库存(available)通常等于入库数量
|
||
new_stock = StockBuy(
|
||
material_id=data['material_id'],
|
||
barcode=data.get('barcode'),
|
||
batch_no=data.get('batch_no'),
|
||
qty_inbound=qty,
|
||
qty_current=qty, # 初始:当前=入库
|
||
qty_available=qty, # 初始:可用=入库
|
||
price_unit=price,
|
||
price_total=total,
|
||
supplier_name=data.get('supplier_name'),
|
||
warehouse_loc=data.get('warehouse_loc'),
|
||
inbound_date=data.get('inbound_date') # 如果前端没传,Model会默认用当前时间
|
||
)
|
||
|
||
db.session.add(new_stock)
|
||
db.session.commit()
|
||
|
||
return new_stock
|
||
|
||
except SQLAlchemyError as e:
|
||
db.session.rollback()
|
||
raise e |