RATIONALE Simplify field management for mail / phone / sms flows. Make it working out of the box, easier to use and tweak. SPECIFICATIONS Simplify model custom code when dealing with phone and sms by using helpers and standard behavior defined on all models. '_sms_get_partner_fields' was introduced at odoo/odoo@bdebcab0ce to have a generic implementation of finding partners on a record. Since then another version has been added directly in 'mail' module, using '_mail_get_partners'. '_sms_get_number_fields' was introduced at the same time to have a generic implementation of finding numbers on a record. Since then a generic and improved version has been added directly in 'phone_validation' module, see '_phone_get_number_fields'. Those method can therefore be removed, and replaced by the generic ones available on BaseModel. Task-3422449 (Mail, Phone: Move and improve field helpers) Prepares Task-36879 (Mail: Support MultiCompany Aliases) Part-of: odoo/odoo#130468
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class IrModel(models.Model):
|
|
_inherit = 'ir.model'
|
|
|
|
is_mail_thread_sms = fields.Boolean(
|
|
string="Mail Thread SMS", default=False,
|
|
store=False, compute='_compute_is_mail_thread_sms', search='_search_is_mail_thread_sms',
|
|
help="Whether this model supports messages and notifications through SMS",
|
|
)
|
|
|
|
@api.depends('is_mail_thread')
|
|
def _compute_is_mail_thread_sms(self):
|
|
for model in self:
|
|
if model.is_mail_thread:
|
|
ModelObject = self.env[model.model]
|
|
potential_fields = ModelObject._phone_get_number_fields() + ModelObject._mail_get_partner_fields()
|
|
if any(fname in ModelObject._fields for fname in potential_fields):
|
|
model.is_mail_thread_sms = True
|
|
continue
|
|
model.is_mail_thread_sms = False
|
|
|
|
def _search_is_mail_thread_sms(self, operator, value):
|
|
thread_models = self.search([('is_mail_thread', '=', True)])
|
|
valid_models = self.env['ir.model']
|
|
for model in thread_models:
|
|
if model.model not in self.env:
|
|
continue
|
|
ModelObject = self.env[model.model]
|
|
potential_fields = ModelObject._phone_get_number_fields() + ModelObject._mail_get_partner_fields()
|
|
if any(fname in ModelObject._fields for fname in potential_fields):
|
|
valid_models |= model
|
|
|
|
search_sms = (operator == '=' and value) or (operator == '!=' and not value)
|
|
if search_sms:
|
|
return [('id', 'in', valid_models.ids)]
|
|
return [('id', 'not in', valid_models.ids)]
|