Troubleshooting
What goes wrong with Customer Payment Reminders, how to recognise it, and what to do.
Nothing is being sent
Work down this list; it is in order of how often each one is the answer.
- The master switch is off. Invoicing → Configuration → Settings → Customer Payments → Chase Overdue Customers. Off by design until you turn it on.
- The scheduled action is inactive or has never run. Settings → Technical → Scheduled Actions → Payment Reminders: Chase Overdue Customers. Check Active and Next Execution Date.
- Nobody is actually due. Open the send wizard on the customers in question: the Skipped because column tells you exactly why each one is being passed over.
- Outgoing mail is not configured. Settings → Technical → Email → Outgoing Mail Servers. The module hands the message to Odoo; if Odoo cannot send it, it sits in the queue.
The wizard says "The First reminder has already been sent"
Each level fires once per customer. That is the mechanism working. To chase again at the same level, set Force a Level in the wizard.
A customer is overdue but does not appear in Customers to Chase
That list shows customers currently at a level. Someone can be overdue and not on it:
- their oldest overdue invoice has not reached the first threshold yet
- their total is below the minimum chase amount
- they are paused, or excluded
- every applicable level has already been sent
The customer's Payment Reminders tab and the wizard preview both give the reason.
The level shown on a customer looks stale
It is refreshed by the Payment Reminders: Refresh Levels scheduled action once a day, not on every page load — recomputing it live for every customer in a list would be expensive. Run the action by hand to catch up.
The email went to the wrong contact
The module writes to the customer's invoicing contact — a child contact of type Invoice with an email address — and falls back to the company. If it went to the wrong person, that contact is the thing to fix, on the customer record.
The email arrived with no invoices attached
Attachments are per level: Reminder Levels → (level) → Attach the Invoices. If it is ticked and nothing arrived, the invoice PDF could not be produced — usually wkhtmltopdf missing or misconfigured on the server. Print the invoice by hand to confirm.
The wording is wrong / not our voice
That is expected. The shipped templates are deliberately plain and slightly formal. Reminder Levels → (level) → Email Template → Internal link, and rewrite it. Send one to yourself before you send it to a customer.
"Two levels at the same day count would fight over which one applies"
You are trying to create a level at a day count another visible level already uses — including a company-specific level clashing with a shared one. Give it a different day count, or archive the one you are replacing.
"A reminder cannot be sent before the invoice is due"
Days overdue cannot be negative. If you want to write before the due date, send an ordinary email from the invoice; that is a different kind of message.
"You are not allowed to modify Payment Reminder Level"
Changing a level changes what every customer receives, so it needs Credit Manager. Settings → Users & Companies → Users → (user) → Payment Reminders.
A user cannot see the module at all
They have neither group. Give them Credit Controller. Without it there is no menu, no tab on the customer, and no history — by design.
The pause did not clear itself
Pauses expire the day after the date you set: a pause ending today still holds. If the date has genuinely passed, run Payment Reminders: Chase Overdue Customers — the expiry sweep runs as part of it.
History disappeared
Reminders older than three years are pruned by the Prune History scheduled action. Change its schedule, or deactivate it, if you need to keep more.
The activity went to the wrong person
Assign To on the level, empty by default, which means the customer's salesperson. Set Responsible on the customer to override it for one account.
Still stuck
Email info@technovision.dev with:
- your Odoo version and edition, and how it is hosted
- the module version (18.0.1.0.0)
- what you expected and what happened
- the Skipped because text if the wizard gave one
- the server log around the time of the run, if it is a sending failure