Daily updates from Odoo
Monday, April 20, 2026
9 changes · master
Resolved issues and error corrections
Payment reminder emails for subscriptions now avoid showing the exact automatic cancellation date until the final 24-hour reminder. This helps encourage earlier payment while also fixing cases where a zero-day grace period was incorrectly treated as the default delay.
Original PR description
- Hide close date until final 24h payment reminder: This commit updates the payment reminder logic to only expose the contract closing date precisely 24 hours before the subscription is automatically cancelled. By hiding the date during the earlier standard reminders, we create urgency without encouraging procrastination. It also fixes a native Python evaluation bug where an auto-close limit explicitly set to zero days would be treated as "falsy" and incorrectly default to a 15-day grace period. Both manual payments and tokenized payment failures have been updated to follow these new rules. task: 5902221
Payments dated in the future are now excluded from Mexico CFDI payment signing, preventing users from accidentally submitting documents that government rules do not allow. The invoice action to update payments will not appear when only future payments exist, and future payments are ignored when eligible payments are processed.
Original PR description
To sign a payment registered in the future is not allowed by the government. See http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Guia_llenado_pagos.pdf Steps: - Create a PDD invoice (the due date should be at least 1 month later than the invoice date) - Send it to CFDI - Register a payment in the future -> We have the 'Update payments' button that appear on the invoice view, if you clik on it the payment will be signed With this commit, we filter out the payments with a future date, that way we don't have the 'Update Payments' button if there are only future payments, or the future payments won't be taken into account when clicking on the button. opw-5934753 Forward-Port-Of: odoo/enterprise#114074 Forward-Port-Of: odoo/enterprise#112320
Subscription payments using a bank default account are now automatically matched with the related invoice. This prevents paid subscription invoices from incorrectly remaining marked as not paid, reducing manual follow-up for finance teams.
Original PR description
Currently, when a subscription payment is processed through a provider configured to use as outstanding account the bank default account, the resulting invoice may remain in an 'open' state even…
Currently, when a subscription payment is processed through a provider configured to use as outstanding account the bank default account, the resulting invoice may remain in an 'open' state even though the payment transaction is 'done'. This type of configuration is usually done when users want to skip the bank reconciliation process, and just create payments without the need to reconcile the payments with transactions. Steps to reproduce: - In Settings, under Sales > Invoicing, disable Automatic Invoice - Activate demo payment method - In the main Bank account add the default account as outstanding account for demo payment method. - Create a sales order with a subscription product - Open Preview - Pay - Go back to the sales order and open the created invoice Issue: The invoice is created and the payment is registered, but the invoice remains 'Not Paid'. Analysis: The invoice and the payment move lines are not automatically reconciled during the post-processing of the transaction, leaving the invoice unbalanced. opw-5869303 Forward-Port-Of: odoo/enterprise#110656
Asset creation eligibility for accounts is now based on whether an account is configured as accumulated depreciation on another account, rather than whether it was used by existing assets. This prevents legacy asset records from blocking valid new asset creation and keeps depreciation account choices clearer.
Original PR description
This commit fixes the `can_create_asset` flag on accounts to limit the creation of asset based on if account is used as an accumulated depreciation on another account, instead of used by an asset. This requirement came after users with old assets couldn't create assets using some accounts because they were used by the old assets with no possible way to change that. Better to limit on configuration data instead of business data. Also now, accounts that have models set do not show up in the accumulated depreciation dropdown. no-task Forward-Port-Of: odoo/enterprise#114096
The Documents mobile search panel now opens folder sections correctly again, including company and other grouped values. This also restores missing section icons and improves styling and keyboard navigation for a smoother mobile experience.
Original PR description
Follows the changes made in community and fixup some styling introduced in commit[1] - remove unneccessary styling - rescope styling in right files - fixup the searchpanel inside the bottom sheet task-6090140 [1]: odoo/enterprise@c573cd168e2e01bb9390ef7aae714688100fb2ae Community PR: https://github.com/odoo/odoo/pull/257378
Database synchronization no longer fails with an error when a user loses access, receives a new remote document, or the remote database cannot be reached. This helps users complete synchronization cleanly and ensures removed access is reflected without a disruptive traceback.
Original PR description
The aim of this commit is to allow a db_user to synchronize a database without facing a Traceback. Context: - A new document has been received by a remote db and we try to synchronize it. - The current user access has been removed from the remote db. - The database is unreachable. Before this commit: In all 3 previous cases, an access error would be raised because a db_user can't write on a database. After this commit: The synchronization finish gracefully and the db_user should have lost his access if it was removed from the remote db. task-id: 6046087 Forward-Port-Of: odoo/enterprise#114204 Forward-Port-Of: odoo/enterprise#113826
Unpaid work entry types are now properly linked to the Belgium monthly employee pay structure. This prevents unpaid absences from being incorrectly included in payslip payments, improving payroll accuracy for Belgian employees.
Original PR description
Work entry types with "unpaid" in their name were not linked to the "Belgium: Employees Monthly Pay" structure, causing them to still be paid during payslip computation. task-6123817
Customers booking appointments can use quick checkout by default, avoiding repeated requests for full billing address details. This improves the booking and payment experience where taxes are typically based on the event or appointment location rather than the customer address.
Original PR description
Forward-Port-Of: odoo/enterprise#114205 Forward-Port-Of: odoo/enterprise#113575
Studio-created models with Chatter enabled now get the activity filters needed for the activity menu. This means users clicking Late, Today, or Future activities see the correct records instead of all records.
Original PR description
Steps to reproduce
==================
- Install studio
- Create a new app
- Create a new model
- Keep the Chatter toggled (use_mail)
- Exit studio
- Create three records, one with an activity in the past, one today and one in the future
- Click on the clock status icon in the top right
- There should be a section with the new model
- Click on 1 Late => every records is displayed
- Same for Today and Future
Cause of the issue
==================
https://github.com/odoo/odoo/blob/b6434b91a7f94075e1372ec827787504ef7aa4f0/addons/mail/static/src/core/web/activity_menu.js#L39-L77
For this feature to work, the activities_{overdue,today,upcoming_all} filter should be present
Solution
========
We add them to the search view. They are all pretty much implemented the same way in every model.
opw-6069150
Forward-Port-Of: odoo/enterprise#114217
Forward-Port-Of: odoo/enterprise#113011