Daily updates from Odoo
Monday, January 5, 2026
47 changes · master
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
This update fixes an error in how Odoo calculates employee work days when a new employee is created without a contract. Previously, calculations were based on the employee's creation date, leading to incorrect attendance and out-of-contract day figures. This change ensures accurate payroll calculations for employees without defined contracts.
Original PR description
Problem:
- Create a new employee without a contract
- Create a payslip for this employee for the current month: You'll see X days of attendance (= today until the end of the payslip period) and Y days of out of contract (= number of days from the start of the payslip period until today)
- Create a payslip for this employee for the previous month: you'll see ( Z_prev + Y ) days out of contract ( Z_prev = number of working days in the previous month)
- Create a payslip for this employee for the next month: you'll see Z_next days of attendance (Z_next = number of working days in the next month)
Objective:
The culculation in this case was not correct, it used date_version and date_start, which
are equal to today (date of creation of the employee)
Solution:
This commit changes calculation of work entries in case when contract_date_start is empty
task-5430759This update resolves a bug where loyalty program pricing wasn't correctly applied in the Point of Sale (POS) system. By ensuring the POS configuration includes the correct pricelist ID, the system now accurately reflects loyalty program discounts during transactions. This improves the customer experience and ensures accurate loyalty rewards.
Original PR description
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070) Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672) --- ## Error FAILED: [12/46] Tour…
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070)
Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672)
---
## Error
FAILED: [12/46] Tour test_refund_does_not_decrease_points → Step selection popup has '$ 1 per point on your order' (trigger: .selection-item:contains("$ 1 per point on your order")).
## Qualifiers
{
"module": "pos_loyalty",
"test_path": "/pos_loyalty/tests/test_frontend.py",
"tour_name": "test_refund_does_not_decrease_points",
"tour_step": ".selection-item:contains(\"$ 1 per point on your order\")",
"test_class": "TestUi",
"test_method": "test_refund_does_not_decrease_points",
"test_module": "pos_loyalty"
}
## Fix
In some cases, the POS config's `pricelist_id` was not available in the frontend, causing loyalty program conditions to be skipped when checking for a matching pricelist.
By explicitly setting `use_pricelist` to True on the POS config, we ensure that `config.pricelist_id` is properly loaded and available at runtime, allowing loyalty programs with pricelist conditions to behave as expected.
Forward-Port-Of: odoo/odoo#221921This update corrects a previous issue where the initial company created via SQL sequence lacked a sequence number. Now, all companies, regardless of creation method, will have a consistent sequence number, preventing filtering problems based on this data. This improves data integrity and reliability.
Original PR description
For the first company, created from sql sequence is not added to it. And for the rest, case companies created via the model default sequence are already provided. This will avoid the issue when companies are filtered based on sequence number. The Intention is to add the sequence to first company is because in the model we are providing the sequence in order so it should be consistent everywhere. Ent:- https://github.com/odoo/enterprise/pull/102317
This update resolves an issue in the Odoo Enterprise testing environment by adding a sequence number to the test company. This ensures that the company data is correctly ordered within the tests, improving the reliability of the project holiday functionality. This is a minor fix to enhance test accuracy.
Original PR description
This commit adds the sequence number to test case company, to be make sure the company are is correct order. See the com :- https://github.com/odoo/odoo/pull/240329
This update resolves a rare error that could occur when users attempted to open a parent channel after a related thread had been deleted. This change enhances the overall stability and reliability of the Odoo platform, preventing potential disruptions for users. It’s a routine maintenance update focused on a technical detail.
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#241309 Forward-Port-Of: odoo/odoo#241266
This update fixes an issue where clicking 'Join Call' from a call invitation didn't automatically open the related chat thread. Now, clicking 'Join Call' opens the correct thread in both the chat window and the discuss app, and clicking the invitation avatar focuses the composer within the chat window. This improves the user experience when 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#241919 Forward-Port-Of: odoo/odoo#239450
This update removes a redundant link in the TDS/TCS warning that allowed users to manually check invoice journal items. This simplification was driven by changes in tax regulations – the wizard now correctly suggests the appropriate tax section, and a key tax code (206C(1H)) has been removed. This streamlines the user experience and reduces potential errors.
Original PR description
The "View Journal Item(s)" link was originally added to help users Manually check invoice journal items before choosing a TDS/TCS section. For TDS, the wizard already suggests the correct tax section, so this extra review step is no longer useful. For TCS, the most commonly used section (206C(1H)) has been removed by law from 01-Apr-2025, making the button unnecessary. Before: A link appeared in the TDS/TCS warning allowing users to open the invoice’s journal items for manual verification. After: The link and its supporting logic have been removed to keep the flow simple and avoid unnecessary actions. Task - 5315061 Upgrade PR - https://github.com/odoo/upgrade/pull/9015
This update enhances the Odoo HTML editor's ability to correctly identify and process HTML tags. Specifically, it clarifies how XML-only tags are treated, preventing misinterpretation as void elements. This ensures more accurate and reliable HTML editing within Odoo.
Original PR description
Description of the issue this PR addresses: This PR refines the `selfClosingElements` list by introducing `selfClosingHtmlTags` and `selfClosingXmlTags`, which together form `selfClosingElements`. `selfClosingHtmlTags` is used in contexts where XML-only tags must not be treated as HTML void elements. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where the cursor jumps to the end of the input field on the mobile VoIP keypad after typing. The fix re-establishes proper cursor management, preventing the mobile keyboard from appearing unexpectedly and ensuring accurate input. This improves the user experience for mobile VoIP calls.
Original PR description
Steps to reproduce: - Open the VoIP softphone on a mobile device - Enter a number - Place the cursor in the middle of the number - Tap on the *odoo* backspace button => The character before the…
Steps to reproduce:
- Open the VoIP softphone on a mobile device
- Enter a number
- Place the cursor in the middle of the number
- Tap on the *odoo* backspace button
=> The character before the cursor is removed but then the cursor jumps
to the end of the input.
Note: this also happens when trying to add a number in the middle of
the typed number, using the softphone buttons, but this message focuses
the explanation on the backspace button.
Commit [1] introduced the bug while revamping VoIP and its keypad.
Before that commit, there was a simple `t-on-click` defined on that
backspace button. After the update, that `t-on-click` is still there but
alongside a weird `t-on-touchend.prevent="(ev) => ev.target.click()"`,
which is actually there to prevent zoom-in behavior on double-tap,
although, retesting it does not seem necessary (at least on Android).
In any case, this is the original cause of the bug.
Since [2], the keypad input is using the mail's `useSelection` hook,
which, among other things, manages what happens on click outside of the
input. Before [1], this happened when clicking on the backspace button:
1. The click is handled during its *capture* phase by the `useSelection`
hook. It checks if clicked location should be considered, the answer
is yes.
2. The next part of the handler is done in the next microtask (as the
check is done asynchronously (?? that looks like a bad idea, but
that's another issue)).
3. That "in the next microtask" part occurs before the event starts
bubbling: the capture handler saves the cursor position as being at
the end of the input (?? not sure why, but that's another issue).
4. The click is handled during its *bubbling* phase by the backspace
button's `t-on-click`, which removes the character before the cursor,
and sets the cursor position accordingly for the `useSelection` hook.
The actual cursor position is untouched since [3] on mobile "because
otherwise it would open the mobile keyboard", but there are other
ways that would have prevented that I think... to confirm later for
master via task-5366961 (this actually causes issues in HOOT tests
but that's another issue).
5. The dialer/numpad component handles the input's focus/cursor. For
that, it forces a focus and ask the `useSelection` hook to "restore
the selection", which "restores" it to what step (4) asked.
After [1], this changed to:
1'. Same as step (1)
2'. Same as step (2)
3'. As the click was simulated instead of being the "natural" one
triggered by the browser touchend handling, the `t-on-click` handler
is called now, before the "in the next microtask" part of the
capture handler is done. That means what step (4) did happens now.
4'. Now what step (3) did happens now.
5'. Same as step (5)... but since step (3) and (4) were basically
swapped, the cursor is now restored as the way it was last saved:
at the end of the input (again don't know why step the
`useSelection` hook would want to save it like that though).
There are multiple solutions to fix this:
A. Remove the `t-on-touchend` handler, letting the browser do what it
naturally does. Although, it might be needed to prevent the mentioned
zoom behaviors on some phones?
B. Review why the `useSelection` hook wants to save the cursor at the
end of the input on external click, the point is valid but I am not
sure that should be this hook's job to enforce it.
C. Review why the `useSelection` hook wants to check if the click has to
be considered asynchronously, there should be a better way.
D. Configure the `useSelection` hook to consider a click on the
backspace button as to be ignored, as handled manually by its own
handlers anyway.
Option (A) should probably be done, by confirming zoom behaviors can be
prevented another way, but it cannot be done in stable anyway. The (B)
and (C) options should be investigated but would also not be stable to
change; also that would modify an exposed hook's behavior so more risky.
Option (D) can probably be done either way and is targeted on fixing the
bug described only, so this is the solution this commit went for.
In master, option (A) will be investigated in the forward-ported version
of this fix.
However... the bug was actually solved 3 months after [1], at [4] thanks
to secret option (E): not removing the `t-on-touchend` but changing it
entirely to call the same handler as the `t-on-click` one. A bit more
stable than option (A) but still not stable.
However... that solution (E) was broken 1 month later, again, by commit
[5] which destroyed step (5) while fixing an unrelated bug. Without that
step, the input cursor is not repositioned after OWL changes the value,
and by default OWL places it back at the end.
The solution is to restore step (5): the problem was that we were
checking if the user was not typing in another input before re-focusing
the keypad input... but the code considered the keypad input itself as
"another input". This commit still adds solution (D) on top of fixing
that, for good measures.
Note that in 19.0+, there is at least another cursor-related bugs,
related to commit [6]. It will be fixed in the forward-port of this one
as they need each other's fix to both work. Really there should be
better ways to handle that cursor position in OWL... might be done in a
future refactoring.
This commit adds a test to hopefully keep the bug fixed, as inspired by
commit [7].
[1]: https://github.com/odoo/enterprise/commit/52b3065993c41c6b7c65dda586a66fdd865b3afd
[2]: https://github.com/odoo/enterprise/commit/2e8f18801156a8069e26fb3d61d4f8d84893e891
[3]: https://github.com/odoo/odoo/commit/adc5448adf863b99b9b2be29985e560f5c12dbd4
[4]: https://github.com/odoo/enterprise/commit/668467678312632b5b9ecf234280690151bf3078
[5]: https://github.com/odoo/enterprise/commit/db82135fd73d5077fc26be7206105192a845c2bc
[6]: https://github.com/odoo/enterprise/commit/a06c02e8e163ed052c1c4d25a56bea9b6409abde
[7]: https://github.com/odoo/enterprise/commit/613ef7332b0d21e947871e9d33b68d069f1412c2
Related to task-5366961
Forward-Port-Of: odoo/enterprise#102825
Forward-Port-Of: odoo/enterprise#101856This update resolves an issue where the sign on Australian BAS W2 reports was incorrectly displayed due to a change in how signs are handled within Odoo. The fix ensures accurate reporting by applying the correct negative sign to the W2 line, preventing double sign inversions and improving report accuracy.
Original PR description
Since 19.0, sign handling was moved out of tax tags. In community commit 9f55bc242e71e96260edc425d227409775b6b096, the sign was removed from tax tags, but for BAS line W2 a negative sign was mistakenly kept at the tag level, while the report aggregation already applies a negative sign. This resulted in a double sign inversion. This commit fixes W2 by applying the correct sign. enterprise pr -https://github.com/odoo/enterprise/pull/102114 task- [5416350](https://www.odoo.com/odoo/project.task/5416350) Forward-Port-Of: odoo/odoo#239999
This update removes a misleading and unnecessary warning that appeared when setting up pricelists for event products. The warning was disruptive to the user experience and didn't provide any useful information. This change improves the overall usability of the event product pricing feature.
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 Forward-Port-Of: odoo/odoo#241287
This update clarifies warnings displayed on employee profiles when an employee is missing from a pay run. Previously, the system flagged off-cycle payslips, but now it only shows a warning if the employee has no payslip at all for the period. The message is also more user-friendly, guiding users to add payslips.
Original PR description
A warning appears on the Employee profile if an active employee is missing from an open Pay Run. **Before:** - The system checks if the employee payslip is explicitly linked to the open Pay Run. - If…
A warning appears on the Employee profile if an active employee is missing from an open Pay Run.
**Before:**
- The system checks if the employee payslip is explicitly linked to the open Pay Run.
- If they are not linked, it raises a warning ("The pay run is missing this employee"), even if the employee already has an off-cycle payslip for that specific period.
- The system treats this as an issue and prompts the user to add the off-cycle payslip to the run.
**After:**
- The logic now also considers Off-Cycle payslips. If the employee has any
off-cycle payslip covering the pay-period dates, no warning is shown.
- An issue is shown only when the employee has no payslip at all for the period.
- When showing the issue:
If multiple pay runs exist for the period:
Display a single message: "The employee is not currently in any pay run." with an action to view available pay runs.
- If only one pay run exists for the period:
Display a contextual message: "The pay run [payrun name] is missing this employee." with an action "Add payslip to Pay Run".
- If the employee is present in any pay run or has an off-cycle payslip for the
period: No message is displayed.
Task-5387310This update resolves an issue where starting a new timer within a different company would cause an access error when attempting to stop the original timer. The change ensures the timer is correctly stopped regardless of the company context, preventing errors and maintaining accurate timer tracking.
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#102788 Forward-Port-Of: odoo/enterprise#96411
This update fixes a bug that caused Odoo calls to crash when users joined from multiple browser tabs. The change ensures a stable call experience, even when users are accessing the same meeting from different tabs, improving reliability and user satisfaction.
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#241907 Forward-Port-Of: odoo/odoo#240881
This update resolves a visual issue that occasionally appeared when using the cookies bar with a Bootstrap modal open. The fix prevents a glitch caused by Bootstrap's automatic class removal, ensuring a smooth and consistent user experience. This improves the overall appearance and functionality of the cookies consent banner.
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#241215 Forward-Port-Of: odoo/odoo#240269
This update corrects a technical issue where installing the 'quality_iot' module caused a JavaScript error due to a missing dependency. The fix moves a component to ensure proper module loading and functionality, preventing the error from occurring.
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 Forward-Port-Of: odoo/enterprise#100899
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 for users managing payments.
Original PR description
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module…
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module and enable the `demo` payment provider. - Create a new quotation and from the `gear` icon, select `Mark Quotation as Sent`. - From the `gear` icon, choose `Generate a Payment Link`, and copy the link. - Open the link in an incognito window, and complete the payment. - Return to the original tab and open the payment transaction from the chatter. - Click `Refund` > `Refund` and observe the `author` of the messages in the chatter. **Observation:** The refund messages entry shows the customer as the author instead of the logged-in user who executed the refund. **Root Cause:** At [1] and [2], when the logged-in user is not a superuser, the code assigns the customer (`self.partner_id`) as the author, even during `refund`, `capture`, and `void transactions`, resulting in an incorrect message author. **Fix:** This commit ensures that during refund, capture, and void transactions, the message author is set to the logged-in user instead of the customer. [1]: https://github.com/odoo/odoo/blob/bbf3bd7b0e1d3e015350f9c959fad056384e2318/addons/account_payment/models/payment_transaction.py#L223 [2]: https://github.com/odoo/odoo/blob/5cf325dfff1ffbc1c4b4d0bcfc44ac9f55ea7c51/addons/sale/models/payment_transaction.py#L110 **Before:** <img width="1910" height="624" alt="5379376_before" src="https://github.com/user-attachments/assets/decdd620-d741-488e-9dec-e5c8c9bafc48" /> **After:** <img width="1917" height="622" alt="5379376_after" src="https://github.com/user-attachments/assets/5f38f3c3-fd2c-489e-afc9-d7a356fde23a" /> opw-5379376 Forward-Port-Of: odoo/odoo#241951 Forward-Port-Of: odoo/odoo#239224
This update corrects an issue with the padding within Gantt chart popovers, ensuring a more visually consistent and professional appearance. The change was necessary to address a design flaw identified in a previous development cycle, improving the overall user experience.
Original PR description
This commit fixes wrong padding inside gantt popovers body introduced in #101482. task-5166940 Forward-Port-Of: odoo/enterprise#103210
This update streamlines the planning process by automatically notifying users when employee work emails are missing. Instead of being blocked, users receive a list of affected employees, allowing them to quickly resolve the issue by contacting HR or the employees themselves. This reduces delays and improves overall planning efficiency.
Original PR description
Before this commit, when the planning manager wants to send the planning and for some employees the work email is missing, the user is blocked on the wizard to fill the work email on those employees if he does not edit access to employee model. This commit makes sure the wizard to fill in the missing work email is not displayed if the user cannot edit the information of the employees. It also displays a notification listing the employees for which the work email is missing. By doing that, the user can easily remove those employees to continue his flow or ask to HR user or the employees concerned to complete the missing information. task-5090163 Forward-Port-Of: odoo/enterprise#102819 Forward-Port-Of: odoo/enterprise#96111
This update ensures the 'Reset to Draft' button is consistently displayed for customer invoices, regardless of whether the sales journal is hashed. Previously, invoices with a lock date were hidden from this button. This change improves usability by allowing users to easily revert invoices that don't meet hashing requirements.
Original PR description
Previously, the `Reset to Draft` button was hidden for all invoices in hashed journals, even if the invoice itself was not hashed. Now, the button is visible for invoices that are not hashed. Steps to reproduce: - Create and post a customer invoice dated Feb 2, 2023. - Set the Sales Lock Date to Feb 28, 2023. - Enable the hash setting on the Sales journal. - The 2023 invoice is not hashed due to the lock date. - Create and post a second invoice in 2025 (this one is hashed). - Remove the Sales Lock Date. - Open the 2023 invoice. Before: `Reset to Draft` button was not visible for the 2023 invoice. After: `Reset to Draft` button is now visible for the 2023 invoice. task-4911601 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Studio could incorrectly load POS views due to sequence priority. Now, modules can override the view selection process, ensuring the correct default views are loaded regardless of sequence. This improves Studio's reliability and prevents unexpected view behavior.
Original PR description
Task: [#5191154](https://www.odoo.com/odoo/project/1737/tasks/5191154) --- When activating some views with Studio, we could end up loading a POS view because it has a lower sequence. As a result, Studio selects this view. However, these POS views may not be loaded in the backend bundle (`web.assets_backend`), and thus are missing at runtime. Example: "Cannot find key 'pos_kanban' in the 'views' registry". This commit creates a hook to get the domain used to fetch default views (`_get_default_view_domain()`). This way, modules can override the domain of `_get_default_view_domain()` method in order to exclude some views from being selected as default ones no matter the sequence. Forward-Port-Of: odoo/odoo#237122
This update resolves a problem where Studio was incorrectly loading POS views as default, leading to errors. The change prevents POS views from being selected as default, ensuring the backend operates with the intended views and improving stability. This ensures consistent view behavior across the Odoo Enterprise platform.
Original PR description
..., appointment, l10n_ke_edi_oscu_pos Task: [#5191154](https://www.odoo.com/odoo/project/1737/tasks/5191154) --- When activating some views with Studio, we could end up loading a POS view because it has a lower sequence. As a result, Studio selects this view. However, these POS views may not be loaded in the backend bundle (`web.assets_backend`), and thus are missing at runtime. Example: "Cannot find key 'pos_kanban' in the 'views' registry". This commit edit the domain of `_get_default_view_domain()` method in order to exclude these POS views from being selected as default ones. Forward-Port-Of: odoo/enterprise#98764
This update adds a subtle hover effect to the 'Picture-in-picture' and 'Fullscreen' buttons within Odoo's discuss calls. Previously, these buttons lacked visual feedback on mouse hover, making them difficult to click reliably. This change improves user experience by making the buttons easier to identify and interact with.
Original PR description
Before this commit, when in a discuss call, the buttons "Picture-in-picture" and "Fullscreen" in the bottom right had no mouse hover effect. As these buttons are visually just icons, the lack of hover effect makes it hard to tell which button is hovered thus making the click harder than it should. This commit reduces slightly the opacity of items, so that on mouse hover the opacity is removed. This acts as a small hover effect that makes it easier to click on these buttons reliably.  Forward-Port-Of: odoo/odoo#241920 Forward-Port-Of: odoo/odoo#241873
This update resolves an issue where employees were receiving duplicate deductions on their CFDI payslips. By removing a specific CFDI concept, the payroll system now accurately accounts for existing IMSS contributions, ensuring compliance with Mexican tax regulations. This change impacts the 19.0 release.
Original PR description
Avoid duplicate employee deductions on the CFDI payslip by eliminating the CFDI concept that is currently generating a second retention already accounted for in the “IMSS Total (Employee)” payroll rule. target: 19.0 task-5436851 Forward-Port-Of: odoo/enterprise#102730
This update resolves an issue where products without categories weren't shown correctly when grouping by category in the Point of Sale system. It also ensures that products belonging to multiple categories are displayed only once when filtering by category, enhancing the user experience and data accuracy.
Original PR description
[FIX] point_of_sale: fix group by category feature Task: [#5369658](https://www.odoo.com/odoo/project/1737/tasks/5369658) --- If we check the setting "Group products by category" in POS settings and we don't restrict the categories available in POS, products without category were not shown in the product list. Also when filtering by category, one product with multiple categories was shown multiple times. One time per category it belonged to. This commit fixes the issue by adding products without category at the end of the product list and by only showing products once when filtering by category. If no category is selected, the products will still be shown several times if they belong to multiple categories. Forward-Port-Of: odoo/odoo#241031 Forward-Port-Of: odoo/odoo#238156