Tuesday, February 3, 2026
18 changes · 18.0
New functionality added to Odoo
This update introduces a new field for 'CPV code' on products within Odoo, addressing a requirement for B2C invoices in Romania. The module now allows users to input this code, which is then included in the RO-CIUS XML generated for invoices, ensuring compliance with local regulations. This change improves data accuracy for Romanian business transactions.
Original PR description
In This PR: - We add a new module to add a new field 'CPV code' in the product. - Till now, in Odoo, customers can't input that CPV identification number on products, and the field is always left empty. That's an issue with B2C invoices, where the field is mandatory. - If the module is installed and a product with a CPV category is set on an invoice, we add the value of the CPV code in the RO-CIUS XML generated on an invoice. Task [link](https://www.odoo.com/odoo/project.task/5416833) task-5416833 Forward-Port-Of: odoo/odoo#240219
Enhancements to existing features
This update enables IoT devices to connect to the Point of Sale system without requiring a secure HTTPS certificate. By using HTTP and a local address space, the system now supports IoT devices, improving their functionality and reliability. This change was implemented to align with recent Odoo updates.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/106183 This is a backport of odoo/odoo#237147. Since odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. task-5353672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update corrects a minor error in the invoice XML formatting within the Odoo Enterprise accounting module. Specifically, a misplaced closing tag was causing issues with how invoices are generated. This fix ensures proper XML structure and accurate invoice processing.
Original PR description
Currently, the `account_move_form_invoice_and_withhold_view` contains an invalid closing group tag (`</group>>`) introduced by PR [1], at [2]. The extra `>` results in malformed XML. This commit removes the stray character and restores a properly closed `</group>` tag. [1]: https://github.com/odoo/enterprise/pull/77592 [2]: https://github.com/odoo/enterprise/blob/7c574d758ff5b1404b808cc647d4a2ae40f5f0c0/l10n_ec_edi/views/account_move_views.xml#L79 **No task Id**
Documentation and clarification updates
This pull request updates Odoo to reflect changes made by Moduon (MT-13567). The update primarily involves documentation adjustments to ensure proper integration and compliance with Moduon's requirements. This ensures continued smooth operation of the Moduon-related features within Odoo.
Original PR description
@moduon MT-13567 Forward-Port-Of: odoo/odoo#246701
Community PR: https://github.com/odoo/odoo/pull/246781 This is a backport of odoo/enterprise#100331. Since odoo/odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly
Original PR description
Community PR: https://github.com/odoo/odoo/pull/246781 This is a backport of odoo/enterprise#100331. Since odoo/odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. task-5353672
This update fixes a previous issue in the US payroll module by establishing a standardized list of cities for employee addresses. Previously, the city field was editable, which created inconsistencies. Now, it's a linked field referencing a pre-defined list, ensuring accurate and reliable payroll data for US employees.
Original PR description
**Description:** In United States we load all cities in the L10N package. idea was to make the city field on employee personal address a M2O referring to the list and not something freely editable. **Implementation:** . Add l10_us_private_city_id which's a M2O field referring to the list and not something freely editable. task-5877610
This update corrects an issue where project forms accessed through SmartButtons were initially displayed as uneditable. The fix removes a redundant setting that was causing this behavior, ensuring users can properly interact with project forms. The reason for the original setting remains unclear.
Original PR description
Issue: When navigating to any form view related to an FSM Project via
SmartButtons, they are loaded as uneditable
Solution: Remove "edit":False in _update_action_context method
Note: It is unknown why this was added in the first place, since
removing it does not cause any crashes
opw-5413753This update corrects a bug in the salary configurator where the fuel card benefit could incorrectly appear enabled when no company car was selected. The change ensures the field is properly initialized based on the chosen car, preventing inconsistent data and improving the user experience. This resolves a potential issue with incorrect benefit configurations.
Original PR description
On first load of the salary configurator, the fuel-card benefit could appear enabled even when no company car was selected. The dependency logic reacted to in-page changes but did not initialize the field correctly on page load. Initialize the fuel-card field from the current car selection and keep it non-selectable until a car is chosen to prevent inconsistent packages. task-5156562
This update resolves an issue where outdated account synchronization records could cause problems, preventing new connections. By focusing on fresh, uninitialized links, the system is now more stable and reliable for account synchronization. This ensures a smoother experience for users.
Original PR description
Prevent reusing stale account.online.link records that have a provider_type set, which can leave an unusable row and block new connections. By adjusting the search domain in action_new_synchronization, we only reuse clean, uninitialized links. opw-5868438 opw-5867799 Forward-Port-Of: odoo/enterprise#105187
This update resolves a problem where formatting the user's signature in the email editor could cause multiple 'Read More' links to appear in the chat. The fix ensures that the signature container is correctly marked for quoting, preventing this duplication and maintaining proper email functionality. This was previously addressed in version 19.0.
Original PR description
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text -…
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text - Save the changes - Refresh - Remove the bold formatting - Press enter between the two lines (at the end of `--`) - Save the changes - Go to the Contact app - Select any record - Go to its chatter - Click on `Send Message` and then the `Full Composer` expand button - Send the mail - In the chatter multiple `Read More` are added for the same signature (I think it can appears in multiple operations, this is just an example related to the `<strong>` element becoming `<span>` on removal) **Issue:** Playing with the html editor on the signature field can break the `tag_quote` flow due to the added elements. **Fix:** Explicitly add `"data-o-mail-quote"` to the signature container which is added when opening the `fullComposer`. It could also be an issue related to the html_editor but this seems cleaner to fix it here. This issue was fixed in 19.0 in a similar way by adding a common div around the signature and adding the same attribute. related: https://github.com/odoo/odoo/commit/6eb55c42158b08652c4c533bf56b5333c162bd3a opw-5149505
This update streamlines Odoo tests by disabling automatic device detection during testing. Previously, tests were performing unnecessary queries to check device information, slowing down the testing process. This change improves test execution speed and efficiency.
Original PR description
In tests, when using `authenticate`, we create a session. When this session is retrieved (for example because we use `url_open`), we detect a new device and insert a log. The consequence is that a query is performed in many tests and that is not necessary. The fix consists of disabling the `res.device.log` feature by default in tests. task-5894825
This update fixes an issue where the 'Next Booking Start' time was not being displayed correctly for rooms with upcoming bookings. The change removes a filter that prevented the system from considering occupied rooms when calculating availability, ensuring accurate display of the next available time. This improves the user experience when managing room bookings.
Original PR description
Steps to reproduce:
1. Install `room`
2. Create a room.
3. Create a booking for the current time (so the room becomes occupied).
4. Create another booking for tomorrow.
5. Open the list view of rooms.
Current Behavior:
- The `Next Booking Start` field is empty for the created room, despite Having future bookings.
Cause:
- The method `_compute_next_booking_start` filters the rooms using `self.filtered('is_available')`. Since the room is currently occupied (due to the active booking), the room is excluded from the query entirely.
Solution:
- Remove the `is_available` filter from the search domain. The next booking start time is now calculated for all rooms, regardless of whether they are currently available or occupied.
opw-5360101
Forward-Port-Of: odoo/enterprise#102129This update fixes a bug where the VAT (Tax ID) was not correctly displayed in document previews and generated invoices. The issue stemmed from a missing rendering logic in the document layout template. Now, VAT information is accurately reflected in all document layouts.
Original PR description
Steps to reproduce 1. Install `account`. 2. Go to Settings → Configure Document Layout. 3. Enter a value in the Tax ID field. 4. Generate a document (invoice / preview document). Issue Unlike other fields in the document layout, the `Tax ID` value is not updated and does not appear in the document preview. Cause The VAT (Tax ID) rendering logic was missing from the document layout template XML. Solution Add proper logic to display the Tax ID using the company VAT Before: <img width="1089" height="750" alt="image" src="https://github.com/user-attachments/assets/8d27808f-d605-447c-807a-d5f3450eef36" /> After: <img width="1080" height="722" alt="image" src="https://github.com/user-attachments/assets/0af04d77-a318-4e39-9a4b-0911f2446e60" /> opw-5373374
This update fixes an error in the Point of Sale session reports where discount amounts were calculated incorrectly. The fix ensures that discounts are accurately applied based on the correct fiscal position, leading to more reliable financial reporting. This improves the accuracy of sales data.
Original PR description
Steps: ---- - Create a fiscal position with 2 different taxes - Add a line in POS - Apply fiscal position and add line discount - Finish the order cycle - Download the session report Issue: ---- - The discount amount was calculated incorrectly in the session report Cause: ---- - The discount amount calculation used taxes before applying the fiscal position Fix: ---- - Used `tax_ids_after_fiscal_position` for tax calculation while computing the discount amount task-5421215 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the description field in the calendar popover was not wrapping text correctly, leading to truncated or overflowing content. The team added the 'text-wrap' class to the calendar view, ensuring descriptions display properly and are fully visible. This enhances the user experience when viewing calendar events.
Original PR description
Changes done: - [x] `calendar`: Add `class="text-wrap"` in the description field of the calendar view to use it in the popover - [x] `web`: Define the appropriate class in the calendar popover field **Before** <img width="548" height="428" alt="antes" src="https://github.com/user-attachments/assets/77060ee6-30a1-47ed-8ba4-d5c2baa33fe3" /> **After** <img width="559" height="627" alt="despues" src="https://github.com/user-attachments/assets/cc9dfb47-3f98-4b5b-80c2-c3e5c15df0b0" /> @Tecnativa TT60670 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the process of changing paper formats in reports. Previously, users were forced to reset dimensions, causing an unnecessary popup. Now, switching paper formats is smoother and more intuitive, allowing users to directly swap without the previous limitations.
Original PR description
Description of the issue/feature this PR addresses: When you set a `custom` Paper size, you can't swap to another one without setting the `Page height (mm)` and `Page width (mm)` to 0 just to swap it again, this could be just skiped since the paperformat uses the computed fields made on `_compute_print_page_size` to get the proper height and width. Current behavior before PR: This happens when you swap Paper size from `custom` to any other.  Desired behavior after PR is merged: After deleting this validation, should swap without this popup, and we could save the original values if the user wants to swap again to custom format. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where salary attachments would display an empty employee field after an employee was archived. The fix ensures that salary attachments accurately reflect the current employee status, even when an employee is no longer active, improving data consistency.
Original PR description
Steps To Reproduce: Create a salary attachment for an employee. Archive that employee. The corresponding salary attachment has an empty `Employee`. Issue: `employee_ids` many2many field doesn't take archived records into consideration, So when an employee is archived, it leads to emptying the record. Fix: Add active_test context to field definition and domain to form view of salary attachment so the employee remains on salary attachment and for new record creation, so it doesn't take archived employees. task-5438657 Forward-Port-Of: odoo/enterprise#102985
This update resolves an issue caused by recent changes to the Swiss Federal Tax Administration's website. The import of tax rates for payroll has been adjusted to reflect the new URLs, ensuring accurate tax calculations for Swiss businesses using this module. This ensures continued compliance with Swiss tax regulations.
Original PR description
Due to recent updates on the Federal Tax Administration website, the single-canton import feature was made temporarly unavailable, this PR adjusts the new URLs for downloading the tax rates Forward-Port-Of: odoo/enterprise#106288