accounting/accounting/accountingnode.py
2025-07-16 14:32:14 +08:00

88 lines
2.4 KiB
Python

from .const import *
from appPublic.log import debug
from sqlor.dbpools import DBPools
async def get_parent_orgid(sor, orgid):
sql = """select a.id from organization a, organization b
where b.parentid = a.id
and b.id = ${orgid}$"""
recs = await sor.sqlExe(sql, {'orgid':orgid})
if len(recs) == 0:
return None
return recs[0]['id']
async def get_offer_orgid(sor, bid_orgid, providerid, productid, curdate):
sql = """select a.offer_orgid from saleprotocol a, product_salemode b
where a.id = b.protocolid
and a.bid_orgid = ${bid_orgid}$
and b.providerid = ${providerid}$
and b.productid in (${productid}$, '*')
and a.start_date <= ${curdate}$
and a.end_date > ${curdate}$
"""
recs = await sor.sqlExe(sql, {
'bid_orgid':bid_orgid,
'providerid':providerid,
'productid':productid,
'curdate':curdate
})
if len(recs) == 0:
return None
rec = recs[0]
return rec['offer_orgid']
async def get_offer_orgs(sor, bid_orgid, providerid, productid, curdate):
offer_orgid = await get_offer_orgid(sor, bid_orgid, providerid,
productid, curdate)
if offer_orgid is None or offer_orgid == providerid:
return []
myids = [offer_orgid]
orgs = await get_offer_orgs(sor, offer_orgid,
providerid,
productid,
curdate)
return orgs + myids
async def get_ancestor_orgs(sor, orgid):
id = await get_parent_orgid(sor, orgid)
if not id:
return []
ret = await get_ancestor_orgs(sor, id)
return ret + [id]
async def get_orgtypes(sor, orgid):
sql = "select orgtypeid from orgtypes where orgid = ${orgid}$"
recs = await sor.sqlExe(sql, {'orgid':orgid})
return [r.orgtypeid for r in recs]
async def get_accounting_nodes(sor, customerid):
"""
gt all accounting organization for transactes customer orgid
"""
mytypes = await get_orgtypes(sor, customerid)
is_c = False
for t in mytypes:
if t in ['customer', 'agencycustomer', 'personalcustomer']:
is_c = True
break
if not is_c:
debug(f'{customerid=} is not a customer organzition')
return []
sql = """select a.id from organization a, organization b
where b.parentid = a.id
and b.id = ${customerid}$
"""
recs = await sor.sqlExe(sql, {'customerid':customerid})
if len(recs) == 0:
debug(f'{customerid=} not found is organziation table')
return ['0']
return []
ret = await get_ancestor_orgs(sor, recs[0]['id'])
ret.append(recs[0]['id'])
return ret