Relative ../ paths inside PopupWindow DataViewer resolve without module prefix. Use absolute /supplychain/ paths instead.
49 lines
1.9 KiB
Plaintext
49 lines
1.9 KiB
Plaintext
"""Check/create supply_contract for supplier_id, then show CRUD page."""
|
|
supplier_id = params_kw.get('supplier_id')
|
|
if not supplier_id:
|
|
return {'widgettype': 'Error', 'options': {'title': 'Error', 'message': 'Missing supplier_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:
|
|
recs = await sor.sqlExe(
|
|
'SELECT id FROM supply_contracts WHERE supplier_id = ${sid}$ AND resellerid = ${rid}$ AND status = ${st}$',
|
|
{'sid': supplier_id, 'rid': userorgid, 'st': '1'}
|
|
)
|
|
if not recs:
|
|
sub = await sor.sqlExe(
|
|
'SELECT supplier_name FROM suppliers WHERE id = ${sid}$',
|
|
{'sid': supplier_id}
|
|
)
|
|
sup_name = sub[0].supplier_name if sub else supplier_id
|
|
prefix = f"SC-{datetime.datetime.now().strftime('%Y%m%d')}"
|
|
cnt_recs = await sor.sqlExe(
|
|
'SELECT COUNT(*) as cnt FROM supply_contracts WHERE resellerid = ${rid}$ AND contract_code LIKE ${p}$',
|
|
{'rid': userorgid, 'p': prefix + '%'}
|
|
)
|
|
seq = (cnt_recs[0].cnt if cnt_recs else 0) + 1
|
|
now = timestampstr()
|
|
await sor.C('supply_contracts', {
|
|
'id': getID(),
|
|
'resellerid': userorgid,
|
|
'supplier_id': supplier_id,
|
|
'contract_code': f"{prefix}-{seq:04d}",
|
|
'contract_name': f'{sup_name}供销协议',
|
|
'start_date': curDateString(),
|
|
'status': '1',
|
|
'default_discount': '1.0000',
|
|
'created_by': userorgid,
|
|
'created_at': now,
|
|
'updated_at': now,
|
|
})
|
|
|
|
return {
|
|
'widgettype': 'DataViewer',
|
|
'options': {
|
|
'url': f'/supplychain/supply_contracts_list?supplier_id={supplier_id}&_webbricks_=1'
|
|
}
|
|
}
|