mail/models/mail_alias_mixin.py

53 lines
2.0 KiB
Python
Raw Permalink Normal View History

2024-05-03 12:40:35 +03:00
# -*- 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)