如何使用 Odoo 12 Post 数据到其他公司 API?
How to Post data to other company using their API using Odoo 12?
我有一家公司的 API,我必须从 odoo post 我的数据。
我想为此使用请求模块。但我不知道它是否适用于 Odoo。我必须 post 一些数据,例如用户名、密码、发票编号、总销售额等。
如何将数据发送到外部 API?数据必须以 JSON 格式发送。
从odoo向其他人发送数据的另一种方式是什么API?
我在发票表单中有一个按钮,当单击该按钮时,必须 posted 数据并获得响应消息。
这个我试过了。
# -*- coding: utf-8 -*-
import datetime
import requests
import logging
from odoo import models, fields, api
logging.basicConfig(format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%d-%m-%Y %H:%M:%S',
level=logging.DEBUG,
filename='logs.txt'
)
logger = logging.getLogger('ird')
class invoice_ird(models.Model):
_inherit = "account.invoice"
def send_bill_ird(self):
payload = {
'username': "Test_CBMS",
'password': "test@321",
'seller_pan': f"{self.company_id.vat}",
'buyer_pan': f"{self.partner_id.vat}",
'buyer_name': f"{self.partner_id.parent_id}",
'fiscal_year': "2076.077",
'invoice_number': f"{self.number}",
'invoice_date': f"{self.date_invoice}",
'total_sales': self.amount_total,
'taxable_sales_vat': self.amount_untaxed,
'vat': self.amount_tax,
'excisable_amount': 0,
'excise': 0,
'taxable_sales_hst': 0,
'hst': 0,
'amount_for_esf': 0,
'esf': 0,
'export_sales': 0,
'tax_exempted_sales': 0,
'isrealtime': True,
'datetimeclient': datetime.datetime.now(),
}
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
logger.info(f'Response Messages: {r}, {r.status_code}')
#print(r)
#print(r.text)
为什么我的 logs.txt 文件没有创建,如何查看我的响应消息?有什么最好的工作方式吗?
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="invoice_to_ird" model="ir.ui.view">
<field name="name">inovice.to.ird</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<xpath position="after" expr="//form[@class = 'o_invoice_form']/header/button[@name = 'action_invoice_draft']">
<button class="oe_highlight" name="send_bill_ird" type="action" string="Upload To IRD" attrs="{'invisible':[('state', '!=','paid')]}" />
</xpath>
</field>
</record>
</odoo>
你试图向他们发送字典而不是 json 数据。修复此更改
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
至
r = requests.post('http://103.1.92.174:9050/api/bill', data=json.dumps(payload))
我有一家公司的 API,我必须从 odoo post 我的数据。 我想为此使用请求模块。但我不知道它是否适用于 Odoo。我必须 post 一些数据,例如用户名、密码、发票编号、总销售额等。
如何将数据发送到外部 API?数据必须以 JSON 格式发送。
从odoo向其他人发送数据的另一种方式是什么API?
我在发票表单中有一个按钮,当单击该按钮时,必须 posted 数据并获得响应消息。 这个我试过了。
# -*- coding: utf-8 -*-
import datetime
import requests
import logging
from odoo import models, fields, api
logging.basicConfig(format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%d-%m-%Y %H:%M:%S',
level=logging.DEBUG,
filename='logs.txt'
)
logger = logging.getLogger('ird')
class invoice_ird(models.Model):
_inherit = "account.invoice"
def send_bill_ird(self):
payload = {
'username': "Test_CBMS",
'password': "test@321",
'seller_pan': f"{self.company_id.vat}",
'buyer_pan': f"{self.partner_id.vat}",
'buyer_name': f"{self.partner_id.parent_id}",
'fiscal_year': "2076.077",
'invoice_number': f"{self.number}",
'invoice_date': f"{self.date_invoice}",
'total_sales': self.amount_total,
'taxable_sales_vat': self.amount_untaxed,
'vat': self.amount_tax,
'excisable_amount': 0,
'excise': 0,
'taxable_sales_hst': 0,
'hst': 0,
'amount_for_esf': 0,
'esf': 0,
'export_sales': 0,
'tax_exempted_sales': 0,
'isrealtime': True,
'datetimeclient': datetime.datetime.now(),
}
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
logger.info(f'Response Messages: {r}, {r.status_code}')
#print(r)
#print(r.text)
为什么我的 logs.txt 文件没有创建,如何查看我的响应消息?有什么最好的工作方式吗?
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="invoice_to_ird" model="ir.ui.view">
<field name="name">inovice.to.ird</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<xpath position="after" expr="//form[@class = 'o_invoice_form']/header/button[@name = 'action_invoice_draft']">
<button class="oe_highlight" name="send_bill_ird" type="action" string="Upload To IRD" attrs="{'invisible':[('state', '!=','paid')]}" />
</xpath>
</field>
</record>
</odoo>
你试图向他们发送字典而不是 json 数据。修复此更改
r = requests.post('http://103.1.92.174:9050/api/bill', json=payload)
至
r = requests.post('http://103.1.92.174:9050/api/bill', data=json.dumps(payload))