ERP/test_purchase_demand_ordered.py

98 lines
3.6 KiB
Python

#!/usr/bin/env python3
"""
测试采购需求状态更新为"已下单"后期初库存的更新功能
"""
import sqlite3
import sys
import os
# 添加项目路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
DB_PATH = 'server/data.db'
def test_purchase_demand_ordered_update():
"""测试采购需求状态更新为已下单后期初库存自动更新"""
# 连接数据库
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
try:
# 1. 创建测试物料
material_code = 'TEST001'
material_name = '测试物料'
# 插入期初库存记录
c.execute('''INSERT OR REPLACE INTO initial_stock
(material_code, material_name, stock_qty, created_at, updated_at)
VALUES (?, ?, ?, datetime('now', 'localtime'), datetime('now', 'localtime'))''',
(material_code, material_name, 100))
# 2. 创建采购需求记录
c.execute('''INSERT INTO purchase_demand
(demand_no, material_code, material_name, order_qty, bom_unit_qty,
total_demand, initial_stock, net_demand, min_package, actual_purchase_qty,
status, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now', 'localtime'), datetime('now', 'localtime'))''',
('TEST001', material_code, material_name, 10, 5, 50, 100, 0, 10, 50, 'pending'))
demand_id = c.lastrowid
# 3. 更新状态为已下单
c.execute('''UPDATE purchase_demand
SET status = 'ordered', updated_at = datetime('now', 'localtime')
WHERE id = ?''', (demand_id,))
# 4. 模拟计算新的期初库存:实际采购 - 总需求
actual_purchase_qty = 50
total_demand = 50
expected_stock = actual_purchase_qty - total_demand
# 更新期初库存
c.execute('''INSERT OR REPLACE INTO initial_stock
(material_code, material_name, stock_qty, updated_at)
VALUES (?, ?, ?, datetime('now', 'localtime'))''',
(material_code, material_name, expected_stock))
conn.commit()
# 5. 验证结果
c.execute('SELECT stock_qty FROM initial_stock WHERE material_code = ?', (material_code,))
result = c.fetchone()
if result:
actual_stock = result[0]
print(f"✅ 测试通过!")
print(f" - 物料编码: {material_code}")
print(f" - 实际采购数量: {actual_purchase_qty}")
print(f" - 总需求: {total_demand}")
print(f" - 期望期初库存: {expected_stock}")
print(f" - 实际期初库存: {actual_stock}")
if actual_stock == expected_stock:
print(f" - 期初库存更新正确!")
else:
print(f" - ❌ 期初库存更新错误!")
else:
print("❌ 测试失败:未找到期初库存记录")
# 6. 清理测试数据
c.execute('DELETE FROM purchase_demand WHERE id = ?', (demand_id,))
c.execute('DELETE FROM initial_stock WHERE material_code = ?', (material_code,))
conn.commit()
except Exception as e:
print(f"❌ 测试出错: {e}")
conn.rollback()
finally:
conn.close()
if __name__ == '__main__':
print("开始测试采购需求状态更新功能...")
print("=" * 50)
test_purchase_demand_ordered_update()
print("=" * 50)
print("测试完成!")