Thursday, January 15, 2026
44 changes · saas-19.1
Resolved issues and error corrections
This update resolves an issue where the 'Source Document' field was incorrectly empty after reversing invoices. This meant users couldn't easily track the original invoice linked to the reversed transaction. The fix ensures that the correct invoice origin is displayed during reverse moves, improving reporting and reconciliation accuracy.
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
A technical bug related to a record rule was causing a crash when opening contacts. This fix resolves an ambiguous column reference within the system's query logic, ensuring the contact application functions correctly. The update prevents a traceback and improves overall stability.
Original PR description
### Issue: When creating a record rule on moves using partners, a traceback is raised when opening a contact. ### Steps to reproduce: - Install 'account_followup' and 'contacts' - In Settings >…
### Issue:
When creating a record rule on moves using partners, a traceback is raised when opening a contact.
### Steps to reproduce:
- Install 'account_followup' and 'contacts'
- In Settings > Technical > Security > Record Rules create a new rule
- name: Test Rule
- model: Journal Entry
- definition: `[('partner_id.is_company', '!=', True)]`
- Open the Contact app and try to open a contact
- Traceback
### Cause:
The newly created rule is used in the query computed by `_compute_has_moves()`. To do this the tables 'account_move' and 'res_partner' are joined. Then `subselect()` simply adds the select element with the string it is given, resulting in:
```sql
SELECT commercial_partner_id
FROM "account_move"
LEFT JOIN "res_partner"
...
```
But both `account_move` and `res_partner` have a column named "commercial_partner_id" resulting in an ambiguous column reference traceback.
### Solution:
We need to add precision on which table should be used. `subselect()` cannot guess which one should be used. We cannot add the precision in the definition of `field_names` because it is not compatible with the domain used by `_search()`.
So we add `'account_move.'` to the field name before giving it to `subselect()`.
opw-5467608
Forward-Port-Of: odoo/enterprise#103792This update fixes an issue where matching a partner by bank account could inadvertently overwrite a previous match found by name. Now, the system prioritizes the bank account match, ensuring accurate partner identification when processing bank statements. This improves data reliability and reduces potential errors.
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 corrects a technical issue where bank statements were incorrectly granted elevated permissions. Removing this sudo access enhances security and ensures proper data access controls within the Odoo accounting system. This change improves the overall stability and security of the SaaS platform.
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 resolves an issue where multiple actions on a device weren't consistently recognized. By providing a unique session ID in the response, the system now correctly handles concurrent actions, ensuring users receive confirmation for all initiated tasks. This improves the reliability of device interactions.
Original PR description
Instead of passing `session_id` in the device class parameters, we provide it directly in the response dictionary, in order to allow concurrent actions on the device. Before this commit: - send an action from a PoS: `session_id` is set to `1`, - before the end of the execution, send a second action from the same PoS on the same device (e.g. on another browser): `session_id` is updated to `2`, - you get only one confirmation in the PoS. After this commit: we get both confirmations. Forward-Port-Of: odoo/odoo#243155 Forward-Port-Of: odoo/odoo#243031
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 presentation for customers. This improves the overall user experience and prevents potential pricing errors.
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 fixes a calculation error related to employee offers for part-time roles. Previously, the system incorrectly attempted to adjust percentages based on full-time salaries. Now, the system accurately reflects the gross salary or employer cost set for part-time offers, streamlining the offer creation process.
Original PR description
When you make an offer to a 4/5 time for example, you set the 4/5 gross or employer cost and not the full, so no need to modify the percentage on the offer Forward-Port-Of: odoo/enterprise#103936
This update fixes a minor issue where search errors were hidden, now consistently displaying a helpful 'Domain is invalid' message. Additionally, the search logic has been optimized for performance and allows users to easily filter for records that don't meet specific criteria (e.g., 'Is Not Set').
Original PR description
Search method logic was rewritten so since commit:
https://github.com/odoo/odoo/commit/92301a5b300dec1ddfca44dc35318b83d67c56fa
`raise NotImplementedError(_("some text"))`
no longer raises an error nor does it ever show the error message. Instead a notification that says "Domain is invalid. Please correct it" is always displayed when the method is unable to run the search. Therefore we update the legacy way of doing it in these search methods so that the code is clean (i.e. so no one copies it) and to avoid translating strings that will never be visible.
Additionally, the search logic was also updated such that the `value` exists is no longer needed and the `=`/`!=` operators are handled by `in` for optimized code. This change makes it so users can now do the "Is Not Set" search since it will return only the records that do not match the "Is Set" logic.
Forward-Port-Of: odoo/enterprise#104115This update fixes an issue where popups added to product descriptions on the website sale page were appearing 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 enhance visual clarity and usability.
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 ensures that the wizard automatically closes after report downloads, regardless of whether a custom report handler (like for IoT) is used. Previously, using a custom handler caused the wizard to remain open, leading to an inconsistent user experience. This fix maintains the expected behavior of closing the wizard after a report is successfully printed.
Original PR description
Problem: When an alternate ir.action.report handler is used (such as for IoT), the logic to close the wizard after the report is downloaded (printed) is skipped, so the wizard stays open. Steps to Reproduce: - Go to "Acoustic Bloc Screens" product and click "Print Labels" - Select "ZPL labels" and confirm - The report downloads and the wizard closes as expected - Go to Settings > Technical > Reports and select "Product Label (ZPL)" - Set an IoT device on the report - "Print Labels" again, selecting a printer and the IoT toasts in the top right appear after the wizard closes - Refresh the page, and try printing again - The wizard stays open (wrong) and the IoT toasts appear Solution: When returning from the custom handler, check if close_on_report_download and close the wizard. opw-5153139 Forward-Port-Of: odoo/odoo#242045 Forward-Port-Of: odoo/odoo#238247
This update corrects a database error that prevented the Tax Report from properly expanding invoice lines. The fix ensures accurate report generation by using the correct table alias to retrieve tax descriptions. New test cases have been added to verify the report's functionality and hierarchical structure.
Original PR description
Before: The `query_tax_lines` method was incorrectly using the account tag alias to access the `description` field, which does not exist on that table. This caused a database error when expanding invoice lines from the Tax Report. After: Now the query correctly uses the `account_tax` table alias to fetch the tax description. - Also added test cases for sales and purchase reports to ensure correct generation of report lines and proper expansion of the hierarchical structure. task-5461512 Forward-Port-Of: odoo/enterprise#103668
This update fixes an issue where tax invoices in Thai were consistently displaying the branch name in English. The change ensures the branch name is now translated based on the language setting of the customer's account, improving accuracy and a better user experience for Thai-speaking clients. This was a minor fix to improve localization.
Original PR description
Currently, l10n_th_branch_name is not translatable. Regardless of the language setting, it is printed in English on the tax invoice. This PR addresses that. Task-5438534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242484
This update resolves a minor typo within the Odoo Enterprise system. The change ensures the naming of attachment files accurately reflects their associated external IDs and functionality, improving data consistency. This fix prevents potential confusion and ensures proper system operation.
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 an issue where the Point of Sale system couldn't reliably find customer records, particularly with demo data. A new setting allows searching both local and server-based customer records, resolving offline test case failures and ensuring accurate customer retrieval.
Original PR description
before this commit: - By default, clicking on a customer only searched local records. - Since the local cache is limited to 100 customers, with demo data it was possible that the required customer was not found. after this commit: - Added 'pressEnter' boolean parameter to search more to also fetch customers from the server. - The boolean parameter was introduced because some test cases require offline mode where fetching from the server would cause issues. runbot-232714, 232715 Forward-Port-Of: odoo/odoo#228786
This update resolves a minor issue with the automated tests for the Helpdesk Live Chat module. The fix ensures the tests run smoothly and reliably, improving the overall stability of the Helpdesk feature. This change focuses on internal testing processes and doesn't impact end-users.
This pull request updates the core spreadsheet library used in Odoo. It includes several improvements and bug fixes related to exporting spreadsheets, handling pivot tables, and ensuring accurate cell styling. These changes enhance the spreadsheet functionality and stability.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/52a3e52b0 [REL] 19.1.3 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/52a3e52b0 [REL] 19.1.3 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/ee24420b9 [IMP] style: rotation xlsx export [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/be7c264bd [FIX] style: rotation fix for centered text [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/0246149ab [IMP] style: rotation reduce rotation angle precision [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/738a1e51a [FIX] Pivots: Recompute measure on indirect dependency update [Task: 5349782](https://www.odoo.com/odoo/2328/tasks/5349782) https://github.com/odoo/o-spreadsheet/commit/8969669e5 [FIX] f&r: the searched range should follow the active sheet [Task: 5423885](https://www.odoo.com/odoo/2328/tasks/5423885) https://github.com/odoo/o-spreadsheet/commit/064602de8 [IMP] figure: add data-type attribute to figure carousel tabs [Task: 5447027](https://www.odoo.com/odoo/2328/tasks/5447027) https://github.com/odoo/o-spreadsheet/commit/e8590a8a5 [FIX] Style: UPDATE_CELL overwrites the cell style [Task: 5441149](https://www.odoo.com/odoo/2328/tasks/5441149) https://github.com/odoo/o-spreadsheet/commit/f9b854b76 [FIX] tests: fix network serialization in mock [Task: 5441149](https://www.odoo.com/odoo/2328/tasks/5441149) https://github.com/odoo/o-spreadsheet/commit/418ef27ce [IMP] style: check if default but faster [Task: 5431688](https://www.odoo.com/odoo/2328/tasks/5431688) https://github.com/odoo/o-spreadsheet/commit/f5204e7bd [FIX] Composer: Capture the correct selection on `F2` [Task: 5462713](https://www.odoo.com/odoo/2328/tasks/5462713) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update fixes a visual inconsistency in the Odoo Enterprise application. Previously, the subtitle color within the 'Recent' tab was different from other tabs. This change ensures a uniform and professional appearance across all tabs, improving the user experience. This is a minor cosmetic fix.
Original PR description
Since commit [1], the subtitle color has been changed but not for the "Recent" tab, which creates inconsistencies. This commit ensures that the subtitle color is consistent across all tabs. [1]: https://github.com/odoo/enterprise/commit/568d29af1e1d792642f0dc288d57871fc7781f38 task-5485493 | Before | After | |--------|--------| | <img width="800" height="662" alt="Capture d’écran 2026-01-12 à 11 19 34" src="https://github.com/user-attachments/assets/8beb175a-27c8-4d73-899c-6fc3ab22c0e6" /> | <img width="800" height="657" alt="Capture d’écran 2026-01-12 à 11 19 49" src="https://github.com/user-attachments/assets/e2542822-6b05-4b15-b3e8-a4aa7c1b611c" /> | Forward-Port-Of: odoo/enterprise#103996
This update resolves a random failure in a key stock management tour. The issue stemmed from a timing conflict during the unpacking of pallets, leading to incomplete actions. The fix adds a verification step to ensure the first pallet line is fully unpacked before proceeding, improving tour reliability.
Original PR description
Before this commit, the tour `test_internal_picking_reserved_move_packages_into_new_palet` was randomly failing. In this tour, we have two palets we unpack. The issue is, after unpacked the first one, we complete the second one line and then we unpack it. But it can happen the click on the button to complete the second line was done too quickly (in the meantime the first palet line is unpacked) and thus, because of this race condition, the second palet line was not complete (either it's just a visual bug due to a refresh in the wrong time, either the complete action is dropped due to the first line unpacking action.) To fix that, this commit adds a step to verify the first line is correctly unpacked before going further. runbot-build-error: [237801](https://runbot.odoo.com/odoo/runbot.build.error/237801) Forward-Port-Of: odoo/enterprise#104261
This pull request addresses a technical update to the Belgian payroll module (l10n_be_hr_payroll) to align with recent refactoring efforts. The change ensures accurate processing of DmfA declarations, maintaining the correct functionality for payroll calculations in Belgium. This update is a routine maintenance fix.
Original PR description
Forward-Port-Of: odoo/enterprise#104175
This update fixes a problem where incorrect credentials caused misleading error messages when sending invoices. The change adds a test to ensure the correct error is displayed, preventing confusion and ensuring invoices are processed properly. This improves the reliability of the HR EDI module.
Original PR description
Fixing incorrect error display that occurred while trying to send an invoice to MER with incorrect credentials set up. (no task/error ID) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243745 Forward-Port-Of: odoo/odoo#243489
This update fixes a restriction that prevented non-administrator users from updating GI CFDI sequences. Previously, sequence updates required elevated privileges, limiting functionality. Now, all users can update these sequences, streamlining the process and improving efficiency.
Original PR description
In odoo/enterprise#102500, support was added for custom GI CFDI sequences at branch level. However, the sequence consumption fails for non-admin users due to missing write access on ir.sequence, so sudo() is required when updating number_next. Forward-Port-Of: odoo/enterprise#104242
This update resolves an issue where FrontDesk hosts with limited access were unable to check out visitors via email. The fix allows hosts to complete the checkout process by running actions with elevated permissions, ensuring a smooth visitor experience. This improves usability for FrontDesk staff.
Original PR description
Steps to reproduce: * Create a visitor record with a host who has only FrontDesk user access. * Ensure Notify with Email is enabled on the station. * Click Check Out Visitor from the received email → access error appears. Issue: * Hosts with only FrontDesk user access received an access error when clicking the “Check Out Visitor” button from the email notification. * They were unable to complete the visitor checkout process. Fix: * Run the checkout action with sudo() so the host can successfully check out the visitor from the email link. Impact: * Hosts can now check out visitors without encountering permission errors. task-5373026 Forward-Port-Of: odoo/enterprise#101179
This update streamlines the process for inviting users to channels. The redundant 'invite people' button has been removed from channel types with member lists, consolidating the invitation option within the member list panel. This improves user experience and reduces visual clutter.
Original PR description
*=im_livechat Previously, channels with `memberList` had two ways to invite new users — one through the header action button and another via the member list panel. This caused redundancy since both performed the same action. This commit removes the header invite button for channel types that already have a member list and keeps only the invite option inside the member list panel. The behavior for chat-type channels remains unchanged. In addition, the invite button in the member list panel now opens a proper dialog instead of a popover. Invite buttons in other areas, such as the sidebar and chat window actions, remains unchanged for ease of access enterprise: https://github.com/odoo/enterprise/pull/98457 Task-5406953
This update streamlines the process of inviting new users to WhatsApp channels by utilizing the existing member list panel's invitation button. This change, stemming from a previous update, simplifies user onboarding and removes a redundant action from the channel interface. It ensures a more consistent and efficient user experience.
Original PR description
After https://github.com/odoo/odoo/pull/233389, we rely on the member list panel's invite button to invite any new user and remove the dedicated invite action form the thread header action list for all channel type that have member list. This commit adapts the failing test for the same. community: https://github.com/odoo/odoo/pull/233389 Task-5406953
This update resolves several issues impacting the accuracy of account reports related to MRP (Material Requirements Planning) within the Odoo Enterprise system. The changes focus on improving the reliability of tests for key modules like 'mrp_workorder_hr_account', ensuring accurate financial reporting and data integrity. This resolves a previously identified bug.
Original PR description
Forward-Port-Of: odoo/enterprise#98924
This update resolves a technical problem preventing order data from being correctly saved in the Odoo POS system for Sweden. The fix involves renaming related fields in the user interface to ensure data synchronization with the database. This ensures accurate order tracking and reporting.
Original PR description
In commit 807420a, the `pos.order` fields in `pos_l10n_se` were renamed to add `sweden_` at the start. However, these fields were not renamed in the JS code. The result is that the fields were not being saved to the DB. This commit fixes the issue by renaming the fields in the frontend. It also adds some fixes to ensure compatibility with the newest IoT box image. opw-5253585 Forward-Port-Of: odoo/enterprise#104321 Forward-Port-Of: odoo/enterprise#104180
This update corrects an issue where half-day leave requests were incorrectly calculated as full days. The fix removes a problematic filter, ensuring that half-day leave requests with 'sandwich leave' enabled display the correct duration of 2 days instead of 4. This improves the accuracy of leave tracking for Indian companies.
Original PR description
**Steps:** 1. Install the `l10n_in_hr_holidays` module and create an Indian company 2. Create a time-off type that has `half-days` as the request unit and set "sandwich leave" to true 3. Create a leave request from December 12 to December 15, 2025 it should display a duration of 2 days instead of 4 **Cause:** The filter was removing leaves that had `half-day` set as the request unit **Fix:** The half-day filter is removed. In `_l10n_in_is_full_day_request` method we will check for actual half-day leave If the `request_date_from_period` and `request_date_to_period` are the same, then it is not considered a full-day leave, and it will not be calculated as a sandwich leave. Task-5427415 Forward-Port-Of: odoo/odoo#240542
This update fixes a bug where email templates with images would sometimes duplicate themselves when saved. The change ensures all images load completely before processing, preventing errors and the duplication of content. This improves the stability and reliability of email template creation and management.
Original PR description
Problem: In Email templates, having an email with an image using `t-att-src` (Qweb) on save will duplicate the template. Cause: Images without a `src` attribute (or empty src) make `waitUntilImagesLoaded` fail immediately if the image loading promise rejects. Because the errors were not caught, the inline conversion process was interrupted and duplicating content. Solution: Use `Promise.allSettled` instead of `Promise.all` to ensure the system waits for all images to finish loading regardless of success or failure. Additionally, filter the query selector to strictly select images with a non-empty `src` attribute (`img[src]:not([src=""])`) to avoid processing invalid or dynamic Qweb images. Steps to reproduce: - Open An email template with Qweb image. - Do a change and save. - Observe the content is duplicated. opw-5489040 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243725
This update resolves a technical issue within the Odoo Enterprise HR payroll module that could cause errors when creating rule parameters with future dates. The fix ensures that computed fields are correctly initialized, preventing a traceback and guaranteeing accurate payroll calculations. This improves the stability and reliability of the payroll process.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `hr_payroll` module without demo 2. Go to Payroll > Configuration > Rule Parameters 3. Create a new rule parameter with code 4. In…
Steps to reproduce:
--------------------------------
1. Install `hr_payroll` module without demo
2. Go to Payroll > Configuration > Rule Parameters
3. Create a new rule parameter with code
4. In history page select the date in future
Observation:
--------------------------------
Traceback occurs:
```
File '/home/odoo/odoo/community/odoo/orm/fields.py', line 1456, in __get__
raise ValueError(f'Compute method failed to assign {missing_recs}.{self.name}')
ValueError: Compute method failed to assign hr.rule.parameter(2,).current_value_one_line
```
Issue:
--------------------------------
https://github.com/odoo/enterprise/blob/bbf53fbfc19e4c422cfefabd4689fc0f5156d359/hr_payroll/models/hr_rule_parameter.py#L88-L106 The compute method assigns values only inside conditional blocks. When both conditions fail, the method exits without assigning any value to the computed fields, causing a compute error
Solution:
--------------------------------
Initialize the computed fields with `False` before the conditional logic. If the second condition is met, the correct value is then assigned. This prevents the traceback and ensures proper field computation.
opw-5438500
Forward-Port-Of: odoo/enterprise#104346
Forward-Port-Of: odoo/enterprise#102924This update resolves a display problem in the General Ledger report when using analytic accounting. Previously, the report showed incorrect information and linked to the wrong journal entries. The fix ensures the General Ledger accurately reflects analytic account groupings, providing correct data and navigation.
Original PR description
Issue: Inconsistent use of line ID in the general ledger between account_move_line.id and account_analytic_line.id Step to reproduce: - Activate analytic accounting - Go to Accounting Report ->…
Issue: Inconsistent use of line ID in the general ledger between account_move_line.id and account_analytic_line.id Step to reproduce: - Activate analytic accounting - Go to Accounting Report -> General Ledger -> Options - Activate "Analytic Group By" - Create an invoice - add a line with an analytic account - Confirm the Invoice - Duplicate the invoice - Confirm the second invoice - Go to the General Ledger - Group By the analytic account you used Current Behavior: General Ledger display 2 lines per journal entry being part of the analytic distribution used for the group by. The first line displays the part related to the analytic group by, while the second line display infos for global general ledger. Clicking on the dots of the first line -> "View Journal Entry" send you to an unrelated entry. Expected behavior: - "View Journal Entry" should send to the right entry Proposed Solution: To proceed to the group_by, `_prepare_lines_for_analytic_groupby` create a temporary SQL table. This table uses the account_analytic_line.id as if it was the account_move_line.id. This commit fixes this and goes back to account_move_line.id. However, lines are merged into only one single line. opw-5267981 Forward-Port-Of: odoo/enterprise#104082 Forward-Port-Of: odoo/enterprise#103169
This update prevents public users from making changes to department configurations within the Employees app. Previously, they had unintended write access, which has now been corrected. This ensures data integrity and prevents unauthorized modifications to department settings.
Original PR description
**Steps to reproduce:** - Install Employees app - Login as public user - Go to Employees menu - Press on any employee to open its form view - Press on the department field - Try to edit the department configuration **Issue:** Public users can edit all the fields on the department configuration, except the Department's manager. This is should not be the case. **Solution:** Remove write access on department for public users. Task: 5384463 Forward-Port-Of: odoo/odoo#239027
This update ensures that rating cards are only shown in the portal chatter for modules that specifically request them. Previously, rating cards were displayed even when not intended, leading to a cluttered user experience. This change improves portal clarity and focuses the rating feature on its core use cases.
Original PR description
*: test_mail_full Modules using portal rating can set an `data-display_rating` attribute when calling the portal chatter template to indicate whether they want the rating feature displayed. Currently, only two modules have this attribute set to true: ecommerce and elearning. For other modules that don't set this attribute, even if there is a rating, such as when rating a ticket in the helpdesk module, we don't want the rating card feature to be shown in portal chatter. This change ensures that the feature is only available if the module requests it. task-5347848 Forward-Port-Of: odoo/odoo#243495 Forward-Port-Of: odoo/odoo#243255
This update fixes a display issue in the restaurant order preparation screen (PDIS) where the first course's timer incorrectly showed 0 until the second course was initiated. Now, each course accurately reflects its preparation time when it's added to the order, improving the customer experience and order accuracy.
Original PR description
Before this commit: -- - In the preparation display (PDIS), the first course shows a preparation time of 0 untill the second course is fired. - After course 2 fired, course 1 and course 2 have same preparation time value. After this commit: -- - Each course shows its correct preparation time when fired. task-5421616 Forward-Port-Of: odoo/odoo#243413 Forward-Port-Of: odoo/odoo#241251
This update fixes an issue where the 'Code' hint wasn't visible when a cursor was placed in an empty code block after syntax highlighting was implemented. The fix utilizes a native placeholder attribute in the textarea, ensuring the hint is consistently displayed for code blocks, improving the user experience within the HTML editor.
Original PR description
#### Description of the issue this PR addresses: - After syntax highlighting was introduced, placing the cursor inside an empty code block no longer displayed the 'Code' hint. - The hint logic gets the syntax-highlighing element instead of the `<pre>` element, and the `<pre>` is the child of syntax-highlighing node, and that is marked as data-oe-protected='true', so the`<pre>` is treated as a protected node and is not eligible for hint rendering. #### Desired behavior after PR is merged: - For code blocks, use the native placeholder attribute on the <textarea> and control its visibility based on focus. task-5473682 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243042
This update resolves an issue where group channels (DMs with fewer than 3 members) were displaying incorrect status information, such as an 'IM status' or 'back on' banner. By removing a specific calculation, the system now accurately reflects the channel type, leading to a more reliable and consistent user experience for group conversations. This ensures notifications and channel displays are correct.
Original PR description
Before this commit, the "correspondent" property of Thread would be computed for channels of type group (group DMs) having less than 3 members. This would lead to various confusing behaviours, including: 1. The "back on" banner being shown. 2. The chat bubble showing an IM status. 3. The notification item not showing the message author's name. This commit fixes the issues by not computing `correspondent` for channels of type group. task-5462395 Forward-Port-Of: odoo/odoo#243628 Forward-Port-Of: odoo/odoo#242058
This change prevents the 'Update Prices' button from appearing on sales orders when a pricelist hasn't been set up. Previously, the button was incorrectly displayed, potentially confusing users. This ensures a cleaner user experience and avoids unnecessary actions when pricelists aren't in use.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243410 Forward-Port-Of: odoo/odoo#241812
This fix ensures that discounts applied through pricelists are correctly calculated even when a negative quantity is entered in the Point of Sale system. Previously, the system didn't apply the discount rule when a negative quantity was selected. This change corrects a discrepancy between the backend and frontend pricing logic.
Original PR description
Steps to reproduce: ------------------- 1. Create a pricelist with a rule of 50% discount on all product, and a `min_quantity` of ZERO. 2. In PoS select this pricelist, and add a product originally priced at 10; the pricelist is well applied and the new price is 5. 3. Now, from the numpad, click change the quantity from 1 to -1 (click on the "+/-" button. Observation: The pricelist rule is not applied anymore. The price is -10 and not -5. Why it's an issue ----------------- `getPrice` on frontend is a port of `_get_product_price` on product.pricelist. There, in `_is_applicable_for`, we apply the price rule if it's `min_quantity` is 0, regardless of the bought quantity. So there's a mismatch between applying the rule on backend and frontend. This worked well on 18.0, before 43bfda63faeb4713dbeb1d11457673aafaa544b4. opw-5431651 Forward-Port-Of: odoo/odoo#241608
This update ensures that product attributes are correctly displayed on refund orders and receipts. Previously, when a customer refunded an order with variants, the attributes were lost during the refund process. This fix correctly transfers the attributes from the original order to the new refund order, improving the accuracy of refund records.
Original PR description
**Steps to reproduce:** - Make an order with a product that has variants and chose whatever in the popup - Pay for that order, then refund it - The attribute is not shown on the orderline anymore - The attribute is not shown on the receipt either **Why the fix:** When making a refund, we are actually making a new order, so we need to move the data from the old order to the new refund order. During this transit, the *attribute_value_ids* was forgotten on the moving lines, so the attributes were lost. We now give the old attributes to the new line. opw-5393332 Forward-Port-Of: odoo/odoo#243300 Forward-Port-Of: odoo/odoo#240602
This update resolves an issue where failed IoT driver actions were incorrectly recorded, preventing them from being re-executed. Now, actions are only registered upon successful completion, enhancing the reliability and efficiency of IoT driver operations. This change improves the overall stability of the system.
Original PR description
We currently reject an action if it has the same id of a previous one. If the action failed, we still registered it, making it impossible to be executed again. We now only register if the action succeeds. Forward-Port-Of: odoo/odoo#243913 Forward-Port-Of: odoo/odoo#243247
This update addresses a technical issue within the Odoo spreadsheet module where pivot tables would generate tracebacks when encountering fields that were no longer present due to data changes or module removals. The fix ensures the spreadsheet functionality remains stable and reliable, even with evolving data structures. This prevents disruptions to users generating reports.
Original PR description
Task: 5085724 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#228166
This update resolves a technical issue that caused a traceback error when creating pivot tables in the spreadsheet reports. The fix ensures that pivot tables function correctly, even when certain data dimensions are missing, improving the reliability of reporting. This enhances the usability of the enterprise spreadsheet functionality.
Original PR description
Task: 5085724 Forward-Port-Of: odoo/enterprise#103369
This update fixes an issue where follower list avatars weren't consistently displayed with the correct proportions, particularly for non-square images. The change utilizes a standard Odoo class for avatars, ensuring all images are displayed correctly and maintaining a professional appearance. This improves the visual quality of the follower list.
Original PR description
Before this commit, follower list menu had avatar that do not preserve ratio of avatars. This is noticeable for avatars that have ratio quite different from 1:1, like 3:2 or 2:3 or even less squarish. This happens because of missing `.o_object_fit_cover`, that [1] erroneously removed from REF of follower template part into its own component. This commit uses an equivalent but more official solution: `.o_avatar`, which is a classname dedicated for avatars, which has `.o_object_fit_cover` property. Task-5412078 Before / After <img width="638" height="526" alt="Screenshot 2026-01-12 at 17 23 54" src="https://github.com/user-attachments/assets/b8d3a921-52a8-48b7-a0d0-5fbfdd33a92c" /> <img width="640" height="528" alt="Screenshot 2026-01-12 at 17 23 33" src="https://github.com/user-attachments/assets/8070420c-f341-4085-bcb2-2fba060765f0" /> [1]: https://github.com/odoo/odoo/pull/200382 Forward-Port-Of: odoo/odoo#243684 Forward-Port-Of: odoo/odoo#243328
This update fixes a bug where changes to the analytic distribution widget weren't being saved correctly when the user navigated away from the field. Now, edits to the analytic distribution are automatically saved when the user clicks elsewhere, mirroring the behavior of other key fields like invoices. This ensures data consistency and a smoother user experience.
Original PR description
**Issue** When editing a line on the reco widget, close and keep change on analytic widget on unfocus **Steps to Reproduce** 1. Activate Analytic Accounting 2. Go on the Bank Reconciliation Widget 3. Edit a line 4. Change the Analytic Distribution. 5. Click elsewhere. 6. The Analytic Widget should close and keep the changes. (as it does on invoices) **Fix** Properly detect the condition for closing the widget. task-5232476 Forward-Port-Of: odoo/odoo#234398
This update fixes an issue where only the first attachment from an expense was included in the generated journal entries. The change ensures that all attachments associated with approved expenses are now correctly copied, improving accuracy and providing complete expense documentation.
Original PR description
**Steps to reproduce:** * Install **hr_expense** and **accounting** modules. * Create two or more expenses, each with **multiple attachments**. * Submit and approve the expenses. * Create the **journal entry** of all approved expenses. * Open the generated journal entry and review its attachments. **Observed behavior:** * Only the **first attachment** from each expense is present on the journal entry. * Additional attachments are missing. **Cause:** * while creating journal entry, the logic of expense iterate on `message_main_attachment_id`. * `message_main_attachment_id` stores only a **single attachment**, so only one file per expense is copied. **Fix:** * Iterate on `attachment_ids` instead of `message_main_attachment_id`. * Ensures **all attachments** from each expense are included in the generated journal entry. opw-5414834 Forward-Port-Of: odoo/odoo#243962 Forward-Port-Of: odoo/odoo#241044