fix: 供销协议折扣明细按资源供应方过滤产品
正确链路: product.resource_ref_id → product_resource_supplier.supplier_org_id JOIN product_resource_supplier 按 supplier_org_id 过滤,而非 product_supplier_mapping
This commit is contained in:
parent
dbf6946b16
commit
f5794c9348
Binary file not shown.
@ -995,51 +995,39 @@ async def get_agreement_discount_items(request):
|
|||||||
async def get_contract_discount_items(request):
|
async def get_contract_discount_items(request):
|
||||||
"""Return products with discount status for a supply contract.
|
"""Return products with discount status for a supply contract.
|
||||||
|
|
||||||
Products are linked to suppliers via product_supplier_mapping, not org_id.
|
Products link to suppliers via: product → resource_ref_id →
|
||||||
|
product_resource_supplier.supplier_org_id.
|
||||||
"""
|
"""
|
||||||
params_kw = getattr(request._run_ns, 'params_kw', {}) or {}
|
params_kw = getattr(request._run_ns, 'params_kw', {}) or {}
|
||||||
contract_id = params_kw.get('contract_id') or params_kw.get('id')
|
contract_id = params_kw.get('contract_id') or params_kw.get('id')
|
||||||
if not contract_id:
|
if not contract_id:
|
||||||
return []
|
return []
|
||||||
env = request._run_ns
|
env = request._run_ns
|
||||||
# Get supplier info from contract
|
# Get supplier orgid from contract
|
||||||
supplier_orgid = None
|
supplier_orgid = None
|
||||||
supplier_id = None
|
|
||||||
async with get_sor_context(env, 'supplychain') as sor:
|
async with get_sor_context(env, 'supplychain') as sor:
|
||||||
rows = await sor.sqlExe(
|
rows = await sor.sqlExe(
|
||||||
"SELECT s.orgid, s.id as supplier_id FROM suppliers s "
|
"SELECT s.orgid FROM suppliers s "
|
||||||
"JOIN supply_contracts sc ON sc.supplier_id = s.id "
|
"JOIN supply_contracts sc ON sc.supplier_id = s.id "
|
||||||
"WHERE sc.id = ${cid}$",
|
"WHERE sc.id = ${cid}$",
|
||||||
{'cid': contract_id}
|
{'cid': contract_id}
|
||||||
)
|
)
|
||||||
if rows:
|
if rows:
|
||||||
supplier_orgid = rows[0].orgid
|
supplier_orgid = rows[0].orgid
|
||||||
supplier_id = rows[0].supplier_id
|
|
||||||
if not supplier_orgid:
|
if not supplier_orgid:
|
||||||
return []
|
return []
|
||||||
# Get product IDs mapped to this supplier via product_supplier_mapping
|
# Get products from sage — join through product_resource_supplier
|
||||||
product_ids = set()
|
|
||||||
async with get_sor_context(env, 'supplychain') as sor:
|
|
||||||
mappings = await sor.sqlExe(
|
|
||||||
"SELECT product_id FROM product_supplier_mapping "
|
|
||||||
"WHERE status = '1' AND (supplier_org_id = ${oid}$ OR external_supplier_id = ${sid}$)",
|
|
||||||
{'oid': supplier_orgid, 'sid': supplier_id}
|
|
||||||
)
|
|
||||||
for m in mappings:
|
|
||||||
product_ids.add(m.product_id)
|
|
||||||
if not product_ids:
|
|
||||||
return []
|
|
||||||
# Get products from sage
|
|
||||||
products = []
|
products = []
|
||||||
async with get_sor_context(env, 'sage') as sor:
|
async with get_sor_context(env, 'sage') as sor:
|
||||||
rows = await sor.sqlExe(
|
rows = await sor.sqlExe(
|
||||||
"SELECT p.id as productid, p.product_name, p.product_code, p.price as sale_price, "
|
"SELECT DISTINCT p.id as productid, p.product_name, p.product_code, "
|
||||||
"pc.id as category_id, pc.name as category_name "
|
"p.price as sale_price, pc.id as category_id, pc.name as category_name "
|
||||||
"FROM product p "
|
"FROM product p "
|
||||||
|
"JOIN product_resource_supplier prs ON p.resource_ref_id = prs.product_resource_id "
|
||||||
"LEFT JOIN product_category pc ON p.category_id = pc.id "
|
"LEFT JOIN product_category pc ON p.category_id = pc.id "
|
||||||
"WHERE p.status = '1' AND p.id IN (" + ",".join(repr(pid) for pid in product_ids) + ") "
|
"WHERE p.status = '1' AND prs.supplier_org_id = ${oid}$ AND prs.status = '1' "
|
||||||
"ORDER BY pc.sort_order, pc.name, p.sort_order, p.product_name",
|
"ORDER BY pc.sort_order, pc.name, p.sort_order, p.product_name",
|
||||||
{}
|
{'oid': supplier_orgid}
|
||||||
)
|
)
|
||||||
for r in rows:
|
for r in rows:
|
||||||
products.append({
|
products.append({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user