Daily updates from Odoo
Navigate
Branch
Monday, January 5, 2026
247 changes
17 changes
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 assigned values in project properties would disappear after saving. The root cause was a flaw in how the system handled data retrieval for Many2one fields, specifically related to displaying contact names. The fix ensures that property values are correctly saved and remain visible after modifications.
Original PR description
**Steps to produce:** - Install project module. - Go to project > Open any project > Open any task > Click on gear icon. - Click on Add properies > Set Field type as `Many2one` and Model as…
**Steps to produce:** - Install project module. - Go to project > Open any project > Open any task > Click on gear icon. - Click on Add properies > Set Field type as `Many2one` and Model as `Contact`. - Now assign value to Property 1 > Click on `External button` > Click on `Save & Close`. **Issue:** - The assigned value disappears after saving. **Root cause:** - At [1], since `id` is not an active field (see [2]), it is not present in record.data, which is expected. However, record.data is then passed to m2oTupleFromData, which assumes that the data includes an id because it is normally used on data coming directly from the ORM. - Additionally, since display_name is also not present, m2oTupleFromData falls back to record.data.name, which is not proper. **Solution:** - Use an ORM read to retrieve the proper display_name of the record before constructing the Many2one tuple. [1]: https://github.com/odoo-dev/odoo/blob/24ccc3faf14ade70b21bf253af16a534df726fc8/addons/web/static/src/views/fields/properties/property_value.js#L87-L89 [2]: https://github.com/odoo/odoo/blob/369ca1e5a154235e80b9ea6af7b3f10442c0939f/addons/web/static/src/model/relational_model/record.js#L793-L795 Before: <img width="589" height="68" alt="bef" src="https://github.com/user-attachments/assets/b2aeba0c-1c52-4663-9f94-5c7808a882db" /> After: <img width="613" height="81" alt="after1" src="https://github.com/user-attachments/assets/a3b3d733-929d-4a24-9e17-c73d9569e9b7" /> **opw-5257819** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240443 Forward-Port-Of: odoo/odoo#238052
This update fixes an issue where complex custom groupbys in reports were incorrectly formatted with excessive indentation. The change ensures reports handle more intricate domain conditions accurately, improving readability and preventing formatting problems. This enhancement was identified and resolved in the latest version of Odoo Enterprise.
Original PR description
When a custom groupby defined a domain with more than one element in it (typically, conditions on multiple fields, possibly with '|' or '&' operations), if groupby lines needed to be generated for subsequent groupby, the generated groupby lines had a too high level, and ended up being over-indented.
This was because the groupby expansion computed the number of higher-level groupby lines as the length of the domain needed to restrict their content. This was too naïve, and won't work well with custom groupbys, which can define longer (or even empty) domains.
This was spotted in master (19.1), with the refactored EC Sales list, which now uses a custom engine and a specific custom groupby map.
Forward-Port-Of: odoo/enterprise#102240This 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 resolves an issue where the 'Use compact format' option within Odoo charts was visually present but not functioning correctly. The fix ensures that this option now correctly controls the display of charts, improving user experience and data visualization. This change was driven by a task to address a reported bug.
Original PR description
The checkbox to toggle the `Use compact format` option in the chart side panel was present for odoo charts, but did nothing. Task: [5405064](https://www.odoo.com/web#id=5405064&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#240251
This update resolves an issue where the 'Use compact format' option in the chart side panel was visually present but not working correctly. The fix ensures this setting now functions as intended, providing users with the desired chart display. This improves the overall usability of the chart feature.
Original PR description
The checkbox to toggle the `Use compact format` option in the chart side panel was present for odoo charts, but did nothing. Task: [5405064](https://www.odoo.com/web#id=5405064&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#102263
This update resolves an issue where the 'Position' column in German Sale Order reports was blank, causing formatting problems. The fix corrects a calculation error in the report template, ensuring accurate sequential numbering (1, 2, etc.) and proper table display. This improves the accuracy and readability of sales reports.
Original PR description
Before this commit, when printing a Sale Order using the German localization, the "Position" column in the PDF report was empty. Additionally, the table formatting was broken due to this missing data. This issue occurred because the index variable used to calculate the line number in the report template (QWeb) was incorrect. This commit fixes the index logic in the report template. Now, the "Position" column correctly displays sequential numbers (1, 2, etc.), and the table formatting renders correctly. ticket-5225647 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#240714 Forward-Port-Of: odoo/odoo#240243
This update resolves a rare technical issue that could occasionally cause problems when opening a parent channel within Odoo. The fix prevents a traceback error, ensuring a smoother and more reliable experience for users. This improves overall system stability.
Original PR description
This commit fixes a rare traceback that could occur when opening a parent channel from a thread that has been deleted. task-5355205 Forward-Port-Of: odoo/odoo#241266
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 visual issue where carousel navigation arrows displayed incorrectly when the website was configured for Right-to-Left languages like Arabic. The fix ensures that the arrows align correctly regardless of the website's language setting, providing a consistent user experience for all customers. This was caused by a previous change that inadvertently removed RTL-specific styling.
Original PR description
Steps to reproduce: =================== - Install an RTL language (e.g., Arabic) on the website. - Go to website & Edit mode - Drop product snippet `s_dynamic_snippet_products`. ->When the website is…
Steps to reproduce: =================== - Install an RTL language (e.g., Arabic) on the website. - Go to website & Edit mode - Drop product snippet `s_dynamic_snippet_products`. ->When the website is viewed in an RTL language, the navigation arrows in the snippet are displayed in the wrong direction. Cause: ====== A previous commit [1] applied a specific `transform` to arrows to adjust their visual style, By defining a new transformation for the snippet, the default generic transform for RTL language was overwritten. https://github.com/odoo/odoo/blob/e0a5e68e861363378ecd184711bc9356fe0376ff/addons/web/static/lib/odoo_ui_icons/style.css#L105 Consequently, the arrows lost their RTL-specific orientation. Solution: ========= The CSS has been updated to explicitly handle the RTL context. [1]: https://github.com/odoo/odoo/commit/d9ea6d1ebabf64dac434e0d2a7c2535bbfff5c71 opw-5440273 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241541
This update removes a confusing and unnecessary warning message that appeared when setting up pricelists for event products. The warning was poorly designed and didn't provide useful information, creating a frustrating user experience. This change simplifies the process for managing pricing for events.
Original PR description
* Remove the warning shown when creating pricelist rules for event products. * The warning is noisy, not well localized, and appears for every rule, resulting in a poor user experience with little practical value for most users opw-5441138 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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 to the account module's testing utilities prevents unnecessary invoice line creation during tests. This improves test stability and reduces potential errors, ensuring more reliable test results. The change focuses on optimizing the test setup process.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/102632
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
Documentation and clarification updates
This pull request confirms that the developer has signed a Contributor License Agreement (CLA) for their work on the Odoo project. This ensures compliance with Odoo's licensing terms and allows the team to properly acknowledge the contributor's work. The change is a standard legal process.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241227 Forward-Port-Of: odoo/odoo#241134
9 changes
Resolved issues and error corrections
This update resolves a technical issue that prevented accurate reporting of invoice reconciliation data when multiple bank transactions were used. The fix ensures that the system correctly handles invoices reconciled with multiple bank statements, preventing a 'ValueError' that previously disrupted reporting. This improves the reliability of financial reporting within the Odoo Enterprise system.
Original PR description
### Issue description: The `_compute_full_amount_switch_html` method assumes that `reconciled_lines_excluding_exchange_diff_ids` contains at most one line (which is true only for move lines of bank statement lines). However, if an invoice is reconciled with multiple bank transactions, when accessing the `full_amount_switch_html` for any move line in the invoice, it triggers `ValueError: Expected singleton`, as the compute method uses the reconciled_lines as if they are a single line. ### Steps to reproduce: 1. Create an invoice 2. Reconcile the invoice with multiple bank transactions. 3. Perform a read on the `full_amount_switch_html` field on the invoice line from the invoice (using the web tool, or add the field to any view). 4. You will get `ValueError: Expected singleton: account.move(XX, XX)` opw-5224135 Forward-Port-Of: odoo/enterprise#102048
This update fixes an issue where customer information was incorrectly displayed as the author of refund transaction messages. The change ensures the logged-in user, who initiated the refund, is accurately identified, improving transaction clarity and reporting. This resolves a potential confusion regarding payment responsibility.
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#241923 Forward-Port-Of: odoo/odoo#239224
This update resolves a minor visual glitch that occasionally appeared when using a Bootstrap modal while the cookies bar was open. The fix prevents a conflict between Bootstrap's styling and the cookies bar's functionality, ensuring a consistent user experience. This improves the overall appearance and reliability of the website.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993 Forward-Port-Of: odoo/odoo#240269
This update resolves a technical issue in the Website Builder where adding shapes to certain images caused a runtime error. The fix hides the shape option for incompatible images, ensuring a smoother user experience and preventing unexpected errors. This improves stability and reliability for users.
Original PR description
Applying a shape to an image without a corresponding record triggers a runtime error. Since such images are not compatible with shapes, this commit hides the shape option for them, preventing the error. Steps to reproduce: 1. Enter edit mode in Website Builder. 2. Add the `s_attributes_vertical` snippet. 3. Add a shape to any of its images. 4. Observe the runtime error.
This update corrects a visual glitch on the Odoo website when using RTL languages like Arabic. Specifically, it eliminates a 200ms flicker when navigating to the top of the page, ensuring a smooth user experience. The fix addresses a positioning issue affecting the mobile menu.
Original PR description
Scenario: - install RTL language on website (eg. Arabic) - go on mobile (eg. chrome developer tools and enable mobile) on website - in arabic, go down to get the navbar that follow the top of…
Scenario:
- install RTL language on website (eg. Arabic)
- go on mobile (eg. chrome developer tools and enable mobile) on website
- in arabic, go down to get the navbar that follow the top of viewport
- go up to the top
Result: there is a 200ms moment when all the interface is moved ~90% to
the right outside of the viewport.
Cause:
In RTL, the header has this state when going down in the page:
- the class: o_header_affixed
- the inline style "transform: translate(0px, -100%);"
- the transition
```
.o_header_affixed {
position: fixed;
}
.o_header_affixed:not(.o_header_no_transition) {
transition: transform 200ms;
}
```
When we go up, the o_header_affixed class is removed as well as the
inline style, but the transition causes 200ms during which we have a
transform without header having the "position: fixed".
This seems to be caused by that situation which makes the offcanvas menu
(mobile menu that appear when clicking on hamburger icon) be at
top:0/left:0 of viewport instead of being at top:0/left:-100%, this
cause all the content to be offset to the right.
Fix:
Force the transition stop if we are at the top of the page where the top
menu is shown and not the affixed menu.
opw-5173822
__PR NOTE:__
Note: I have not been able to reproduce in a small reproduction (such as jsfiddle) so I must be missing one element for the reproduction.
It is "easy" to reproduce and check what is happening when changing the animation to eg. 20000s in this line:
https://github.com/odoo/odoo/blob/d8a875dcdd1262d2d3f15ff9c414e605a7b54526/addons/website/static/src/scss/website.scss#L1493
Then you don't need to block the debugger in the 200ms to check DOM and so on.
The issue is happening in 18.0 but it has been reported in 19.0 and the code has changed between the two so I'm targeting saas-18.4 version.This update corrects a problem where delivery pickings remained 'Waiting Another Operation' after cancelling a related manufacturing order (MTO). The fix reuses existing logic to properly unlink stock moves and update availability, ensuring deliveries can be confirmed correctly. This prevents delays and improves the flow of multi-step manufacturing processes.
Original PR description
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps…
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps to reproduce ----- - Enable multi step routes - Set WH to 3-step manufacturing - Create a product - empty bom - MTO & manufacturing routes - 5 in stock - Create a SO for the product - Cancel the linked MO - Open the delivery picking - Click "Check Availability" > The product is not getting reserved from stock > The delivery picking is still "Waiting Another Operation" Cause ----- The problem happens in `action_cancel` https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1995 In 1-step case, `move.propagate_cancel` is false so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2017-L2021 where `move_dest_ids` is the move of the delivery picking. This makes it so that, when we go to the delivery picking and do `action_assign` we go through the first condition while skipping the second of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1929-L1931 instead of going into the `else` part https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1947-L1949 In 3-step, when we `action_cancel`, `move.propagate_cancel` so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2009-L2014 which lacks the swap to MTS and unlink `move_dest_id` logic. Solution ----- We can re-use the logic of unlink and MTS swap to `move_dest_ids` that were not cancelled by https://github.com/odoo/odoo/blob/0eb44aec8867e292f8258df02045efe7fbd3303f/addons/stock/models/stock_move.py#L2012 This also takes care of the problem of the status of the delivery picking being `waiting` instead of `confirmed` because it gets recomputed https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L754 and since it was set to MTS, it goes into the `else`part of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2202-L2216 ----- Ticket: opw-5124380 Forward-Port-Of: odoo/odoo#241579 Forward-Port-Of: odoo/odoo#237890
This update fixes a usability issue within Odoo's Kanban views. Previously, items within the dropdown menus of Kanban cards weren't easily navigable or highlighted on hover. This change adds navigation and hover styling to these dropdown items, improving the user experience and making it easier to select options from Kanban cards.
Original PR description
Issue:
Dropdown item-ish (such as `<a class="dropdown-item">` and ViewButton) inside kanban cards dropdown do not have the proper hover styling and are not navigable.
Steps to reproduce:
- Go to project -> open any card dropdown menu ("...") -> Items are not navigable
- Go to CRM -> open any card dropdown menu ("...") -> Items are not highlighted on hover
Fix:
This commit adds the "o-navigable" class to dropdown items and view buttons
which are inside a kanban card's dropdown menu, this makes them navigable
and adds proper hover and focus styling.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240090This update fixes an issue where payments for payroll were incorrectly linked to the employee's bank account instead of the correct tax account. The change ensures that payments, particularly for taxes, are now routed to the intended bank account, preventing payment errors and improving financial accuracy.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Avoid payment wrong initialization when a default value has been set to initialize the `account.payment.register`. Indeed, the `account.payment` also has a `partner_bank_id` property, and so the method `_create_payment`of the `account.payment.register` can initialize payment with wrong `partner_bank_id`. [enterprise#99373](https://github.com/odoo/enterprise/pull/99373) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/odoo#235475
This update fixes an issue where payroll payments were incorrectly linked to the employee's bank account instead of the correct vendor account (like the IRS). The change ensures payments are accurately routed to the intended recipient, resolving a potential payment error. Automated tests have been added to verify this fix.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Modifying `account.payment.register` for fixing `hr.payslip` payments generation so that each payment is assigned the correct `partner_bank_id`. Also, fixing a SEPA payslip payment bug which says that the employee bank account is untrusted even if it isn't. ## Tests Adding `test_bank_account_partner_payment_payslip` test to check that the payment generated for Professional Tax is made to the correct bank account (before this fix, the selected account was always the employee bank account, whatever the vendor specified in the payment). Adding `test_sepa_payslip_partner_bank_id` test to check that the `partner_bank_id` is set after account_register_payment wizard has been initialized and that the action_create_payments (action launched when the user clicks on "Create Payments" button of the `account_register_payment` wizard) doesn't raise any error. This second test is not really specified in the specs, I just stumbled upon some stacktrace when coding this PR and decided to add a test to check the flow of sepa payment. [community#235475](https://github.com/odoo/odoo/pull/235475) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/enterprise#99373
7 changes
Resolved issues and error corrections
This update fixes an issue where customer information was incorrectly displayed as the author of refund, capture, and void payment transaction messages. The change ensures the logged-in user is accurately identified as the author, improving data accuracy 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#241923 Forward-Port-Of: odoo/odoo#239224
This update corrects a minor issue in how invoice XML documents are created. Previously, the XML included an unnecessary 'Invoice address' suffix in the partner name. This change ensures the XML accurately reflects the commercial partner's name, aligning with standard Odoo practices and improving data consistency.
Original PR description
The dict-to-xml helpers were still using `partner.display_name` which includes the 'Invoice address' suffix. Changed to use `partner.commercial_partner_id.display_name` when partner name is not available, to match the fix in https://github.com/odoo/odoo/pull/232819 for the standard XML generation. task-4614564 Forward-Port-Of: odoo/odoo#241878 Forward-Port-Of: odoo/odoo#241250
This update resolves a minor visual glitch that occasionally appeared when using a Bootstrap modal while the cookies bar was open. The fix prevents a conflict between Bootstrap and the cookies bar's configuration, ensuring a consistent and stable user experience. This improves the overall appearance and functionality of the website.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993 Forward-Port-Of: odoo/odoo#240269
This update corrects a problem where delivery pickings remained 'Waiting Another Operation' after cancelling a related manufacturing order (MTO). The fix reuses existing logic to properly unlink stock moves and update availability, ensuring deliveries can be confirmed correctly. This prevents delays and improves the flow of multi-step manufacturing processes.
Original PR description
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps…
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps to reproduce ----- - Enable multi step routes - Set WH to 3-step manufacturing - Create a product - empty bom - MTO & manufacturing routes - 5 in stock - Create a SO for the product - Cancel the linked MO - Open the delivery picking - Click "Check Availability" > The product is not getting reserved from stock > The delivery picking is still "Waiting Another Operation" Cause ----- The problem happens in `action_cancel` https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1995 In 1-step case, `move.propagate_cancel` is false so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2017-L2021 where `move_dest_ids` is the move of the delivery picking. This makes it so that, when we go to the delivery picking and do `action_assign` we go through the first condition while skipping the second of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1929-L1931 instead of going into the `else` part https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1947-L1949 In 3-step, when we `action_cancel`, `move.propagate_cancel` so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2009-L2014 which lacks the swap to MTS and unlink `move_dest_id` logic. Solution ----- We can re-use the logic of unlink and MTS swap to `move_dest_ids` that were not cancelled by https://github.com/odoo/odoo/blob/0eb44aec8867e292f8258df02045efe7fbd3303f/addons/stock/models/stock_move.py#L2012 This also takes care of the problem of the status of the delivery picking being `waiting` instead of `confirmed` because it gets recomputed https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L754 and since it was set to MTS, it goes into the `else`part of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2202-L2216 ----- Ticket: opw-5124380 Forward-Port-Of: odoo/odoo#241579 Forward-Port-Of: odoo/odoo#237890
This update fixes an issue where items within Kanban card dropdown menus weren't easily navigable or highlighted on hover. The team added a styling class to these items, ensuring they function correctly and provide a better user experience when selecting options from Kanban views.
Original PR description
Issue:
Dropdown item-ish (such as `<a class="dropdown-item">` and ViewButton) inside kanban cards dropdown do not have the proper hover styling and are not navigable.
Steps to reproduce:
- Go to project -> open any card dropdown menu ("...") -> Items are not navigable
- Go to CRM -> open any card dropdown menu ("...") -> Items are not highlighted on hover
Fix:
This commit adds the "o-navigable" class to dropdown items and view buttons
which are inside a kanban card's dropdown menu, this makes them navigable
and adds proper hover and focus styling.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240090This update fixes a rounding issue that was causing inaccurate remaining time displays on Sales Orders, specifically when tracking service hours. The change ensures that time overages are calculated precisely without the accumulation of floating-point errors, leading to more reliable reporting. This improves the accuracy of time tracking for service-based sales.
Original PR description
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order…
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order Line - Log 22:00 on timesheets Current behavior: Sales Order Line shows '-2:01 remaining' Expected behavior: Should show '-02:00' to reflect two hours overconsumed without rounding. Root cause: Python's float type follows the IEEE 754 double-precision standard, where only base-2 fractions can be stored precisely. Base-10 fractions cannot be represented exactly, introducing tiny rounding errors. During chained operations such as multiple conversions or subtractions, these small errors accumulate into larger discrepancies. The float_round() function uses a small constant epsilon to correct rounding noise, but as arithmetic chains grow, errors exceed epsilon's tolerance and it can no longer correct them. Since a single global epsilon cannot handle every case (small vs. large values, chained vs. single operations, or regressions), rounding drift is inevitable when rounding happens repeatedly. Fix: To prevent these rounding errors from compounding, the solution is to stop intermediate rounding altogether. By using conversions with round=False, all arithmetic is done in the base unit (hours) with full float precision, and rounding is applied only once when displaying the final value. This eliminates error accumulation and ensures consistent, drift-free results. task-5090240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240403 Forward-Port-Of: odoo/odoo#229282
A test for the website slides feature was failing when run without the standard demo data. This was due to a missing email address for a key user account. The team resolved this by adding a default email to the user account, ensuring the test now passes consistently across versions.
Original PR description
We fix the tour test_course_reviews_elearning_admin that was failing when running it without demo data because user admin was posting a message on a channel without an email set on its partner. The same test works in version 18.0 and not in 18.2 because since 18.1, user admin no longer have an email by default (unless the demo data are installed, see odoo/odoo#185809). To fix the test, we just set an email on the partner of user admin before posting the message. Task-5418242 Forward-Port-Of: odoo/odoo#240070
3 changes
Resolved issues and error corrections
This update fixes an issue where refund transactions incorrectly displayed the customer as the author instead of the user who initiated the refund. The change ensures the logged-in user is always identified as the author for refund, capture, and void transactions, improving data accuracy and reporting. This resolves a potential confusion regarding transaction ownership.
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#241923 Forward-Port-Of: odoo/odoo#239224
This update fixes a usability issue where items within Kanban card dropdown menus weren't easily navigable or highlighted on hover. The team added a styling class to these dropdown items, ensuring they function correctly and provide a better user experience when selecting options from Kanban views.
Original PR description
Issue:
Dropdown item-ish (such as `<a class="dropdown-item">` and ViewButton) inside kanban cards dropdown do not have the proper hover styling and are not navigable.
Steps to reproduce:
- Go to project -> open any card dropdown menu ("...") -> Items are not navigable
- Go to CRM -> open any card dropdown menu ("...") -> Items are not highlighted on hover
Fix:
This commit adds the "o-navigable" class to dropdown items and view buttons
which are inside a kanban card's dropdown menu, this makes them navigable
and adds proper hover and focus styling.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240090This update resolves a sporadic test failure related to how partner suggestions are sorted, specifically when messages are sent. The fix ensures the test accurately reflects the system's data by waiting for the necessary updates to be processed before verification, preventing inconsistent results. This improves the stability and reliability of the suggestion sorting feature.
Original PR description
Before this commit, the test "Sort partner suggestions by recent chats" fails non-deterministically due to a race condition. This failure occurs because the test relies on the `last_interest_dt` timestamp being updated after sending a message to "User 2". Although the message post triggers a bus notification to update the store, the UI displays the message optimistically. As a result, the assertion for the message's existence occasionally passes before the bus notification was processed, leaving the sorting logic to run with stale data (where "User 2" was still ranked behind "User 3"). This commit fixes the issue by waiting for the sidebar to reorder "User 2" to the top. Since the sidebar ordering relies on the same server data (last_interest_dt) as the suggestion sorting, this ensures the store has processed the bus event before the test verifies the suggestion order. runbot-237553 Forward-Port-Of: odoo/odoo#241619
42 changes
New functionality added to Odoo
This update simplifies asset management for Odoo users in Hong Kong by automatically creating asset models. Each fixed asset is now linked to an expense and depreciation account, streamlining accounting processes. The update avoids incorporating Hong Kong's TVA tax system due to its unique accounting practices.
Original PR description
As odoo wants to simplify the using of its app for users in Hong Kong, the assets models for each asset was added so that the users don't have to register the model manually each time. Also, each fixed asset was linked to an expense account and its corresponding depreciation account. Taxes were not added because I found that Hong Kong doesn't have the concept of TVA in its accounting system. task-5246719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a button to the softphone interface, allowing users to mute incoming calls while they are ringing. This improves the user experience by giving users more control over incoming calls and reducing unwanted noise.
Original PR description
Added a button to mute ringtone when having incoming call
Enhancements to existing features
This update changes the survey question type from 'datetime' to 'time', providing users with a more accurate way to record time-based responses. This improves the data collected in surveys and aligns with user expectations for time input. This change is related to a previous enterprise update.
Original PR description
Change datetime question type to time question type. related PR: https://github.com/odoo/enterprise/pull/91524 Task-4896317 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refines how time answers are displayed in Odoo survey spreadsheets. It aligns with a recent change to use a time question type instead of a datetime type, ensuring more accurate and consistent reporting of time-based responses. This improves the usability and reliability of survey data within spreadsheets.
Original PR description
Following the related PR, the datetime question type has been updated to a time question type. Adapt the display of time answers on spreadsheets. related PR: odoo/odoo#221421 Task-4896317
This update simplifies the AadharSign integration within Odoo Enterprise. Previously, AadharSign was automatically enabled and visible globally, but now it's disabled by default and only appears for companies in India. This change aligns the system with regional requirements and reduces unnecessary complexity.
Original PR description
Before this PR, the emsigner was installed by default for all apps and shown in every country. Now, the AadharSign setting is disabled by default and only visible when the company’s country is India, since it’s only needed for Indian companies. task-5175955
This update enhances the Odoo Enterprise IoT Box debug mode by displaying the correct operating system icon (Windows or Linux) based on whether the IoT Box is running virtually or physically. This provides a clearer visual representation of the IoT Box's environment for support and troubleshooting.
Original PR description
In debug mode, we now display a Windows or Linux icon depending on the OS of the IoT Box (Virtual/Physical).
This update enhances the VoIP system tray icon's behavior, ensuring it correctly identifies whether the user is in the main application tab. This improves the user experience by providing consistent functionality across different devices and operating systems. The change is considered an improvement to the existing VoIP system.
This update aligns the subscription handling within the Nilvera e-invoice module with the overall Odoo Enterprise architecture. Previously, this logic was split between Community and Enterprise editions, creating inconsistency. Moving it to a dedicated Enterprise module ensures a streamlined and consistent experience for Enterprise users.
Original PR description
This PR moves the subscription-handling logic to a dedicated bridge module in Enterprise. Since the subscription app itself is an Enterprise feature, keeping the subscription flow in the Community edition, was inconsistent. task-5085628 related upgrade PR: https://github.com/odoo/upgrade/pull/8847 related odoo enterprise PR: https://github.com/odoo/enterprise/pull/99382 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update resolves a crash that occurred when users sent SMS messages through the VoIP module. The issue stemmed from the system attempting to access partner email information when no partner was associated with the call. This fix ensures the recipients list can open without causing the application to crash, improving VoIP functionality.
Original PR description
Since- #233442 Steps to reproduce: - Install VoIP - Call a phone number without any related record - Open VoIP - Open the previously created call record - Send a text message to the number by clicking on `Send SMS` - Click on the notification icon on the message in the chatter This caused a crash because the code tried to access the email from `res_partner_id` while no related partner was set. This PR fixes the issue by safely handling messages without a related partner, allowing the recipients list to open without crashing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241813
This update ensures that helpdesk tickets created from forwarded emails are linked to the original sender, not the internal user. Currently, forwarded emails were incorrectly assigning the internal user as the ticket partner. This change improves accuracy and streamlines the ticket assignment process.
Original PR description
Current behavior When a customer emails an internal user and that email is forwarded to the helpdesk alias, the created ticket is linked to the internal user instead of the customer. Expected…
Current behavior When a customer emails an internal user and that email is forwarded to the helpdesk alias, the created ticket is linked to the internal user instead of the customer. Expected behavior When a ticket is created from an email sent to the helpdesk alias: -If the email is a forward, the ticket partner is set to the sender of the forwarded email. -If the email is not a forward, the ticket partner is set to the direct sender of the email. Implementation - Added detection of forwarded emails in `_message_parse_extract_payload` in `mail.thread.py`. When found, the forwarded email sender is stored in `forwarded_sender`. - Updated `message_new` in `helpdesk_ticket.py`. If `forwarded_sender` is present, set `email_from`, `partner_name`, and `partner_email` accordingly. - Reset `partner_id` to `False` to allow correct partner matching. Limitations / Notes - RFC 2822 (`email protocol`) does not define a header that explicitly marks forwarded emails. - Forward detection is heuristic and based on the presence of `From:`, `To:`, and `Subject:` headers in the email payload. - This approach is error-prone if those headers appear for other reasons. - Some mail providers translate these headers based on language settings, making detection impossible. - Tested with Gmail and Outlook; other mail clients may behave differently and could cause incorrect ticket assignment or parsing errors. Task [5138873](https://www.odoo.com/odoo/project/4105/tasks/5138873)
This update resolves a crash issue that occurred when users joined meetings via mobile devices using invitation links. The fix ensures the user interface remains stable during this process, improving the mobile meeting experience. This change focuses on safely handling message access to prevent unexpected errors.
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 enhances how users manage members within WhatsApp channels. Specifically, the system now correctly associates a user with a channel, ensuring accurate tracking and reporting. This change improves the overall reliability and functionality of the WhatsApp module.
Original PR description
PR community https://github.com/odoo/odoo/pull/234512
This update resolves an issue where users were encountering an error when setting default values for contact fields. Specifically, attempting to set an integer value for a date field caused a system error. The fix ensures that users cannot input invalid data types as defaults, improving data integrity and preventing unexpected errors during contact creation.
Original PR description
Steps:
- Create a user defined defaults value
- Model: res.partner
- Field: date
- Value: 1
- Create a new contact
Actual result:
- invalid field type
- 'int' object is not subscriptable (depends of field type)
Expected result:
- No error
- User is not able to put an invalid value as a default
task-3729963
Forward-Port-Of: odoo/odoo#238539
Forward-Port-Of: odoo/odoo#225991This update fixes a visual issue with the SelectMenu component, ensuring selected items are clearly displayed and readable across different frontend implementations. The change improves the overall user experience by standardizing the component's appearance and removing unnecessary customizations.
Original PR description
*: website_slides This commit fixes the 'selected' display of the SelectMenu component in some frontend implementations. Previously, the visual style would be broken since the 'active' class was set…
*: website_slides This commit fixes the 'selected' display of the SelectMenu component in some frontend implementations. Previously, the visual style would be broken since the 'active' class was set on the element, having a blank text and background on selected items. The right 'selected' class is now used, to avoid difficulties to read the value, while still having some frontend specific styles working as expected. Also, the form-control and form-select classes are set using the togglerClass props. In future versions, we might be able to remove extension of the component in other modules (e.g. hr_contract_salary), ensuring the same style and behaviors accross all places. Before: <img width="1566" height="1115" alt="image" src="https://github.com/user-attachments/assets/6265c615-bd7a-47f6-9353-c503dd934fed" /> After: <img width="791" height="350" alt="image" src="https://github.com/user-attachments/assets/939b7109-a32f-4991-a169-13f501f29eb4" /> Forward-Port-Of: odoo/odoo#240576
This update clarifies an error that occurred when deleting custom fields inherited from parent models in Odoo. Specifically, it addresses an issue related to deleting child fields on `ir.model.fields` when a model is inherited. The change ensures a clearer error message is displayed, preventing unexpected behavior during field deletions.
Original PR description
task-4829991 []# modified: odoo/addons/test_orm/tests/test_fields.py 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
This update fixes an issue where custom reports were displaying incorrectly formatted lines due to a flawed calculation of domain complexity. The change ensures that report formatting is accurate, especially when using advanced grouping criteria, and was tested with the recent EC Sales report.
Original PR description
When a custom groupby defined a domain with more than one element in it (typically, conditions on multiple fields, possibly with '|' or '&' operations), if groupby lines needed to be generated for subsequent groupby, the generated groupby lines had a too high level, and ended up being over-indented.
This was because the groupby expansion computed the number of higher-level groupby lines as the length of the domain needed to restrict their content. This was too naïve, and won't work well with custom groupbys, which can define longer (or even empty) domains.
This was spotted in master (19.1), with the refactored EC Sales list, which now uses a custom engine and a specific custom groupby map.
Forward-Port-Of: odoo/enterprise#102240This update prevents portal users from viewing or accessing task templates within the Odoo project management system. By refining access rules, we've restricted portal users' ability to create or modify tasks based on templates, enhancing security and data integrity. This change ensures that sensitive task template information remains protected.
Original PR description
- Refined the domain of portal task record rules (`project_task_rule_portal` and `project_task_rule_portal_project_sharing`) by adding the condition `('has_template_ancestor', '=', False)`. This ensures that tasks are excluded from portal user views and cannot be accessed via the portal access and project sharing.
task-5079337
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update ensures that changes made to Product Designs within the /shop edit mode are now consistently saved. Previously, changes were lost if the related component wasn't active. This fix improves the user experience by guaranteeing that design selections are reliably persisted.
Original PR description
Steps to reproduce: ======= 1. Go to /shop in edit mode. 2. Change the Product Design. 3. Switch to the "Blocks" tab (so the "Style" tab is not visible). 4. Click on "Save". Before this commit:…
Steps to reproduce: ======= 1. Go to /shop in edit mode. 2. Change the Product Design. 3. Switch to the "Blocks" tab (so the "Style" tab is not visible). 4. Click on "Save". Before this commit: ====== The selected Product Design was not saved. After this commit: ====== The Product Design is now always saved correctly, even if the `ProductsDesignPanel` component has been unmounted. Technical reason: ======= The save behavior depended on whether the `ProductsDesignPanel` component was still mounted at the moment of saving. If it was not alive, changes were lost. Solution: ===== We no longer depend on the component being alive. When the Product Design or the Gap is modified, we mark the product list with the `o_dirty_product_design_list` class. On save, we look for elements with this class, retrieve their modified data, and apply the changes. 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#238851
This update resolves an issue where the 'Show Value' option wasn't functioning correctly within Odoo charts. The fix ensures the chart show value plugin receives the correct chart type information, allowing it to accurately display values for various chart types like bar and line charts. This improves chart visualization accuracy for users.
Original PR description
Since the introduction of calendar charts, the chart show value plugin takes the type of the chart as argument. But for odoo charts, we gave it the odoo chart type (eg: odoo_bar, odoo_line, etc) instead of the base chart type (bar, line, etc), which made the show value plugin not work. Task: [5421194](https://www.odoo.com/web#id=5421194&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#240226
A visual issue was resolved where a checkbox in the chart side panel for Odoo charts did not function correctly. This update ensures that users can now properly enable the 'Use compact format' option, improving the presentation of charts. This change enhances the user experience and allows for more efficient chart viewing.
Original PR description
The checkbox to toggle the `Use compact format` option in the chart side panel was present for odoo charts, but did nothing. Task: [5405064](https://www.odoo.com/web#id=5405064&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#240251
A technical issue preventing the 'Use compact format' option from working in Odoo charts has been resolved. This update ensures that users can now correctly apply the compact format for charts, improving visual clarity and data presentation. This fix was part of a larger task to improve chart functionality.
Original PR description
The checkbox to toggle the `Use compact format` option in the chart side panel was present for odoo charts, but did nothing. Task: [5405064](https://www.odoo.com/web#id=5405064&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#102263
This update fixes an issue where the product selection pane in the point-of-sale system was sometimes rendered too small, making it difficult to read. The fix ensures the pane maintains its intended width, improving the user experience. The problem was intermittent and related to how the layout elements interacted.
Original PR description
In some scenarios, although not fully deterministic, the left pane is being pushed by its right pane sibling (i.e. the products grid), making it go below its specified with of `left-pane-width`, and…
In some scenarios, although not fully deterministic, the left pane is being pushed by its right pane sibling (i.e. the products grid), making it go below its specified with of `left-pane-width`, and making text non readable. By setting `flex-shrink: 0` on this element, we tell the browser to respect the specified width, and not allow its siblings to shrink it. We could have also set `min-width: $left-pane-width;`, but it's less descriptive. The problem happens because we are in a flex container, hencer we use `flex-shrink: 0`. ### Notes: This issue only happened from time to time for the client, and it seems non deterministic. If we disable showing the product images, the issue stops happening. The below before vs after screenshots are taken on MacBook Pro 14 inches. ### Before: <img width="1493" height="868" alt="image" src="https://github.com/user-attachments/assets/70bc5a70-34a6-48c9-a60a-ab1de1fa0b9b" /> <img width="1496" height="867" alt="image" src="https://github.com/user-attachments/assets/e8ae9b25-3525-439b-93dd-18dc825613c7" /> ### After: <img width="1495" height="866" alt="Capture d’écran 2025-12-31 à 11 28 38" src="https://github.com/user-attachments/assets/23585d3d-b0bf-4316-8749-b39a56fc8cda" /> <img width="1497" height="866" alt="image" src="https://github.com/user-attachments/assets/f5654163-1dd3-4ff9-bb12-d8cd8fbc497b" /> opw-5392359 Forward-Port-Of: odoo/odoo#241941 Forward-Port-Of: odoo/odoo#241731
This update fixes a problem where the 'Position' column in German Sale Order reports was blank. The issue stemmed from an incorrect calculation of line numbers in the report template. Now, the report accurately displays sequential position numbers, ensuring correct reporting for sales transactions.
Original PR description
Before this commit, when printing a Sale Order using the German localization, the "Position" column in the PDF report was empty. Additionally, the table formatting was broken due to this missing data. This issue occurred because the index variable used to calculate the line number in the report template (QWeb) was incorrect. This commit fixes the index logic in the report template. Now, the "Position" column correctly displays sequential numbers (1, 2, etc.), and the table formatting renders correctly. ticket-5225647 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#240714 Forward-Port-Of: odoo/odoo#240243
This update resolves a problem where currency conversion rates weren't being created with the correct date (today's date) for currencies other than UYU. Previously, rates were often generated with yesterday's date, leading to inaccurate tax calculations. This change ensures all currency rates are synchronized with the current date, improving financial reporting accuracy.
Original PR description
When the company's currency is not UYU we will get an error when doing the convention of the rate return by (UY) BCU (Banco Central Uruguay). All the rates should be used the same date in order to…
When the company's currency is not UYU we will get an error when doing the convention of the rate return by (UY) BCU (Banco Central Uruguay). All the rates should be used the same date in order to properly do the conversions. ### Steps 1. Create a new Company with country Uruguay 2. Change current logged company to new Company 3. Change the currency to USD 4. Go to Settings, option Automatic Currency rate and configure provider yo [UY] Uruguayan Central Bank 5. Click manual synchronization 6. Check rates ### Current behavior before PR All currencies except UYU currency has created taxes with date today. Only one error in UYU currency that is created with yesterday rate  ### Desired behavior after PR is merged: All the currencies are created with the same date, the correct day that is today rate. References: LATAM 1341 / ADHOC Task 51716 Forward-Port-Of: odoo/enterprise#85065
This update resolves an issue where the Odoo command-line interface (CLI) was incorrectly handling the number of arguments passed to it. This change ensures the CLI functions reliably, preventing potential errors and improving the overall user experience. It's a technical update focused on internal stability.
Original PR description
Fine-tunning of b86c060c9d5ba03ac13e8ad59cf55731fa50ed59 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#240395
This update resolves an issue where renaming inherited custom fields in Odoo didn't properly remove associated database fields. The fix ensures that these generated fields are removed from the database first, preventing data inconsistencies and errors. This improves the reliability of custom field management.
Original PR description
When renaming a custom field that is inherited, first remove the generated inherited fields from the database. task-5172546 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes unnecessary configuration overrides within the Odoo mail system. This simplifies the system and improves performance, leading to a more stable and efficient email sending process. The change is a routine maintenance update.
This update resolves a previous issue with subscription invoices in Turkey, ensuring all UBL invoice lines include the correct start and end dates. The changes introduce a bridge module to validate these dates across subscription product lines, preventing invoices from being sent if dates don't match, improving accuracy and compliance.
Original PR description
The previous subscription logic failed because the required date values must be present on all UBL invoice lines in a subscription invoice. This PR introduces a bridge module between the subscription and l10n_tr_nilvera_einvoice modules. To handle subscriptions correctly, we compute the first line that contains both a start and end date, and reuse those dates in the UBL XML report. Validation of matching dates across all subscription product lines is performed on send, as any non-matching dates on subscription invoice lines will block the user. task-5085628 related odoo PR: https://github.com/odoo/odoo/pull/235490 related upgrade PR: https://github.com/odoo/upgrade/pull/8847
This update resolves an issue where users providing a list of serial numbers to a Manufacturing Order was incorrectly overwritten by the default 'First SN'. Now, users can accurately specify a list of serial numbers, ensuring correct tracking and production of products. This fix impacts both the standard Manufacturing and Manufacturing Subcontracting modules.
Original PR description
### Context: In the Manufacturing app, users can create Manufacturing Orders to create multiple products while assigning a unique serial number to each. Users can either generate a list of serial…
### Context:
In the Manufacturing app, users can create Manufacturing Orders to
create multiple products while assigning a unique serial number to each.
Users can either generate a list of serial numbers starting from a
first serial number, or provide a list of serial numbers themselves.
### Issue:
When providing a list of serial numbers without modifying the first
serial number field (`mrp.production.serials.lot_name`), the inputted
list is not used. Instead, another list starting with the unmodified
`lot_name` is generated and used.
### Cause:
In the `MrpProductionSerials.action_apply` method, the serial numbers
are updated if the first serial number field (`self.lot_name` in the
following code snippet) is left unchanged. This behavior overwrites
the list of serial numbers provided by the user.
https://github.com/odoo/odoo/blob/ac6960dc553088894e688bcc0f4a49245aa02d6c/addons/mrp/wizard/mrp_production_serial_numbers.py#L63-L67
### Steps to reproduce:
1. Install *Manufacturing* (`mrp`)
2. In Settings > Inventory, toggle *Lots & Serial Numbers*
3. Create a product tracked *By Unique Serial Number*
4. Create a Bill of Materials for the product
- The BoM is required but its content is not relevant.
Adding a single component with a quantity of one is enough.
5. Update the quantity of the component to be able to produce two products.
6. In *Manufacturing*, create a new *Manufacturing Order*.
- Select the product and set the quantity to 2, then *Confirm*
7. Click *Generate Serial* or *Produce All*
8. **Do not** modify the *First SN* field, but write two serial numbers
(one per line) in the field below, then click *Apply*.
9. Click the *Serial Numbers (2)* smart button. The serial numbers we
used in step 8 were overwritten by the default *First SN* and its following SN.
### Solution:
This commit addresses the second bug described in https://github.com/odoo/odoo/commit/20158a115ef3dfb9fe2dd5103d3bed7e87e37940 without ever renaming
the serial numbers used for the MO. Now, the `product_id.next_serial`
matches a serial number from the list of provided/generated serial numbers.
The list of serial numbers is sorted to correctly handle cases such as:
```
First SN (self.lot_name) = '0000001'
self.serial_numbers = ['0000003', '0000002', '0000001']
```
In this scenario, we expect the *First SN* of the next MO to start at '0000004'.
The `else` clause of the condition was removed, as it would only be executed
if the `stock.sequence_production_lots` were removed. In that case,
`next_by_code('stock.lot.serial')` would return `False`, preventing
`lot_name` (or `next_serial`) from being updated correctly.
### Reason for second commit
The issue fixed by the first commit was replicated by https://github.com/odoo/odoo/commit/2548fd8d7f3b53a62089ac9122bd17524500ea1a in the subcontracting module (`mrp_subcontracting`).
The first commit fixes the issue in the Manufacturing app (`mrp`), while the second commit fixes the issue in the subcontracting module (`mrp_subcontracting`). The fix and the test are similar in both commits.
opw-5373745
Forward-Port-Of: odoo/odoo#238678This update fixes an issue where Point of Sale prices were incorrectly converted when using a currency different from the company's default. The change ensures prices are accurately displayed and calculated, regardless of the Point of Sale's currency configuration. This prevents pricing discrepancies and improves the overall user experience for Point of Sale transactions.
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
Features or functions removed from Odoo
This update removes the outdated 'company type' field from the contact model, streamlining the way we represent business and individual contacts. The changes consolidate data and leverage VAT information to automatically determine if a contact is a company, improving data accuracy and simplifying the user experience. This aligns with a broader effort to simplify Odoo's contact management.
Original PR description
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
This update simplifies contact information by removing the outdated 'company_type' field. The system now automatically identifies companies based on their identification type (like VAT or CNPJ) and country settings, streamlining the contact form and improving data accuracy. This aligns with a broader effort to simplify and modernize our contact model.
Code cleanup and technical improvements
This update enhances the way email channels are utilized within Odoo, streamlining communication and allowing users to more effectively manage related conversations. The changes focus on better integration between email threads and other communication channels, improving workflow efficiency. This update primarily impacts the Discuss module.
This update reorganizes the code related to call threads within Odoo's discussion channels. This change streamlines the user experience by consolidating call functionality within the existing discussion interface, making it more intuitive and easier to manage. The refactoring improves the overall stability and efficiency of the discussion feature.
This update enhances the display of avatars within channels in Odoo. The change moves avatar URLs to the channel itself, improving performance and ensuring consistent avatar rendering across the platform. This results in a smoother user experience when viewing channel conversations.
This update streamlines chat channel organization by consolidating leave channels within the main channel structure. Previously, leave channels were handled separately, creating complexity. Now, all channels are managed together, simplifying user experience and improving channel management efficiency.
Original PR description
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
This update centralizes the display name for channels within the Odoo messaging system. Previously, display names were inconsistently managed, leading to potential confusion for users. This change ensures a more consistent and user-friendly experience when viewing and interacting with channels.
Original PR description
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
This update refactors how Odoo handles unread messages within channels. Specifically, the logic for retrieving the first unread message has been moved to the channel model itself, streamlining the process and improving efficiency. This change ensures more consistent and reliable channel message updates.
This update refactors the way correspondents are handled within key Odoo modules like HR, Live Chat, and Mail. The changes streamline the process of managing communication threads and improve overall user experience. This enhancement ensures consistent and reliable correspondence tracking across the platform.
Original PR description
PR enterprise: https://github.com/odoo/enterprise/pull/99661
This pull request refactors the internal handling of correspondents within the Odoo Discuss module. The change improves the underlying code structure without impacting user-facing functionality. This is a routine maintenance update to ensure the Discuss module continues to operate smoothly.
Original PR description
PR community: https://github.com/odoo/odoo/pull/235992
This update streamlines how Odoo accesses channel member information. Previously, access was through threads, but now the code directly accesses channel member IDs, aligning with the channel's data structure. This improves efficiency and accuracy when managing channel members.
Original PR description
PR enterprise: https://github.com/odoo/enterprise/pull/98888
Documentation and clarification updates
This pull request confirms that the developer has signed a Contributor License Agreement (CLA) for their changes to the Odoo codebase. The changes themselves are a standard CLA signature process, ensuring compliance with Odoo's licensing terms. This update doesn't introduce new functionality but is a necessary step for contributions.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241227 Forward-Port-Of: odoo/odoo#241134
12 changes
Enhancements to existing features
This update ensures our Australian business reporting continues to function correctly within Odoo Enterprise version 19.0. It maps the existing tax return type to the master BAS report, addressing a compatibility issue where the original report could no longer be removed from the stable version.
Original PR description
Update the existing tax return type to be mapped to the master BAS report. This ensures the return type continues to work in 19.0, where the original report cannot be removed from stable. Additional BAS return types and activation logic will be handled separately in master, where inactive return types are supported. community pr - https://github.com/odoo/odoo/pull/239999 task-[5416350](https://www.odoo.com/odoo/project.task/5416350)
Resolved issues and error corrections
This update resolves a technical issue that prevented invoices reconciled with multiple bank transactions from displaying correctly in reports. The fix ensures the system handles complex reconciliation scenarios accurately, avoiding a common error that disrupted reporting. This improves the reliability of financial data presented to users.
Original PR description
### Issue description: The `_compute_full_amount_switch_html` method assumes that `reconciled_lines_excluding_exchange_diff_ids` contains at most one line (which is true only for move lines of bank statement lines). However, if an invoice is reconciled with multiple bank transactions, when accessing the `full_amount_switch_html` for any move line in the invoice, it triggers `ValueError: Expected singleton`, as the compute method uses the reconciled_lines as if they are a single line. ### Steps to reproduce: 1. Create an invoice 2. Reconcile the invoice with multiple bank transactions. 3. Perform a read on the `full_amount_switch_html` field on the invoice line from the invoice (using the web tool, or add the field to any view). 4. You will get `ValueError: Expected singleton: account.move(XX, XX)` opw-5224135 Forward-Port-Of: odoo/enterprise#102048
This update fixes inaccuracies in the Thai tax report test cases. The changes align the test data with the latest Thai tax regulations, ensuring accurate reporting and compliance. This improves the reliability of the Thai localization for financial reporting.
Original PR description
Replaced outdated tax references in test cases with updated tax references to align with the recent changes in the Thai localization. Task-5395076
This update resolves an issue where Australian BAS W2 reports were displaying incorrect negative signs due to a change in how signs were handled in Odoo 19.0. The fix ensures the correct sign is applied to W2 reports, aligning with report aggregation logic and preventing double sign inversions.
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)
This update resolves a test failure related to the course review tour within the website. The issue stemmed from a test requiring a user account (admin) with a properly configured email address, which was missing in newer versions of Odoo. The fix ensures the test runs correctly by adding a default email to the user account.
Original PR description
We fix the tour test_course_reviews_elearning_admin that was failing when running it without demo data because user admin was posting a message on a channel without an email set on its partner. The same test works in version 18.0 and not in 18.2 because since 18.1, user admin no longer have an email by default (unless the demo data are installed, see odoo/odoo#185809). To fix the test, we just set an email on the partner of user admin before posting the message. Task-5418242 Forward-Port-Of: odoo/odoo#240070
This update resolves an issue where files attached to activity notes within the Chatter interface were not being displayed. The change adjusts how HTML content is rendered within activity notes to ensure attachments are correctly shown. This improves the user experience when sharing files and collaborating on activities.
Original PR description
Currently, when a user creates an activity with a note containing a file using `/file`, the attached file is not displayed in the chatter. **Steps to produce:** * Install `crm` with demo data * crm >…
Currently, when a user creates an activity with a note containing a file using `/file`, the attached file is not displayed in the chatter. **Steps to produce:** * Install `crm` with demo data * crm > open any lead > Activity > use `/file` to attach a file > Save **Observed Behavior:** The user cannot see attached files in the chatter. **Root cause:** * This behavior occurs because after commit [1], the `EmbeddedFilePlugin` started being used for all HTML fields with embedded components enabled, and since commit [2], all HTML fields have `embedded_component` set to true by default. * As a result, file attachments may not display correctly, since embedded components do not render when HTML content is shown outside the editor. **Solution:** Disable the embedded component option for the note field in the activity to display the full HTML and make the attachment visible, instead of rendering-related data. **Before:** <img width="640" height="150" alt="image" src="https://github.com/user-attachments/assets/edabbe9f-eedf-4ef1-8f0d-749e0145ce8f" /> **After:** <img width="651" height="148" alt="image" src="https://github.com/user-attachments/assets/8a3d1d3d-a5f8-4726-83be-6134e96db689" /> [1]: https://github.com/odoo/odoo/pull/216572/commits/86c7176833fc36b9ca7d2989d31587c353bd5800 [2]: https://github.com/odoo/odoo/commit/a44b05fd06d8c157b5edacbd6a7061197eb4ee5f opw-5426126,5361933
This update fixes an issue where items within Kanban card dropdown menus weren't easily navigable or highlighted on hover. The team added a styling class to these items, ensuring they function correctly and provide a better user experience when selecting options from Kanban cards. This improves usability and efficiency.
Original PR description
Issue:
Dropdown item-ish (such as `<a class="dropdown-item">` and ViewButton) inside kanban cards dropdown do not have the proper hover styling and are not navigable.
Steps to reproduce:
- Go to project -> open any card dropdown menu ("...") -> Items are not navigable
- Go to CRM -> open any card dropdown menu ("...") -> Items are not highlighted on hover
Fix:
This commit adds the "o-navigable" class to dropdown items and view buttons
which are inside a kanban card's dropdown menu, this makes them navigable
and adds proper hover and focus styling.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240090This change fixes a JavaScript error that occurred when installing the Quality IoT module and enabling debug mode. The issue stemmed from a dependency conflict related to the QualityCheck component, which was incorrectly located. This update ensures proper module loading and resolves the error, allowing for seamless Quality IoT functionality.
Original PR description
### Issue: The QualityCheck component is defined in the `mrp_workorder` module:…
### Issue: The QualityCheck component is defined in the `mrp_workorder` module: https://github.com/odoo/enterprise/blob/7c64908258d5a0fb9adecd6dd2760e255e46314b/mrp_workorder/static/src/mrp_display/mrp_record_line/quality_check.js#L7 which is not a dependency (even indirectly) of the `quality_iot` module. Hence, if you install the `quality_iot` and enable debug mode, you will raise a JS [error](https://github.com/odoo/odoo/blob/a1583d0564552007a3d5f12d967c2c0036e05e44/addons/web/static/src/module_loader.js#L164-L169) because of missing dependencies: > The following modules are needed by other modules but have not been defined, they may not be present in the correct asset bundle. This happens because commit a13e38006d3cba6cab4565de2b014d294d2c0af3 added a patch of the QualityCheck component in the `quality_iot` https://github.com/odoo/enterprise/blob/eda93203ec8da207768357ae91132a49881a2978/quality_iot/static/src/mrp_display/quality_check.js#L4 https://github.com/odoo/enterprise/blob/eda93203ec8da207768357ae91132a49881a2978/quality_iot/static/src/mrp_display/quality_check.js#L17 opw-5353986
This update fixes an issue where refund transactions incorrectly displayed the customer as the author instead of the user who initiated the refund. The change ensures the logged-in user is always identified as the author for refund, capture, and void transactions, improving data accuracy and reporting. This resolves a discrepancy in message attribution.
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#241923 Forward-Port-Of: odoo/odoo#239224
This update resolves a sporadic test failure related to how partner suggestions are sorted, specifically when considering recent chats. The fix ensures the test accurately reflects the system's data by waiting for the necessary updates to be processed before verification, preventing incorrect sorting results.
Original PR description
Before this commit, the test "Sort partner suggestions by recent chats" fails non-deterministically due to a race condition. This failure occurs because the test relies on the `last_interest_dt` timestamp being updated after sending a message to "User 2". Although the message post triggers a bus notification to update the store, the UI displays the message optimistically. As a result, the assertion for the message's existence occasionally passes before the bus notification was processed, leaving the sorting logic to run with stale data (where "User 2" was still ranked behind "User 3"). This commit fixes the issue by waiting for the sidebar to reorder "User 2" to the top. Since the sidebar ordering relies on the same server data (last_interest_dt) as the suggestion sorting, this ensures the store has processed the bus event before the test verifies the suggestion order. runbot-237553 Forward-Port-Of: odoo/odoo#241619
This update resolves a minor visual issue that occasionally appeared when using the cookies bar with a Bootstrap modal open. The fix prevents a Bootstrap class from being added and removed, which was causing a brief UI disruption. This ensures a smoother user experience for all visitors.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993 Forward-Port-Of: odoo/odoo#240269
Documentation and clarification updates
This pull request confirms that the developer has signed a Contributor License Agreement (CLA) for this work. It involves forwarding a related change (odoo/odoo#241227 and odoo/odoo#241134) and includes a CLA signature confirmation from christian-ramos-tecnativa. This ensures compliance with Odoo's licensing terms.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241227 Forward-Port-Of: odoo/odoo#241134
5 changes
Resolved issues and error corrections
This update corrects an issue with how Odoo sends electronic invoices (EDI) to ECPay in Taiwan. The change removes the company name from the address and formats it as a comma-separated line, ensuring compliance with ECPay's requirements and improving data accuracy. This ensures seamless invoice processing.
Original PR description
In this commit: --- Update EDI address formatting to remove the company name and send a comma-separated single-line address. task-5410619
This change corrects a display inconsistency in loyalty rewards by removing a technical field that allowed users to incorrectly link discount products. This fix ensures that discount descriptions are accurate and aligned with the intended promotion, improving the customer experience. The change was implemented to address a reporting issue and a previous workaround.
Original PR description
### Issue: Due to this issue, users can change the technical field `discount product` which cause inconsistency in discount description. #### To reproduce: 1- Create a promotion called `AAA`: -…
### Issue: Due to this issue, users can change the technical field `discount product` which cause inconsistency in discount description. #### To reproduce: 1- Create a promotion called `AAA`: - Rules: If minimum 50.0 spent grant 1 point per order - Rewards: 10% discount per order in exchange of 1 point 2- Using debug mode, in promotion's reward view, change the `Description on order` to `AAA 10%`. Save the promotion and you can see the `Discount product`'s name is set to the same description. 3- Create another promotion called `BBB`: - Rules: If minimum 50.0 spent grant 1 point per order - Rewards: 10% discount per order in exchange of 1000 points. 4- In promotion reward's view change the `Discount product` to `AAA 10%` which is promotion `AAA`'s discount product. 5- Change the `Description on order` to `BBB 10%` and save. 6- You can see the name of `Discount product` is changed as well. 7- In promotion `AAA` and you can see the description and the name of `Discount product` mismatch. 8- Navigate to shop, and add a product to cart with a price of more than 50. 9. You can see after applying promotion `AAA` the description from promotion `BBB` is shown. ### Cause: The technical field `Discount product` is never meant to be changed, and this field is introduced for reporting purposes and showing the discount applied in cart. However, this field is added to view in #132857. This is done as a hack to find the `Discount product` created for the promotion, as a workaround for an accounting issue due to adding account to `Discount product`, and originally `discount_line_product_id` was not supposed to be shown or changed through form. After discussion with PO, we decided this field should be removed from the view. Also removing this field will not undo the main fix of #132857, and that workaround was introduced only to find the `Discount product` for that specific client's use case. However, in stable, it is kept for customization compatibility. It's set invisible in order to prevent the issue. opw-5229633
This update corrects a technical issue that prevented the system from creating emails when the user account was empty. The fix ensures the system handles all user scenarios correctly, preventing potential errors and improving email functionality. This resolves a bug introduced during recent development.
Original PR description
'self.env.user' can be empty. User 'has_group' method has ensure_one check, so it must not be called on empty recordsets. Bug introduced here: https://github.com/odoo/odoo/commit/3056facc07024d02829bf2e27c9ee2f56695c99e
This update resolves a visual glitch that appeared when using Bootstrap modals. Specifically, pressing the Escape key while a modal was open caused a temporary display issue with the cookies bar. The fix prevents a Bootstrap event from triggering a conflicting UI change.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993 Forward-Port-Of: odoo/odoo#240334
This update fixes an issue where DIN5008 invoices weren't showing Incoterm information. The change adds the necessary logic to include Incoterm codes and locations on this invoice template, ensuring compliance with DIN5008 reporting requirements. This improves invoice accuracy and reporting for international transactions.
Original PR description
**Steps to reproduce:** 1. Install the modules account and l10n_din5008. 2. Go to Settings and set DIN5008 as the default invoice report template. 3. Navigate to Configuration → Settings and set a default Incoterm. 4. Create a new customer invoice. 5. Print the DIN5008 Invoice Report. **Issue:** The DIN5008 invoice report did not display the Incoterms, while other invoice layouts printed them correctly. **Cause:** This was due to missing logic in l10n_din5008 report to include Incoterm data. Confirmed with TSB that the DIN5008 layout should display Incoterms. **Fix:** This commit adds the Incoterm information to the DIN5008 template data: - Always include the Incoterm code - If an Incoterm location is set, display it as `CODE - LOCATION` **opw-5349267** Forward-Port-Of: odoo/odoo#238682
5 changes
Enhancements to existing features
This update improves the user experience when receiving incoming calls. Now, clicking on the avatar or number associated with a call's contact redirects you directly to that contact's profile within Odoo. This streamlines communication and makes it easier to access relevant contact information.
Original PR description
When incoming call has a parnter, we can now click on its avatar or number to redirect to that partner's form. Task-2863783
Resolved issues and error corrections
This update fixes a reporting issue in the French P&L reports. The 'owner remuneration' account (644) was incorrectly categorized as 'tax and duties'. This change ensures accurate reporting of wages and salaries in accordance with French accounting standards, improving financial transparency.
Original PR description
Account '644 owner remuneration' was in the 'tax and duties' category in the french P&L but it belongs to the 'wages and salaries' category task-5446018
This update fixes a potential error in Odoo's push notification system, preventing disruptions when users manage their notification settings. It also enhances the system's ability to handle invalid domain names used for push notifications, ensuring a more stable and reliable experience for users.
Original PR description
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring…
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring inside the service worker. Steps to reproduce: 1. Enable notification in Odoo. 2. Reset the permission in the Chrome interface 3. Re-enable the permission inside the discuss systray by clicking on the Odoobot message. => The pushsubscriptionchange is called without an oldSubscription [FIX] mail: ir_cron_web_push_notification are now more robust With a user having 5 registered devices for push notifications if a browser registers with an endpoint that has a wrong domain such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX the cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. [FIX] mail: push_to_end_point method to support .invalid TLD if a browser registers with an endpoint that has a TLD `.invalid` such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX The TLD `.invalid`[1] is intended for use in online construction of domain names that are sure to be invalid and which it is obvious at a glance are invalid. The cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. So we need to unregister a device with an endpoint with a `.invalid` TLD. [1]: https://datatracker.ietf.org/doc/html/rfc2606#section-2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where updating a manufacturing order's BOM after deleting a component line didn't properly remove the associated raw materials. The fix ensures that unused raw materials are correctly deleted or cancelled, preventing discrepancies in inventory tracking. This improves the accuracy of production planning and reduces the risk of errors.
Original PR description
### Steps to reproduce: - Create a bom for a product with 2 component lines: - 1 x COMP1 - 1 x COMP2 - Create an MO for your product (do not confirm it) - Delete the second bom line of the bom - On…
### Steps to reproduce:
- Create a bom for a product with 2 component lines:
- 1 x COMP1
- 1 x COMP2
- Create an MO for your product (do not confirm it)
- Delete the second bom line of the bom
- On the draft MO, click on `update bom`
#### > This automatically modifies the `move_raws` of the MO but the un-linked move raws were neither deleted nor cancelled as shown by the move analysis
### Cause of the issue:
Clicking on `update bom` will launch a call of the `action_update_bom` which will itself call the `_link_bom` to update the record: https://github.com/odoo/enterprise/blob/ac3f333d97eda5c86a0813490ac6204d4ec5721f/mrp_plm/models/mrp_production.py#L73-L80 https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L2406-L2418 Now the issue is that the `bom_id` is set to `False` before the value of the `move_raw_ids` and `workorder_ids` are stored to be unlinked in the `moves_to_unlink` and `workorders_to_unlink` variable. Now, the issue is that the `bom_id` is a dependency of both compute methods: https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L745-L746 https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L563-L564 in particular, `moves_to_unlink` will always be an empty record set and the value of the `workorders_to_unlink` might be unreliable.
opw-5243203
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a display issue where archived recurring subscription plans were still showing up on the website product pages. The fix ensures that only active plans are considered when displaying pricing, improving the user experience and preventing outdated information from being shown to customers. This resolves a potential confusion point for customers.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333**