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

69 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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,
}