kboss/kgadget/src/accounting/order_to_bill.py
2025-07-16 14:27:17 +08:00

58 lines
1.4 KiB
Python

from .const import *
from datetime import datetime
from appPublic.uniqueID import getID
from sqlor.dbpools import DBPools
async def _order2bill(sor, orderid):
sql = """select
og.orderid,
og.id as ordergoodsid,
o.customerid,
o.order_date,
o.business_op,
o.provider_orderid,
og.productid,
og.quantity,
og.providerid,
og.list_price,
og.discount,
og.price,
og.amount
from bz_order o, order_goods og
where o.id = og.orderid
and o.id = ${id}$
and o.order_status = '0'
"""
recs = await sor.sqlExe(sql, {'id':orderid})
if len(recs) == 0:
return
for r in recs:
ns = {
'id':getID(),
'customerid':r['customerid'],
'ordergoodsid':r['ordergoodsid'],
'orderid':r['orderid'],
'business_op':r['business_op'],
'provider_amt':r['list_price'] * r['quantity'],
'quantity':r['quantity'],
'amount':r['amount'],
'bill_date':r['order_date'],
'bill_timestamp':datetime.now(),
'bill_state':'0',
'productid':r['productid'],
'providerid':r['providerid'],
'provider_billid':None,
'create_at':datetime.now(),
'resourceid':None
}
await sor.C('bill', ns)
await sor.U('bz_order', {'id':orderid, 'order_status':'1'})
async def order2bill(orderid, sor=None):
if sor is None:
db = DBPools()
async with db.sqlorContext(DBNAME) as sor:
await _order2bill(sor, orderid)
else:
await _order2bill(sor, orderid)