- agreement_discount_setting.ui: product list with UiFloat discount inputs - contract_discount_setting.ui: same for supply contracts - get_agreement_discount_items.dspy + Python function - get_contract_discount_items.dspy + Python function - save_agreement_discount.dspy: create/update/delete items on discount change - save_contract_discount.dspy: same for supply contracts - Updated distribution_agreements_list and supply_contracts_list subtables
28 lines
1.3 KiB
Plaintext
28 lines
1.3 KiB
Plaintext
"""Return products with discount status for a supply contract."""
|
|
contract_id = params_kw.get('contract_id') or params_kw.get('id')
|
|
if not contract_id:
|
|
return []
|
|
userorgid = (await get_userorgid()) or '0'
|
|
|
|
async with DBPools().sqlorContext('sage') as sor:
|
|
rows = await sor.sqlExe(
|
|
"""SELECT p.id as productid, p.product_name, p.product_code, p.price as sale_price,
|
|
pc.id as category_id, pc.name as category_name,
|
|
sci.id as item_id, sci.discount
|
|
FROM product p
|
|
LEFT JOIN product_category pc ON p.category_id = pc.id
|
|
LEFT JOIN supplychain.supply_contract_items sci ON sci.productid = p.id AND sci.contract_id = ${cid}$
|
|
WHERE p.status = '1' AND p.org_id = ${oid}$
|
|
ORDER BY pc.sort_order, pc.name, p.sort_order, p.product_name""",
|
|
{'cid': contract_id, 'oid': userorgid}
|
|
)
|
|
result = []
|
|
for r in rows:
|
|
result.append({
|
|
'productid': r.productid, 'product_name': r.product_name,
|
|
'product_code': r.product_code, 'sale_price': str(r.sale_price) if r.sale_price else '',
|
|
'category_id': r.category_id or '', 'category_name': r.category_name or '',
|
|
'item_id': r.item_id or '', 'discount': str(r.discount) if r.discount else '1.0',
|
|
})
|
|
return result
|