Daily updates from Odoo
Wednesday, January 14, 2026
58 changes · master
New functionality added to Odoo
This update adds a new service within Odoo that can decode EPC (Electronic Product Code) barcodes. It allows the system to translate these barcodes into their corresponding URIs or Element Strings, improving the ability to identify and track products. The decoder supports common EPC formats like SGTIN and SSCC, enhancing data capture and integration.
Original PR description
Add an EPC decoder as a front-end service. The decoder takes an EPC as a hexadecimal input and return the resulting URI or Element String. On incorrect input or unsupported decoding, the returned value is null. Currently support SGTIN-96, SGTIN-198, SSCC-96, SGLN-96, SGLN-195. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request introduces support for GS1 EPC codes, a standard for identifying products using RFID tags. The changes include the necessary data structures and logic to encode and decode these codes, enabling better tracking and inventory management. The work is currently focused on testing and refining the encoding process, with future development planned for automation.
Original PR description
# Current State Overview <details><summary>$${\color{red}Deferred}$$ Backend/Python</summary> <p> Deferred: decoding doesn't make sense in the backend, and manufacturing isn't ready for EPC write…
# Current State Overview
<details><summary>$${\color{red}Deferred}$$ Backend/Python</summary>
<p>
Deferred: decoding doesn't make sense in the backend, and manufacturing isn't ready for EPC write automation, such that encoding isn't a priority.
Encode & Decode :
- sgtin-96
- sgtin-198
- sscc-96
- sgln-96
- sgln-195
TODO :
- Replace compute by explicit calls : more efficient and less complicated
- Implement logical segment bit count at scheme template level
Simple test :
```
# model: Electronic Product Code Scheme, gs1.epc.scheme
vals = [
#SGTIN
{'uri_tag': "urn:epc:tag:sgtin-96:3.0614141.812345.6789"},
{'raw_value': 0X3074257bf7194e4000001a85},
{'uri_tag': "urn:epc:tag:sgtin-198:3.0614141.812345.6789"},
{'raw_value': 0X3674257bf7194e5b3770e4000000000000000000000000000000},
{'uri_tag': "urn:epc:tag:sgtin-198:3.0614141.712345.32a%2Fb"},
{'raw_value': 0X3674257bf6b7a659b2c2bf100000000000000000000000000000},
#Others
{'uri_tag': "urn:epc:tag:sscc-96:3.0614141.1234567890"},
{'raw_value': 0X3174257bf4499602d2000000},
{'uri_tag': "urn:epc:tag:sgln-96:3.0614141.12345.5678"},
{'raw_value': 0X3274257bf46072000000162e},
{'uri_tag': "urn:epc:tag:sgln-195:3.0614141.12345.32a%2Fb"},
{'raw_value': 0X3974257bf46072cd9615f8800000000000000000000000000000},
]
schemes = model.create(vals)
message = []
for scheme in schemes:
message.append(f"Uri : {scheme.uri_tag}\nHex : {scheme.hex_value}\n") # Bit : {scheme.raw_value:b}\n
log('\n'.join(message))
```
Result :
```
Uri : urn:epc:tag:sgtin-96:3.0614141.812345.6789
Hex : 3074257bf7194e4000001a85
Uri : urn:epc:tag:sgtin-96:3.0614141.812345.6789
Hex : 3074257bf7194e4000001a85
Uri : urn:epc:tag:sgtin-198:3.0614141.812345.6789
Hex : 3674257bf7194e5b3770e4000000000000000000000000000000
Uri : urn:epc:tag:sgtin-198:3.0614141.812345.6789
Hex : 3674257bf7194e5b3770e4000000000000000000000000000000
Uri : urn:epc:tag:sgtin-198:3.0614141.712345.32a%2Fb
Hex : 3674257bf6b7a659b2c2bf100000000000000000000000000000
Uri : urn:epc:tag:sgtin-198:3.0614141.712345.32a%2Fb
Hex : 3674257bf6b7a659b2c2bf100000000000000000000000000000
Uri : urn:epc:tag:sscc-96:3.0614141.1234567890
Hex : 3174257bf4499602d2000000
Uri : urn:epc:tag:sscc-96:3.0614141.1234567890
Hex : 3174257bf4499602d2000000
Uri : urn:epc:tag:sgln-96:3.0614141.12345.5678
Hex : 3274257bf46072000000162e
Uri : urn:epc:tag:sgln-96:3.0614141.12345.5678
Hex : 3274257bf46072000000162e
Uri : urn:epc:tag:sgln-195:3.0614141.12345.32a%2Fb
Hex : 3974257bf46072cd9615f8800000000000000000000000000000
Uri : urn:epc:tag:sgln-195:3.0614141.12345.32a%2Fb
Hex : 3974257bf46072cd9615f8800000000000000000000000000000
```
</p>
</details>
<details><summary>$${\color{orange}In \space Progress}$$ Frontend/Javascript</summary>
<p>
Decode Only :
- sgtin-96
</p>
</details>
To compare and test :
- https://www.gs1.org/services/epc-encoderdecoder
- TDS 2.1, part E.3 (https://ref.gs1.org/standards/tds/2.1.0/, p.242)
[Task #4256189](https://www.odoo.com/odoo/project.task/4256189)Enhancements to existing features
This update enhances our document generation to meet the stricter PDF/A-3A standard, ensuring compatibility with a wider range of PDF viewers and archiving systems. The changes address previous validation failures and incorporate new requirements for PDF/A-3A compliance, improving document accessibility and long-term preservation.
Original PR description
This commit upgrades our PDF/A compliance from 3B to 3A, and fixes a few issues previously undetected due to the different PyPDF libraries we're currently supporting that made the previous PDF fails…
This commit upgrades our PDF/A compliance from 3B to 3A, and fixes a few issues previously undetected due to the different PyPDF libraries we're currently supporting that made the previous PDF fails even the 3B validation. Improvement 1: PDFA validators were previously detecting our file as 3B. Hence we update the metadata content `conformance` to `A`. Issue 2: When using `._pypdf` library, we failed the 6.1.2-2 and 6.8-1 rule even though we have implemented them on the previous version. It seems that this is caused by the `if SUBMOD...` check only ensuring it's not equal to `_pypdf2_2` (which makes it trigger for the new `_pypdf`). Hence, we reclarify the comments and fix the IF check. Issue 3: After implementing issue 2, it seems that a traceback occurs every time we're using `._pypdf` and calling the pdf write method. This is because the added characters on the header can't be decoded with `UTF-8`. Hence we change it to other greater-than-127-bytes characters that can still be decoded with `UTF-8`. (The actual character used here doesn't matter). Improvement 4: To be compliant with the new 3A rules (additional rules not there in 3B when we first implemented them), we add a minimal mark info dictionary and document structure on the PDF catalog object (`_root_object`). task-None Forward-Port-Of: odoo/odoo#243171 Forward-Port-Of: odoo/odoo#234960
This update enhances the offline experience by visually disabling unavailable menus, view switchers, and records within kanban and list views. The system now intelligently uses IndexedDB to track visited items, ensuring a more responsive and user-friendly offline experience. This prepares for a future offline search bar feature.
Original PR description
With this commit, when being offline, menus, view switchers and records (in kanban and list views) that aren't available are disabled (i.e. displayed with opacity and not-allowed cursor). Those disabled elements are still clickable though, but it's highly unlikely that clicking on them would lead to anything but an empty screen (due to the lack of connection). All such items aren't disabled though: we store in indexeddb the list of visited items (actions, view types, records), s.t. we know what is available in cache, and what is then accessible offline. This commit also prepares the ground for the next task, which is to have an offline search bar, allowing to select among previously enabled filters, in kanban and list views. Task~5424765
This update improves the Odoo Enterprise application's performance when operating offline. Specifically, the home menu now intelligently disables unavailable menus, preventing users from attempting to access features that aren't supported in offline mode. This enhances the user experience and reduces potential errors.
Original PR description
This commit is the counterpart of https://github.com/odoo/odoo/pull/242494. When being offline, we disable menus that aren't available offline in the home menu. Task~5424765
This update enhances the visual appearance of Odoo’s onboarding samples across several modules, including loyalty and point-of-sale. By aligning the layout, colors, and icons with Odoo’s established UI standards, this change improves the overall user experience and ensures a more polished look for new users. This work addresses previous inconsistencies and strengthens brand consistency.
Original PR description
*: survey, point_of_sale, pos_restaurant - requires : https://github.com/odoo/enterprise/pull/98400 - extracted from: https://github.com/odoo/odoo/pull/228308 Before this commit, some onboarding suggestions were not fully aligned with Odoo’s UI standards. This commit readjusts the layout, colors, icons to ensure better visual consistency with others onboarding suggestions samples. task-5089102 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the visual appeal of the Odoo onboarding experience by aligning colors with Odoo’s design standards. The changes focus on improving the overall look and feel, ensuring a more polished and professional first impression for new users. This improves brand consistency and user experience.
Original PR description
*: marketing_automation_website_sale, marketing_automation_crm, appointment - requires : https://github.com/odoo/odoo/pull/233666 - extracted from : https://github.com/odoo/enterprise/pull/95384 Before this commit, some onboarding suggestions were not fully aligned with Odoo’s UI standards. This commit adjusts colors to ensure better visual consistency. task-5089102
Resolved issues and error corrections
This update corrects a calculation error in the Belgian payroll module (l10n_be_hr_payroll) related to the 3000 deduction. The change ensures that the deduction amount is accurately reflected up to the year 2026, aligning with updated Belgian tax regulations. This ensures accurate payroll processing and compliance for businesses using this module.
Original PR description
Forward-Port-Of: odoo/enterprise#103891 Forward-Port-Of: odoo/enterprise#103824
This update corrects small errors in the 2026 balance sheet and profit & loss reports for the Danish localization. These changes involve correcting formula signs and text labels, likely due to an oversight during development. This ensures accurate financial reporting for Danish businesses using Odoo Enterprise.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id Forward-Port-Of: odoo/enterprise#103830
This update clarifies the call settings for users who have muted a participant. Previously, the menu and hints were confusing, showing the deafen icon with the unmute label. Now, only the 'undeafen' button is displayed when a participant is muted, streamlining the user experience and ensuring clarity.
Original PR description
Before this commit, the hint in the call settings was not taking into account if it was deafen or mute. On top of that the icon in the menu was showing the deafen icon but with the unmute label. When deafened, this was redundant with the undeafen button as well since unmute and undeafen are practically doing the same thing. Now, when deafen is activated, only the undeafen button is shown in the call menu and the hint in the call actions is undeafen not unmute. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242887 Forward-Port-Of: odoo/odoo#242519
This update corrects a recent change to the access rights for the account online synchronization feature, ensuring it's correctly linked to Invoicing & Banks. The previous update missed a crucial step, preventing proper access control, and this fix resolves that oversight.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/6edc057a9c0459af2b6d625415b700daf6280520 we changed the access rights of the account online sync to Invoicing & Banks but forgot to add the duplicate transactions no task id Forward-Port-Of: odoo/enterprise#104008
This update fixes an issue where the HTML editor would incorrectly display extra lines when multiple lines were selected. The change filters out empty text nodes to prevent unnecessary font wrappers, resulting in cleaner and more accurate rendering of selected text.
Original PR description
**Current behavior before PR:** - When multiple lines were selected within a block, any empty text nodes between them would also receive a font wrapper when applying a color. - As a result, it appeared as though an extra line was being inserted when the color was applied. **Desired behavior after PR is merged:** - Empty text nodes that are not visible and are not zero-width space or line-break nodes are now filtered out before the font tag is created. - This prevents font wrappers from being created around those nodes. task-5344051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236824
This update resolves a minor typo in the Odoo Enterprise system. Specifically, the name of an attachment file was corrected to align with its intended functionality and external ID. This ensures data consistency and proper operation within the accounting module.
Original PR description
Fix typo – Correct the ir_attachment file name to match the external ID and its functionality. OPW-5428700 Forward-Port-Of: odoo/enterprise#103809
This update fixes a minor issue in the Sendcloud integration where the system was incorrectly retrieving product information. The change ensures that product IDs are accessed using the correct 'id' key, resolving a potential data retrieval problem. This improves the reliability of sending orders through Sendcloud.
Original PR description
Same fix as d4fae97, the id was retrieved by doing `[0]` but the proxy object has changed so we need to use the `id` key to get the value instead. ----- Ticket: opw-5433254 Forward-Port-Of: odoo/enterprise#103706
This update fixes an issue where users without write access couldn't star messages in threads, resulting in an error. The fix adds a necessary permission adjustment to allow users to star messages they can read, ensuring broader functionality for all users. This improves the user experience and prevents a frustrating access error.
Original PR description
Before this commit, starring a message in a thread without write access would result in an access error. This happens because since [1] a message is marked as starred by writing on the `starred_partner_ids` field of mail.message instead of the `starred_message_ids` field of res.partner. This results in an access error when the uses does not have write access. This commit fixes the issue by adding a sudo call to the write of `starred_partner_ids`, which is acceptable because a user should always be able to star a message they can read. [1] https://github.com/odoo/odoo/pull/219282 task-5481662 Forward-Port-Of: odoo/odoo#243130
This update streamlines the process of assigning barcodes to product packaging. Previously, users faced a confusing, multi-step process leading to duplicate UoM creation. Now, the barcode field is integrated directly into the packaging creation flow, offering a simpler and more efficient experience.
Original PR description
Before this commit: ------------------------- - In the product form view, when creating new packaging, a pop-up form opens to Create a new Unit of Measure (UoM), and if the user tries to assign a…
Before this commit: ------------------------- - In the product form view, when creating new packaging, a pop-up form opens to Create a new Unit of Measure (UoM), and if the user tries to assign a barcode Within that form, a second pop-up opens instead of assigning the barcode directly. - In the second pop-up, if the user creates the same UoM again, it causes data duplication; the same UoM gets created in 'Units and Packagings' with a default quantity of 1 without reference unit. This incorrect behavior leads to confusion when selecting the UoM later. Steps to reproduce: ------------------------- 1. Install the 'sale_stock' module. 2. Enable Units of Measure & Packagings in stock. 3. Create or open any product. 4. Go to the Sales tab. 5. Create new packaging (e.g., Pack of 5), set the quantity and reference unit, and try to create a barcode. 6. A second pop-up form opens to again create a new UoM and assign the barcode. 7. It causes data duplication; the same UoM gets created in 'Units and Packagings' with a default quantity of 1 without reference unit. Cause of the issue ------------------------- When assigning a new barcode to a UoM, the field could not fetch the corresponding UoM(In uom.uom) record because it did not yet exist in the database. As a result, the system opened another pop-up to create the same UoM(In product.uom) again and assign a barcode to it. After this commit: ----------------------- - The barcode field is hidden until the UoM is created. - Once the packaging is saved, users can edit it to assign a barcode to the specific UoM of the product. - This improves the flow by preventing duplicate UoM creation and ensuring a clear, single-step process for assigning barcodes to product packaging. Task ID:5023229 Forward-Port-Of: odoo/odoo#230474
This update prevents the full composer window from unexpectedly opening when users are editing messages within tasks. The original issue stemmed from a technical error related to how the composer was initialized during editing, causing a crash. This fix ensures a smoother editing experience for all users.
Original PR description
Steps to reproduce: =================== 1- Go to a project task & log any note. 2- Edit & Click the additional "+" and click "Open Full Composer" 3- Click on Save. -> traceback. Cause: ====== When entering edit mode, the composer was created without a thread reference, causing "Cannot read properties of undefined (`this.props.composer.thread is undefined`)" errors in `onClickFullComposer`. Solution: ========= We shouldn't have "open-full-composer" action in editing messages opw-5443985 Forward-Port-Of: odoo/odoo#242002
This update resolves an issue where the 'copy link' button in the salary calculator was generating a 404 error. The fix ensures the offer is saved before creating the link, preventing errors related to missing offer IDs. This improves the usability of the salary calculator for generating offer links.
Original PR description
Steps to reproduce: 1- Open salary calculator 2- Do not edit any fields 3- Click on copy link button 4- Open the link Issue: When you open the link you'll see a 404 page. Cause: The salary calculator essentially creates an offer. When no fields are modified in the form, the offer isn't created yet. When a link is created for that offer, the offer id part of the link is NewId_xxx. Fix: Modify the widget that copies the link to clipboard to first save the offer before generating the link. Task-5441297 Forward-Port-Of: odoo/enterprise#104021 Forward-Port-Of: odoo/enterprise#102900
This update resolves an issue where applications weren't accurately counted and matched within a multi-company Odoo setup. The change removes a filtering constraint from the application matching process, ensuring a more precise count of applications per company. This improves the accuracy of reporting and data analysis across multiple businesses.
Original PR description
This commit fixes the issue where applications are not matched are not mathced with thier count among companies in a multi-company environment. The domain on company was removed from `_get_similar_applicants_domain` since there is no domain on company in `_compute_application_count`. task-5375876 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243154 Forward-Port-Of: odoo/odoo#238386
This update fixes an issue where public channels were incorrectly configured, defaulting to an internal user instead of being publicly accessible. Setting `group_public_id` to `None` ensures channels are properly designated as public, resolving a previous bug. This improves channel visibility and functionality.
Original PR description
Since #206619, the fixed test has used a wrong value for `group_public_id`, as if it's not set, the default is `Internal User`. This change sets it to `None` to make the channel public. Forward-Port-Of: odoo/odoo#243354 Forward-Port-Of: odoo/odoo#243237
A recent update added call duration information to chatter messages, but this caused a tour to fail intermittently. This fix corrects the tour's targeting method to ensure consistent functionality, preventing future disruptions to the tour process.
Original PR description
After 5751f93c53d3cf37ae8cb627fb8d10a81b7b8833, call duration will be added to chatter message. This change is done by modifing the original message, which results in a non-deterministic failure when selector trying to match the original message. Change the selector to match a stable attribute. Forward-Port-Of: odoo/enterprise#104132
This update fixes a previous issue where the messaging menu incorrectly added needaction channel counts to the inbox count. Now, the inbox counter accurately reflects the number of unread messages across all channels, providing a more reliable view of communication activity. This ensures users have a precise understanding of their messaging workload.
Original PR description
This commit corrects a regression intoduced in [1]: the messaging menu now subtracts the channels needaction counter from the inbox counter, rather than adding it [1] https://github.com/odoo/odoo/pull/229751 Forward-Port-Of: odoo/odoo#243478 Forward-Port-Of: odoo/odoo#243318
This update fixes a bug where payslips were showing blank worked days for employees on fully flexible contracts. The change ensures accurate calculation of worked days, even when contracts don't have a standard calendar assigned, addressing a previous issue with attendance-based work entries. This improves payroll accuracy and reporting.
Original PR description
**Issue:** Payslips show blank worked days for employees with contracts without a `resource_calendar_id` (fully flexible, despite having valid work entries **Cause:** `_get_worked_day_lines()` skips…
**Issue:** Payslips show blank worked days for employees with contracts without a `resource_calendar_id` (fully flexible, despite having valid work entries **Cause:** `_get_worked_day_lines()` skips worked day computation if the contract has no calendar https://github.com/odoo/enterprise/blob/1a10e0444fdb71a072262a1f14f0bfc766d109c6/hr_payroll/models/hr_payslip.py#L665-L674 **Steps to Reproduce:** - Assign an employee a fully flexible contract with attendance as work entry source. - Create work entries based on the attendance records of the employee record - Go to employees > contracts > new Payslip Worked Days section is empty, even though attendance shifts are showing up on top. **Fix:** removing the calendar requirement in the main method and adding a fallback calendar in the called utility method **Note:** same issue happens if work entry source of the contract is Planning opw-4931972 Forward-Port-Of: odoo/enterprise#102668 Forward-Port-Of: odoo/enterprise#93935
This update resolves an issue where non-admin users in multi-company environments couldn't update their profile picture or preferred language. The fix bypasses access rules that were incorrectly blocking company data access, allowing users to manage these settings without errors. This ensures a smoother experience for all users regardless of their company setup.
Original PR description
### Impacted versions: 19.0 and later ### Steps to reproduce: - Install at least 2 languages - Create multiple companies - Log in as marc demo and select only one company - Try to update profile picture or modify preferred lang ### Current behavior: When a non-admin user operates in a multi-company environment with only some companies active in their context, the `res_company_rule_employee` record rule blocks access to `company_ids` when trying to read all assigned companies. This causes an Access Error in the `res.users.new()` method when it attempts to count the user's companies to manage the `base.group_multi_company` group membership, preventing users from changing their profile picture and updating their preferred language Task: [5458607](https://www.odoo.com/odoo/project/49/tasks/5458607) Forward-Port-Of: odoo/odoo#243259
This update fixes an issue where Point of Sale orders weren't consistently linked to the correct company. Now, when a new order is created, the system automatically uses the company setting from the POS session's configuration, ensuring accurate reporting and accounting. This improves data integrity and simplifies business operations.
Original PR description
When creating an order, if due to some reason the company_id is not set on the order data, we set it to the company of the POS session's config. opw-5470175 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243249
This update ensures that Odoo's code translations are correctly exported. A new package, odoo.orm, was recently added, and this change clarifies how the framework identifies and exports translations from this package. This improves the accuracy and completeness of our code translation resources.
Original PR description
New package odoo.orm was added in PR https://github.com/odoo/odoo/pull/182727 The new package's name must be specified in ``TranslationModuleReader._export_translatable_resources`` to allow the framework to export its code translations. 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 Forward-Port-Of: odoo/odoo#243584
This update resolves an issue where users without specific group permissions would encounter errors when pinning or unpinning embedded actions, particularly within superuser mode. By adding a check for superuser status, the system now correctly allows superusers to perform these actions, ensuring stability for automated processes and installation scripts.
Original PR description
Prior to this commit, an AccessError would be raised when pinning or unpinning embedded actions if the current user did not belong to the 'documents.group_documents_user' group. This could cause issues during operations running in superuser mode (e.g., automated actions, installation scripts, or sudo() calls) because the check strictly validated the user's groups without considering the environment's superuser flag. This commit adds a check for `self.env.su` to ensure the AccessError is not raised when the environment is in superuser mode. Task-5380727 Forward-Port-Of: odoo/enterprise#104043 Forward-Port-Of: odoo/enterprise#101106
This update resolves an issue where the AI module's exception handling wasn't functioning correctly, specifically when a request cursor closed. The fix ensures the system uses the local environment, preventing errors and improving the stability of AI-powered features. This enhances the reliability of the AI module for users.
Original PR description
self.env is invalid inside generator after request cursor closes Forward-Port-Of: odoo/enterprise#104106
This update resolves an issue where Odoo encountered errors when processing emails with attachment content types incorrectly identified as '*/*'. To ensure emails are processed smoothly, the system now defaults to 'application/octet-stream' for these cases, minimizing disruption. The change is a pragmatic solution to avoid blocking emails due to non-standard content types.
Original PR description
In some rare cases it would seem that some systems construct emails with attachments reporting `*/*` as the Content-Type. While trying to parse such content in Odoo, it causes issues with the…
In some rare cases it would seem that some systems construct emails with attachments reporting `*/*` as the Content-Type. While trying to parse such content in Odoo, it causes issues with the standard CPython email library, as no standard handler exists for '*/*' content-types: Example error: ``` File "/usr/lib/python3.13/email/contentmanager.py", line 25, in get_content raise KeyError(content_type) KeyError: '*/*' ``` This is not compliant with valid MIME types defined in RFC2046/section-3, but in real life scenarios, blocking the processing of an incoming email in Odoo because of this might be excessive. While not a perfect solution, we will assume that attachments falsly reported as `*/*` are to be processed as 'application/octet-stream' content types. This should cover most use-cases, and if it still fails, we will consider that it's up to the original email sender to be RFC compliant. OPW-5425093 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242193
This update fixes an issue where links shared within Odoo's chat system were incorrectly marking customer portal page views. A simple adjustment was made to the request headers sent by the previewer, ensuring accurate tracking of customer activity on the portal. This improves our understanding of customer engagement.
Original PR description
When a link to the portal is sent from the chatter via message or log note, the preview of the link triggers that the page was viewed by customer. As a solution a variable was added to the request headers coming from the previewer. opw-5237785 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243061
This update resolves an issue where user images within the referral module were not aligned correctly. The fix ensures a consistent and professional appearance for user profiles, enhancing the overall user experience. This improves the visual quality of the referral process.
Original PR description
This fix ensures that the user's image is correctly aligned task-5264613 Forward-Port-Of: odoo/enterprise#99488
This update resolves an error that occurred when users attempted to search for employees without the 'hr_payroll' module installed. The issue stemmed from a reference to a field within the 'hr_payroll' module in the employee search filters. This fix ensures a smoother experience for all users.
Original PR description
Bug: Searching for Employees without hr_payroll installed causes an error Cause: a field from hr_payroll was referenced in hr views filter Task-5487616 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where searching for employees would generate an error if the hr_payroll module was not installed. The fix addressed a reference to a field within the hr_payroll module in the employee search views, ensuring compatibility and preventing errors for users without the payroll module.
Original PR description
Bug: Searching for Employees without hr_payroll installed causes an error Cause: a field from hr_payroll was referenced in hr views filter Task-5487616
This update resolves an issue where enabling integer rounding on Aged Receivable reports caused a crash. The fix prevents the system from attempting calculations with 'None' values, which were triggering an error. Now, users can safely use integer rounding without encountering this problem.
Original PR description
Currently, enabling the Integer Rounding option (e.g. 'Nearest') on accounting reports like Aged Receivable/Payable causes a crash when expanding lines if any column value evaluates to None. Steps to…
Currently, enabling the Integer Rounding option (e.g. 'Nearest') on accounting reports like Aged Receivable/Payable causes a crash when expanding lines if any column value evaluates to None. Steps to reproduce: 1) Install 'account_reports' module with demo data and enable developer mode. 2) Navigate to Accounting > Reporting> Partner Reports > Aged Receivable. 3) Click on 'gear icon' to navigate advance options. 4) Click on the Options tab and set Integer Rounding to 'Nearest', click save and close adv options. 5) Expand a partner line. Error: `TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'` Root Cause: When integer rounding is enabled, the system iterates over formula results to round them using `float_round`(see[1]). However, specific report columns (such as totals for empty periods) may return None. The `float_round` function attempts to perform arithmetic on this value, failing because it cannot divide NoneType. FIX: Skip the rounding if the value received at [1] is None. [1]- https://github.com/odoo/enterprise/blob/9b517564d95424836da1e8368f6b5dc52ae45d1a/account_reports/models/account_report.py#L3329 opw-5392883 Forward-Port-Of: odoo/enterprise#102417
This update fixes an issue where a distracting helper element remained visible in the bank reconciliation journal when no entries were present. By hiding this element when there are no records, the view is now cleaner and more user-friendly, particularly on mobile devices. This enhances the overall user experience.
Original PR description
Before this PR, in the bank reconciliation journal, the no-content helper remained visible when the quick-create view was opened and there were 0 entries. This was unexpected behavior and caused overlapping issues, especially on mobile views. With this PR, the no-content helper is hidden whenever the quick-create view is open and there are 0 entries either isGrouped or not. task-5470591 Forward-Port-Of: odoo/enterprise#103776
This update fixes an issue where popups added to product descriptions on the website sale pages would appear behind the product images. The fix ensures popups are always displayed above images, improving the user experience and preventing disruptions when adding information to product details. This change was made to ensure consistent and clear product information display.
Original PR description
Steps to reproduce: =================== - Go to website sale & pick any product. - Go to edit mode & drop a popup in the product description -> Popup appear behind of the product image. Cause: ===== Product popups inserted inside the description column (#product_details) inherit it's z-index, while the adjacent .o_wsale_product_images column stays with z-index: 1. Since the details column z-index: 0, any popup inside it remained under the image column. Solution: ========= Override the z-index only when a popup is present opw-5458436 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243136
This update resolves an issue where a link added to a Todo would automatically highlight upon page refresh, even without user selection. The fix ensures the highlighting is only applied when a link is actively selected within the HTML editor. This improves the user experience and prevents unexpected visual distractions.
Original PR description
Problem: Add a link as the first line in a todo and refresh the page. The link is highlighted as soon as the page loads, even though no selection was made by the user. Cause: After 880734ee1f1f4d20d92c44e3cedcf2c61c0da908, when the editor is loaded without an active selection, the selection is set to the first element in the editable. If that element is a link, the class `o_link_in_selection` is added automatically. Solution: Only add `o_link_in_selection` when the selection is on a link and the editable is focused. Steps to reproduce: - Open a Todo. - Add a link as the first text. - Refresh the page. - Observe the link is highlighted. task-5436106 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243500 Forward-Port-Of: odoo/odoo#241277
This update resolves an issue where links within editable fields were incorrectly highlighted when the field itself wasn't focused. The change aligns the test to accurately reflect the corrected behavior, ensuring consistent highlighting logic. This improves the user experience by preventing unintended visual cues.
Original PR description
Links that are the first deep node in an editable are highlighted even when the editable is not focused which was fixed in the community PR. Adapt the test to reflect the correct behavior opw-5436106 Forward-Port-Of: odoo/enterprise#103676
This update corrects an issue in the recruitment demo data by ensuring that user records are replaced with correct partner records. This prevents errors and ensures the demo data accurately reflects the system's expected data structure, leading to more reliable demonstrations and testing.
Original PR description
author_id expects a res.partner record. In this commit: Replace the user record with the corresponding partner record to avoid passing an incorrect recordset in demo data. Forward-Port-Of: odoo/odoo#241260
This update allows users to manually specify the CSV separator during import, addressing a previous limitation where auto-detection would fail if the last value in a row was missing. This enhancement ensures broader compatibility with various CSV file formats and improves the reliability of importing data into spreadsheets.
This update fixes an issue where menu entries were incorrectly updating even when a page already existed with the same name. Previously, creating multiple pages with the same name would cause menu links to point to the last created page. This change ensures menu entries are only updated when a new page is created, improving the accuracy of website navigation.
Original PR description
With commit 19302cd40347065fcd937bd54e6dce27fe4940cc, when a page is created, menu entries with a url corresponding to the created page are updated to set their `page_id` to the new page. The update may also be triggered when creating several pages with the same name in a row. This commit updates a menu entry on page creation only if no page were already associated to the menu. Steps to reproduce: - Create a new page, call it "test" (will be available on `/test`) - Create a new page, call it "test" (will be available on `/test-1`) - Go to editor menu - Bug: both entries point to `/test-1` - Create a new page, call it "test" (will be available on `/test-2`) - Go to editor menu - Bug: the first one (and the new one) is pointing now to `/test-2` task-5186653 Forward-Port-Of: odoo/odoo#243312
This update resolves a bug where weighing information lingered on the customer display after a scale transaction. Now, the display automatically clears when the weighing dialog is closed, ensuring accurate and immediate updates for customers. This improves the overall user experience and data accuracy.
Original PR description
Before this commit, after weighing a product, the weighing details would remain on the customer display even after closing the weighing dialog. Only weighing another product could get it to change. After this commit, the weighing details on the customer display are always cleared once the weighing dialog is closed. Forward-Port-Of: odoo/enterprise#104171
This update fixes a potential issue in the barcode tour process by ensuring all calls are completed before the tour ends. Removing a synchronous check for DOM elements improves reliability and simplifies the system's assertion process, preventing unpredictable errors.
Original PR description
After validate an operation, it's still beter to wait for trigger .o_stock_barcode_main_menu to be sure the calls are finished before closing the tour... especially when assertions are made after the tour in python. runbot-error-id~234470 Forward-Port-Of: odoo/enterprise#103699
This update fixes a potential issue where the 'Download' action wasn't reliably available when documents were in the trash. The change ensures the download button is consistently displayed, regardless of the document type, and simplifies the code for clarity. It also removes a redundant check for small screens.
Original PR description
task 5435603
This update resolves an issue where the original invoice information was not correctly displayed when reversing invoices (credit notes). Previously, the 'Source Document' field in the invoice list view was blank after a reverse move. This fix ensures that the correct source invoice is accurately reflected, improving reporting and reconciliation processes. This was a regression caused by a previous change.
Original PR description
### Issue: Reverse moves miss `invoice_origin` field. #### To reproduce: 1- Create a SO. 2- Create an invoice and confirm. 3- In invoice list view make the `Source Document` visible. 4- Create a credit note and reverse the move. From invoice list view, you can observe that `Source Document` is empty for reverse move. ### Cause: This is a regression introduced by #236656. opw-5362055 Forward-Port-Of: odoo/odoo#240439
This update resolves an issue where the price display in the point-of-sale (POS) system was incorrect. The fix replaces a string-based currency display unit with the correct numeric display unit, ensuring accurate price calculations and presentation for customers.
Original PR description
We were using `currencyDisplayPriceUnit` inside `Math.sign()`. However, `currencyDisplayPriceUnit` returns a string. Now we use `displayPriceUnit`. opw-5405572 Forward-Port-Of: odoo/enterprise#102160
This update resolves a bug where creating a new employee version with a date later than an existing version's contract end date resulted in duplicate contract creation. The fix ensures that contracts are only created for the active employee version, streamlining payroll processing and preventing unnecessary contract generation. This improves data accuracy and efficiency.
Original PR description
To reproduce: install hr_payroll open an employee form view > payroll make sure the employee_version you are on doesn't have a contract end date set the end date to X and without saving create a new employee version from the plus sign with date greater than X The Bug: when following the above flow a contract will be created for both employee versions it shouldn't be the case for the second version as version date is greater than contract end date opw-5427769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243153 Forward-Port-Of: odoo/odoo#240681
This update addresses a requirement from the pharmaceutical industry to display lot expiration dates on customer invoices. The change adds lot expiration dates to the information provided for invoiced lots, aligning with industry best practices and improving invoice accuracy. This ensures consistent and complete information for customers.
Original PR description
It's common in pharmaceutical industry to provide expiration dates of lots on customer invoices. Because of that, the lot expiration date is now added to `_get_invoiced_lot_values()`, together with lot properties. Task: 4985878 Related: odoo/odoo#236734
A minor typo in the Odoo Enterprise module summary has been corrected. The original summary incorrectly displayed as 'Odooenvironment' in the user interface. This update ensures accurate module identification and a consistent user experience.
Original PR description
Typo introduced by commit 838b5e4. Because of the missing space, it appeared as "Odooenvironment" in the UI. task-none
This update resolves an issue where certain parts of the account module were unintentionally granted elevated permissions (sudo access) to bank statement data. This change improves security and data access control, ensuring only authorized processes can interact with sensitive financial information. The fix removes this unnecessary privilege.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243161 Forward-Port-Of: odoo/odoo#242771
This update corrects a bug where matching a partner by bank account could be overwritten by a subsequent match found through the partner's name. Previously, the system didn't check if a partner was already identified, leading to incorrect partner assignments. This change ensures accurate partner retrieval, improving data consistency in bank statement processing.
Original PR description
Ensure the retrive partner from partner name doesn't override the retrieve partner from bank account. When retrieving a partner on an st_line, we first check for a match based on the bank account, and then on the partner name. However, we fail to check if a match was already found before searching by name. This means that if a partner is matched via bank account, and subsequently another match is found via name, the first match gets overridden by the second one. This commit adds a check for st_line.partner_id before attempting further matching, preventing the previous result from being overridden. no-task Forward-Port-Of: odoo/enterprise#103648
This update fixes a limitation in the website builder where certain snippet options (Model and Template) were hidden. The change removed a technical restriction, now allowing users to select these options when adding snippets like the 'Blog' snippet. This simplifies the website customization process for non-technical users.
Original PR description
Steps to reproduce (19.0+): 1. Add a "Blog" mono-record snippet to a website page. 2. Select the snippet → the "Model" and "Template" options are visible. The code from [1], which introduced mono-record dynamic snippets, restricted the visibility of these options as follows: - The "Model" option should only be visible for generic mono-record snippets (in `Debug` mode). - The "Template" option should be available for generic snippets and, exceptionally, for the "Products" snippet (which had no default layouts in the snippets dialog). Starting from [2], these conditions are no longer applied, as the change simply removed the `props.modelNameFilter` used in the XML to enforce them. [1]: https://github.com/odoo/odoo/commit/e3b062e5d3820ddfcee2eb669f21edc0c53c3330 [2]: https://github.com/odoo/odoo/commit/36f741745b927d7cbac9b32042bd53b47711da6f related-task-4280375 Forward-Port-Of: odoo/odoo#241602 Forward-Port-Of: odoo/odoo#240995
This update fixes a previous restriction on website snippet options, allowing users to select 'Model' and 'Template' when adding dynamic snippets. The change removed a technical filter that previously limited these choices, ensuring greater flexibility in customizing website content. This improves the user experience for managing website snippets.
Original PR description
Steps to reproduce (19.0+): 1. Add a "Blog" mono-record snippet to a website page. 2. Select the snippet → the "Model" and "Template" options are visible. The code from [1], which introduced mono-record dynamic snippets, restricted the visibility of these options as follows: - The "Model" option should only be visible for generic mono-record snippets (in `Debug` mode). - The "Template" option should be available for generic snippets, except for "Products" snippet - (which is using another "Cards Design" option to customize the layout). Starting from [2], these conditions are no longer applied, as the change simply removed the `props.modelNameFilter` used in the XML to enforce them. [1]: https://github.com/odoo/odoo/commit/e3b062e5d3820ddfcee2eb669f21edc0c53c3330 [2]: https://github.com/odoo/odoo/commit/36f741745b927d7cbac9b32042bd53b47711da6f related-task-4280375
Features or functions removed from Odoo
This pull request removes a redundant field, 'online_partner_information', from the bank statement synchronization module. This cleanup improves the codebase's efficiency and reduces potential maintenance overhead. The change has no impact on how users interact with the system.
Original PR description
Partner's and banks statement line's 'online_partner_information' field is not used anywhere in code.
Code cleanup and technical improvements
This update simplifies how Odoo stores whether a user has dismissed notification permissions, using a more straightforward local storage approach. A new upgrade script has been added to ensure this setting is correctly preserved across Odoo updates. This ensures a consistent user experience regarding notifications.
Original PR description
This commit converts field `Store.isNotificationPermissionDismissed` to simpler syntax `{ localStorage: true }`.
As the key changes, this also adds upgrade script to preserve the setting.This update simplifies the process of configuring the IoT Box by consolidating commands and reducing unnecessary file transfers. By optimizing the setup, we're aiming for a faster and more reliable deployment of the IoT Box, improving the overall user experience. This change focuses on internal setup improvements.
Original PR description
group commands, rsync only once.
This update simplifies the codebase by removing a redundant folder structure. The change improves maintainability and organization of the Enterprise module's code. This is an internal improvement to the Odoo platform.
Original PR description
Clean folder structure and js imports by removing the js folder in src.
This update streamlines the way signatures are handled within Odoo Enterprise. The signature input functionality has been moved to a central component, allowing it to be used more efficiently across different modules like mass mailing. This improves consistency and reduces redundancy in how signatures are managed.
Original PR description
This PR moves `SignatureInputPlugin` and `SignatureInputComponent` from `accountant_knowledge` to `html_editor`. This change enables reuse of the signature input plugin in `mass_mailing`, specifically for the `mass_mailing.s_text_signature` snippet. Task-5380615