53 lines
2.5 KiB
Python
53 lines
2.5 KiB
Python
from odoo import fields, models, _
|
|
from odoo.addons.l10n_tr_nilvera.lib.nilvera_client import _get_nilvera_client
|
|
|
|
|
|
class ResConfigSettings(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
l10n_tr_nilvera_api_key = fields.Char(
|
|
related='company_id.l10n_tr_nilvera_api_key',
|
|
string="Nilvera API key",
|
|
readonly=False,
|
|
)
|
|
l10n_tr_nilvera_environment = fields.Selection(
|
|
related='company_id.l10n_tr_nilvera_environment',
|
|
string="Nilvera Environment",
|
|
required=True,
|
|
readonly=False,
|
|
)
|
|
l10n_tr_nilvera_purchase_journal_id = fields.Many2one(
|
|
related='company_id.l10n_tr_nilvera_purchase_journal_id',
|
|
readonly=False,
|
|
)
|
|
|
|
def nilvera_ping(self):
|
|
""" Test the connection and the API key. """
|
|
self.check_access_rule('read') # To make sure not everyone can call this method as it's public.
|
|
with _get_nilvera_client(self.env.company) as client:
|
|
# As there is no endpoint to ping Nilvera to make sure the connection works, try an endpoint to get the
|
|
# company's data and this way we can verify the connection and the tax ID in the same step.
|
|
response = client.request("GET", "/general/Company", handle_response=False)
|
|
if response.status_code == 200:
|
|
nilvera_registered_tax_number = response.json().get('TaxNumber')
|
|
if self.env.company.vat == nilvera_registered_tax_number:
|
|
self.env['bus.bus']._sendone(self.env.user.partner_id, 'simple_notification', {
|
|
'type': 'success',
|
|
'message': _("Nilvera connection successful!"),
|
|
})
|
|
else:
|
|
self.env['bus.bus']._sendone(self.env.user.partner_id, 'simple_notification', {
|
|
'type': 'success',
|
|
'message': _("Nilvera connection successful but the tax number on Nilvera and Odoo doesn't match. Check Nilvera."),
|
|
})
|
|
elif response.status_code == 401:
|
|
self.env['bus.bus']._sendone(self.env.user.partner_id, 'simple_notification', {
|
|
'type': 'danger',
|
|
'message': _("Nilvera connection was unsuccessful, check the API key."),
|
|
})
|
|
else:
|
|
self.env['bus.bus']._sendone(self.env.user.partner_id, 'simple_notification', {
|
|
'type': 'danger',
|
|
'message': _("An error occurred. Try again later."),
|
|
})
|