Daily updates from Odoo
Saturday, August 8, 2026
12 changes · master
Enhancements to existing features
The recurring donation product now includes a default placeholder image in the website shop. This gives donation pages a more complete and consistent appearance when no custom product image is set.
Original PR description
Added placeholder image for the recurring donation product. task-6361612 Forward-Port-Of: odoo/enterprise#126209
Resolved issues and error corrections
This change prevents the Website Sale Subscription app from failing to install if the default monthly subscription plan was previously deleted. It skips linking optional donation pricing data to that missing plan, allowing setup to continue normally.
Original PR description
Currently, an error occurs when user tries to install `website_sale_subscription` after deleting the monthly subscription plan. Steps to replicate: - Install `sale_subscription`. - Open Subscription…
Currently, an error occurs when user tries to install `website_sale_subscription` after deleting the monthly subscription plan.
Steps to replicate:
- Install `sale_subscription`.
- Open Subscription > Configuration > Recurring Plans.
- Delete the plan named `monthly`.
- Install `website_sale_subscription`.
Error:
```
ValueError: External ID not found in the system: sale_subscription.subscription_plan_month
odoo.tools.convert.ParseError: while parsing /home/odoo/odoo19/enterprise/website_sale_subscription/data/donation_data.xml:16, somewhere inside
<record id="product_recurring_donation_pricing_monthly" model="product.pricelist.item">
<field name="plan_id" ref="sale_subscription.subscription_plan_month"/>
<field name="product_tmpl_id" ref="product_recurring_donation"/>
<field name="fixed_price">1.0</field>
<field name="pricelist_id" eval="False"/>
</record>
```
Cause:
- Error is raised when assigning the `Monthly` subscription plan in the `website_sale_subscription` master data because the user has deleted the `Monthly` subscription plan.
Solution:
- As the `plan_id` is not a required field, we can skip assigning the `plan_id` if it the record is not found.
sentry-7441124574
Forward-Port-Of: odoo/enterprise#125649Users can now revoke a Belgian CodaBox connection using either the fidu password or a valid IAP token. This fixes a mismatch between the server and client behavior, making account disconnection smoother when a token is available.
Original PR description
The user should be able to revoke the CodaBox connection by either entering the fidu password or by using a valid iap_token. This was implemented in the iap server but not in the client side, after this commit the user should be able to either revoke by using the fidu password or by using the iap_token. task-6348433 Forward-Port-Of: odoo/enterprise#126698
This fix restores missing styling for spreadsheet side panels in the backend. Users should see the affected panels display correctly again after a previous CSS reorganization accidentally omitted the shared styling.
Original PR description
During the reorganisation of the css in #114180, the generic sidepanel.css file was removed from every assets. It belongs to the bundle assets at is impacts sidepanels that are only available in the backend (i.e. not in public spreadsheets) Task-6448906 Forward-Port-Of: odoo/enterprise#126850
Fixed an issue that could cause event badge printing to fail when a badge template included an image. This helps event staff print attendee badges reliably without interruptions.
Original PR description
Before this commit, some faulty logic in the `load_image` function caused a traceback when the ESC/LABEL badge template tried to use an image field. This bug only surfaced recently due to changes in how binary fields are accessed. After this commit, the logic is fixed and the traceback no longer occurs. task-6452486 Forward-Port-Of: odoo/enterprise#127017
The Sign portal now counts only documents that still need action from the signed-in user. This prevents completed signature requests from continuing to appear in the user’s to-sign total, making the portal status clearer and more accurate.
Original PR description
Version: 18.0 Steps to reproduce: - Create a sign request with two signers. - Assign the first signature to a portal user. - Log in as the portal user and sign the document. Issue: After signing, the to-sign count in the portal does not decrease. This is because the query only checks the overall sign request state instead of the individual signer's item state, so the count remains unchanged Fix: Added an item level state check to the count query so it only counts items that are still pending for that specific user. Task ID: 6412976 Forward-Port-Of: odoo/enterprise#126962 Forward-Port-Of: odoo/enterprise#125632
Google Reserve availability responses now avoid reporting more open spots than the total available spots. This prevents rare configuration mistakes from sending confusing or invalid availability information to Google.
Original PR description
This commit makes sure that we never send more "spots_open" than there are "spots_total" when Google Reserve asks for availabilities. This could happen in very rare case when customers create configurations that do not make sense (for example a table of 6 but no management of capacities and configuring 125 spots per resource). Task-6449615 Forward-Port-Of: odoo/enterprise#126855
Payslip reports now correctly hide note sections that contain only empty formatting rather than real content. This prevents blank note areas from appearing on payroll documents, keeping reports cleaner and more professional.
Original PR description
The condition was only checking if the note field was truthy. Actually, this can be a problem if the field is with only empty tags. Instead, we should use is_html_empty. Forward-Port-Of: odoo/enterprise#127052 Forward-Port-Of: odoo/enterprise#127008
This fixes payroll worked-day calculations so they can correctly consider inactive related records when generating payslips. It helps avoid incorrect payroll results in edge cases where archived records still affect employee pay history or contract data.
Original PR description
Forward-Port-Of: odoo/enterprise#114877
Fixed an issue in the Barcode app where selecting products from mixed packaged and unpackaged delivery lines could leave two lines selected at once. This makes warehouse picking clearer and helps prevent operator confusion during deliveries that include both package types.
Original PR description
**Steps to reproduce:** - Enable "Move Entire Packages" setting on deliveries - Make a product A, that has a package P1, on hand qty of 1 - Make product B that don't have a package, but on hand qty…
**Steps to reproduce:** - Enable "Move Entire Packages" setting on deliveries - Make a product A, that has a package P1, on hand qty of 1 - Make product B that don't have a package, but on hand qty of 1 - Make a delivery that has both of those products, requested qty of 1 for both - Mark it as todo - Go to the barcode app, select the delivery - Select the line with product B - Select the line with product A --> The line with product B is not unselected **Why the fix:** When we have a mix of packaged products and products without a package on the same operation, they are handled separately. The products without a package are handled in https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L388-L392 that calls https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L1277-L1284 But as you can see, there are no mention of the selected package line, which is stored in **this.lastScanned.packageId**. As we do not touch this variable, the selected package line stays selected. The same is true for the other way around, when we select a package line we call https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L394-L398 This function does not care for the **selectedLineVirtualId** which represents the selected line without a package. To avoid this and make it so that only one line is selected even if they have different package, we now set the corresponding value to false to unselect the other line in all situation. This is basically how it's done in https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L1202-L1208 to unselect every line regardless of packages. opw-6266203 Forward-Port-Of: odoo/enterprise#126790 Forward-Port-Of: odoo/enterprise#122038
Code cleanup and technical improvements
The live chat customer information panel now handles the Open Tickets section more consistently by removing a redundant check. This reduces the risk of display issues or crashes and adds test coverage to keep the behavior stable.
Original PR description
Enterprise counterpart of "[FIX] crm_livechat, *: prevent crash in the info panel", which explains why the condition of the caller goes away. This commit drops the same condition on the "Open tickets" block, and covers that block with a test. https://github.com/odoo/odoo/pull/280430 Forward-Port-Of: odoo/enterprise#126761 Forward-Port-Of: odoo/enterprise#126715
This update removes an outdated compatibility layer in several Odoo Enterprise screens now that the newer interface reference system is fully in place. It should not change day-to-day behavior for users, but it simplifies the code and reduces the risk of future maintenance issues.
Original PR description
Removes the leftover t-custom-ref migration shims Community: https://github.com/odoo/odoo/pull/280967