fix: correct cost calculation for semi and product exports
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
@ -421,21 +421,16 @@ class MaterialBaseService:
|
||||
|
||||
semi_max_prices = {}
|
||||
for stock, base in list_semi:
|
||||
# 兼容如果有 unit_total_cost 字段则用,否则用 原料+人工
|
||||
if hasattr(stock, 'unit_total_cost') and stock.unit_total_cost is not None:
|
||||
price = float(stock.unit_total_cost)
|
||||
else:
|
||||
price = float(stock.raw_material_cost or 0) + float(stock.manual_cost or 0)
|
||||
# 半成品的单价直接取自 manual_cost 字段(单件总成本)
|
||||
price = float(stock.manual_cost or 0)
|
||||
|
||||
if price > semi_max_prices.get(base.id, 0):
|
||||
semi_max_prices[base.id] = price
|
||||
|
||||
product_max_prices = {}
|
||||
for stock, base in list_product:
|
||||
if hasattr(stock, 'unit_total_cost') and stock.unit_total_cost is not None:
|
||||
price = float(stock.unit_total_cost)
|
||||
else:
|
||||
price = float(stock.raw_material_cost or 0) + float(stock.manual_cost or 0)
|
||||
# 成品的单价直接取自 manual_cost 字段(单件总成本)
|
||||
price = float(stock.manual_cost or 0)
|
||||
|
||||
if price > product_max_prices.get(base.id, 0):
|
||||
product_max_prices[base.id] = price
|
||||
@ -486,11 +481,11 @@ class MaterialBaseService:
|
||||
# 处理半成品
|
||||
for stock, base in list_semi:
|
||||
qty = float(stock.stock_quantity or 0)
|
||||
# 使用该物料的全局最高单价作为成本
|
||||
highest_cost = get_highest_price(base.id)
|
||||
# 半成品的单价直接取自 manual_cost 字段(单件总成本)
|
||||
unit_cost = float(stock.manual_cost or 0)
|
||||
|
||||
total_val_excl = qty * highest_cost
|
||||
total_val_incl = qty * highest_cost # 半成品无税
|
||||
total_val_excl = qty * unit_cost
|
||||
total_val_incl = qty * unit_cost # 半成品无税
|
||||
|
||||
ident = stock.batch_number or stock.serial_number or stock.barcode or stock.sku
|
||||
|
||||
@ -503,21 +498,21 @@ class MaterialBaseService:
|
||||
"date": stock.production_date,
|
||||
"qty": qty,
|
||||
"avail": float(stock.available_quantity or 0),
|
||||
"price_excl": highest_cost,
|
||||
"price_excl": unit_cost,
|
||||
"total_val_excl": total_val_excl,
|
||||
"tax": 0.0,
|
||||
"price_incl": highest_cost,
|
||||
"price_incl": unit_cost,
|
||||
"total_val": total_val_incl
|
||||
})
|
||||
|
||||
# 处理成品
|
||||
for stock, base in list_product:
|
||||
qty = float(stock.stock_quantity or 0)
|
||||
# 使用该物料的全局最高单价作为成本
|
||||
highest_cost = get_highest_price(base.id)
|
||||
# 成品的单价直接取自 manual_cost 字段(单件总成本)
|
||||
unit_cost = float(stock.manual_cost or 0)
|
||||
|
||||
total_val_excl = qty * highest_cost
|
||||
total_val_incl = qty * highest_cost
|
||||
total_val_excl = qty * unit_cost
|
||||
total_val_incl = qty * unit_cost
|
||||
|
||||
ident = stock.serial_number or stock.barcode or stock.sku
|
||||
|
||||
@ -530,10 +525,10 @@ class MaterialBaseService:
|
||||
"date": stock.production_date,
|
||||
"qty": qty,
|
||||
"avail": float(stock.available_quantity or 0),
|
||||
"price_excl": highest_cost,
|
||||
"price_excl": unit_cost,
|
||||
"total_val_excl": total_val_excl,
|
||||
"tax": 0.0,
|
||||
"price_incl": highest_cost,
|
||||
"price_incl": unit_cost,
|
||||
"total_val": total_val_incl
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user