136 lines
6.0 KiB
Python
136 lines
6.0 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _, api, fields, models, modules, tools
|
|
from odoo.exceptions import UserError, ValidationError
|
|
|
|
from odoo.addons.account_peppol.tools.demo_utils import handle_demo
|
|
|
|
|
|
class ResConfigSettings(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
account_peppol_edi_user = fields.Many2one(
|
|
comodel_name='account_edi_proxy_client.user',
|
|
string='EDI user',
|
|
compute='_compute_account_peppol_edi_user',
|
|
)
|
|
account_peppol_edi_mode = fields.Selection(related='account_peppol_edi_user.edi_mode')
|
|
account_peppol_contact_email = fields.Char(related='company_id.account_peppol_contact_email', readonly=False)
|
|
account_peppol_eas = fields.Selection(related='company_id.peppol_eas', readonly=False)
|
|
account_peppol_edi_identification = fields.Char(related='account_peppol_edi_user.edi_identification')
|
|
account_peppol_endpoint = fields.Char(related='company_id.peppol_endpoint', readonly=False)
|
|
account_peppol_migration_key = fields.Char(related='company_id.account_peppol_migration_key', readonly=False)
|
|
account_peppol_phone_number = fields.Char(related='company_id.account_peppol_phone_number', readonly=False)
|
|
account_peppol_proxy_state = fields.Selection(related='company_id.account_peppol_proxy_state', readonly=False)
|
|
account_peppol_purchase_journal_id = fields.Many2one(related='company_id.peppol_purchase_journal_id', readonly=False)
|
|
|
|
# -------------------------------------------------------------------------
|
|
# COMPUTE METHODS
|
|
# -------------------------------------------------------------------------
|
|
|
|
@api.depends('is_account_peppol_eligible', 'account_peppol_edi_user')
|
|
def _compute_account_peppol_mode_constraint(self):
|
|
mode_constraint = self.env['ir.config_parameter'].sudo().get_param('account_peppol.mode_constraint')
|
|
trial_param = self.env['ir.config_parameter'].sudo().get_param('saas_trial.confirm_token')
|
|
self.account_peppol_mode_constraint = trial_param and 'demo' or mode_constraint or 'prod'
|
|
|
|
@api.depends("company_id.account_edi_proxy_client_ids")
|
|
def _compute_account_peppol_edi_user(self):
|
|
for config in self:
|
|
config.account_peppol_edi_user = config.company_id.account_edi_proxy_client_ids.filtered(
|
|
lambda u: u.proxy_type == 'peppol')
|
|
|
|
# -------------------------------------------------------------------------
|
|
# BUSINESS ACTIONS
|
|
# -------------------------------------------------------------------------
|
|
|
|
def action_open_peppol_form(self):
|
|
registration_wizard = self.env['peppol.registration'].create({'company_id': self.company_id.id})
|
|
registration_action = registration_wizard._action_open_peppol_form(reopen=False)
|
|
return registration_action
|
|
|
|
@handle_demo
|
|
def button_update_peppol_user_data(self):
|
|
"""
|
|
Action for the user to be able to update their contact details any time
|
|
Calls /update_user on the iap server
|
|
"""
|
|
self.ensure_one()
|
|
|
|
if not self.account_peppol_contact_email or not self.account_peppol_phone_number:
|
|
raise ValidationError(_("Contact email and mobile number are required."))
|
|
|
|
params = {
|
|
'update_data': {
|
|
'peppol_phone_number': self.account_peppol_phone_number,
|
|
'peppol_contact_email': self.account_peppol_contact_email,
|
|
}
|
|
}
|
|
|
|
self.account_peppol_edi_user._call_peppol_proxy(
|
|
endpoint='/api/peppol/1/update_user',
|
|
params=params,
|
|
)
|
|
return True
|
|
|
|
@handle_demo
|
|
def button_peppol_smp_registration(self):
|
|
"""
|
|
The second (optional) step in Peppol registration.
|
|
The user can choose to become a Receiver and officially register on the Peppol
|
|
network, i.e. receive documents from other Peppol participants.
|
|
"""
|
|
self.ensure_one()
|
|
self.account_peppol_edi_user._peppol_register_sender_as_receiver()
|
|
if self.account_peppol_proxy_state == 'smp_registration':
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'title': _("Registered to receive documents via Peppol."),
|
|
'type': 'success',
|
|
'message': _("Your registration on Peppol network should be activated within a day. The updated status will be visible in Settings."),
|
|
'next': {'type': 'ir.actions.act_window_close'},
|
|
}
|
|
}
|
|
return True
|
|
|
|
def button_migrate_peppol_registration(self):
|
|
"""
|
|
Migrates AWAY from Odoo's SMP.
|
|
If the user is a receiver, they need to request a migration key, generated on the IAP server.
|
|
The migration key is then displayed in Peppol settings.
|
|
Currently, reopening after migrating away is not supported.
|
|
"""
|
|
self.ensure_one()
|
|
if self.account_peppol_proxy_state != 'receiver':
|
|
raise UserError(_("Can't migrate unless registered to receive documents."))
|
|
|
|
self.account_peppol_edi_user._peppol_migrate_registration()
|
|
return True
|
|
|
|
@handle_demo
|
|
def button_deregister_peppol_participant(self):
|
|
"""
|
|
Deregister the edi user from Peppol network
|
|
"""
|
|
self.ensure_one()
|
|
|
|
if self.account_peppol_edi_user:
|
|
self.account_peppol_edi_user._peppol_deregister_participant()
|
|
return True
|
|
|
|
def button_account_peppol_configure_services(self):
|
|
wizard = self.env['account_peppol.service.wizard'].create({
|
|
'edi_user_id': self.account_peppol_edi_user.id,
|
|
'service_json': self.account_peppol_edi_user._peppol_get_services().get('services'),
|
|
})
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': 'Configure your peppol services',
|
|
'res_model': 'account_peppol.service.wizard',
|
|
'res_id': wizard.id,
|
|
'view_mode': 'form',
|
|
'target': 'new',
|
|
}
|