supplychain/wwwroot/api/ensure_supply_contract.dspy
yumoqing 3a36dc2400 feat: one-click ensure contract/agreement from supplier/distributor list
- api/ensure_distribution_agreement.dspy: check/create distribution_agreement for sub_reseller
- api/ensure_supply_contract.dspy: check/create supply_contract for supplier
- sub_distributors_list: toolbar '分销协议' now calls ensure endpoint (was PopupWindow)
- suppliers_list: add toolbar '供销协议' calling ensure endpoint
2026-07-10 10:37:17 +08:00

70 lines
2.4 KiB
Plaintext

"""Check if a supply_contract exists for supplier_id. If not, create one."""
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:
# Check existing
recs = await sor.sqlExe(
'SELECT id, contract_code, contract_name FROM supply_contracts WHERE supplier_id = ${sid}$ AND resellerid = ${rid}$ AND status = ${st}$',
{'sid': supplier_id, 'rid': userorgid, 'st': '1'}
)
if recs:
r = recs[0]
return {
'widgettype': 'Message',
'options': {
'title': '协议已存在',
'message': f'供销协议 {r.contract_code} {r.contract_name} 已存在',
'type': 'success',
'timeout': 3
}
}
# Get supplier name
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
# Generate contract_code
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
contract_code = f"{prefix}-{seq:04d}"
now = timestampstr()
contract_id = getID()
await sor.C('supply_contracts', {
'id': contract_id,
'resellerid': userorgid,
'supplier_id': supplier_id,
'contract_code': contract_code,
'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': 'Message',
'options': {
'title': '创建成功',
'message': f'已为{sup_name}创建供销协议 {contract_code}',
'type': 'success',
'timeout': 5
}
}