Monday, January 5, 2026
17 changes · saas-19.1
Enhancements to existing features
This update enhances the integration with Adyen, a payment processor, by adding crucial information about the Odoo platform to the payment requests. This ensures accurate transmission of key details, leading to smoother and more reliable payment processing. A new test has been implemented to verify the successful completion of payments with this updated information.
Original PR description
Add applicationInfo to the payload sent to Adyen, ensuring that externalPlatform is correctly transmitted. A test was added to verify that applicationInfo is present in the payload and that the payment request succeeds as expected. task-5157863 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238776 Forward-Port-Of: odoo/odoo#233075
Resolved issues and error corrections
This update resolves an issue where users joining meetings via mobile invitation links would sometimes experience crashes due to accessing incorrect inbox data. The fix ensures the mobile UI handles message access safely, preventing these crashes and improving the meeting experience for all users.
Original PR description
**Steps to Reproduce:** - Log in with User A. - Start a meeting. - Send the invitation link to User B. - Log in as User B/Guest and join the call from a mobile device. Before this PR, joining the call from the public invitation page on mobile could crash due to accessing undefined inbox messages. This PR fixes the issue by safely handling the messages access, ensuring the UI no longer crashes in this scenario. task-[5428778](https://www.odoo.com/odoo/project/1519/tasks/5428778) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241868
This update fixes an issue where clicking 'Join Call' from a call invitation didn't automatically open the related chat thread. Now, clicking 'Join Call' opens the correct thread in both the chat window and the discuss app, and clicking the invitation avatar focuses the composer within the chat window. This improves the user experience when scheduling and participating in calls.
Original PR description
**Description of the issue this PR addresses:** Clicking on join call does not open the corresponding thread, neither in the discuss app nor in the chat window. **Steps to Reproduce:** - Log in with…
**Description of the issue this PR addresses:** Clicking on join call does not open the corresponding thread, neither in the discuss app nor in the chat window. **Steps to Reproduce:** - Log in with Admin and Demo user - From the Demo side, open the chat window/discuss app and call Mitchell Admin - On the Admin Side, click Join the call from the call invitation preview - Chatwindow/Discuss app does not open the corresponding thread automatically Additionally, clicking on the `invitation avatar` does not focuses the composer as expected in the chat window. **Desired behavior after PR is merged:** - Clicking join call now opens the corresponding thread in both discuss and chat window, with the composer focused in the `chat window`. - Clicking the avatar on a call invitation now focuses the composer when opened inside a chat window. task-[5367781](https://www.odoo.com/odoo/project/1519/tasks/5367781) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239450
This update fixes an issue where Point of Sale prices were incorrectly calculated when using a currency different from the company's default. The change ensures that product prices are accurately converted to the configured currency, preventing inflated or deflated prices during transactions. This improves the reliability of the Point of Sale functionality.
Original PR description
Behavior: When using a Point of Sale configured with a different currency than the current company's currency. The price conversion is inverted. This occurs when loading the data when accessing PoS, each product should have its currency converted to the config's currency from the company's, however this is currently inverted. https://github.com/odoo/odoo/blob/e9656230e60fee23cf399f0c6bdefbcedef86768/addons/point_of_sale/models/product_product.py#L36-L40 Steps to reproduce: - Activate another currency than the initial one and indicate a conversion rate - Create a new point of sale - Create new journals for the PoS with the new currency. - When opening the PoS and adding any product the price will be a lot higher or lower than the expected price. opw-5266359 Forward-Port-Of: odoo/odoo#238376
This update fixes a bug that caused calls to unexpectedly end when users joined from multiple browser tabs. The change ensures stability and prevents crashes during multi-tab call scenarios, improving the overall meeting experience for our users. This resolves an issue where the RTC session would become unavailable, leading to call interruptions.
Original PR description
**Steps to reproduce:** - Start a meeting with user A - Share the invitation link with user B - Login with user B and join the call - Open another browser tab/window with the same user B - Join the same call in that tab using the invitation link - The call ends for that user as the RTC session is terminated - **_TAB1_**: join the call again - **_TAB2_**: error **Current behavior before PR:** When the same user joined the same call from another tab or during RTC renegotiation, selfSession could temporarily be undefined. **Desired behavior after PR is merged:** This PR ensures that no crash happens when dealing with the RTC Session in a `multi-tab` scenario. task-[5263097](https://www.odoo.com/odoo/project/1519/tasks/5263097) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241801 Forward-Port-Of: odoo/odoo#240881
This update ensures timers stop correctly, even when switching between different companies within the Odoo system. Previously, a technical issue with the industry_fsm module prevented timers from being properly stopped when working in a different company, leading to errors. This fix resolves this problem, guaranteeing consistent timer behavior regardless of the company context.
Original PR description
Before this commit, when the user starts another timer from another company, the existing timer should be stopped before starting a new one. However, if industry_fsm module is installed and the…
Before this commit, when the user starts another timer from another company, the existing timer should be stopped before starting a new one. However, if industry_fsm module is installed and the previous timer is running from another company, the user could have an Access Error because he cannot read the task/ticket linked to the timesheet with the timer to stop. This commit makes sure the timer is correctly stopped without any issue even if the record linked is inside another company. Steps to reproduce the issue: ============================ 1. Install industry_fsm module 2. Create a task from a timesheetable project and start a timer from that new task. 3. Create a new company and go inside that company 4. Create a new timesheetable project and a new task inside it 5. Start a new timer from that new task. Expected Behavior: ----------------- The timer form the first task created should be stopped and a timer for the newest task should be running. Actual Behavior: --------------- An access error is raised because the user cannot access to the task linked to the timer to stop. task-5076633 Forward-Port-Of: odoo/enterprise#96411
This update ensures that users are prevented from adding rental products to their cart when a resource is unavailable during the selected rental period. Previously, the system didn't check availability if the ‘website_sale_renting_stock’ module wasn't installed. This change improves the user experience by preventing incorrect bookings.
Original PR description
Before this commit, when the user goes to the webshop to take a rental service with rental service unavailable at a certain period, the system does not block the user when the resource is not available during 2 hours in the period chosen by the user. The reason is because the hours are not checked when website_sale_renting_stock is not installed. This commit moves the code checking the time of the rental period made in website_sale_renting_stock in website_sale_renting to be able to have that verification for rental service used with planning to make sure the system will prevent the user to add the product in his cart when the resource is unavailable. task-5123239 Forward-Port-Of: odoo/enterprise#102071 Forward-Port-Of: odoo/enterprise#96241
This update fixes a bug where deferred accounting for misc entries wasn't correctly identifying the appropriate account type. The change now analyzes the individual line's account type instead of relying on the overall move type, ensuring accurate deferral calculations for revenue and expense transactions. This improves the reliability of financial reporting.
Original PR description
The commit 42f823d6b8aa3d1cd171ae1603549ee95fc9d0f0 allows to use deferred on misc entries. However, there are many places in the code that were not updated. Usually they were in the form of `if move_type is sale, then deferred_type = income, else expense`. However we cannot rely on the move_type anymore for misc entries, because it will always take the `else` branch of the condition. Instead, if we have a misc entry, we should rely on the account type of the line that is being deferred, so we have more granularity. For this, we now compute the deferral account/journal for each line, and not per move. The logic inside the computation remains the same. Steps to reproduce: 1. Create a misc entry with two deferred lines (one expense, one revenue) 2. Post it 3. Check the generated deferrals, they all use the same deferred account and journal even though we have different account types opw-5194305 Forward-Port-Of: odoo/enterprise#100295
This update resolves a bug where loyalty program pricing wasn't correctly displayed in the POS system. The fix ensures the system properly loads the pricelist ID, allowing loyalty discounts to apply accurately. This improves the customer experience and ensures correct pricing calculations.
Original PR description
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070) Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672) --- ## Error FAILED: [12/46] Tour…
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070)
Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672)
---
## Error
FAILED: [12/46] Tour test_refund_does_not_decrease_points → Step selection popup has '$ 1 per point on your order' (trigger: .selection-item:contains("$ 1 per point on your order")).
## Qualifiers
{
"module": "pos_loyalty",
"test_path": "/pos_loyalty/tests/test_frontend.py",
"tour_name": "test_refund_does_not_decrease_points",
"tour_step": ".selection-item:contains(\"$ 1 per point on your order\")",
"test_class": "TestUi",
"test_method": "test_refund_does_not_decrease_points",
"test_module": "pos_loyalty"
}
## Fix
In some cases, the POS config's `pricelist_id` was not available in the frontend, causing loyalty program conditions to be skipped when checking for a matching pricelist.
By explicitly setting `use_pricelist` to True on the POS config, we ensure that `config.pricelist_id` is properly loaded and available at runtime, allowing loyalty programs with pricelist conditions to behave as expected.
Forward-Port-Of: odoo/odoo#221921This update fixes a security vulnerability where portal users with existing invoices or sales orders could modify their country information. Previously, this restriction was only enforced through the main website portal. Now, the system prevents users from changing their country details when an invoice or sale order is associated with their account, ensuring data integrity.
Original PR description
Steps to reproduce: 1. Install website_forum, website_sale. 2. Confirm a Sale Order for a portal user. 3. Log in as the portal user, go to My Account -> Edit Information. 4. Country is in readonly. 5. Go to Forum -> Profile -> Edit 6. Edit the country 7. Nothing stops the user from doing so. --- Description of the issue this commit addresses: If there is already an invoice or a sale order for a partner, we restrict the edition of some of its values to system administrators. This is already enforced on the edition of the profile via /my/home route but not via the /profile/user. --- Desired behavior after the commit is merged: When an invoice or a sale order is set for a partner with portal access, he can't edit his country via the /profile/user route anymore. --- task-5331916 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241528 Forward-Port-Of: odoo/odoo#237781
This update fixes an issue where certain POS presets weren't correctly displayed in self-service modes (kiosk and mobile). Now, presets are only shown if they're available in self-service and meet specific criteria, like being associated with a table. Users may need to adjust product settings to see these presets in the kiosk or mobile menu.
Original PR description
*: pos_self_order, pos_online_payment_self_order Two things will change with this PR. First, before this commit, when a pos config had only one available preset (and set as default) and this preset…
*: pos_self_order, pos_online_payment_self_order Two things will change with this PR. First, before this commit, when a pos config had only one available preset (and set as default) and this preset was not available in self, this preset was used as the default one. But now, it's not the case anymore. We only use it if, and only if, it is available in self. The second thing was to fix the "Dine In" preset availability in the eating location choices. A dine-in preset is a preset which have service_at == table as attribute. If this preset (is `available_in_self`) and has `service_at === table`, we only show it when there is a table_identifier in the URL or when we are in the kiosk. In all other cases, it'll never be shown. If user wants to see this preset in the kiosk or in the mobile menu without table_identifier, user needs to change the `service_at` field at `counter` (or `delivery`) and put the product as `available in self` as well. task-id: 5190541 community pr:https://github.com/odoo/odoo/pull/234522 Forward-Port-Of: odoo/enterprise#103063
This update fixes an issue where customers weren't correctly returning to the splitting order screen after making a payment when automatic receipt printing and skipping the preview screen were enabled. The change ensures a smooth transition back to the splitting workflow, improving the customer experience during multi-item purchases. This update is a bug fix.
Original PR description
Ensure FeedbackScreen uses a unified `goNext()` flow and restore the splitting workflow when `Automatic receipt printing` + `Skip preview screen` are enabled. Paying part of a splitted orders now correctly return to the splitting screen instead of the floor plan by delegating the logic to `pos.continueSplitting()` / `pos.isContinueSplitting()` (shared with ReceiptScreen). task-id: 5405595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239532
This update resolves an issue where products without categories weren't shown correctly when grouping by category in the POS. It also ensures that products with multiple categories are displayed only once when filtering, improving the user experience and accuracy of product listings.
Original PR description
[FIX] point_of_sale: fix group by category feature Task: [#5369658](https://www.odoo.com/odoo/project/1737/tasks/5369658) --- If we check the setting "Group products by category" in POS settings and we don't restrict the categories available in POS, products without category were not shown in the product list. Also when filtering by category, one product with multiple categories was shown multiple times. One time per category it belonged to. This commit fixes the issue by adding products without category at the end of the product list and by only showing products once when filtering by category. If no category is selected, the products will still be shown several times if they belong to multiple categories. Forward-Port-Of: odoo/odoo#238156
This update resolves an issue where Australian BAS W2 reports were displaying incorrect negative signs due to a technical change in how tax signs were handled. The fix ensures the correct sign is applied to W2 lines, preventing double sign inversions and ensuring accurate reporting. This update impacts the generation of Australian tax reports.
Original PR description
Since 19.0, sign handling was moved out of tax tags. In community commit 9f55bc242e71e96260edc425d227409775b6b096, the sign was removed from tax tags, but for BAS line W2 a negative sign was mistakenly kept at the tag level, while the report aggregation already applies a negative sign. This resulted in a double sign inversion. This commit fixes W2 by applying the correct sign. enterprise pr -https://github.com/odoo/enterprise/pull/102114 task- [5416350](https://www.odoo.com/odoo/project.task/5416350) Forward-Port-Of: odoo/odoo#239999
This update fixes an issue where customer information was incorrectly displayed as the author of refund transaction messages. Previously, the logged-in user wasn't properly identified. Now, the correct user who initiated the refund is accurately recorded, ensuring accurate transaction tracking and reporting.
Original PR description
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module…
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module and enable the `demo` payment provider. - Create a new quotation and from the `gear` icon, select `Mark Quotation as Sent`. - From the `gear` icon, choose `Generate a Payment Link`, and copy the link. - Open the link in an incognito window, and complete the payment. - Return to the original tab and open the payment transaction from the chatter. - Click `Refund` > `Refund` and observe the `author` of the messages in the chatter. **Observation:** The refund messages entry shows the customer as the author instead of the logged-in user who executed the refund. **Root Cause:** At [1] and [2], when the logged-in user is not a superuser, the code assigns the customer (`self.partner_id`) as the author, even during `refund`, `capture`, and `void transactions`, resulting in an incorrect message author. **Fix:** This commit ensures that during refund, capture, and void transactions, the message author is set to the logged-in user instead of the customer. [1]: https://github.com/odoo/odoo/blob/bbf3bd7b0e1d3e015350f9c959fad056384e2318/addons/account_payment/models/payment_transaction.py#L223 [2]: https://github.com/odoo/odoo/blob/5cf325dfff1ffbc1c4b4d0bcfc44ac9f55ea7c51/addons/sale/models/payment_transaction.py#L110 **Before:** <img width="1910" height="624" alt="5379376_before" src="https://github.com/user-attachments/assets/decdd620-d741-488e-9dec-e5c8c9bafc48" /> **After:** <img width="1917" height="622" alt="5379376_after" src="https://github.com/user-attachments/assets/5f38f3c3-fd2c-489e-afc9-d7a356fde23a" /> opw-5379376 Forward-Port-Of: odoo/odoo#241951 Forward-Port-Of: odoo/odoo#239224
This update streamlines the planning process by automatically notifying managers when employee work emails are missing. Instead of being blocked in a wizard, users receive a list of affected employees, allowing them to quickly address the issue or escalate to HR. This reduces delays and improves overall planning efficiency.
Original PR description
Before this commit, when the planning manager wants to send the planning and for some employees the work email is missing, the user is blocked on the wizard to fill the work email on those employees if he does not edit access to employee model. This commit makes sure the wizard to fill in the missing work email is not displayed if the user cannot edit the information of the employees. It also displays a notification listing the employees for which the work email is missing. By doing that, the user can easily remove those employees to continue his flow or ask to HR user or the employees concerned to complete the missing information. task-5090163 Forward-Port-Of: odoo/enterprise#102819 Forward-Port-Of: odoo/enterprise#96111
This update resolves an issue where employees were incorrectly receiving duplicate deductions on their CFDI payslips in Mexico. By removing a specific CFDI concept, the payroll system now accurately accounts for existing deductions, ensuring compliance with Mexican tax regulations. This change impacts the ‘l10n_mx_hr_payroll_account_edi’ module.
Original PR description
Avoid duplicate employee deductions on the CFDI payslip by eliminating the CFDI concept that is currently generating a second retention already accounted for in the “IMSS Total (Employee)” payroll rule. target: 19.0 task-5436851 Forward-Port-Of: odoo/enterprise#102730