supplychain/wwwroot/get_reseller_settlement.dspy

88 lines
2.5 KiB
Plaintext

ns = params_kw.copy()
ns['page'] = ns.get('page') or 1
ns['sort'] = ns.get('sort') or 'sale_date'
date_start = ns.get('date_start', '')
date_end = ns.get('date_end', '')
sub_reseller_id = ns.get('sub_reseller_id', '')
settlement_status = ns.get('settlement_status', '')
sc_dbname = get_module_dbname('supplychain')
userorgid = await get_userorgid()
# 查询supplychain_accounting中该分销商的记录, 关联sales_ledger结算状态
where = "WHERE sa.resellerid = ${userorgid}$"
sql_params = {'userorgid': userorgid}
if date_start:
where += " AND sa.sale_date >= ${date_start}$"
sql_params['date_start'] = date_start
if date_end:
where += " AND sa.sale_date <= ${date_end}$"
sql_params['date_end'] = date_end
if sub_reseller_id:
where += " AND sa.sub_distributor_id = ${sub_reseller_id}$"
sql_params['sub_reseller_id'] = sub_reseller_id
sql = f"""
SELECT
sa.id,
sa.sub_distributor_id,
sr.sub_reseller_name as sub_reseller_id_text,
sa.sale_date,
sa.sale_date as settlement_period,
p.name as product_name,
sa.productid,
sa.quantity,
sa.dist_amount as amount,
sa.supply_amount,
COALESCE(sl.settlement_status, '0') as settlement_status,
sa.source_type,
sa.source_id
FROM supplychain_accounting sa
LEFT JOIN product p ON sa.productid = p.id COLLATE utf8mb4_unicode_ci
LEFT JOIN sub_resellers sr ON sa.sub_distributor_id = sr.id COLLATE utf8mb4_unicode_ci
LEFT JOIN sales_ledger sl ON sl.productid = sa.productid COLLATE utf8mb4_unicode_ci
AND sl.sub_reseller_id = sa.sub_distributor_id COLLATE utf8mb4_unicode_ci
AND sl.sale_date = sa.sale_date
{where}
ORDER BY sa.sale_date DESC, sa.id
"""
if settlement_status:
sql = f"""
SELECT * FROM ({sql}) t WHERE t.settlement_status = ${settlement_status}$
"""
sql_params['settlement_status'] = settlement_status
db = DBPools()
async with db.sqlorContext(sc_dbname) as sor:
recs = await sor.sqlExe(sql, sql_params)
rows = []
for r in (recs or []):
rows.append({
'id': r.id,
'sub_reseller_id': r.sub_distributor_id or '',
'sub_reseller_id_text': r.sub_reseller_id_text or '',
'settlement_period': str(r.sale_date or ''),
'product_name': r.product_name or '',
'amount': float(r.amount or 0),
'settlement_status': r.settlement_status or '0',
'settlement_date': '',
'payment_method': '',
'reference_no': r.source_id or '',
'remark': r.source_type or '',
'created_at': str(r.sale_date or '')
})
total = len(rows)
debug(f'get_reseller_settlement: {total} records')
return json.dumps({
'success': True,
'total': total,
'rows': rows
}, ensure_ascii=False, default=str)