Files
KCGL/inventory-backend/app/models/transaction.py

96 lines
3.0 KiB
Python
Raw Normal View History

2026-02-04 13:30:07 +08:00
from app.extensions import db
from datetime import datetime
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
# 1. 借用表
class TransBorrow(db.Model):
__tablename__ = 'trans_borrow'
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
id = db.Column(db.Integer, primary_key=True)
2026-02-04 14:29:59 +08:00
sku = db.Column(db.String(100), index=True) # 加索引优化查询
2026-02-04 13:30:07 +08:00
source_table = db.Column(db.String(50))
stock_id = db.Column(db.Integer)
quantity = db.Column(db.Numeric(19, 4))
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
borrow_time = db.Column(db.DateTime, default=datetime.now)
expected_return_time = db.Column(db.DateTime)
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
borrower_name = db.Column(db.String(100))
actual_return_time = db.Column(db.DateTime)
approver_name = db.Column(db.String(100))
2026-02-04 14:29:59 +08:00
# 状态:borrowed(借出), returned(已还), overdue(逾期)
status = db.Column(db.String(20), default='borrowed')
2026-02-04 13:30:07 +08:00
def to_dict(self):
return {
'id': self.id,
'sku': self.sku,
2026-02-04 14:29:59 +08:00
'quantity': float(self.quantity) if self.quantity else 0,
2026-02-04 13:30:07 +08:00
'borrower_name': self.borrower_name,
2026-02-04 14:29:59 +08:00
'borrow_time': self.borrow_time.strftime('%Y-%m-%d %H:%M:%S') if self.borrow_time else None,
2026-02-04 13:30:07 +08:00
'status': self.status
}
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
# 2. 维修表
class TransRepair(db.Model):
__tablename__ = 'trans_repair'
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
id = db.Column(db.Integer, primary_key=True)
2026-02-04 14:29:59 +08:00
sku = db.Column(db.String(100), index=True)
2026-02-04 13:30:07 +08:00
source_table = db.Column(db.String(50))
stock_id = db.Column(db.Integer)
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
arrival_date = db.Column(db.Date)
expected_repair_time = db.Column(db.String(100))
shipping_date = db.Column(db.Date)
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
is_self_made = db.Column(db.Boolean, default=False)
related_product_id = db.Column(db.Integer)
related_contract_id = db.Column(db.String(100))
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
repair_manager = db.Column(db.String(100))
fault_description = db.Column(db.Text)
repair_result = db.Column(db.Text)
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
cost_price = db.Column(db.Numeric(19, 4))
sale_price = db.Column(db.Numeric(19, 4))
def to_dict(self):
2026-02-04 14:29:59 +08:00
return {
'id': self.id,
'sku': self.sku,
'status': 'repaired' if self.repair_result else 'pending',
'manager': self.repair_manager
}
2026-02-04 13:30:07 +08:00
# 3. 报废表
class TransScrap(db.Model):
__tablename__ = 'trans_scrap'
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
id = db.Column(db.Integer, primary_key=True)
2026-02-04 14:29:59 +08:00
sku = db.Column(db.String(100), index=True)
2026-02-04 13:30:07 +08:00
source_table = db.Column(db.String(50))
stock_id = db.Column(db.Integer)
quantity = db.Column(db.Numeric(19, 4))
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
reason = db.Column(db.Text)
operator_name = db.Column(db.String(100))
operation_time = db.Column(db.DateTime, default=datetime.now)
2026-02-04 14:29:59 +08:00
2026-02-04 13:30:07 +08:00
approver_name = db.Column(db.String(100))
2026-02-04 14:29:59 +08:00
approval_status = db.Column(db.String(20), default='pending') # pending, approved, rejected
2026-02-04 13:30:07 +08:00
cost_at_scrap = db.Column(db.Numeric(19, 4))
total_loss = db.Column(db.Numeric(19, 4))
def to_dict(self):
2026-02-04 14:29:59 +08:00
return {
'id': self.id,
'sku': self.sku,
'quantity': float(self.quantity) if self.quantity else 0,
'total_loss': float(self.total_loss) if self.total_loss else 0,
'reason': self.reason
}