El Bus de Comunicación: Chatter, mail.thread y Actividades
El Chatter es una de las características más potentes y distintivas de Odoo. Transforma cualquier modelo de datos en un centro de comunicación colaborativo donde los usuarios pueden enviar correos electrónicos, dejar notas internas, seguir el historial de cambios y planificar actividades con fechas límite.
1. Herencia de Mixins del Módulo mail #
Para dotar a un modelo personalizado de todas las capacidades del Chatter, se heredan dos clases mixin fundamentales:
1from odoo import models, fields, api, _ 2 3class LibraryLoan(models.Model): 4 _name = 'library.loan' 5 _description = 'Préstamos de Biblioteca' 6 # Herencia múltiple de mixins de mensajería 7 _inherit = ['mail.thread', 'mail.activity.mixin'] 8 9 name = fields.Char(string='Referencia', required=True, tracking=True) 10 partner_id = fields.Many2one('res.partner', string='Socio', required=True, tracking=True) 11 book_id = fields.Many2one('library.book', string='Libro Prestado', required=True, tracking=True) 12 13 # El atributo tracking=True registra automáticamente en el Chatter cualquier cambio de valor 14 state = fields.Selection([ 15 ('draft', 'Borrador'), 16 ('active', 'En Curso'), 17 ('returned', 'Devuelto'), 18 ], string='Estado', default='draft', tracking=True) 19 20 def action_confirm_loan(self): 21 for record in self: 22 record.state = 'active' 23 # Publicación de un mensaje automático en el hilo del Chatter 24 record.message_post( 25 body=_("El préstamo del libro <b>%s</b> ha sido confirmado para el socio <b>%s</b>.") % (record.book_id.name, record.partner_id.name), 26 message_type='notification', 27 subtype_xmlid='mail.mt_comment' 28 )
Importante: Asegúrate de incluir
'depends': ['mail']en tu archivo__manifest__.py.
2. Integración del Chatter en la Vista de Formulario XML #
Para que el panel de mensajería aparezca en la parte inferior o lateral del formulario:
1<record id="view_library_loan_form" model="ir.ui.view"> 2 <field name="name">library.loan.form</field> 3 <field name="model">library.loan</field> 4 <field name="arch" type="xml"> 5 <form string="Préstamo"> 6 <header> 7 <button name="action_confirm_loan" string="Confirmar" type="object" class="btn-primary" invisible="state != 'draft'"/> 8 <field name="state" widget="statusbar"/> 9 </header> 10 <sheet> 11 <div class="oe_title"> 12 <h1><field name="name"/></h1> 13 </div> 14 <group> 15 <field name="partner_id"/> 16 <field name="book_id"/> 17 </group> 18 </sheet> 19 20 <!-- Contenedor del Chatter de Odoo --> 21 <div class="oe_chatter"> 22 <field name="message_follower_ids" widget="mail_followers"/> 23 <field name="activity_ids" widget="mail_activity"/> 24 <field name="message_ids" widget="mail_thread"/> 25 </div> 26 </form> 27 </field> 28</record>
3. Planificación Programática de Actividades #
El mixin mail.activity.mixin permite programar tareas pendientes asignadas a un usuario específico (por ejemplo, recordar la devolución del libro 2 días antes de la fecha límite):
1def schedule_return_reminder(self): 2 for record in self: 3 self.env['mail.activity'].create({ 4 'res_id': record.id, 5 'res_model_id': self.env['ir.model']._get_id(record._name), 6 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, 7 'summary': _('Recordatorio de devolución de libro'), 8 'note': _('Contactar con el socio para la devolución de %s.') % record.book_id.name, 9 'user_id': record.partner_id.user_id.id or self.env.uid, 10 'date_deadline': fields.Date.today(), 11 })
Resumen del tema
Conceptos clave #
- Mixins de Mensajería:
mail.thread(hilos de correo, notas y seguidores) ymail.activity.mixin(gestión de actividades y tareas pendientes). - Auditoría de Campos (
tracking=True): registro automático e inmutable en el historial de cualquier modificación sobre campos sensibles. - Estructura XML del Chatter (
<div class="oe_chatter">): componentes estándar para seguidores (message_follower_ids), actividades (activity_ids) y mensajes (message_ids). - Interacción Programática: método
message_post()para notificaciones automáticas y creación de actividades enmail.activity.
Qué debes recordar #
Heredar de mail.thread y mail.activity.mixin dota a tus modelos de colaboración en tiempo real, auditoría de cambios con tracking=True y gestión de actividades.