63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import logging
|
|
|
|
from werkzeug.urls import url_join
|
|
|
|
from odoo import _, fields, models
|
|
from odoo.addons.account_edi_proxy_client.models.account_edi_proxy_user import AccountEdiProxyError
|
|
from odoo.exceptions import UserError
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AccountEdiProxyClientUser(models.Model):
|
|
_inherit = 'account_edi_proxy_client.user'
|
|
|
|
# ------------------
|
|
# Fields declaration
|
|
# ------------------
|
|
|
|
proxy_type = fields.Selection(selection_add=[('l10n_my_edi', 'Malaysian EDI')], ondelete={'l10n_my_edi': 'cascade'})
|
|
|
|
# -----------------------
|
|
# CRUD, inherited methods
|
|
# -----------------------
|
|
|
|
def _get_proxy_urls(self):
|
|
# EXTENDS 'account_edi_proxy_client'
|
|
urls = super()._get_proxy_urls()
|
|
# We do not use demo with MyInvois as during a demo, showing the invoice on the pre-prod platform will be better.
|
|
urls['l10n_my_edi'] = {
|
|
'demo': False,
|
|
'prod': 'https://l10n-my-edi.api.odoo.com',
|
|
'test': self.env['ir.config_parameter'].get_param('l10n_my_edi_test_server_url', 'https://l10n-my-edi.test.odoo.com'),
|
|
}
|
|
return urls
|
|
|
|
def _get_proxy_identification(self, company, proxy_type):
|
|
# EXTENDS 'account_edi_proxy_client'
|
|
if proxy_type == 'l10n_my_edi':
|
|
if not company.vat:
|
|
raise UserError(_('Please fill the TIN of company "%(company_name)s" before enabling the integration with MyInvois.',
|
|
company_name=company.display_name))
|
|
return company.vat
|
|
return super()._get_proxy_identification(company, proxy_type)
|
|
|
|
# ----------------
|
|
# Business methods
|
|
# ----------------
|
|
|
|
def _l10n_my_edi_contact_proxy(self, endpoint, params):
|
|
self.ensure_one()
|
|
try:
|
|
response = self._make_request(
|
|
url=url_join(self._get_server_url(), endpoint),
|
|
params=params,
|
|
)
|
|
except AccountEdiProxyError as _error:
|
|
# Request error while contacting the IAP server. We assume it is a temporary error.
|
|
raise UserError(_("Failed to contact the E-Invoicing service. Please try again later."))
|
|
|
|
return response
|