[IMP] mail: migrate alias ICP at install if they exist
When adding alias domain in v17 support of configuration parameter was dropped. We moved from singleton configuration to multi domains using real models. This means most of mail support lies in mail while part of it was in base beforehand. In some cases we want to let people do some basic configuration using base module then install mail which could migrate this ICP based configuration into new models. This is notably the case with odoo.sh where mail is not always automatically installed. Use case is: install base, do some configuration using ICP allowing notably to setup website / server domains, main mail configuration, ... then let people install modules on top of that configuration which generally installs mail. With this change existing ir.config_parameters matching pre v17 names are now used to bootstrap alias domain table at mail module initialization. Task-3789584 closes odoo/odoo#156654 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -6,3 +6,6 @@ from . import tools
|
||||
from . import wizard
|
||||
from . import controllers
|
||||
from . import populate
|
||||
|
||||
def _mail_post_init(env):
|
||||
env['mail.alias.domain']._migrate_icp_to_domain()
|
||||
|
||||
@@ -123,6 +123,7 @@ For more specific needs, you may also assign custom-defined actions
|
||||
],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'post_init_hook': '_mail_post_init',
|
||||
'assets': {
|
||||
'web._assets_primary_variables': [
|
||||
'mail/static/src/**/primary_variables.scss',
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
from odoo import api, exceptions, fields, models, _
|
||||
from odoo.addons.mail.models.mail_alias import dot_atom_text
|
||||
|
||||
|
||||
class AliasDomain(models.Model):
|
||||
""" Model alias domains, now company-specific. Alias domains are email
|
||||
domains used to receive emails through catchall and bounce aliases, as
|
||||
@@ -174,3 +175,26 @@ class AliasDomain(models.Model):
|
||||
config_values['default_from'], is_email=True
|
||||
)
|
||||
return config_values
|
||||
|
||||
@api.model
|
||||
def _migrate_icp_to_domain(self):
|
||||
""" Compatibility layer helping going from pre-v17 ICP to alias
|
||||
domains. Mainly used when base mail configuration is done with 'base'
|
||||
module only and 'mail' is installed afterwards: configuration should
|
||||
not be lost (odoo.sh use case). """
|
||||
Icp = self.env['ir.config_parameter'].sudo()
|
||||
alias_domain = Icp.get_param('mail.catchall.domain')
|
||||
if alias_domain:
|
||||
existing = self.search([('name', '=', alias_domain)])
|
||||
if existing:
|
||||
return existing
|
||||
bounce_alias = Icp.get_param('mail.bounce.alias')
|
||||
catchall_alias = Icp.get_param('mail.catchall.alias')
|
||||
default_from = Icp.get_param('mail.default.from')
|
||||
return self.create({
|
||||
'bounce_alias': bounce_alias or 'bounce',
|
||||
'catchall_alias': catchall_alias or 'catchall',
|
||||
'default_from': default_from or 'notifications',
|
||||
'name': alias_domain,
|
||||
})
|
||||
return self.browse()
|
||||
|
||||
@@ -150,3 +150,29 @@ class TestMailTools(MailCommon):
|
||||
self.user_employee.sudo().write({'email': '"Alfred Astaire" <%s>' % self.env.user.partner_id.email_normalized})
|
||||
found = self.env['res.partner']._mail_find_partner_from_emails([self.env.user.partner_id.email_formatted])
|
||||
self.assertEqual(found, [self.env.user.partner_id])
|
||||
|
||||
|
||||
@tagged('mail_tools', 'mail_init')
|
||||
class TestMailUtils(MailCommon):
|
||||
|
||||
def test_migrate_icp_to_domain(self):
|
||||
""" Test ICP to alias domain migration """
|
||||
self.env["ir.config_parameter"].set_param("mail.catchall.domain", "test.migration.com")
|
||||
self.env["ir.config_parameter"].set_param("mail.bounce.alias", "migrate+bounce")
|
||||
self.env["ir.config_parameter"].set_param("mail.catchall.alias", "migrate+catchall")
|
||||
self.env["ir.config_parameter"].set_param("mail.default.from", "migrate+default_from")
|
||||
|
||||
existing = self.env["mail.alias.domain"].search([('name', '=', 'test.migration.com')])
|
||||
self.assertFalse(existing)
|
||||
|
||||
new = self.env["mail.alias.domain"]._migrate_icp_to_domain()
|
||||
self.assertEqual(new.name, "test.migration.com")
|
||||
self.assertEqual(new.bounce_alias, "migrate+bounce")
|
||||
self.assertEqual(new.catchall_alias, "migrate+catchall")
|
||||
self.assertEqual(new.default_from, "migrate+default_from")
|
||||
|
||||
again = self.env["mail.alias.domain"]._migrate_icp_to_domain()
|
||||
self.assertEqual(again.name, "test.migration.com")
|
||||
|
||||
existing = self.env["mail.alias.domain"].search([('name', '=', 'test.migration.com')])
|
||||
self.assertEqual(len(existing), 1, 'Should not migrate twice')
|
||||
|
||||
Reference in New Issue
Block a user