POS调用后端服务器动作生成KHQR - xiaohao0576/odoo-doc GitHub Wiki
在后端创建服务器动作
绑定的model_id是 pos.payment_method
设置本服务器动作的外部ID是bakong.khqr,便于前端调用
bank = record.journal_id.bank_account_id
currency = env.company.currency_id
merchant_name = bank.partner_id.name
amount = env.context['amount']
khqr_params = {
'qr_method':'emv_qr',
'amount': amount,
'currency': currency,
'debtor_partner': False,
'free_communication':'',
'structured_communication':''
}
khqr_value = bank._get_qr_vals(**khqr_params)
qr_params = {
'barcode_type':'QR',
'format':'png',
'width':200,
'height':200,
'humanreadable':1,
'quiet':0,
'value':khqr_value
}
khqr_code = env['ir.actions.report'].barcode(**qr_params)
khqr_url = 'data:image/png;base64,' + b64encode(khqr_code).decode()
formatted_amount = amount
if currency.name == 'USD':
formatted_amount = f'$ {amount:,.2f}'
if currency.name == 'KHR':
formatted_amount = f'៛ {amount:,.0f}'
action = {
'merchant_name': merchant_name,
'formatted_amount': formatted_amount,
'khqr_value': khqr_value,
'khqr_url' : khqr_url
}
前端POS调用后端的服务器动作
第一步,先找到服务器动作的ID
bakong_action = await posmodel.data.orm.rpc('/web/action/load',{'action_id':'bakong.khqr'})
第二步,根据找到的ID调用服务器动作,加上需要的参数
pm = window.posmodel.getOrder().payment_ids[0]
await posmodel.data.orm.rpc('/web/action/run',{'action_id':bakong_action.id, 'context':{'active_model':'pos.payment.method','active_id': pm.payment_method_id.id, 'amount':pm.amount}})