Daily updates from Odoo
Friday, September 26, 2025
24 changes · 19.0
Resolved issues and error corrections
This fixes an error that could appear after validating a reception and opening the move details when no package was assigned. Users can now view completed stock move details normally, even when package tracking is enabled but unused for that move.
Original PR description
Steps to reproduce: - Inventory -> Settings -> Enable Packages - Create a reception - Add a Product, put some quantity - Validate the reception - Open the move's details Issue: A traceback is generated, as now we're in a 'done' context and the widget should only display the closest package for each move line. But it didn't check whether there was a package assigned to the move line in the first place. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where barcode transfers could incorrectly group a separately moved lot-tracked component with the same component from a kit. This prevents unnecessary backorders when warehouse staff have scanned and processed the correct quantities.
Original PR description
**Problem:** when the components of a kit are tracked by lot, and that a picking is made of the components of a kit (exploded from the kit) and separatly one of the components on its own: if we open…
**Problem:** when the components of a kit are tracked by lot, and that a picking is made of the components of a kit (exploded from the kit) and separatly one of the components on its own: if we open the picking in barcode, the line of the component separated and line of the components of the kit are grouped, which leads to an unwanted backorder creation when validating **Steps to reproduce:** - create two products tracked by lot (comp A and comp B) - set an on hand quantity for both - create a storable product (final product) and create a BOM - in the BOM add comp A and comp B - create an internal transfer for 1 final product and 1 comp B - click on "mark as todo" - open this transfer in barcode, we see that the two lines from the comp B are grouped - scan the source location, click on +1 and +2 button to fulfill the quantities and validate **Current behavior:** a backorder is created **Expected behavior:** no backorder should be created as we entered the right quantities of the picking **Cause of the issue:** the lines from comp B should not have been grouped in the barcode picking. When doing the same scenario but with product not tracked those lines are not grouped opw-4998766 Forward-Port-Of: odoo/enterprise#94085 Forward-Port-Of: odoo/enterprise#93262
Monthly demand in the vendor product catalog now includes confirmed sales that use two-step or three-step delivery routes. This helps purchasers see more accurate demand earlier, reducing the risk of underestimating what needs to be bought.
Original PR description
Issue before this commit: ========================= When confirming a sale quotation in a 1-step delivery route, the product's monthly demand in the vendor’s product catalog in purchase RFQs was…
Issue before this commit: ========================= When confirming a sale quotation in a 1-step delivery route, the product's monthly demand in the vendor’s product catalog in purchase RFQs was updated correctly for the scheduled sale order. However, in 2-step or 3-step delivery routes, confirming a sale quotation did not correctly update monthly demand for the scheduled sale order. Users may see lower than actual monthly demand in the product catalog, potentially causing confusion when planning purchases in multi-step delivery flows. Steps to Reproduce: ========================= -Install `Sales`, `Inventory`, and `Purchase` modules, and enable `multi-step routes` in configuration. -Set the Outgoing Shipments in the warehouse to 2-step/3-step. -Create a product and assign a vendor in the Purchase tab. -Create a sale quotation for the product and Confirm it. -Go to Purchase → Create RFQ for the vendor and open the Catalog `Observation`: Monthly demand of product is not updated for the confirmed sale -Go to the Sale Order, open the delivery, and validate the intermediate transfer `Observation`: The monthly demand is now correctly calculated for the confirmed sale order. Cause of the issue: ========================= -In this [PR](https://github.com/odoo/odoo/pull/215363), the `move domain` was updated to include reserved moves (not only done moves) in monthly demand calculations. However, the method `_get_monthly_demand_moves_location_domain` only returns moves where `location_dest_usage` is `customer` or `production`. -In 2-step or 3-step delivery routes, the final transfer move is only created after the intermediate transfer moves are validated. These intermediate transfer moves have `location_dest_usage` = `internal` and are therefore excluded from the domain. -As a result, the product’s monthly demand is not fully reflected for confirmed sale quotations in multi-step delivery flows. With This Commit: ========================= -The method `_get_monthly_demand_moves_location_domain` is extended to also return moves whose `location_final_id.usage = customer` and `move_dest_ids = False` -`location_final_id.usage = customer` ensures that only moves that eventually reach the customer location are counted as monthly demand, -`move_dest_ids = False` ensures moves without subsequent transfers are counted. Without this, intermediate internal transfer moves would also be counted once the final move is created, which would incorrectly inflate the demand. -These conditions ensure that intermediate moves in multi-step deliveries are correctly included in monthly demand calculations, while avoiding duplication once subsequent transfers exist.
This fix ensures that when in-store pickup is the default delivery option, the shown pickup location is actually saved during checkout. Customers no longer see a location selected on screen only to be blocked later by an error saying no pickup location was specified.
Original PR description
Description of the issue/feature this PR addresses: This commit fixes the issue where the pickup location does not get set even though it is present on the checkout page. This happens when the user…
Description of the issue/feature this PR addresses: This commit fixes the issue where the pickup location does not get set even though it is present on the checkout page. This happens when the user directly adds an item to cart without specifying the pick up location before adding to cart. This results in the location not being set but at the checkout page, the default pick up location appears as one of the warehouses given the way the default pickup location is set when loading the checkout page values. This makes the user think that the pickup location is set, but when they try to go to the pay page, an error is thrown saying the pick up location was not specified. This commit sets the pickup location data in such a case. [This commit] refactored the way in which the default location would be set on the checkout page but did not take into account the possbility that the customer might not select the pickup location when they are adding to cart, thus only rendering the value at the checkout page but not actually setting it. Refactored the test cases to avoid the redundancy in the setup process. Steps to reproduce on runbot: 1. Set the pick up in store as the default delivery method by updating the sequence 2. Go the shop on the website and add any item to cart which has stock in the specified pickup location, but don't select the pickup location here 3. Go to the cart and click checkout 4. The default pickup location will be set here 5. Click on Confirm 6. An error will appear saying the location was not set opw-4954187 [This commit]: https://github.com/odoo/odoo/commit/1d3942c75e59ac9538d112df43b4e39f2462fee4 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228345 Forward-Port-Of: odoo/odoo#227826
This fix removes unnecessary test dependencies and duplicate test helper declarations in Knowledge, Manufacturing Work Orders, and Barcode. It helps keep automated checks stable without changing day-to-day user workflows.
Original PR description
runbot-error-232620
Public holidays now create timesheet entries using each employee's flexible working schedule instead of the company default. This prevents employees on shorter flexible days from being credited with too many time-off hours, improving payroll and timesheet accuracy.
Original PR description
## Issue: For employees with flexible working hours, when a Public Holiday is added, the timesheet was filled with 8h based on the company’s default calendar instead of the employee’s flexible…
## Issue: For employees with flexible working hours, when a Public Holiday is added, the timesheet was filled with 8h based on the company’s default calendar instead of the employee’s flexible schedule ## Cause: When creating `resource.calendar.leaves`, timesheets call `_work_time_per_day()` This method uses `work_hours_data` containing half-day intervals (tmp_start/tmp_end) These data come from `_attendance_intervals_batch()`, but we were passing an empty resource, so the check for `flexible_hours` failed: https://github.com/odoo/odoo/blob/bd7d5fdf8df3a4d544de3e2493cd4b3966fa7d0b/addons/resource/models/resource_calendar.py#L382-L393 We want to use the calendar itself as the calendar resource to get the `work_hours_data` ## Steps to reproduce: - On an employee, in Work Information, set the Working Hours to Flexible 40 hours/week - Modify Flexible 40 hours/week (Hours per Week: 30, Average Hour per Day: 6) - In Time Off > Configuration > Public Holidays, add a New holiday (You can leave default values) - Go in Timesheets > All Timesheets, before the fix, the flexible employee have 8h in internal for Time Off opw-4881758 Forward-Port-Of: odoo/odoo#228315 Forward-Port-Of: odoo/odoo#225876
Scanning a product in the Barcode app now opens the same kanban-style view used elsewhere in barcode workflows. This removes an inconsistent list view and makes the product scanning experience more predictable for warehouse users.
Original PR description
This commit is to show the kanban view as a default when scanning a product in barcode. Before PR: All views in barcode are in kanban view except when scanning a product, it appears in list view. After PR: Now barcode also shows kanban view when scanning a product.
This fix makes automated tour tests load their required resources consistently and avoids a conflicting test library being included in sale timesheet assets. It improves test reliability across different installation setups without changing day-to-day business features.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an accounting issue that could cause Odoo to crash when creating analytic items linked to invoices with a zero total. This helps users record and manage zero-value invoice entries without interruption.
Original PR description
The system will crash with error when try to create a analytic item. **Steps to Produce:-** 1. Install the `Accounting` module with demo data. 2. Go to `Settings > enable Analytic Accounting`. 3.…
The system will crash with error when try to create a analytic item. **Steps to Produce:-** 1. Install the `Accounting` module with demo data. 2. Go to `Settings > enable Analytic Accounting`. 3. Navigate to `Accounting > Customers > Invoices`. 4. Create a new invoice with total amount = 0 and confirm it. 5. Go to Accounting > Accounting > Transactions > Analytic Items. 6. Create a new Analytic Item and: - Set a value in the `Project` field. - Under the `Accounting` section, select the `Journal Item` linked to the last created 0-amount invoice and save. **Error:-** `ZeroDivisionError: float division by zero` **Cause:-** - At [1], when `line.balance` is 0.0 (for example, when a journal item is defined with a total of 0.0), the system raises an error. **Solution:-** - Added a condition to compute only when line.balance exists; otherwise,set the value to 100. [1]: https://github.com/odoo/odoo/blob/dff2423ac320fdb97d6bf1f106dc84be1d71cac2/addons/account/models/account_move_line.py#L3248-L3251 **sentry-6844926153** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226148 Forward-Port-Of: odoo/odoo#225068
This fix prevents certain existing translations from being deleted during upgrades when they were not explicitly marked as translated. Businesses upgrading Odoo can recover and reuse these translations instead of losing localized field text and seeing unexpected English content.
Original PR description
After upgrading Odoo from earlier versions to versions >= Odoo 15.5, you will notice that some fields that were translated before, are now in English. This is likely because those translations were…
After upgrading Odoo from earlier versions to versions >= Odoo 15.5, you will notice that some fields that were translated before, are now in English. This is likely because those translations were not marked as `state='translated'` in the DB. However, the missing translations were removed from the `_ir_translation` table during the upgrade. With this patch, we still keep the conservative behavior of only auto-translating fields marked as `state='translated'` in the DB (which is still probably wrong, because user translations should remain the same; if Odoo was displaying translated text before the upgrade and it is not after it, that's probably a bug; but that's another story...), but we no longer delete the other fields. This way, you can still mark them as translated after the upgrade and use the new tooling provided in https://github.com/odoo/upgrade-util/commit/fd578e31973596bf7f283ea5c6ebbdfd3314f8bc to recover those translations after the upgrade. @moduon MT-11570 cc @aj-fuentes Forward-Port-Of: odoo/odoo#228404
The Helpdesk performance dashboard now correctly opens the list of recently closed tickets that met their SLA when users click the SLA Success Rate metric. This makes the metric actionable again and helps teams review successful service performance without empty or unresponsive results.
Original PR description
**Steps to Reproduce** - Install the Helpdesk module. - Check the My Performance section. - Click on SLA Success Rate. **Issue:** Clicking on SLA Success Rate does nothing. It should display the closed tickets from the past seven days that were resolved within the SLA. **Cause:** Missed a domain filter, so no data is returned or shown. **Fix:** - Add the correct domain filter to show closed tickets. - And also modified compute method as well, so both are aligned. The problem arises in this [commit](https://github.com/odoo/enterprise/pull/76079/files#diff-e145df8bcc8742bcac578d5b05b6fc1aeaef55d236952a2a58d61ac92ce84a67R258-R260) task-4781994 Forward-Port-Of: odoo/enterprise#85412
This fixes an internal upgrade issue where Odoo could try to inspect dependencies for modules that are not available in the configured add-ons path. It helps upgrades proceed more reliably when some modules are missing or intentionally unavailable.
Original PR description
`Manifest.for_addon(module_name)` returns `None` if the module is unavailable in the addons path. This is a common case during upgrades. https://github.com/odoo/odoo/blob/ef15cb776ebdd409691cef03835b51fcf7e808da/odoo/modules/module.py#L280 See also: 8e496b3df0df708280c77b9a1ae15c46e922c3bc --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures spreadsheet radar chart labels are shortened only when needed. Short labels now remain readable, while longer labels are neatly shortened with an ellipsis, improving chart clarity for users.
Original PR description
Before this commit: - Radar chart point labels were truncated incorrectly because Chart.js passes extra arguments (label, index, labels) to the callback. - As a result, truncateLabel received the index as maxLen and applied unnecessary truncation. After this commit: - The callback now wraps truncateLabel to pass only the label string. - This ensures long labels are truncated with ellipsis and short labels remain unchanged. Task: 5078858 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now shows a user-friendly error when someone searches on certain many-to-many fields that are not stored in the database. This prevents confusing technical crashes and helps users or support teams understand why the search cannot be completed.
Original PR description
When searching non-stored many2many fields, fail with a user-friendly message.
`self.env['account.payment'].search([('reconciled_invoice_ids', '=', 1)])` today results in an AttributeError when trying to get the SQL for the bridge table name.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes an error that could occur when shoppers opened a product page with an unavailable combination of options while using store pickup. The store location selector is now blocked for impossible combinations, preventing crashes and keeping the shopping experience stable.
Original PR description
Steps to reproduce: 1. Configure 'pick up in store' delivery method 2. Open the page of the product with an impossible combination (e.g. Customizable desk) 3. Edit the url to have attribute values of the impossible combination (2,5) There is a traceback as there is no `inStoreStockData`. After fixing it, the widget was still clickable, but as there was no product, there was another traceback since the data was not present. After this commit, the location selector is prevented from being opened when the combitation is not possible. Forward-Port-Of: odoo/odoo#228592 Forward-Port-Of: odoo/odoo#228336
This fixes a checkout error that could appear when customers bought items that do not require delivery, such as paid event tickets. The address page now handles orders without a delivery section correctly, helping customers complete checkout without interruption.
Original PR description
This commit fixes the js error triggered on the address page of the checkout. The js targets the H5 tag containing the title of the delivery div. However, if there is no deliverable product such as event tickets, this div is not rendered and an error is triggered by the js when it tries to use the textContent attribute of the undefined element. Reproduce: Register for an event with paid tickets. The error will be triggered on the address page of the checkout. Task-5107362
Barcode receipt validation now correctly blocks completion when the operation type requires a destination location scan. This helps ensure inventory is placed in the intended location and prevents inaccurate warehouse records.
Original PR description
This commit fixes the the problem of not forcing destination location scan before barcode validation even if the setting `Force a destination for all products` is activated. To reproduce: 1- Open `Operation Types` in Inventory. 2- Go to Receipt and open the `Barcode App` page. 3- Select `Destination Location` to be `After group of products`. 4- Activate the checkbox `Force a destination for all products`. 5- Create a receipt and validate it in Barcode App without scanning a destination location. = Validation is accepted. However you shouldn't be able to validate unless you scan a destination location.
This fix ensures Turkish Nilvera e-invoice files are identified correctly during import. As a result, imported invoice records can be decoded and filled in instead of being left empty.
Original PR description
The imported records are not being decoded correctly due to _get_edi_decoder returning an empty value. This happens because the value of import_file_type for UBL.TR is incorrectly returned as TR by _get_import_file_type. As a result, the decoder cannot be found and the records are left empty. task-4714467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228570
The IoT Box remote debugging dialog now always shows the generate password button. This avoids confusion after the related request check was removed and ensures users can access password generation when needed.
Original PR description
Since we recently removed the check for the requests sent to the iot box controllers the generate password button being invisible doesn't make sense anymore. This PR makes it always visible Forward-Port-Of: odoo/odoo#228602
This fix prevents stock users from running into an access error when sales line values include tax information. It allows the reinvoicing flow to continue smoothly without changing what users see or how they work.
Original PR description
Description of the issue/feature this PR addresses: When getting the sale line values as a stock user, we get an access error when trying to access taxes. We should bypass access checks for these values. The lines are already created with sudo. Current behavior before PR: User cannot read account.tax model. Desired behavior after PR is merged: Avoid error. (runbot.build.error/231611 - test_picking_reinvoicing) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
VAT payment instructions in Belgium and Netherlands reports now display with cleaner formatting when sent through the mail composer. This prevents awkward word breaks and misaligned fields, helping messages in the chatter look clearer and more professional.
Original PR description
Issue: -VAT payment instructions sent via mail composer were shown in the chatter with poor formatting. -Words could be split in half and fields were misaligned. Fix: -Updated the layout to improve text wrapping and field alignment in the chatter. Impact: -Ensures VAT payment instructions are displayed clearly and professionally in the chatter. task-5065873
This change removes a formatting issue in the IoT Box service setup that caused system logs to show a startup configuration warning. It helps keep device startup logs clean and avoids confusion when monitoring Odoo IoT Box services.
Original PR description
This PR fixes an error in Odoo journalctl logs: ``` Sep 12 01:11:48 iotbox systemd[1]: Starting odoo.service - Odoo IoT Box service... Sep 12 01:11:49 iotbox systemd[1]: /etc/systemd/system/odoo.service:5: Failed to parse sec value, ignoring: 0 # infinetely wait for Odoo to start Sep 12 ``` It looks like systemd attemps to interpret inline comments, which this PR removes task-5113737 Forward-Port-Of: odoo/odoo#228553
A small error in the HR contract helper was corrected so related contract versions are found accurately. This helps ensure employee contract history and related HR processes use the complete set of contract records.
Original PR description
The helper method to get all versions related to a contract was missing an '='. Forward-Port-Of: odoo/odoo#228420
Project and timesheet walkthrough tests now handle cases where project templates turn the New button into a dropdown. This helps keep automated checks reliable when demo data includes active templates, reducing false build failures.
Original PR description
Before this commit, project tours block on the Kanban and List "New" button being turned into a dropdown list when there are active project templates. These tours cannot be fixed by simply archiving or unlinking project templates before running them in the tests, because two of them are onboarding tours which need to work in both situations. With this commit, we add a new step in the tours that clicks on the "New Project" dropdown item when the button is a dropdown. Otherwise, the step will be skipped. Task-id: none (runbot builds including demo data were red)