kboss/b/product/RebateAdd.dspy
2025-07-16 14:27:17 +08:00

93 lines
3.6 KiB
Plaintext

async def RebateAdd(ns={}):
"""
add reseller rebate
`id` VARCHAR(32) comment 'id',
`resellerid` VARCHAR(32) comment '分销商id',
`productid` VARCHAR(32) comment '产品id',
`level` int comment '级别',
`sale_amount` double(18,2) comment '最低销售额',
`rebate_rate` double(18,2) comment '返佣率',
`start_date` date comment '起效日期',
`end_date` date comment '失效日期',
:param ns:
:return:
"""
await get_user()
if not ns:
return {
"status": False,
"msg": "rebate data is empty, please check"
}
if not ns.get('end_date'):
ns['end_date'] = '9999-12-31'
ns_ctl = {
'id': uuid(),
'resellerid': ns.get('resellerid'),
'productid': ns.get('productid'),
'rebateid': uuid(),
'start_date': ns.get('start_date'),
'end_date': ns.get('end_date'),
}
db = DBPools()
async with db.sqlorContext('kboss') as sor:
try:
if ns.get('resellerid') and ns.get('productid'):
ns_exists_rebate = {
'resellerid': ns.get('resellerid'),
'productid': ns.get('productid'),
'sort': ['start_date'],
'del_flg': '0'
}
ns['del_flg'] = 0
same_productid = await sor.R('rp_rebate_ctl', ns_exists_rebate)
insert_date = datetime.datetime.strptime(ns['start_date'], '%Y-%m-%d').date()
for index, prd in enumerate(same_productid):
start_date = datetime.datetime.strptime(prd['start_date'], '%Y-%m-%d').date()
end_date = datetime.datetime.strptime(prd['end_date'], '%Y-%m-%d').date()
if index == 0 and insert_date < start_date:
ns_ctl['end_date'] = start_date
await sor.C('rp_rebate_ctl', ns_ctl)
break
if index == len(same_productid) - 1 and insert_date > start_date:
prd['end_date'] = ns_ctl.get('start_date')
await sor.U('rp_rebate_ctl', prd)
ns_ctl['end_date'] = '9999-12-31'
await sor.C('rp_rebate_ctl', ns_ctl)
break
if start_date < insert_date < end_date:
ns_ctl['end_date'] = prd.get('end_date')
prd['end_date'] = ns.get('start_date')
await sor.U('rp_rebate_ctl', prd)
await sor.C('rp_rebate_ctl', ns_ctl)
break
if start_date == insert_date:
return {
"status": False,
"msg": "Warning: The current date has already been configured"
}
if not same_productid:
ns_ctl['end_date'] = '9999-12-31'
await sor.C('rp_rebate_ctl', ns_ctl)
return {
"status": True,
"msg": "rebate ctl add success"
}
elif ns.get('rebateid'):
ns['id'] = uuid()
await sor.C('rp_rebate', ns)
return {
'status': True,
'msg': 'rebate add success'
}
except Exception as e:
raise e
return {
"status": False,
"msg": "rebate add failed"
}
ret = await RebateAdd(params_kw)
return ret