Files
KCGL/inventory-backend/app/models/stock/adjustment.py

63 lines
2.5 KiB
Python

# app/models/stock/adjustment.py
from app.extensions import db, beijing_time
from datetime import datetime
class StockAdjustment(db.Model):
"""
盘盈盘亏调整表
用于记录财务/主管手动发起的库存修正
"""
__tablename__ = 'stock_adjustment'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
# 单号,如 ADJ-YYYYMMDD-XXXX
order_no = db.Column(db.String(50), unique=True, nullable=False, index=True)
# 关联物料基础表
base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'))
# 关联具体库存行ID
stock_id = db.Column(db.Integer)
# 库存类型 (stock_buy/stock_semi/stock_product)
source_table = db.Column(db.String(50))
# 物料冗余信息
sku = db.Column(db.String(100))
material_name = db.Column(db.String(255))
spec_model = db.Column(db.String(255))
# 库位
warehouse_location = db.Column(db.String(100))
# 调整类型:'profit' 盘盈 / 'loss' 盘亏
adjust_type = db.Column(db.String(20), nullable=False)
# 调整数量(绝对值)
adjust_quantity = db.Column(db.Numeric(19, 4), nullable=False)
# 原因说明(必填)
reason = db.Column(db.String(500), nullable=False)
# 状态:'pending' 待处理 / 'completed' 已完成 / 'cancelled' 已取消
status = db.Column(db.String(20), default='pending')
# 操作人/经办人
operator = db.Column(db.String(100))
# 创建时间
create_time = db.Column(db.DateTime, default=beijing_time)
# 更新时间
update_time = db.Column(db.DateTime, default=beijing_time, onupdate=beijing_time)
def to_dict(self):
return {
'id': self.id,
'order_no': self.order_no,
'base_id': self.base_id,
'stock_id': self.stock_id,
'source_table': self.source_table,
'sku': self.sku,
'material_name': self.material_name,
'spec_model': self.spec_model,
'warehouse_location': self.warehouse_location,
'adjust_type': self.adjust_type,
'adjust_quantity': float(self.adjust_quantity or 0),
'reason': self.reason,
'status': self.status,
'operator': self.operator,
'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None,
'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S') if self.update_time else None,
}