79 lines
2.4 KiB
Plaintext
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)
|