69 lines
2.8 KiB
Python
69 lines
2.8 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')
|
||
# 关联入库SKU(盘盈时填写)
|
||
linked_sku = db.Column(db.String(100), comment='关联入库SKU(盘盈时填写)')
|
||
# 关联出库单号(盘亏时填写)
|
||
linked_outbound_no = db.Column(db.String(100), comment='关联出库单号(盘亏时填写)')
|
||
# 操作人/经办人
|
||
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,
|
||
'linked_sku': self.linked_sku,
|
||
'linked_outbound_no': self.linked_outbound_no,
|
||
'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,
|
||
}
|