supplychain/wwwroot/api/ensure_distribution_agreement.dspy
yumoqing 0c718cf461 fix: fix column name + ensure dspy now returns CRUD page after create
- sub_resellers column is sub_reseller_name (not sub_dist_name)
- After ensure, return UrlWidget loading CRUD list filtered by id
- Popup size increased for CRUD page viewing
2026-07-10 11:11:21 +08:00

59 lines
2.2 KiB
Plaintext

"""Check/create distribution_agreement for sub_reseller_id, then show CRUD page."""
sub_reseller_id = params_kw.get('sub_reseller_id')
if not sub_reseller_id:
return {'widgettype': 'Error', 'options': {'title': 'Error', 'message': 'Missing sub_reseller_id', 'timeout': 3}}
userorgid = await get_userorgid()
if not userorgid:
return {'widgettype': 'Error', 'options': {'title': 'Auth Error', 'message': 'Please login', 'timeout': 3}}
dbname = get_module_dbname('supplychain')
async with DBPools().sqlorContext(dbname) as sor:
# Check existing
recs = await sor.sqlExe(
'SELECT id FROM distribution_agreements WHERE sub_reseller_id = ${sid}$ AND resellerid = ${rid}$ AND status = ${st}$',
{'sid': sub_reseller_id, 'rid': userorgid, 'st': '1'}
)
if not recs:
# Get sub_reseller name
sub = await sor.sqlExe(
'SELECT sub_reseller_name FROM sub_resellers WHERE id = ${sid}$',
{'sid': sub_reseller_id}
)
sub_name = sub[0].sub_reseller_name if sub else sub_reseller_id
# Generate agreement_code
prefix = f"DA-{datetime.datetime.now().strftime('%Y%m%d')}"
cnt_recs = await sor.sqlExe(
'SELECT COUNT(*) as cnt FROM distribution_agreements WHERE resellerid = ${rid}$ AND agreement_code LIKE ${p}$',
{'rid': userorgid, 'p': prefix + '%'}
)
seq = (cnt_recs[0].cnt if cnt_recs else 0) + 1
agreement_code = f"{prefix}-{seq:04d}"
now = timestampstr()
agreement_id = getID()
await sor.C('distribution_agreements', {
'id': agreement_id,
'resellerid': userorgid,
'sub_reseller_id': sub_reseller_id,
'agreement_code': agreement_code,
'agreement_name': f'{sub_name}分销协议',
'start_date': curDateString(),
'status': '1',
'default_discount': '1.0000',
'created_by': userorgid,
'created_at': now,
'updated_at': now,
})
# Return CRUD page embedded in popup
return {
'widgettype': 'UrlWidget',
'options': {
'url': f'../distribution_agreements_list?sub_reseller_id={sub_reseller_id}',
'width': '100%',
'height': '100%'
}
}