前几天做了一个对接odoo 系统的汇率问题
先在一个可以获取汇率的网站得到一个汇率
聚合数据
用的是odoo13企业版的源码
写的代码如下
# -*- coding: utf-8 -*-
import datetime, json, urllib
from odoo import models, fields, api, _
import requests, urllib
from urllib.parse import urlencode
class ResCompany(models.Model):
_inherit = 'res.company'
currency_provider = fields.Selection(selection_add=[('rmb', '人民币')])
def _parse_rmb_data(self, available_currencies):
url = 'http://web.juhe.cn:8080/finance/exchange/rmbquot'
params = {
'type': 1, #生成的数据格式不同
'bank': 3, #3代表中国银行,比较标准的
'key': '' #自己注册的key
}
params = urlencode(params)
try:
f = urllib.request.urlopen('%s?%s' % (url, params))
except:
return False
rates_dict = {}
nowapi_call = f.read()
parse_url = json.loads(nowapi_call)
available_currency_names = available_currencies.mapped('name')
for rec in available_currency_names:
if parse_url['result'][0].get(rec, None):
exchange = 100 / round(float(parse_url['result'][0].get(rec, None)['bankConversionPri']), 4) #代表1块的人民币对应多少的外币
rates_dict[rec] = (exchange, fields.Date.today())
rates_dict['人民币'] = (1.0, fields.Date.today())
return rates_dict
因为原生的里面没有添加人民币,故在字段里添加人民币的选项
_parse_rmb_data() 此方法是根据不同的服务来调用不同的方法 ,在这里写成 rmb,
在 odoo\addons\currency_rate_live\models\res_config_settings.py 的90行进行方法名拼接,故为,_parse_rmb_data(),因为在字段 currency_provider中定义为 (‘rmb’, ‘人民币’)
用此方法可以每天一更新汇率。