Tuesday, May 19, 2026
14 changes · 18.0
Resolved issues and error corrections
This update ensures that the XML invoice file generated when sending invoices to Verifactu is now saved and accessible to the user. Previously, this file was discarded, causing issues when users needed to provide it to the Spanish government for assistance. Now, users can easily download and use the XML file.
Original PR description
Before these changes when the user confirms an invoice and sends it to verifactu, the system returns a JSON file. The problem was that if the user needs assistance from the government, they ask for the XML file. The XMl was being discarded. Now these changes keep the XML and attach it to the verifactu tab for the user to have it and use it with the government if they need --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that prevented users from creating new website pages when a template was marked as 'Is a Template' and the page view lacked a specific HTML element. The fix ensures the system handles missing elements gracefully, avoiding errors and allowing users to customize website pages without disruption.
Original PR description
Currently, an error is raised when creating a new website page after a custom or existing page marked as `Is a Template`, if the view architecture does not contain a div with `id="wrap"`. Steps to…
Currently, an error is raised when creating a new website page after a
custom or existing page marked as `Is a Template`, if the view architecture
does not contain a div with `id="wrap"`.
Steps to produce an error:
- Go to the website and create a new website page (e.g., test).
- Go to the newly created page and make sure the website edition menu is open
- Click on Site > Properties > Enable `Is a Template` > Save & Close
- Go to Site > Pages
- Click `Bug icon` on the above created page (or open the view of the above
created page as `website.test`).
- Remove the div that contains `id="wrap"` from the view (mostly users do it
to customize the view) and save it.
- Go to Site > Pages > Click New > An error will occur.
This error occurs because the code at line [1] tries to access the first
element of the list returned by `html_tree.xpath('//div[@id="wrap"]')`.
However, if the user has removed this `div`, the list is empty and accessing
the first element raises an error.
This commit fixes the above issue by skipping custom templates from the
result if the template does not contain a `wrap_el(id="wrap")`.
[1]: https://github.com/odoo/odoo/blob/f592fba684225f059fb60c38878e0554ae3e6ac8/addons/website/controllers/main.py#L707
Sentry-7315470405This update fixes an issue where product prices didn't automatically update when the cost price changed. Previously, users had to manually switch price lists to trigger the update. The fix adds a direct update mechanism to ensure on-sale prices accurately reflect cost changes, improving pricing accuracy and reducing manual intervention.
Original PR description
When we create a product variant and have a pricelist which is based on the cost price, and change the cost price, the on_sale_price doesn't update. You have the change the price list to other and back to the one you want for it to trigger change because the _onchange_compute_pricing only gets triggered if there's change on pricelist (pricer_sale_pricelist_id), and sales price (lst_price). Steps to Reproduce: 1.Create a pricelist and add a line with "formula" price type, and based on "cost", 2.Create a product variant, and add the pricelist just created. 3.Change the "Cost". The "On Sale Price" doesn't update. 4.You have to change the price list to some other and back to the one you want for the "On Sale Price" to update. To fix the issue, we add the field Cost (standard_price) on api.onchange, so when we change the cost it'll update the "On Sale Price" right away. opw-5947995
This update resolves an issue where entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells of the Master Production Schedule caused an error. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity within the planning process.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917This update allows Bookkeepers to remove deferred bills by resetting them to draft, resolving a previous restriction that prevented deletion due to sequence number checks. The change ensures Bookkeepers have the necessary flexibility to manage their accounting tasks without needing manager approval for routine operations.
Original PR description
### Issue: When a user with "Bookkeeper" (Accounting) rights tries to reset a Bill to draft, the process is blocked by the following UserError: "You cannot delete this entry, as it has already…
### Issue: When a user with "Bookkeeper" (Accounting) rights tries to reset a Bill to draft, the process is blocked by the following UserError: "You cannot delete this entry, as it has already consumed a sequence number and is not the last one in the chain. You should probably revert it instead." This occurs specifically when another journal entry has been created and posted in the deferred move's journal after the deferred entries, blocking the sequence for non-manager users However, a Bookkeeper should technically be allowed to reset these moves, as they can manually reset them to draft, clear the name, and delete them You can refer to the comment on the function `_unlink_forbid_parts_of_chain()` ### Cause: `self.deferred_move_ids._unlink_or_reverse()` attempts to unlink the deferred moves During unlinking, the system performs a sequence integrity check For non-manager users, this check prevents the deletion of moves that are not the last ones in the journal's sequence https://github.com/odoo/odoo/blob/1497cd0a590e0a9089d6c041b57930aaecba42ea/addons/account/models/account_move.py#L3500-L3518 ### Steps to reproduce: - Install `account_accountant` - Login as Marc Demo (By default it's a Book Keeper) - Create and post a Bill (Deferred Date: 01/01 to 31/12) You may need to display the Deferred Date, that's hidden by default - Open the Deferral Entries with the Smart button - Manually create or duplicate an entry in that same journal and post it - Return to the Bill and try to "Reset to Draft" Before the fix, the error is raised opw-6113349
This update resolves an issue in a test related to employee leave calculations. Without specific demo data, the test would produce inconsistent results. Adding a timezone ensures the test behaves predictably and reliably, improving the accuracy of our leave tracking system.
Original PR description
In the test `test_create_work_entry_for_flexible_employee_leave`, the `jules_emp` will not have a timezone if the test is ran without demo data. This commit adds a timezone to ensure consistent behavior. error-230949 (https://runbot.odoo.com/odoo/error/230949) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where URLs with mixed or uppercase characters weren't automatically converted to clickable links within the HTML editor. The change ensures all URLs, including single-character domains like 'x.com', are correctly recognized and linked. This improves the user experience and allows for more seamless content creation.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where installers and technicians were blocked from updating contact information on project tasks. The fix ensures these users can now modify the contact associated with a task, improving their ability to manage projects. This change aligns with existing security practices and prevents access errors.
Original PR description
Description of the issue/feature this PR addresses: When a user without partner write access changes the contact on a project task, _inverse_partner_phone writes to partner.mobile/phone without sudo, causing an access error. Use sudo() when accessing the partner record in _inverse_partner_phone, consistent with the same logic already applied in industry_fsm. Current behavior before PR: Users without partner write access (installers, technicians) received "You are not allowed to modify Contact records" when changing the partner_id on a project task. Desired behavior after PR is merged: Users without partner write access (installers, technicians) can change the partner_id on a project task. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a test failure within the Odoo accounting module. The change ensures the test works correctly when only the core 'account' module is installed, addressing an issue caused by relying on a specific user group inherited only through the 'account_accountant' module.
Original PR description
**Problem:** In PR #263425, the test uses the user group `group_account_manager` to grant write access to `bank.statement.line`. However, this write access is available through `group_account_user` which is only inherited in `account_accountant`. **Solution:** Instead, use the user group `group_account_user` directly so the test works with only `account` installed. Forward-Port-Of: odoo/odoo#265002
This update corrects a technical issue where the customer reference field on invoices wasn't being properly included in the required FA3 XML file sent to the Polish tax authority (KSEF). This ensures accurate invoice data transmission and compliance with local regulations. The fix was implemented as part of a routine maintenance update.
Original PR description
**STEP TO REPRODUCE** 1. Create an invoice and fill the customer reference field (other info tab). 2. send the invoice to ksef. 3. Open the generated fa3 file, and notice there is no mention of the customer reference. Ticket [link](https://www.odoo.com/odoo/project.task/6150812) opw-6150812
This update resolves a bug that prevented the 'Replenish' function from working correctly when a product didn't have a matching route configured. The fix ensures the system handles cases with no routes gracefully, preventing an error and ensuring replenishment processes can complete successfully.
Original PR description
## Steps to Reproduce: 1. Install the stock module. 2. Activate "Multi-Step Routes" from settings. 3. Activate the "My Company (Chicago)" company. 4. Create a route for the Chicago company. 5. Create a new product and enable the created route on it. 6. Click on the "Replenish" button. ## Error: `IndexError - tuple index out of range` ## Cause: At [1], when none of the product routes belong to the current company or are shared routes, the filtering returns an empty recordset. As a result, trying to access the first route from the empty result raises an index error. ## Fix: This commit only assigns `route_id` when a route matches the given condition. Otherwise, it keeps the value as `False`. [1] - https://github.com/odoo/odoo/blob/13c0e082c260381a332fe1425fe2ba83a1c0c579/addons/stock/wizard/product_replenish.py#L78 sentry-7488075413
This update fixes an issue where Quality alerts weren't being created when incoming emails didn't include a company. The fix ensures that a default company is assigned, preventing errors and guaranteeing that all Quality alerts are properly recorded. This improves data accuracy and reporting.
Original PR description
Steps to reproduce 1. Install quality 2. Create an incoming email server 3. Go to Quality > Configuration > Quality Teams > Team > add alias email 4. Do not fill the company field 5. Send email to this alias 6. Fetch emails from incoming email server Issue: - Record is not created in the quality alert Root cause: - For the Quality alert model, the field `company_id` is required, but while we fetch emails We haven't set the `company_id` on the quality alert team, resulting in trying to insert a null value on the quality alert model. Solution: - Give a default value to company_id. - Raise a validation error on not having a company_id - Update alias default values on changing company_id opw-5917791
This update corrects a translation issue within the Gantt view, specifically the button that controls display modes. The fix ensures that all button labels are accurately translated, improving the user experience for international users. This was reported and addressed by our translation team.
Original PR description
The title of the button allowing to toggle the display mode in the Gantt view was not translated. This commit adds a getter to compute the title based on the current display mode, and uses it in the template. Issue reported by translator.
This update fixes a bug that prevented users from creating new Helpdesk teams. The issue occurred when the system attempted to use a default email template after removing all Helpdesk stages. The fix ensures the template exists before attempting to access its ID, preventing a system error.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877