53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import logging
|
|
|
|
from odoo import fields, models
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AliasMixin(models.AbstractModel):
|
|
""" A mixin for models that inherits mail.alias to have a one-to-one relation
|
|
between the model and its alias. """
|
|
_name = 'mail.alias.mixin'
|
|
_inherit = 'mail.alias.mixin.optional'
|
|
_inherits = {'mail.alias': 'alias_id'}
|
|
_description = 'Email Aliases Mixin'
|
|
|
|
alias_id = fields.Many2one(required=True)
|
|
alias_name = fields.Char(inherited=True)
|
|
alias_defaults = fields.Text(inherited=True)
|
|
|
|
# --------------------------------------------------
|
|
# CRUD
|
|
# --------------------------------------------------
|
|
|
|
def _require_new_alias(self, record_vals):
|
|
""" alias_id field is always required, due to inherits """
|
|
return not record_vals.get('alias_id')
|
|
|
|
def _init_column(self, name):
|
|
""" Create aliases for existing rows. """
|
|
super()._init_column(name)
|
|
if name == 'alias_id':
|
|
# as 'mail.alias' records refer to 'ir.model' records, create
|
|
# aliases after the reflection of models
|
|
self.pool.post_init(self._init_column_alias_id)
|
|
|
|
def _init_column_alias_id(self):
|
|
# both self and the alias model must be present in 'ir.model'
|
|
child_ctx = {
|
|
'active_test': False, # retrieve all records
|
|
'prefetch_fields': False, # do not prefetch fields on records
|
|
}
|
|
child_model = self.sudo().with_context(child_ctx)
|
|
|
|
for record in child_model.search([('alias_id', '=', False)]):
|
|
# create the alias, and link it to the current record
|
|
alias = self.env['mail.alias'].sudo().create(record._alias_get_creation_values())
|
|
record.with_context(mail_notrack=True).alias_id = alias
|
|
_logger.info('Mail alias created for %s %s (id %s)',
|
|
record._name, record.display_name, record.id)
|