Productivity enhancements for Odoo 19 CRM
Resizable chatter, email previews in kanban & list, and relative timestamps — small tweaks that make a big difference.
Note This project is under active development. Features and APIs may change without notice.
Drag the boundary between the form and chatter to resize. Your preferred width is saved in the browser and persists across sessions.
- Works on any form view with a side chatter (XXL layout)
- Drag handle with visual feedback on hover
- Ratio saved per browser via
localStorage - Min/max bounds (20%–80%) prevent accidental collapse
See the latest email preview directly in kanban cards and list view — no need to open every lead.
- Shows the preview text of the most recent inbound email
- Truncated with CSS for clean display
- Hidden when no emails exist
Relative timestamp ("3 days ago") showing when the last message was posted on a lead.
- Computed from
mail.message(emails and comments) - Stored field — searchable, sortable, groupable
- Custom
timeagoOWL widget with tooltip showing the full date - Updates automatically when new messages arrive
- Odoo 19 Enterprise with the CRM module installed
For AI-powered features like smart field enrichment and auto-fill, install Pan AI Pro (pan_ai_pro). CRM Pro declares it as a dependency — install it first.
Add as a Git submodule:
git submodule add https://github.com/pantalytics/pan_crm_pro.git addons/pan_crm_pro
git commit -m "Add pan_crm_pro submodule"
git pushClone into your addons path:
cd /path/to/odoo/addons
git clone https://github.com/pantalytics/pan_crm_pro.gitThen install from Apps → search "CRM Pro".
Patches FormRenderer to inject a drag handle between the form sheet and chatter panel. The handle listens for mouse events and adjusts the flex ratio of both panels. The ratio is persisted in localStorage so it survives page reloads.
FormRenderer.setup()
→ onMounted / onPatched
→ installResizer()
→ creates drag handle element
→ mousedown → track mousemove → apply flex ratio
→ mouseup → save to localStorage
Two computed fields on crm.lead:
| Field | Type | Stored | Source |
|---|---|---|---|
x_email_preview |
Char | No | Latest mail.message with type=email |
x_last_message_date |
Datetime | Yes | Latest mail.message with type=email or comment |
Both are displayed in inherited kanban and list views via XPath injection before tag_ids.
pan_crm_pro/
├── __manifest__.py
├── __init__.py
├── models/
│ └── crm_lead.py # Email preview + last contact fields
├── views/
│ └── crm_lead_views.xml # Kanban + list view inheritance
├── static/
│ ├── description/
│ │ └── icon.png
│ └── src/
│ ├── js/
│ │ ├── chatter_resizer.js # Drag-to-resize form/chatter
│ │ └── timeago_field.js # "3 days ago" OWL widget
│ ├── xml/
│ │ └── timeago_field.xml # Widget template
│ └── scss/
│ └── chatter_width.scss # Drag handle styling
└── README.md
Contributions are welcome. Please open an issue or pull request on GitHub.
LGPL-3 — Built by Pantalytics, Odoo implementation partner.