- 增强3个CRUD JSON配置:过滤器、子表关联、下拉选择alters - 修复9个API dspy文件:移除违规import,改用init.py函数直接调用 - 新增2个搜索API:get_search_sub_reseller_id、get_search_agreement_id - 自动生成分销商编号(SD-YYYYMMDD-NNNN)和协议编号(DA-YYYYMMDD-NNNN) - 级联删除:删除分销商时级联删除协议及明细,删除协议时级联删除明细 - 更新load_path.py注册新API路径
67 lines
1.5 KiB
Plaintext
67 lines
1.5 KiB
Plaintext
|
|
ns = params_kw.copy()
|
|
for k,v in ns.items():
|
|
if v == 'NaN' or v == 'null':
|
|
ns[k] = None
|
|
id = params_kw.id
|
|
if not id or len(id) > 32:
|
|
id = uuid()
|
|
ns['id'] = id
|
|
|
|
|
|
|
|
userorgid = await get_userorgid()
|
|
if not userorgid:
|
|
return {
|
|
"widgettype":"Error",
|
|
"options":{
|
|
"title":"Authorization Error",
|
|
"timeout":3,
|
|
"cwidth":16,
|
|
"cheight":9,
|
|
"message":"Please login"
|
|
}
|
|
}
|
|
ns['resellerid'] = userorgid
|
|
|
|
# Auto-generate agreement_code if not provided
|
|
if not ns.get('agreement_code'):
|
|
from datetime import datetime as _dt
|
|
_prefix = f"DA-{_dt.now().strftime('%Y%m%d')}"
|
|
async with DBPools().sqlorContext(get_module_dbname('supplychain')) as _sor:
|
|
_recs = await _sor.sqlExe(
|
|
"SELECT COUNT(*) as cnt FROM distribution_agreements WHERE resellerid = ${rid}$ AND agreement_code LIKE ${p}$",
|
|
{"rid": userorgid, "p": _prefix + "%"}
|
|
)
|
|
_seq = (_recs[0].cnt if _recs else 0) + 1
|
|
ns['agreement_code'] = f"{_prefix}-{_seq:04d}"
|
|
ns['created_by'] = userorgid
|
|
ns['created_at'] = timestampstr()
|
|
ns['updated_at'] = timestampstr()
|
|
|
|
db = DBPools()
|
|
dbname = get_module_dbname('supplychain')
|
|
async with db.sqlorContext(dbname) as sor:
|
|
r = await sor.C('distribution_agreements', ns.copy())
|
|
return {
|
|
"widgettype":"Message",
|
|
"options":{
|
|
"cwidth":16,
|
|
"cheight":9,
|
|
"title":"Add Success",
|
|
"timeout":3,
|
|
"message":"ok"
|
|
}
|
|
}
|
|
|
|
return {
|
|
"widgettype":"Error",
|
|
"options":{
|
|
"title":"Add Error",
|
|
"cwidth":16,
|
|
"cheight":9,
|
|
"timeout":3,
|
|
"message":"failed"
|
|
}
|
|
}
|