feat(supplier): 供应商成本补平台内供应商供货价
- 优先 product_supplier_mapping.supply_price(统一供货价,平台内/外部) - 无供货价则外部供应商走合同折扣 supply_contract_items - 无映射回退 product.providerid
This commit is contained in:
parent
1cf2f62d74
commit
d423f4ffd2
@ -1442,37 +1442,60 @@ class ProductManager:
|
|||||||
pass
|
pass
|
||||||
amount = original_amount * discount
|
amount = original_amount * discount
|
||||||
|
|
||||||
# 3. 供应商折扣(supplychain 模块,成本侧)→ cost
|
# 3. 供应商成本(supplychain 模块,成本侧)→ cost
|
||||||
# 供应商折扣是平台进货折扣,与客户折扣独立,不取 min。
|
# 供应商成本是平台进货成本,与客户折扣独立,不取 min。
|
||||||
|
# 优先 product_supplier_mapping 供货价 supply_price(平台内/外部统一);
|
||||||
|
# 无供货价则按外部供应商合同折扣 supply_contract_items 算。
|
||||||
cost = original_amount
|
cost = original_amount
|
||||||
try:
|
try:
|
||||||
supplier_id = product.get('providerid') or ''
|
dbname = self._get_dbname()
|
||||||
if not supplier_id:
|
mapping = None
|
||||||
# 从 supplychain 的产品→供应商映射查首选供应商
|
async with DBPools().sqlorContext(dbname) as sor:
|
||||||
dbname = self._get_dbname()
|
maps = await sor.R('product_supplier_mapping', {'product_id': pid})
|
||||||
async with DBPools().sqlorContext(dbname) as sor:
|
if maps:
|
||||||
maps = await sor.R('product_supplier_mapping',
|
pref = [m for m in maps
|
||||||
{'product_id': pid})
|
if str(getattr(m, 'is_preferred', '')) == '1'] or maps
|
||||||
if maps:
|
mapping = pref[0]
|
||||||
pref = [m for m in maps
|
|
||||||
if str(getattr(m, 'is_preferred', '')) == '1'] or maps
|
if mapping is not None:
|
||||||
supplier_id = (getattr(pref[0], 'external_supplier_id', '')
|
# 首选供应商映射:优先直接供货价
|
||||||
or getattr(pref[0], 'supplier_org_id', '')
|
supply_price = getattr(mapping, 'supply_price', None)
|
||||||
or '')
|
if supply_price not in (None, '', 0):
|
||||||
if supplier_id:
|
cost = float(supply_price)
|
||||||
sc = await env.calculate_sale_amounts(None, {
|
else:
|
||||||
'resellerid': resellerid,
|
supplier_id = (getattr(mapping, 'external_supplier_id', '')
|
||||||
'supplier_id': supplier_id,
|
or product.get('providerid') or '')
|
||||||
'productid': pid,
|
if supplier_id:
|
||||||
'prodtypeid': product.get('category_id') or '',
|
sc = await env.calculate_sale_amounts(None, {
|
||||||
'quantity': 1,
|
'resellerid': resellerid,
|
||||||
'unit_price': original_amount,
|
'supplier_id': supplier_id,
|
||||||
})
|
'productid': pid,
|
||||||
if sc:
|
'prodtypeid': product.get('category_id') or '',
|
||||||
sc_data = json.loads(sc) if isinstance(sc, str) else sc
|
'quantity': 1,
|
||||||
sc_data = sc_data.get('data', {}) if isinstance(sc_data, dict) else {}
|
'unit_price': original_amount,
|
||||||
supply_discount = float(sc_data.get('supply_discount', 1.0) or 1.0)
|
})
|
||||||
cost = original_amount * supply_discount
|
if sc:
|
||||||
|
sc_data = json.loads(sc) if isinstance(sc, str) else sc
|
||||||
|
sc_data = sc_data.get('data', {}) if isinstance(sc_data, dict) else {}
|
||||||
|
supply_discount = float(sc_data.get('supply_discount', 1.0) or 1.0)
|
||||||
|
cost = original_amount * supply_discount
|
||||||
|
else:
|
||||||
|
# 无映射,回退 product.providerid(外部供应商走合同折扣)
|
||||||
|
supplier_id = product.get('providerid') or ''
|
||||||
|
if supplier_id:
|
||||||
|
sc = await env.calculate_sale_amounts(None, {
|
||||||
|
'resellerid': resellerid,
|
||||||
|
'supplier_id': supplier_id,
|
||||||
|
'productid': pid,
|
||||||
|
'prodtypeid': product.get('category_id') or '',
|
||||||
|
'quantity': 1,
|
||||||
|
'unit_price': original_amount,
|
||||||
|
})
|
||||||
|
if sc:
|
||||||
|
sc_data = json.loads(sc) if isinstance(sc, str) else sc
|
||||||
|
sc_data = sc_data.get('data', {}) if isinstance(sc_data, dict) else {}
|
||||||
|
supply_discount = float(sc_data.get('supply_discount', 1.0) or 1.0)
|
||||||
|
cost = original_amount * supply_discount
|
||||||
except Exception:
|
except Exception:
|
||||||
cost = original_amount
|
cost = original_amount
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user