El Bus de Comunicación: Chatter, mail.thread y Actividades
El chatter añade conversación, seguidores, seguimiento de cambios y actividades. Necesita el módulo mail y los mixins correspondientes. No es un registro inmutable de auditoría legal.
1. Ampliar el préstamo existente #
Añade mail a depends y esta clase al final de models/biblioteca.py. Conserva los campos del modelo original:
1class LibraryLoanChatter(models.Model): 2 _name = 'library.loan' 3 _inherit = ['library.loan', 'mail.thread', 'mail.activity.mixin'] 4 5 state = fields.Selection(tracking=True) 6 7 def action_confirm_loan(self): 8 for record in self: 9 record.action_validate() 10 record.message_post(body=_('Loan confirmed.')) 11 12 def schedule_return_reminder(self): 13 for record in self: 14 deadline = (fields.Date.subtract(record.return_date, days=2) 15 if record.return_date else fields.Date.context_today(record)) 16 record.activity_schedule( 17 'mail.mail_activity_data_todo', 18 summary=_('Contact the borrower'), 19 date_deadline=deadline, 20 user_id=self.env.user.id, 21 )
El recordatorio se asigna al usuario actual, no a un contacto externo. El método lo crea cuando se invoca; para hacerlo automáticamente necesitarías una acción o un cron con una política que evite duplicados.
2. Formulario con chatter #
Fichero views/loan.xml:
1<odoo> 2 <record id="view_library_loan_form" model="ir.ui.view"> 3 <field name="name">library.loan.form</field> 4 <field name="model">library.loan</field> 5 <field name="arch" type="xml"> 6 <form> 7 <header> 8 <button name="action_confirm_loan" type="object" string="Confirm" invisible="state != 'draft'"/> 9 <button name="schedule_return_reminder" type="object" string="Reminder"/> 10 <field name="state" widget="statusbar"/> 11 </header> 12 <sheet><group> 13 <field name="name"/><field name="partner_id"/> 14 <field name="book_id"/><field name="return_date"/> 15 </group></sheet> 16 <chatter/> 17 </form> 18 </field> 19 </record> 20 <record id="action_library_loan" model="ir.actions.act_window"> 21 <field name="name">Loans</field> 22 <field name="res_model">library.loan</field> 23 <field name="view_mode">list,form</field> 24 </record> 25 <menuitem id="menu_library_loans" name="Loans" parent="menu_library_root" action="action_library_loan"/> 26</odoo>
Añade el archivo al manifiesto después de la vista que crea menu_library_root y actualiza. tracking=True registra cambios de campos; message_post() publica mensajes y activity_schedule() crea actividades. Las reglas de acceso del negocio siguen siendo necesarias.