supplychain/wwwroot/update_reseller_settlement.dspy

79 lines
2.4 KiB
Plaintext

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from accounting.settle import SettleAccounting, get_subjectid
from accounting.accounting_config import AccountingOrgs
ns = params_kw.copy()
record_id = ns.get('id', '')
remark = ns.get('remark', '')
payment_method = ns.get('payment_method', '')
if not record_id:
return json.dumps({'success': False, 'error': '缺少记录ID'}, ensure_ascii=False)
sc_dbname = get_module_dbname('supplychain')
acc_dbname = get_module_dbname('accounting')
userorgid = await get_userorgid()
# 查询supplychain_accounting记录
db = DBPools()
async with db.sqlorContext(sc_dbname) as sor:
recs = await sor.sqlExe("""
SELECT sa.*, sp.supplier_name, sr.sub_reseller_name
FROM supplychain_accounting sa
LEFT JOIN suppliers sp ON sa.supplier_id = sp.id COLLATE utf8mb4_unicode_ci
LEFT JOIN sub_resellers sr ON sa.sub_distributor_id = sr.id COLLATE utf8mb4_unicode_ci
WHERE sa.id = ${record_id}$
""", {'record_id': record_id})
if not recs:
return json.dumps({'success': False, 'error': '记录不存在'}, ensure_ascii=False)
rec = recs[0]
# 构建settle_log
settle_log = {
'accounting_orgid': userorgid,
'providerid': rec.supplier_id or '',
'sub_distributor_id': rec.sub_distributor_id or '',
'sale_mode': '0',
'settle_date': str(rec.sale_date or curDateString()),
'settle_amt': float(rec.dist_amount or 0),
'business_op': '分销商结算',
'remark': remark
}
# 调用SettleAccounting
try:
async with db.sqlorContext(acc_dbname) as acc_sor:
sa = SettleAccounting(settle_log)
await sa.accounting(acc_sor)
# 更新sales_ledger结算状态
async with db.sqlorContext(sc_dbname) as sc_sor:
await sc_sor.sqlExe("""
UPDATE sales_ledger
SET settlement_status = '1', updated_at = NOW()
WHERE productid = ${productid}$
AND sub_reseller_id = ${sub_distributor_id}$
AND sale_date = ${sale_date}$
""", {
'productid': rec.productid,
'sub_distributor_id': rec.sub_distributor_id,
'sale_date': str(rec.sale_date)
})
debug(f'reseller_settlement: settled {record_id}, amt={rec.dist_amount}')
return json.dumps({
'success': True,
'message': f'结算成功,金额: {rec.dist_amount}',
'settle_id': sa.settleid,
'bill_id': sa.billid
}, ensure_ascii=False, default=str)
except Exception as e:
debug(f'reseller_settlement error: {format_exc()}')
return json.dumps({'success': False, 'error': f'结算失败: {str(e)}'}, ensure_ascii=False)