kboss/b/bill/finance_settlement_list.dspy
2026-06-18 17:48:01 +08:00

71 lines
2.6 KiB
Plaintext

# -*- coding: utf-8 -*-
"""财务结算单列表查询。"""
DBNAME = 'kboss'
def _parse_page(ns, default_page=1, default_size=20, max_size=200):
try:
current_page = int(ns.get('current_page', default_page) or default_page)
except (TypeError, ValueError):
current_page = default_page
try:
page_size = int(ns.get('page_size', default_size) or default_size)
except (TypeError, ValueError):
page_size = default_size
current_page = max(1, current_page)
page_size = max(1, min(page_size, max_size))
return current_page, page_size, (current_page - 1) * page_size
async def finance_settlement_list(ns={}):
accounting_orgid = ns.get('accounting_orgid')
if not accounting_orgid:
return {'status': False, 'msg': '缺少 accounting_orgid'}
current_page, page_size, offset = _parse_page(ns)
conditions = ["accounting_orgid=${accounting_orgid}$", "del_flg='0'"]
params = {'accounting_orgid': accounting_orgid}
for key in ('counterparty_type', 'counterparty_orgid', 'status', 'period_type'):
if ns.get(key):
conditions.append('%s=${%s}$' % (key, key))
params[key] = ns[key]
if ns.get('start_date'):
conditions.append('period_end >= ${start_date}$')
params['start_date'] = ns['start_date']
if ns.get('end_date'):
conditions.append('period_start <= ${end_date}$')
params['end_date'] = ns['end_date']
where_sql = ' AND '.join(conditions)
db = DBPools()
async with db.sqlorContext(DBNAME) as sor:
try:
count_rows = await sor.sqlExe(
'SELECT COUNT(*) AS total_count FROM finance_settlement WHERE %s' % where_sql,
params,
)
total_count = count_rows[0]['total_count'] if count_rows else 0
sql = """
SELECT *
FROM finance_settlement
WHERE %s
ORDER BY period_end DESC, create_at DESC
LIMIT %d OFFSET %d
""" % (where_sql, page_size, offset)
rows = await sor.sqlExe(sql, params)
return {
'status': True,
'msg': 'ok',
'data': {
'total_count': total_count,
'current_page': current_page,
'page_size': page_size,
'items': rows,
},
}
except Exception as e:
return {'status': False, 'msg': '查询结算单失败, %s' % str(e)}
ret = await finance_settlement_list(params_kw)
return ret