Daily updates from Odoo
Monday, December 15, 2025
23 changes · 19.0
Resolved issues and error corrections
This update fixes a potential error that could prevent invoices from being confirmed when specific currency and pricing settings are used. The fix adds a check to ensure invoice amounts are non-zero before currency calculations, preventing a division-by-zero error. This ensures smoother invoice processing and avoids disruptions to financial operations.
Original PR description
Steps to reproduce: -------------------- 1. Install l10n_cl and switch to the CL company 2. Create a new invoice: - Change the currency to a value different from the company currency (e.g., from CLP to USD) - Add an invoice line with a price value of 0 - Remove the default tax value 3. Try to confirm the invoice Issue: ------ A traceback occurs: `ZeroDivisionError: float division by zero` Cause: ------ Since the price value is 0, the `amount_total` of the move becomes 0. When computing the currency rate, it tries to divides by `amount_total`, resulting in a ZeroDivisionError. Solution: --------- Add a conditional check before division to ensure the `amount_total` is non-zero Related community PR: https://github.com/odoo/odoo/pull/235252 opw-5247058 Forward-Port-Of: odoo/enterprise#101695 Forward-Port-Of: odoo/enterprise#99518
This update resolves an issue where saving changes to the website footer template caused errors due to how customizations were being applied. The fix ensures that necessary CSS classes are always present, allowing users to successfully save their footer designs after making changes like switching templates or editing company names. This improves the overall stability and usability of the website builder.
Original PR description
The new footer templates had xpath selectors that were breaking in case the user changed some things in the footer. This is caused by a different order of evaluation after the copy is made to save the customized website view. This commit patches the view to add the class on which the xpath relies so that it is always present, thus the xpath always apply. Steps to reproduce: - Open website builder (on an new db) - Click on the footer - Change "Template" to "Mega" (or "Mega Columns", or "Mega Links") - Click on "Company Name" in the footer, and edit the text - Save - Bug: save fails because an xpath does not apply Commit adding "Mega": f252e096a3c8c432e601f6bae6fc1c11cd92c90b Commit adding "Mega Columns": aa0e653b5f641c735b4b6e25f80ae5d1d0a6dd94 Commit adding "Mega Links": 97ab0bc41bd3e5bd48b7e35e7d6918017d66004d task-5181309
This update fixes a technical error that occurred when removing IoT records in Odoo. The issue stemmed from an incomplete evaluation of a key tag, leading to a traceback. The fix ensures accurate record removal, improving system stability and reliability.
Original PR description
For an unknown reason, when removing an IoT record, Odoo was evaluating only partly an `invisible` tag. The condition was `not version or version[0] == 'W'`. When deleting, `not version` was still false, but `version` in `version[0]` was undefined, resulting in a traceback. This is fixed using `'W' in version` instead. opw-5352092
This update fixes an issue where shifts were incorrectly created for weekends and non-working days. The change ensures shifts are now automatically generated based on a resource's defined working schedule, improving planning accuracy and reducing manual effort.
Original PR description
Steps to reproduce: - Go to Planning. - Create a multi-shift for a resource for the entire week. - Shifts are created for all days, including weekends and non-working days. Issue: Shifts were created for the entire week, ignoring the resource working schedule, so weekends and non-working days were also included. Cause: Shifts were created without considering the resource’s working schedule, which led to inclusion of weekends and non-working days. Fix: Updated shift creation to align with the resource’s schedule, skipping weekends and non-working days. task-5051694
This update removes messages indicating the POS system's certification status. Currently, the POS is only certified to the LNE in version 18.0, and this change ensures that users don't see outdated certification information until a newer version is certified.
Original PR description
The POS in only certified by the LNE in version 18.0. Until such time that we receive the certification in a higher version, we will disable the certification status messages. task-5386904 Forward-Port-Of: odoo/enterprise#102028
This update ensures that rental products are correctly unavailable when their associated employees are on time off. Previously, the system didn't account for employee absences, leading to incorrect availability displays. This fix improves the accuracy of rental product availability, enhancing the customer experience.
Original PR description
…navailabilties Before this commit, when an human resource is linked to rental product thanks to his role and take a time off at a certain day. The user inside ECommerce should be able to add that product when the resource is off (since there is no resource available) at the period chosen. However, that check does not take into account the time off taken by the resources linked to that service rental product. This commit makes sure the time off of the resources linked to the product are correctly taken into account to know if the service rental product is available at a specific period. task-5075698 Forward-Port-Of: odoo/enterprise#98165
This update fixes an issue where newly created employees were incorrectly marked as unavailable in the Planning Gantt view. The fix addresses a problem with how the system identified employee contracts, and now accurately reflects employee working periods based on their contract dates. This ensures accurate scheduling and resource allocation.
Original PR description
Steps to reproduce: - 1. Install Planning module. 2. Create a new employee without setting a contract start date. 3. Go to the Planning Gantt view by resource. Issue: - The Planning Gantt view…
Steps to reproduce:
-
1. Install Planning module.
2. Create a new employee without setting a contract start date.
3. Go to the Planning Gantt view by resource.
Issue:
-
The Planning Gantt view incorrectly grays out the entire schedule for newly created employees. It can also incorrectly gray out the initial days of a contract.
Cause:
-
1) With the introduction of `hr.version`, a version is now created for every employee by default. The logic to identify employees with a contract history was using a domain `[("employee_id", "in", ...)]`, which selects all employees, even those with no contract. This incorrectly flagged new employees as having a contract history, causing them to be marked as unavailable.
2) The view was using the computed `version.date_start` field. The computed `date_start` is calculated as the maximum of the version's creation date and the contract's start date. (e.g., contract starts Sep 1st, version created Sep 5th), the computed start date becomes Sep 5th, incorrectly graying out the period from Sep 1st to Sep 4th.
Fix:
-
1) The query that checks for an employee's contract history is now filtered by `('contract_date_start', '!=', False)`.
2) The Gantt view's working period calculation now uses the stored, `contract_date_start` and `contract_date_end` fields.
task-5058866
Forward-Port-Of: odoo/enterprise#94007This update resolves an issue where multi-step manufacturing processes involving by-products weren't correctly registering the by-product lines in the system. The fix ensures that by-products are properly added to the manufacturing process, creating the necessary pre-production and production lines. This improvement streamlines the 3-step manufacturing workflow.
Original PR description
### Steps to reproduce: - In the settings enable By-Products an Multi-step routes - Put your warehouse in manufacturing in 3 steps - Create two storable products: - Final Product (FP) with an empty…
### Steps to reproduce:
- In the settings enable By-Products an Multi-step routes
- Put your warehouse in manufacturing in 3 steps
- Create two storable products:
- Final Product (FP) with an empty bom
- By Product (BP)
- Go to the barcode app > Operations > Manufacturing > New
- Scan FP > Register By-Products
- Scan BP
#### > The line is created with pre-prod as location and prod as destination
### Cause of the issue:
Since no existing line refers to the by product, a new line is created and its `location_id` and `location_dest_id` are provided by the `_getNewLineDefaultValues`:
https://github.com/odoo/enterprise/blob/17fd46b04d87585b7ed46c00d9559414daa17384/stock_barcode/static/src/models/barcode_model.js#L562-L566 However, at this point nothing had set the `params.newByProduct` in the `processBarcode`:
https://github.com/odoo/enterprise/blob/17fd46b04d87585b7ed46c00d9559414daa17384/stock_barcode_mrp/static/src/models/barcode_mrp_model.js#L375-L383 In fact, the only thing indicating that we are creating a by prodcut line at this point is the `displayByProduct`.
### Note:
The issue is no longer reproducible in 18.0+ as this change has already been applied in 2d5dbb93e6b33c2be786f9b2361c993f715d1a7f
opw-5350222
Forward-Port-Of: odoo/enterprise#101861
Forward-Port-Of: odoo/enterprise#101087This update resolves an issue where the reschedule button remained visible in projects with task dependencies disabled. The fix ensures the button is hidden when task dependencies are turned off, providing a cleaner and more intuitive user experience. This improves project management clarity.
Original PR description
Steps to reproduce: - Install the project_enterprise module. - Go to project configuration and enable task dependencies. - Open project settings and disable task dependencies. Issue: The reschedule button remains visible even when task dependencies are disabled for the project. Cause: The visibility check for the reschedule control did not consider the project’s task dependency. Fix: Hide the reschedule button when task dependencies are disabled at the project. task-5150621 Forward-Port-Of: odoo/enterprise#97088
This update fixes an issue where scanning a lot in a batch transfer incorrectly updated inventory lines. Specifically, when a subline without a lot was scanned after a related line was fully processed, the update prioritized the completed line instead of the intended subline. This change ensures that lotless lines are correctly updated during barcode scanning, maintaining accurate inventory tracking.
Original PR description
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create…
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create a storable product tracked by lots and put 10 x lot1 in stock - Create and confirm a delivery for 10 units - Create a batch transfer with your delivery - Process your transfer from the barcode app - Scan one unit of LOT1 and put in pack - Toggle sublines select the 0/9 subline without lots nor package - Scan LOT1 #### > The 1/1 LOT1 line with a pack is updated to 2/1 rather than the 0/9 ### Cause of the issue: Since e45249c2f6883d743a4e7d19e736c622e26a3d58 and 27bfb985a29e9f0abe94dec8a76bf6d08560fbc9 an override of the `_findLine` method has been introduced in `BarcodePickingBatchModel` to ensure that scanning a lot referenced by an already existing line of the batch transfer triggers an update of that line rather than an override of the lot of an other line. However, these lines should not priorities a completed line when there is line without a set lot. opw-5340865 Forward-Port-Of: odoo/enterprise#101908 Forward-Port-Of: odoo/enterprise#101611
This update resolves a technical issue that occurred when toggling the 'is scanner' setting. The problem stemmed from a change in how the system communicated with devices, and the original error handling wasn't updated. This fix ensures the keyboard scanner functionality works reliably.
Original PR description
When toggling the "is scanner" toggle, we were getting a traceback. This comes from the switch from longpolling to `iot_http`, but the error handling wasn't adapted. opw-5408986
This update fixes a bug where credit notes weren't being accurately accounted for when settling invoices. The change allows credit notes to be properly deducted from totals, ensuring accurate financial reporting. This improves the reliability of the POS settlement process.
Original PR description
We had a bug when settling invoices and credit notes of a customer. The credit notes where not correctly computed. Steps to reproduce: ------------------- In accounting: * Create and confirm a customer invoice for a total of 10$. * Create and confirm for the same customer a credit note for a total of 2$. In POS: * In a seesion, open the customer selection menu. * In the burger menu at the right of our customer, select Settle invioces. * Select our invoice and credit note. > Observation: The credit note was previously seen as an amount to pay. Why the fix: ------------ Recomputing updates existing credit notes to use the signed residual logic. The domain change allows credit notes with negative pos_amount_unsettled to appear. After these changes, credit notes should appear in the "Settle invoices" dialog with negative amounts, and selecting them will create negative lines that reduce the total. opw-5257884 Forward-Port-Of: odoo/enterprise#101186
This update fixes an issue where documents without access were incorrectly displaying 'Restricted Folder' in the kanban view. The change ensures that users without access to a document's folder see 'Restricted' instead, improving clarity and usability. This was initially a workaround for AI prompt generation but has now been corrected.
Original PR description
Bug === In documents, when we don't have access on the folder of a document, we show "Restricted Folder" in the kanban view. For AI, because we don't want to add "Restricted Folder" in the prompt when the user has no access on the folder, we skip that in the compute of the display_name when we are in sudo. But display_name are always computer in sudo, so we never show "Restricted Folder".
This update ensures that users are prevented from adding rental products to their cart when the resource is unavailable during the selected rental period. Previously, the system didn't check availability if the ‘website_sale_renting_stock’ module wasn't installed, leading to incorrect booking attempts. This change improves the user experience by accurately reflecting resource availability.
Original PR description
Before this commit, when the user goes to the webshop to take a rental service with rental service unavailable at a certain period, the system does not block the user when the resource is not available during 2 hours in the period chosen by the user. The reason is because the hours are not checked when website_sale_renting_stock is not installed. This commit moves the code checking the time of the rental period made in website_sale_renting_stock in website_sale_renting to be able to have that verification for rental service used with planning to make sure the system will prevent the user to add the product in his cart when the resource is unavailable. task-5123239 Forward-Port-Of: odoo/enterprise#96241
This update fixes a calculation error in the MRR evolution dashboard that was causing 'Contraction' figures to be double-counted. The change ensures the dashboard accurately reflects the true net new MRR by properly accounting for contraction trends. This improves the accuracy of revenue forecasting.
Original PR description
…traction **Issue** The formula defined for the "Net new" in the MRR evolution dashboard double counted the "Contraction", as it is already included in the "Up/Downgrade" (cell B6, equal to B4+B5, "Contraction" + "Expansion"). <img width="360" height="354" alt="image" src="https://github.com/user-attachments/assets/0a19a86a-f1b9-462f-812c-71a283f6fe89" /> opw-4925930 Forward-Port-Of: odoo/enterprise#101598 Forward-Port-Of: odoo/enterprise#96878
This update prevents delays when the IoT connection fails. Previously, WebRTC would repeatedly attempt to connect, causing a 6-second fallback to longpolling. Now, if WebRTC fails, it's disabled for 20 minutes, ensuring smoother and faster communication with IoT devices.
Original PR description
Before this commit, WebRTC was always used as the first protocol when communicating with the IoT box. However, in an environment where it was not working, it would take 6 seconds to fallback to longpolling on every request. After this commit, if WebRTC fails, we don't try to use it again for 20 minutes. task-5412223
This update corrects a technical issue where the text displayed in the confirmation window of the mass mailing module was not included in the translation files. This meant the text wasn't available for translation into other languages, leading to a potentially inconsistent user experience. The fix ensures this text is now properly identified for translation, allowing for localization of the confirmation window.
Original PR description
Description of the issue/feature this PR addresses: The texts from the "confirm-title" attribute of a tag are missing from the POT files. Current behavior before PR: In this line there is a text (the caption of the confirmation window): https://github.com/odoo/odoo/blob/19.0/addons/mass_mailing/views/mailing_mailing_views.xml#L66 "Ready to unleash emails?" - This text is missing from the POT file. Desired behavior after PR is merged: * These texts will apeear in POT files * Someone needs to translated them * It will show up as translated texts in UI --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239328 Forward-Port-Of: odoo/odoo#239034
This update resolves an issue where a key calculation related to account reconciliation was unintentionally removed during a recent system update. This fix ensures accurate reporting of financial transactions and prevents potential discrepancies in accounting data. It's a necessary correction to maintain the integrity of our financial records.
Original PR description
During the forward port of: https://github.com/odoo/enterprise/pull/94552 the recompute of the checked field was removed. It needs to be added back no task id Forward-Port-Of: odoo/enterprise#102086
This update corrects a technical issue that was causing errors when processing accounts linked to companies that had been archived. The fix ensures that only active companies are considered during certain calculations, preventing the constraint error and maintaining data accuracy. This improves the stability of the accounting system.
Original PR description
When a company linked to an account is archived, it is filtered out from the `company_ids` many2many field due to the default `active=True` filter. As a result, `_read_group(groupby=['company_ids'])` groups such accounts under `False`, leading to a false-positive constraint error.
Add `('company_ids.active', '=', True)` to the domain in `_check_account_type_unique_current_year_earning` to consider only active companies.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves a bug where locking a Point of Sale (PoS) with employee login and a blackbox would sometimes cause an error. The fix ensures the system verifies an employee is selected before attempting to update the clock-in date, improving PoS stability and reliability.
Original PR description
When a PoS was configured with "login with employees" and a blackbox, locking the pos then trying to select an employee raised a traceback. The PoS was trying to update the clock in date, but the employee was undefined. This is now fixed checking whether if the employee is set.
This update fixes an issue where the Partena export file incorrectly used the active company's code when generating reports for inactive companies. The change ensures the correct Partena code is included in the file, resolving a potential reporting discrepancy. Tests have been added to verify this fix.
Original PR description
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install…
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install 'l10n_be_hr_payroll_partena' and switch to a Belgian company - Make sure the company has a "Partena Affiliation Number" - Create an employee for this company, with a "Partena code" - Create a contract for this employee, set it a running - Create a new Belgian company with a different "Partena Affiliation Number" - Activate both Belgian companies, but set the second one as active - Payroll > Reporting > Export work entries to Partena - Create a new one, populate it with the employee just created - Click "Generate Export File" ### Cause: When getting the data for the CSV file, we use `self.env.company` which is the active company. So when this company is not the one of the export record, we input the wrong code values. ### Solution: Use `self.company_id` instead of `self.env.company_id`. Also adds the test class with basic tests. opw-5345786 Forward-Port-Of: odoo/enterprise#101960 Forward-Port-Of: odoo/enterprise#101110
This update fixes an issue where the VAT summary report for Argentinian invoices was incorrectly calculating totals when multiple IIBB taxes were applied. The fix ensures that VAT amounts are counted accurately, aligning the report totals with the accounting form view. This improves the reliability of financial reporting for Argentinian customers.
Original PR description
**Issue** When using a VAT tax marked as price included, together with multiple IIBB taxes on the same invoice, the VAT summary report displays an incorrect total. Specifically, the VAT amount is…
**Issue** When using a VAT tax marked as price included, together with multiple IIBB taxes on the same invoice, the VAT summary report displays an incorrect total. Specifically, the VAT amount is counted multiple times, once for each IIBB tax, leading to an inflated total. **Steps to Reproduce** 1. Install the Accounting app and the Argentinian localization (l10n_ar) 2. Set the 21% VAT Purchase tax as Included in Price 3. Create a vendor bill applying the 21% VAT tax and at least two IIBB taxes 4. Open the VAT summary report for that bill Expected Behaviour: The total in the VAT summary should match the total shown in the accounting form view, with each tax counted only once. **Root Cause** The VAT summary report in the Argentinian localization relies on an SQL query to aggregate tax information for each `account.move`. The query joins `account_move_line` with `account_tax`, `account_tax_group`, and the many-to-many relation table `account_move_line_account_tax_rel`. Each `account_move_line` related to a VAT tax line (via `tax_line_id`) is joined with the `account_move_line_account_tax_rel` table. If that base line is related to multiple IIBB taxes, the join multiplies the VAT line once per IIBB tax since multiple matching rows exist. **Fix** The solution separates the logic for computing tax lines and base lines into two distinct subqueries. Each is aggregated independently to prevent duplication caused by one-to-many and many-to-many joins. The results are then joined using the unique `account_move_line.id`, ensuring each tax amount is counted exactly once in the final totals. opw-4776861 Forward-Port-Of: odoo/enterprise#98933 Forward-Port-Of: odoo/enterprise#85873
This update addresses an incompatibility issue between the 'Reset Password' and 'Remote Debug' buttons and Windows IoT. To ensure a seamless experience for Windows IoT users, these buttons have been hidden from the relevant records. This improves stability and usability for this specific deployment environment.
Original PR description
"Reset Password" and "Remote Debug" buttons are not compatible with Windows IoT, we then hide them on the corresponding records.