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