一键清零和单位转换

This commit is contained in:
2025-12-23 18:21:44 +08:00
parent 76b16df32c
commit c52d360cbb
2 changed files with 98 additions and 18 deletions

View File

@@ -86,45 +86,55 @@ class FabricManager(QMainWindow):
try:
with self.get_conn() as conn:
cursor = conn.execute('''
SELECT category, fabric_type, usage_per_piece, unit
SELECT model, category, fabric_type, usage_per_piece, unit
FROM garment_materials
WHERE style_number = ?
''', (style_number,))
rows = cursor.fetchall()
inserted = 0
for category, fabric_type, usage_per_piece, unit in rows:
for model, category, fabric_type, usage_per_piece, unit in rows:
if usage_per_piece == 0:
continue
# 获取该原料在入库时使用的单位
# 优先使用精确原料型号model如无型号则退回到分类名称兼容旧数据
raw_identifier = model if model else category
# 获取该原料在入库时使用的单位(最近一次入库)
stock_cursor = conn.execute('''
SELECT unit FROM fabric_stock_in
WHERE model = ?
ORDER BY purchase_date DESC
LIMIT 1
''', (category,))
''', (raw_identifier,))
stock_unit_row = stock_cursor.fetchone()
# 如果有入库记录,使用入库单位;否则使用原来的单位
total_usage = usage_per_piece * quantity * (1 + loss_rate)
# 如果有入库记录,则按入库单位扣减库存;必要时进行单位换算
if stock_unit_row:
stock_unit = stock_unit_row[0]
# 如果单位不同,需要转换
if unit != stock_unit:
consume_qty = self.convert_unit_value(usage_per_piece * quantity * (1 + loss_rate), unit, stock_unit, category)
# 单位不同,尝试进行单位转换(米/码/公斤互转依赖面料幅宽和克重)
consume_qty = self.convert_unit_value(
total_usage,
unit,
stock_unit,
fabric_model=model if model else None
)
final_unit = stock_unit
else:
consume_qty = usage_per_piece * quantity * (1 + loss_rate)
consume_qty = total_usage
final_unit = unit
else:
# 没有入库记录,使用原单位
consume_qty = usage_per_piece * quantity * (1 + loss_rate)
# 没有入库记录,只能按原单位记录消耗
consume_qty = total_usage
final_unit = unit
conn.execute('''
INSERT INTO fabric_consumption
(style_number, model, single_usage, quantity_made, loss_rate, consume_quantity, consume_date, unit)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
''', (style_number, category, usage_per_piece, quantity, loss_rate, consume_qty, datetime.now().strftime('%Y-%m-%d'), final_unit))
''', (style_number, raw_identifier, usage_per_piece, quantity, loss_rate, consume_qty, datetime.now().strftime('%Y-%m-%d'), final_unit))
inserted += 1
conn.commit()
if inserted > 0: