Odoo18-Base/addons/l10n_tr_nilvera/models/res_config_settings.py
2025-03-10 10:52:11 +07:00

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."),
})