63 lines
2.5 KiB
Python
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,
|
|
}
|