Odoo18-Base/addons/l10n_my_edi/models/res_config_settings.py

67 lines
2.8 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
# ------------------
# Fields declaration
# ------------------
l10n_my_edi_mode = fields.Selection(related="company_id.l10n_my_edi_mode", readonly=False)
l10n_my_edi_default_import_journal_id = fields.Many2one(related="company_id.l10n_my_edi_default_import_journal_id", readonly=False)
l10n_my_edi_proxy_user_id = fields.Many2one(related="company_id.l10n_my_edi_proxy_user_id")
l10n_my_edi_company_vat = fields.Char(related="company_id.vat")
l10n_my_accept_processing = fields.Boolean()
# ----------------
# Onchange methods
# ----------------
@api.onchange('l10n_my_edi_mode')
def _onchange_l10n_my_edi_mode(self):
""" This onchange is mostly here to improve usability by avoiding the need to save when changing the mode. """
self.l10n_my_edi_proxy_user_id = self.company_id.account_edi_proxy_client_ids.filtered(
lambda u: u.proxy_type == 'l10n_my_edi' and u.edi_mode == self.l10n_my_edi_mode
)
# --------------
# Action methods
# --------------
def action_l10n_my_edi_allow_processing(self):
""" We always expect the user to give his consent by pressing the button, in any mode, to enable the edi. """
self.company_id._l10n_my_edi_create_proxy_user()
def action_l10n_my_edi_unregister(self):
""" Send a notification to the proxy to free the ID (vat) of the user, and archive the local proxy user.
Useful if there has been a misconfiguration or the user wishes to use a new database/...
"""
proxy_user = self.env.company.l10n_my_edi_proxy_user_id
if not proxy_user:
return
# Start by notifying the proxy that we wish to deregister.
result = proxy_user._l10n_my_edi_contact_proxy('api/l10n_my_edi/1/unregister', {})
if not result.get('success'):
# If we get a result, it should always be successful as we only archive. If for any reason it is not, we will raise an error.
raise UserError(_("An unexpected error occurred while unregistering. Please try again later."))
# If all goes well we can deactivate the local user.
proxy_user.active = False
def action_open_company_form(self):
""" This will be used to ease the configuration by allowing to quickly access the company. """
self.ensure_one()
return {
'type': 'ir.actions.act_window',
'res_id': self.env.company.id,
'res_model': 'res.company',
'target': 'new',
'view_mode': 'form',
}