PURPOSE Allow alias domains to be multiple, notably to be used in a multi company environment where each company has its own alias domain. SPECIFICATIONS Update settings to configure your company's current alias domain instead of the global 'alias.catchall.domain' configuration parameter. As domain configuration is globally done per company, this is now a related on the company. Advanced configuration and management can still be done manually in settings. Field 'external_email_server_default' triggering display of mail configuration is moved to mail. It is defined in 'base_setup' but used only in mail hence moving the field to be coherent. Task-36879 (Mail: Support Multi Domains Aliases) Part-of: odoo/odoo#76734
125 lines
6.2 KiB
Python
125 lines
6.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# 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'
|
|
|
|
company_id = fields.Many2one('res.company', string='Company', required=True,
|
|
default=lambda self: self.env.company)
|
|
is_root_company = fields.Boolean(compute='_compute_is_root_company')
|
|
user_default_rights = fields.Boolean(
|
|
"Default Access Rights",
|
|
config_parameter='base_setup.default_user_rights')
|
|
module_base_import = fields.Boolean("Allow users to import data from CSV/XLS/XLSX/ODS files")
|
|
module_google_calendar = fields.Boolean(
|
|
string='Allow the users to synchronize their calendar with Google Calendar')
|
|
module_microsoft_calendar = fields.Boolean(
|
|
string='Allow the users to synchronize their calendar with Outlook Calendar')
|
|
module_mail_plugin = fields.Boolean(
|
|
string='Allow integration with the mail plugins'
|
|
)
|
|
module_auth_oauth = fields.Boolean("Use external authentication providers (OAuth)")
|
|
module_auth_ldap = fields.Boolean("LDAP Authentication")
|
|
module_account_inter_company_rules = fields.Boolean("Manage Inter Company")
|
|
module_voip = fields.Boolean("Asterisk (VoIP)")
|
|
module_web_unsplash = fields.Boolean("Unsplash Image Library")
|
|
module_partner_autocomplete = fields.Boolean("Partner Autocomplete")
|
|
module_base_geolocalize = fields.Boolean("GeoLocalize")
|
|
module_google_recaptcha = fields.Boolean("reCAPTCHA")
|
|
module_website_cf_turnstile = fields.Boolean("Cloudflare Turnstile")
|
|
report_footer = fields.Html(related="company_id.report_footer", string='Custom Report Footer', help="Footer text displayed at the bottom of all reports.", readonly=False)
|
|
group_multi_currency = fields.Boolean(string='Multi-Currencies',
|
|
implied_group='base.group_multi_currency',
|
|
help="Allows to work in a multi currency environment")
|
|
external_report_layout_id = fields.Many2one(related="company_id.external_report_layout_id")
|
|
show_effect = fields.Boolean(string="Show Effect", config_parameter='base_setup.show_effect')
|
|
company_count = fields.Integer('Number of Companies', compute="_compute_company_count")
|
|
active_user_count = fields.Integer('Number of Active Users', compute="_compute_active_user_count")
|
|
language_count = fields.Integer('Number of Languages', compute="_compute_language_count")
|
|
company_name = fields.Char(related="company_id.display_name", string="Company Name")
|
|
company_informations = fields.Text(compute="_compute_company_informations")
|
|
company_country_code = fields.Char(related="company_id.country_id.code", string="Company Country Code", readonly=True)
|
|
profiling_enabled_until = fields.Datetime("Profiling enabled until", config_parameter='base.profiling_enabled_until')
|
|
module_product_images = fields.Boolean("Get product pictures using barcode")
|
|
|
|
def open_company(self):
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': 'My Company',
|
|
'view_mode': 'form',
|
|
'res_model': 'res.company',
|
|
'res_id': self.env.company.id,
|
|
'target': 'current',
|
|
}
|
|
|
|
def open_default_user(self):
|
|
action = self.env["ir.actions.actions"]._for_xml_id("base.action_res_users")
|
|
if self.env.ref('base.default_user', raise_if_not_found=False):
|
|
action['res_id'] = self.env.ref('base.default_user').id
|
|
else:
|
|
raise UserError(_("Default User Template not found."))
|
|
action['views'] = [[self.env.ref('base.view_users_form').id, 'form']]
|
|
return action
|
|
|
|
@api.model
|
|
def _prepare_report_view_action(self, template):
|
|
template_id = self.env.ref(template)
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'ir.ui.view',
|
|
'view_mode': 'form',
|
|
'res_id': template_id.id,
|
|
}
|
|
|
|
def edit_external_header(self):
|
|
if not self.external_report_layout_id:
|
|
return False
|
|
return self._prepare_report_view_action(self.external_report_layout_id.key)
|
|
|
|
# NOTE: These fields depend on the context, if we want them to be computed
|
|
# we have to make them depend on a field. This is because we are on a TransientModel.
|
|
@api.depends('company_id')
|
|
def _compute_company_count(self):
|
|
company_count = self.env['res.company'].sudo().search_count([])
|
|
for record in self:
|
|
record.company_count = company_count
|
|
|
|
@api.depends('company_id')
|
|
def _compute_active_user_count(self):
|
|
active_user_count = self.env['res.users'].sudo().search_count([('share', '=', False)])
|
|
for record in self:
|
|
record.active_user_count = active_user_count
|
|
|
|
@api.depends('company_id')
|
|
def _compute_language_count(self):
|
|
language_count = len(self.env['res.lang'].get_installed())
|
|
for record in self:
|
|
record.language_count = language_count
|
|
|
|
@api.depends('company_id')
|
|
def _compute_company_informations(self):
|
|
informations = '%s\n' % self.company_id.street if self.company_id.street else ''
|
|
informations += '%s\n' % self.company_id.street2 if self.company_id.street2 else ''
|
|
informations += '%s' % self.company_id.zip if self.company_id.zip else ''
|
|
informations += '\n' if self.company_id.zip and not self.company_id.city else ''
|
|
informations += ' - ' if self.company_id.zip and self.company_id.city else ''
|
|
informations += '%s\n' % self.company_id.city if self.company_id.city else ''
|
|
informations += '%s\n' % self.company_id.state_id.display_name if self.company_id.state_id else ''
|
|
informations += '%s' % self.company_id.country_id.display_name if self.company_id.country_id else ''
|
|
vat_display = self.company_id.country_id.vat_label or _('VAT')
|
|
vat_display = '\n' + vat_display + ': '
|
|
informations += '%s %s' % (vat_display, self.company_id.vat) if self.company_id.vat else ''
|
|
|
|
for record in self:
|
|
record.company_informations = informations
|
|
|
|
@api.depends('company_id')
|
|
def _compute_is_root_company(self):
|
|
for record in self:
|
|
record.is_root_company = not record.company_id.parent_id
|