diff --git a/wwwroot/api/ensure_distribution_agreement.dspy b/wwwroot/api/ensure_distribution_agreement.dspy index 4846229..393e388 100644 --- a/wwwroot/api/ensure_distribution_agreement.dspy +++ b/wwwroot/api/ensure_distribution_agreement.dspy @@ -1,4 +1,4 @@ -"""Check if a distribution_agreement exists for sub_reseller_id. If not, create one.""" +"""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}} @@ -11,59 +11,48 @@ dbname = get_module_dbname('supplychain') async with DBPools().sqlorContext(dbname) as sor: # Check existing recs = await sor.sqlExe( - 'SELECT id, agreement_code, agreement_name FROM distribution_agreements WHERE sub_reseller_id = ${sid}$ AND resellerid = ${rid}$ AND status = ${st}$', + '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 recs: - r = recs[0] - return { - 'widgettype': 'Message', - 'options': { - 'title': '协议已存在', - 'message': f'分销协议 {r.agreement_code} {r.agreement_name} 已存在', - 'type': 'success', - 'timeout': 3 - } - } + 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 - # Get sub_reseller info for name - sub = await sor.sqlExe( - 'SELECT sub_dist_name FROM sub_resellers WHERE id = ${sid}$', - {'sid': sub_reseller_id} - ) - sub_name = sub[0].sub_dist_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}" - # 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, + }) - 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 { - 'widgettype': 'Message', - 'options': { - 'title': '创建成功', - 'message': f'已为{sub_name}创建分销协议 {agreement_code}', - 'type': 'success', - 'timeout': 5 - } +# 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%' } +} diff --git a/wwwroot/api/ensure_supply_contract.dspy b/wwwroot/api/ensure_supply_contract.dspy index 4b88fe6..b69513d 100644 --- a/wwwroot/api/ensure_supply_contract.dspy +++ b/wwwroot/api/ensure_supply_contract.dspy @@ -1,4 +1,4 @@ -"""Check if a supply_contract exists for supplier_id. If not, create one.""" +"""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}} @@ -11,59 +11,48 @@ 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}$', + 'SELECT id 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 - } - } + if not recs: + # 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 - # 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}" - # 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, + }) - 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 - } +# Return CRUD page embedded in popup +return { + 'widgettype': 'UrlWidget', + 'options': { + 'url': f'../supply_contracts_list?supplier_id={supplier_id}', + 'width': '100%', + 'height': '100%' } +} diff --git a/wwwroot/sub_distributors_list/index.ui b/wwwroot/sub_distributors_list/index.ui index 9ea0a37..48d1a54 100644 --- a/wwwroot/sub_distributors_list/index.ui +++ b/wwwroot/sub_distributors_list/index.ui @@ -325,8 +325,8 @@ "target": "PopupWindow", "popup_options": { "title": "分销协议", - "height": "200px", - "width": "400px" + "height": "80%", + "width": "85%" }, "params_mapping": { "mapping": {"id": "sub_reseller_id"}, diff --git a/wwwroot/suppliers_list/index.ui b/wwwroot/suppliers_list/index.ui index b3f940b..1ba1f04 100644 --- a/wwwroot/suppliers_list/index.ui +++ b/wwwroot/suppliers_list/index.ui @@ -457,8 +457,8 @@ "target": "PopupWindow", "popup_options": { "title": "供销协议", - "height": "200px", - "width": "400px" + "height": "80%", + "width": "85%" }, "params_mapping": { "mapping": {"id": "supplier_id"},