On a quotation, you click Send by email, then switch email templates: order confirmation, pro forma, reminder… With every click, the window freezes for a few seconds. It is not your connection or your server: Odoo prints the document’s PDF again, identical, and stores one more copy in the database. We measured what actually happens, and we wrote a €10 module that avoids it. Here are the figures, the protocol to reproduce them, and what the module does not do.
💡 In short
- The finding: in the send window, every template switch prints the document’s PDF again and stores it once more in the database.
- The measurement: on a demo quotation, about 2,7 s per switch with standard Odoo, under 0,1 s with the module.
- The module: Mail Composer PDF Reuse, €10, Odoo 18, 19 and 20, Community and Enterprise, OPL-1 licence.
- What does not change: the email sent contains a single PDF, with or without the module.
1. A harmless gesture that triggers a new print
Odoo’s send-by-email window — the composer — opens from a quotation, an invoice or a purchase order. When it targets a single document, it runs in “comment” mode: the message is posted in the document’s chatter and sent to its followers.
In this mode, every change of email template triggers the attachment computation again (_compute_attachment_ids). This computation does not check whether the report required by the new template was printed for the same document a few seconds earlier, in the same window: it prints the PDF again (_render_qweb_pdf, so a full pass through the PDF engine) and creates a new attachment in the database.
The previous one is not deleted at that point. It stays stored until Odoo’s garbage collector runs, which only removes these composer attachments after one day.
💡 A detail that matters
Your customer does not receive four PDFs. The email sent contains only one, even with standard Odoo. The duplicate sits in the database, not in the email: what you pay for is the wait at every click and copies stored for nothing.
2. What we measured
Rather than claim, we counted. The protocol is easy to reproduce:
- Environment: Odoo 19 Community, on our test server.
- Document: a quotation from the demo data.
- Rendering: the real PDF engine (wkhtmltopdf), not a simulated rendering.
- Scenario: one opening of the composer, then three template switches.
- Recorded: the number of reports printed, the number of PDFs stored in the database and the time of each switch.
Result with standard Odoo: 4 reports printed, 4 PDFs stored, and about 2,7 s of waiting at every template switch. With the module: 1 report printed, 1 PDF stored, and under 0,1 s per switch.
💡 Read it as a measurement, not a promise
These figures apply to this quotation, on this server. Printing time depends on your document, your report and your machine: run the scenario yourself before drawing conclusions. What does not vary is the count: with standard Odoo, one print and one database copy per template switch.
3. The module: the PDF, printed once
Mail Composer PDF Reuse keeps track of the reports already printed in the open window, per report and per document. When you switch templates and the new template attaches the same report for the same document, the PDF already generated is attached again, without going back through the PDF engine. If the new template requires a different report, that one is printed as usual, once.
Three safeguards frame this reuse:
- Security: an attachment is only reused if it is a pending composer attachment created by the current user. A reference to someone else’s file is ignored.
- Scope: only the composer on a single document is affected. Batch sending keeps Odoo’s standard behaviour.
- Discretion: no settings, no menu. Once uninstalled, the composer behaves exactly as before.
💡 Key takeaway
Same gesture, same email sent: the module only removes the repeated printing and the database copies it leaves behind.
4. The trade-off, owned
The reuse only lasts as long as the window. Close the composer, change a line on the quotation, open it again: a new window prints an up-to-date PDF. That is intentional. We could have kept the PDF longer and saved more seconds, but at the risk of sending your customer a document that no longer matches your data. That is a risk we do not take.
The offer: €10, for Odoo 18, 19 and 20, in Community and Enterprise alike, under the OPL-1 licence. The module only depends on the Discuss app (mail). To get it, just ask us directly.
💡 The real issue behind this module
Two seconds per click go unnoticed in a demo; they cost you every day, at the front desk and in accounting alike. That is exactly what we look for during an audit of your Odoo processes : the repeated actions that cost more than they seem.
⚔️ The Match: standard Odoo vs Kameos module
| Criterion | Standard Odoo | Kameos module |
|---|---|---|
| Reports printed (opening + 3 switches) | 4 | 1 |
| PDFs stored in the database | 4 | 1 |
| Wait per template switch | ≈ 2,7 s | < 0,1 s |
| PDFs in the email sent | 1 | 1 |
| New window | Up-to-date PDF | Up-to-date PDF |
| Batch sending | Standard behaviour | Standard behaviour (unchanged) |
Measured on a demo quotation, Odoo 19 Community, real rendering by wkhtmltopdf, on our test server: one opening of the composer, then three template switches. Your timings will depend on your documents and your server.
🛒 On the Odoo App Store
Mail Composer PDF Reuse is on sale on the official Odoo App Store, for 10 € (Odoo 18, 19 and 20): see the module page.
The Verdict: one PDF per window, not one per click
Odoo gets the email sent right: it just repeats itself along the way. For €10, the module removes the waiting and the useless copies, without touching what your customer receives or how fresh the document is.
Do your teams send dozens of quotations and invoices a day? Let us review these small slowdowns together during an
Odoo process audit, and teach your users the right habits with a tailored
Odoo training course.
On a quotation, you click Send by email, then switch email templates: order confirmation, pro forma, reminder… With every click, the window freezes for a few seconds. It is not your connection or your server: Odoo prints the document’s PDF again, identical, and stores one more copy in the database. We measured what actually happens, and we wrote a €10 module that avoids it. Here are the figures, the protocol to reproduce them, and what the module does not do.
💡 In short
- The finding: in the send window, every template switch prints the document’s PDF again and stores it once more in the database.
- The measurement: on a demo quotation, about 2,7 s per switch with standard Odoo, under 0,1 s with the module.
- The module: Mail Composer PDF Reuse, €10, Odoo 18, 19 and 20, Community and Enterprise, OPL-1 licence.
- What does not change: the email sent contains a single PDF, with or without the module.
1. A harmless gesture that triggers a new print
Odoo’s send-by-email window — the composer — opens from a quotation, an invoice or a purchase order. When it targets a single document, it runs in “comment” mode: the message is posted in the document’s chatter and sent to its followers.
In this mode, every change of email template triggers the attachment computation again (_compute_attachment_ids). This computation does not check whether the report required by the new template was printed for the same document a few seconds earlier, in the same window: it prints the PDF again (_render_qweb_pdf, so a full pass through the PDF engine) and creates a new attachment in the database.
The previous one is not deleted at that point. It stays stored until Odoo’s garbage collector runs, which only removes these composer attachments after one day.
💡 A detail that matters
Your customer does not receive four PDFs. The email sent contains only one, even with standard Odoo. The duplicate sits in the database, not in the email: what you pay for is the wait at every click and copies stored for nothing.
2. What we measured
Rather than claim, we counted. The protocol is easy to reproduce:
- Environment: Odoo 19 Community, on our test server.
- Document: a quotation from the demo data.
- Rendering: the real PDF engine (wkhtmltopdf), not a simulated rendering.
- Scenario: one opening of the composer, then three template switches.
- Recorded: the number of reports printed, the number of PDFs stored in the database and the time of each switch.
Result with standard Odoo: 4 reports printed, 4 PDFs stored, and about 2,7 s of waiting at every template switch. With the module: 1 report printed, 1 PDF stored, and under 0,1 s per switch.
💡 Read it as a measurement, not a promise
These figures apply to this quotation, on this server. Printing time depends on your document, your report and your machine: run the scenario yourself before drawing conclusions. What does not vary is the count: with standard Odoo, one print and one database copy per template switch.
3. The module: the PDF, printed once
Mail Composer PDF Reuse keeps track of the reports already printed in the open window, per report and per document. When you switch templates and the new template attaches the same report for the same document, the PDF already generated is attached again, without going back through the PDF engine. If the new template requires a different report, that one is printed as usual, once.
Three safeguards frame this reuse:
- Security: an attachment is only reused if it is a pending composer attachment created by the current user. A reference to someone else’s file is ignored.
- Scope: only the composer on a single document is affected. Batch sending keeps Odoo’s standard behaviour.
- Discretion: no settings, no menu. Once uninstalled, the composer behaves exactly as before.
💡 Key takeaway
Same gesture, same email sent: the module only removes the repeated printing and the database copies it leaves behind.
4. The trade-off, owned
The reuse only lasts as long as the window. Close the composer, change a line on the quotation, open it again: a new window prints an up-to-date PDF. That is intentional. We could have kept the PDF longer and saved more seconds, but at the risk of sending your customer a document that no longer matches your data. That is a risk we do not take.
The offer: €10, for Odoo 18, 19 and 20, in Community and Enterprise alike, under the OPL-1 licence. The module only depends on the Discuss app (mail). To get it, just ask us directly.
💡 The real issue behind this module
Two seconds per click go unnoticed in a demo; they cost you every day, at the front desk and in accounting alike. That is exactly what we look for during an audit of your Odoo processes : the repeated actions that cost more than they seem.
⚔️ The Match: standard Odoo vs Kameos module
| Criterion | Standard Odoo | Kameos module |
|---|---|---|
| Reports printed (opening + 3 switches) | 4 | 1 |
| PDFs stored in the database | 4 | 1 |
| Wait per template switch | ≈ 2,7 s | < 0,1 s |
| PDFs in the email sent | 1 | 1 |
| New window | Up-to-date PDF | Up-to-date PDF |
| Batch sending | Standard behaviour | Standard behaviour (unchanged) |
Measured on a demo quotation, Odoo 19 Community, real rendering by wkhtmltopdf, on our test server: one opening of the composer, then three template switches. Your timings will depend on your documents and your server.
🛒 On the Odoo App Store
Mail Composer PDF Reuse is on sale on the official Odoo App Store, for 10 € (Odoo 18, 19 and 20): see the module page.
The Verdict: one PDF per window, not one per click
Odoo gets the email sent right: it just repeats itself along the way. For €10, the module removes the waiting and the useless copies, without touching what your customer receives or how fresh the document is.
Do your teams send dozens of quotations and invoices a day? Let us review these small slowdowns together during an
Odoo process audit, and teach your users the right habits with a tailored
Odoo training course.