[IMP] mail: reflect inheritance of mail.activity.mixin on ir.model

The boolean field `is_mail_activity` on `ir.model` allows to create custom models
that inherit from model `mail.activity.mixin`.

Task 1889687
This commit is contained in:
Martin Geubelle
2018-12-05 11:36:17 +00:00
parent 6f5dc5733f
commit f48021846a
2 changed files with 15 additions and 2 deletions
+13 -2
View File
@@ -13,6 +13,10 @@ class IrModel(models.Model):
string="Mail Thread", oldname='mail_thread', default=False,
help="Whether this model supports messages and notifications.",
)
is_mail_activity = fields.Boolean(
string="Mail Activity", default=False,
help="Whether this model supports activities.",
)
def unlink(self):
# Delete followers for models that will be unlinked.
@@ -22,11 +26,13 @@ class IrModel(models.Model):
@api.multi
def write(self, vals):
if self and 'is_mail_thread' in vals:
if self and ('is_mail_thread' in vals or 'is_mail_activity' in vals):
if not all(rec.state == 'manual' for rec in self):
raise UserError(_('Only custom models can be modified.'))
if not all(rec.is_mail_thread <= vals['is_mail_thread'] for rec in self):
if 'is_mail_thread' in vals and not all(rec.is_mail_thread <= vals['is_mail_thread'] for rec in self):
raise UserError(_('Field "Mail Thread" cannot be changed to "False".'))
if 'is_mail_activity' in vals and not all(rec.is_mail_activity <= vals['is_mail_activity'] for rec in self):
raise UserError(_('Field "Mail Activity" cannot be changed to "False".'))
res = super(IrModel, self).write(vals)
# setup models; this reloads custom models in registry
self.pool.setup_models(self._cr)
@@ -40,6 +46,7 @@ class IrModel(models.Model):
def _reflect_model_params(self, model):
vals = super(IrModel, self)._reflect_model_params(model)
vals['is_mail_thread'] = issubclass(type(model), self.pool['mail.thread'])
vals['is_mail_activity'] = issubclass(type(model), self.pool['mail.activity.mixin'])
return vals
@api.model
@@ -49,6 +56,10 @@ class IrModel(models.Model):
parents = model_class._inherit or []
parents = [parents] if isinstance(parents, str) else parents
model_class._inherit = parents + ['mail.thread']
if model_data.get('is_mail_activity') and model_class._name != 'mail.activity.mixin':
parents = model_class._inherit or []
parents = [parents] if isinstance(parents, str) else parents
model_class._inherit = parents + ['mail.activity.mixin']
return model_class
+2
View File
@@ -7,6 +7,7 @@
<field name="arch" type="xml">
<field name="transient" position="after">
<field name="is_mail_thread" attrs="{'readonly': [('state','!=', 'manual')]}" groups="base.group_no_one"/>
<field name="is_mail_activity" attrs="{'readonly': [('state','!=', 'manual')]}" groups="base.group_no_one"/>
</field>
<xpath expr="//field[@name='field_id']//field[@name='copied']" position="after">
<field name="track_visibility" attrs="{'readonly': [('state','!=', 'manual')]}"/>
@@ -20,6 +21,7 @@
<field name="arch" type="xml">
<field name="model" position="after">
<filter string="Mail Thread" name="is_mail_thread" domain="[('is_mail_thread', '=', True)]"/>
<filter string="Mail Activity" name="is_mail_activity" domain="[('is_mail_activity', '=', True)]"/>
</field>
</field>
</record>