Daily updates from Odoo
Monday, January 12, 2026
90 changes
32 changes
Resolved issues and error corrections
A bug was causing the timer to malfunction when switching between views with sample timesheet data. This update ensures all sample records have their timers paused, preventing data conflicts and improving the reliability of the timesheet display. This resolves a technical issue impacting user experience.
Original PR description
Steps to reproduce: - Open Timesheets app, - Click on search(magnifying lens) to open on cell with no records. - Let sample record be loaded. Issue: - Timer is already started. If you switch back to grid view and stop the time it throws traceback as it has data of sample records. Reason: - The sample records can have record states that are running. Fix: - Make sure all the sample records created have their timer paused using field `is_timer_running`. - Update condition in time display to check if time is running instead using `is_timer_running` not using `time_start` and `time_pause` as `time_pause` is not an active field. task-5267303 Forward-Port-Of: odoo/enterprise#102035
A recent issue preventing the completion of a key tour test for holiday allocation has been resolved. The problem stemmed from an empty leave type value causing form saving failures and timeouts. The fix ensures a valid leave type is always selected, guaranteeing the tour test runs successfully and accurately demonstrates the holiday allocation process.
Original PR description
Step to reproduce: - Install hr_holidays. - Run the time_off_allocation_warning_tour tour test. - The following error occurs: '(.o_form_readonly, .o_form_saved) has not been found. TIMEOUT: step failed to complete within 10000 ms'. Cause: - The leave type value is coming empty, causing the form to fail to save and resulting in a timeout. Fix: - Ensure holiday_status_id picks a valid leave type from selector. - Provide start dates and set the end dates to check the functionality. Task - 5264183 Forward-Port-Of: odoo/odoo#236639
This update resolves a technical issue within the HTML editor that could cause errors when content is completely removed after being inserted. The fix ensures the editor doesn't attempt to set a selection on a node that no longer exists in the DOM, improving stability and preventing unexpected errors. This primarily impacts the user experience when pasting and editing content.
Original PR description
During an `DomPlugin.insert`, the inserted content is added. Then some transformations are applied to clean up, including the removal of some nodes which are inventoried into `candidatesForRemoval`,…
During an `DomPlugin.insert`, the inserted content is added. Then some transformations are applied to clean up, including the removal of some nodes which are inventoried into `candidatesForRemoval`, and some specific `<br>` nodes. Ultimately, the selection is set after the last inserted node. In some cases, none of the inserted content remains after the clean up. When this happens, the selection is being set after the last inserted node, which is not part of the DOM anymore, and therefore leads to an error. This commit prevents this from happening by detecting when all inserted content was actually already removed. Steps to reproduce: - In a plain web page, copy a <br> into the clipboard - In an editor, put a character on a line - Paste => An error popup was displayed task-5429909 [FIX] html_editor: avoid failing when selection nodes are disconnected This commit addresses a traceback that was spotted but for which the actual scenario remains undetermined. The only possible way this traceback may occur is if nodes inside a selection are disconnected. The test added by this commit produces the same traceback as the observed one. task-5429909 Forward-Port-Of: odoo/odoo#242941 Forward-Port-Of: odoo/odoo#242488
This update resolves an inconsistency in the SLSP reports by standardizing the order of data lines within the reports. Previously, test failures occurred due to varying data presentation. Adding a default order by clause to the SQL queries ensures a consistent and reliable report output.
Original PR description
A recent test was added that tests the lines of the SLSP reports. Up until now, all tests were either testing specific lines (not the report structure) or the export, which uses different queries. This new test is now failing inconsistently due to the order in which the data is being displayed. We add default orderby in SQL queries of the SLSP (using the models default orderby) in order to make the order consistent and avoid further issues.
This update resolves a bug where image styles (like width and transform) were incorrectly applied to new media types after an image was replaced. Now, styles are automatically cleared when switching between image and other media types, ensuring consistent and accurate media display.
Original PR description
**Current behavior before PR:** - When an image had styles applied to it (such as transform or width) and was replaced with another media type like an icon or document, those styles were incorrectly carried over to the replaced media. **Desired behavior after PR is merged:** - Since transform and width styles are meant to apply only to images, they are now removed when an image is replaced with other media types. task-5373362 Forward-Port-Of: odoo/odoo#240284 Forward-Port-Of: odoo/odoo#238319
This update clarifies the call settings interface for users who have muted participants. Previously, the interface was confusing, showing the 'deafen' icon with the 'unmute' label. Now, only the 'undeafen' button is displayed when a participant is muted, providing a clearer and more intuitive experience.
Original PR description
Before this commit, the hint in the call settings was not taking into account if it was deafen or mute. On top of that the icon in the menu was showing the deafen icon but with the unmute label. When deafened, this was redundant with the undeafen button as well since unmute and undeafen are practically doing the same thing. Now, when deafen is activated, only the undeafen button is shown in the call menu and the hint in the call actions is undeafen not unmute. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242519
This update resolves an issue that could cause errors during the removal of certain Odoo modules. The changes ensure that data is handled correctly when a module is deleted, preventing potential data loss or system instability. This improves the overall reliability of the Odoo Enterprise platform.
Original PR description
Companion of https://github.com/odoo/odoo/pull/242777
This update ensures that all MOA (Monthly Accounting) values within the French accounting module are positive integers. Previously, the system could generate negative values, which caused errors. This change improves data accuracy and reliability for French tax reporting.
Original PR description
All MOA fields should be positive integer. task-5380637 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242976 Forward-Port-Of: odoo/odoo#239587
This update corrects a discrepancy in the calculation of employment bonuses for the Belgian payroll module (l10n_be_hr_payroll). The changes ensure bonus calculations are accurate up to March 2026, aligning with the latest tax regulations. This update maintains accurate financial reporting and compliance for businesses using this module.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update fixes an issue where the timesheet timer wasn't correctly associated with the task being worked on. The fix ensures the timer uses the correct task or project from the list view, providing a more accurate and user-friendly timesheet experience. This prevents timesheets from being incorrectly linked to the user's favorite project.
Original PR description
### Issue: When looking at the list of timesheet for a task, we can start the time but the timer have default values that don't correspond to the task. ### Cause: `startTimer` in the `timesheetTimerService` is called from the timesheet timer hook without vals. It then makes an orm call to `action_start_new_timesheet_timer` to retrieve the fields (project or task) but as nothing is given in the vals, the selected project is the one returned by `_get_favorite_project_id()`. ### Solution: Get the context of the list view to retrieve the task or the project and input it in `vals`. opw-5342525 Forward-Port-Of: odoo/enterprise#102152
This update corrects a technical issue that prevented users from accessing bank accounts correctly when signing contracts within the HR module. The fix ensures a smooth and reliable process for managing contract signatures and associated banking permissions. This resolves a potential disruption to business operations.
Original PR description
Forward-Port-Of: odoo/enterprise#103807
This pull request addresses an issue with the way absences are managed within the HR Work Attendance module. The fix ensures accurate tracking and reporting of employee absences, improving the reliability of HR data. This update resolves a technical bug impacting the core functionality of this module.
Original PR description
Task: 5470030 Forward-Port-Of: odoo/enterprise#103781
This update resolves an issue where empty popups remained open and displayed incorrect options after content was removed. The fix ensures that popups are correctly closed when empty, preventing errors and improving the user experience. This improves the reliability of the website builder.
Original PR description
**Descripion of the problems** When the content of a popup is deleted, two problems happen: 1. The popup stays open displaying an empty white rectangle. 2. Options relative to the last removed…
**Descripion of the problems** When the content of a popup is deleted, two problems happen: 1. The popup stays open displaying an empty white rectangle. 2. Options relative to the last removed element are still displayed and produce an error if the user interacts with them. **How to reproduce** Drop the snippet `s_popup`, and remove the "Block" element. Problems: 1. the popup is still open but empty, 2. the "Block" options are still displayed. **Origin of the problems** Problem 1 happens simply because nothing takes care of removing empty popups. Problem 2 happens because `RemovePlugin.removeCurrentTarget` set the `nextTargetEl` without first checking if the element is activable or not. Thus, when removing the last block in a popup, the next target is set to the `.o_we_no_overlay` close button, despite it being not activable. As a result, when `BuilderOptionsPlugin.updateContainers` is called, it does not update containers because the target is not activable. Thus, the "Block" options are still displayed despite the element being removed. **Fix** Both problems are fixed by changing `RemovePlugin.isEmptyAndRemovable` such that empty popups are marked as removable. task-5401692 Forward-Port-Of: odoo/odoo#242377 Forward-Port-Of: odoo/odoo#239507
This update fixes minor inaccuracies in the German Point of Sale (POS) reporting process by ensuring the correct net value is used for pricing and by sending amounts as strings to the payment processor, Fiskaly. The changes also improve rounding precision to meet Fiskaly's requirements, and adjust order amounts for customer payments.
Original PR description
In this commit: ------------------ - Transferred **net value** instead of **gross value** for `price_per_unit`. - Included **cash statement business cases** that were prepared earlier but not sent to Fiskaly. - Ensured all **amount fields are sent as strings** to Fiskaly. - Fixed rounding precision using `toFixed()` to maintain **2–5 decimal places**, as required by Fiskaly (e.g., `4.70` should not become `4.7`). - Adjusted logic for **customer account payments** to send the **adjusted order amount** instead of the original total. task: 5122652 Forward-Port-Of: odoo/enterprise#99643
This update fixes an issue where refund alerts in the Point of Sale (POS) system could be triggered incorrectly due to rounding differences in order totals. The change ensures that the system accurately compares refund amounts against original order amounts, preventing false alerts and improving the reliability of the POS system. This update enhances the accuracy of financial reporting within the POS module.
Original PR description
Before this commit, if the total amount of the order had rounding differences compared to the sum of its lines, the system could incorrectly trigger an alert stating that the refund amount exceeds the original order amount. This was due to a direct comparison between the two amounts without considering potential rounding issues. opw-5402240 Forward-Port-Of: odoo/enterprise#103758 Forward-Port-Of: odoo/enterprise#102224
This update resolves a technical issue that caused warnings and potential crashes when searching for delayed production orders in the Manufacturing Orders list view. The change ensures the filter functions correctly and avoids future compatibility problems with Odoo's database system.
Original PR description
Issue before this commit: ========================= Searching for Delayed Productions in the MRP list view triggered: - A deprecation warning in saas-18.4 → 19.0: `warnings.warn("Since 19.0, use…
Issue before this commit:
=========================
Searching for Delayed Productions in the MRP list view triggered:
- A deprecation warning in saas-18.4 → 19.0:
`warnings.warn("Since 19.0, use Domain.custom(to_sql=lambda model, alias, query: SQL(...))", DeprecationWarning)`
- A traceback in master:
`Failed to cast TableSQL('mrp_production', -, None).date_finished into a datetime`
Steps to Reproduce:
=========================
- Install mrp module.
- Open the Manufacturing Orders list view.
- Filter by Delayed Productions.
- Observe the warning (saas-18.4 → 19.0) or traceback (master).
Cause of the issue:
=========================
Recent ORM changes in [PR](https://github.com/odoo/odoo/commit/f811af2c52df798b6ba0fc18e3f45944abdb7a12) disallow using raw SQL expressions as values inside normal domains.
Only Domain.custom() is permitted for injecting custom SQL.
The previous _search_is_delayed implementation used a deprecated pattern,
which caused the warning in current versions and a crash in the master version.
With This Commit:
=========================
- Rewrite the delayed production filter using Domain.custom() to safely generate the SQL.
- Preserve functional behaviour: the filter still returns delayed productions correctly.
- Avoid deprecation warnings and prevent traceback.
TaskID:- 5404547
Forward-Port-Of: odoo/odoo#243134
Forward-Port-Of: odoo/odoo#239574This update resolves a problem where the sign flow's dropdown menu wouldn't display all available styles correctly. Previously, users had to wait for a background process to complete before selecting options, leading to a limited selection. This change ensures all styles are consistently available in the dropdown.
Original PR description
In this tour, when we want to select the third dropdown item in style list menu, we must wait that the rpc get_fonts/ is done, or else, it has only one item in the menu. When the menu is opened before the call is completed, there is only one style. When it is opened after, there is all styles loaded. runbot-error-id~232652 Forward-Port-Of: odoo/enterprise#103813
This update corrects a display issue where the CFDI button was incorrectly shown on payruns that didn't meet Mexican tax requirements. The change ensures the button only appears for payruns containing Mexican payslips, improving the user experience and preventing unnecessary complexity. This fix enhances the accuracy of payroll reporting.
Original PR description
Before this commit, the computed fields `l10n_mx_cfdi_primary` and `l10n_mx_cfdi_secondary` would return True for payruns containing only non-Mexican payslips. This happened because `all()` returns True for empty iterables, causing the CFDI button to appear on payruns that have no Mexican payslips. This commit: - Adds explicit check for Mexican payslips existence before evaluating the CFDI state conditions - Hides `l10n_mx_edi_cfdi_origin` field for non-Mexican payslips - Adds test coverage for CFDI visibility on non-Mexican payruns task-5478038
This update resolves an issue where the attendance app would crash when an employee didn't have a linked calendar. The fix ensures the app handles employees with flexible schedules properly by skipping calendar periods when a calendar isn't assigned, aligning with existing flexible calendar functionality.
Original PR description
Steps to reproduce: - Create an employee - Remove the calendar to have fully flex - Open the attendance app -> traceback When an employee has no resource calendar (resource_calendar_id=False), the _gantt_unavailability method would crash with a TypeError when trying to create a ZoneInfo from calendar.tz (which is False/None). This fix adds a check to skip calendar periods where the calendar is not set, consistent with how flexible calendars are already handled. task-5462208
This update removes a confusing and unnecessary filter option (Templates) from project selection screens in other apps. Previously, the filter appeared globally due to a shared search view. This change simplifies the user experience and ensures consistency within the project module.
Original PR description
**Steps to reproduce:** - Open the Planning app or any app where project_id field - Click New - Click on the Project field - Click Search More - Look at the search filters - The Templates filter is visible **Issue:** The Templates filter shows up when choosing a project from there, even though it is not useful there. **Cause:** They uses the same project search view as the main project app, so the templates filter appears everywhere. **Fix:** Add a condition check in filter to make invisible in other module and show only in project. **Dev Notes (sale_project):** The context was already used for milestone display name computation, but it was missing in the sale_project override. Due to this, when Project Stages were enabled, the milestone display name did not include the deadline. task-5255295 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241797
This update fixes an issue where milestone deadlines weren't shown in the Project list view. The fix ensures that milestone names now accurately include the associated deadline, providing users with clearer project timelines. This improves the usability of the Industry FSM module for project management.
Original PR description
**Steps to Reproduce:** - Install the Industry FSM module. - Navigate to Project Configuration. - Enable Milestones. - Go to the Project list view. - Observe that the Next Milestone does not display the deadline along with the milestone name. **Issue:** The milestone display name is incomplete and does not include the deadline date. **Cause:** The required context was not passed in the overrided action's context, so the display_name computation did not add the deadline to the milestone name. **Fix:** Pass the appropriate context in the action to correctly compute and display the name along with its deadline. Task: 5255295 Forward-Port-Of: odoo/enterprise#103157
This update fixes a visual issue where long product names in the combo configurator popup caused misalignment of product cards. The change ensures all product cards remain consistently aligned and sized, regardless of the length of their names, improving the overall user experience and consistency of the configurator.
Original PR description
Before this commit: ================= Product cards with long names caused a slight vertical misalignment in the combo configurator popup, resulting in inconsistent card sizes within the grid. After this commit: ================== Ensure all product cards remain uniformly aligned and maintain consistent dimensions in the combo configurator popup, even when product names are long. Task:5447320 Forward-Port-Of: odoo/odoo#243089 Forward-Port-Of: odoo/odoo#241720
This update resolves an issue where using many2many filters with archived records caused errors. The fix ensures that the system gracefully handles inactive records, preventing exceptions and maintaining filter functionality. This improves the stability and reliability of the calendar view.
Original PR description
Description of the issue/feature this PR addresses: In fa56409 support was added for many2many filters in the calendar arch. Since X2many fields use the many2one formatter (see makeFilterDynamic) filters need to be passed in the following format [id, display_name]. Since x2many records are not automatically fetched in this format fa56409 added an additional step wherein colors and display names are fetched (by calling searchRead) and filters are properly formatted. An issue arises though if a record is archived and therefore not found by searchRead. In this case the filter will not be properly formatted and formatMany2one will raise an exception. Current behavior before PR: Using a x2many filter with an archived record raises an exception. Desired behavior after PR is merged: Using a x2many filter with an archived record will not raise an exception. (ref: #241522) Forward-Port-Of: odoo/odoo#243030
This update corrects a mistake in how taxes are aggregated for the French (l10n_fr) version of Odoo. Specifically, a calculation error in 'box 15_1' was identified and resolved. This ensures accurate tax reporting for French businesses using Odoo.
Original PR description
During this commit: https://github.com/odoo/odoo/commit/869f80b466ec2246f27e11fa823eb32ac664fb01 we made a mistake in the box 15_1. no task id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243099 Forward-Port-Of: odoo/odoo#243013
This update prevents non-administrator users from accessing the Discuss settings. Previously, they would receive an error message when attempting to change configuration options. Now, the settings menu is hidden, ensuring that sensitive configuration options are only accessible to authorized administrators.
Original PR description
**Steps to reproduce:** Open Discuss > Configuration > Settings. **Current behavior before PR:** Non-admin users encounter an access error when clicking 'Settings'. **Desired behavior after PR is merged:** The 'Settings' menu item is now hidden for users who are not part of the 'Role / Administrator' group. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue where the test button on the IoT device dashboard incorrectly reported successful connections even when errors were present. The fix standardizes the data format used for IoT device status checks, ensuring accurate reporting and a more reliable user experience. This improves the overall stability of the IoT integration.
Original PR description
This commit fixes several situations where a positive status would be given by the test button despite the presence of an error: - If the websocket connection was used but there was a timeout - If the websocket connection was used but there was any other error - If any 6-digit error code was returned when using the stable IoT box To fix these issues, we stop using the `data['message']` field, since it gets ignored by the websocket confirmation controller. We now use the same result format as the other requests (and the stable IoT box). We also add a check for the `"timeout"` that we receive when a websocket request times out. Forward-Port-Of: odoo/enterprise#103861 Forward-Port-Of: odoo/enterprise#103817
A bug preventing the 'Total Cost' field from appearing in pivot views within the Stock reporting module has been resolved. This update corrects a technical issue related to how data aggregation was handled in pivot views, ensuring the reporting functionality works as expected. This fix improves the usability of the Stock reporting feature.
Original PR description
Steps to reproduce: 1) Make sure "Developer mode" is on, go to "Inventory" -> "Reporting" menu -> "Stock" 2) Click "bug" icon -> select "Action" -> add "pivot" to "View Mode" field 3) Refresh page…
Steps to reproduce: 1) Make sure "Developer mode" is on, go to "Inventory" -> "Reporting" menu -> "Stock" 2) Click "bug" icon -> select "Action" -> add "pivot" to "View Mode" field 3) Refresh page and go back to "Stock" report 4) Go to "pivot" view -> click "Measures" -> select "Total Cost" Expected behavior: The field should be added to the view as an aggregate. Current behavior: An error is thrown, due to a bad SQL query. This is because previously, pivot views used `_read_group` to fetch the data, but now after #194413, it uses the new method `_read_grouping_sets` instead. The issue was that the SQL-computed fields defined in `product_margin` were handled in a special way in an override of `_read_group`. However, when `_read_grouping_sets` was introduced, their special implementation was not implemented, so aggregating on any of those special fields, resulted in a broken SQL query. This commit fixes this issue by overriding `_read_group_sets` for those sepcial fields in a similar way to `_read_group`. opw-5345013 Forward-Port-Of: odoo/odoo#238679
This update fixes a minor discrepancy in sales order tax calculations, specifically when discounts are applied. Previously, a small tax difference ($0.01) could appear in the order total due to a discount. The fix ensures that the tax delta is correctly distributed even with zero tax totals, improving overall financial accuracy.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Set tax rounding to "Round Globally"; 2. create a 19.99% tax; 3. create a new sales order; 4. add a line with a $19.99 unit price & 19.99% tax; 5. add a second line with identical values; 6. apply a 100% global discount (-$38.98 subtotal, -$47.97 total). Issue ----- The order total is $0.01 due to VAT. Cause ----- The `_round_tax_details_tax_amounts` method distributes the "tax delta" across the tax details, but currently it only does this if there's a non-zero target tax amount. In our scenario, we have a $0.01 tax delta, but because our tax total is $0.00 due to the 100% discount, the delta doesn't get distributed, leading to the $0.01 difference not getting corrected. Solution -------- When deciding whether to distribute a tax delta, check the tax delta value instead of the target tax amount. opw-5345538 opw-5097907 Forward-Port-Of: odoo/odoo#243172 Forward-Port-Of: odoo/odoo#240633
A bug in the website tour testing process was causing tests to fail due to snippets being dropped into open popups. This update ensures that popup snippets are automatically removed after being dropped, resolving the issue and improving test reliability. This prevents disruptions to the website tour experience.
Original PR description
**Problem** Before this commit, the tour `test_03_snippets_all_drag_and_drop` could fail with the error `Element (:iframe .o_snippet_preview_wrap[data-snippet-id="s_popup"]) has not been found`. The failure was reproducible locally and appeared non-deterministically on runbot. **Cause** The tour steps could occasionally execute too quickly, leading to non-determinist behavior where snippets were dropped inside a popup that had been inserted but not yet closed. When the dropzone is inside an open popup, some snippets (e.g. `s_popup`) are excluded from the Snippet Viewer, resulting in the error reported above. **Solution** The tour flow is modified such that popup snippets are removed after being dropped, as already happens for every other snippet category. This completely removes the risk that new snippets are dropped into a popup. runbot-233328 Forward-Port-Of: odoo/odoo#242231
This update fixes an issue where inline code blocks wouldn't fully disappear when deleting the last character. Now, removing the final character of an inline code block correctly removes the code style and the block itself, improving the user experience when editing text with code snippets. This ensures consistent formatting and cleaner content.
Original PR description
Text formatted as inline `<code>` (between backticks) is very difficult to remove in some situations, typically at the beginning of a list entry. This commit solves this by removing the code style when its last character is removed. Steps to reproduce: - Create a list - Type some inline code - Put the cursor in the middle - Press Enter - Type some text after the inline code on the second line - Try to remove the inline code from the second line using backspace => The line is removed before the code style disappears task-5375140 Forward-Port-Of: odoo/odoo#240805 Forward-Port-Of: odoo/odoo#238552
This update fixes a minor issue in the HTML editor's testing process. The previous method sometimes duplicated selection actions, leading to inconsistent test results. This change ensures the selection process is more reliable and accurate, improving the overall stability of the HTML editor.
Original PR description
The `simulateArrowKeyPress` method used in hoot tests performs both an actual `press` and modifies the selection. However, in some cases, the `press` already updates the selection because of our own listeners, which leads to a selection similar to performing the action twice. This commit avoids this by making sure the default `press` did not get prevented by our own custom listeners before modifying the selection. task-5438683 Forward-Port-Of: odoo/odoo#243108 Forward-Port-Of: odoo/odoo#241604
This update clarifies the terminology used for payroll input types, renaming 'Other Input Types' and 'Payslip Other Input Types' to 'Salary Input Types'. This change enhances user understanding and simplifies the payroll configuration process, improving overall usability.
Original PR description
Updated the Input type for better clarity and easier understanding for users: - '**Other Input Types**' : 'Salary Input Types' - '**Payslip Other Input Types**' : 'Salary Input Types' **task-5474028** Forward-Port-Of: odoo/enterprise#103632
6 changes
Resolved issues and error corrections
This update corrects a display issue where archived recurring plans continued to show up as pricing options on product pages. The fix ensures that archived plans are no longer considered during pricing selection, providing a cleaner and more accurate presentation of available plans to customers. This improves the user experience and prevents confusion.
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** Forward-Port-Of: odoo/enterprise#103428 Forward-Port-Of: odoo/enterprise#100587
This update corrects a calculation error in the Belgian payroll module (l10n_be_hr_payroll) related to employment bonuses. The changes ensure that bonus calculations accurately reflect payments up to March 2026, aligning with updated Belgian tax regulations. This update maintains accurate financial reporting for businesses using this module.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update corrects a calculation error in the Belgian payroll module (l10n_be_hr_payroll) related to the 3000 deduction. The change ensures the deduction accurately reflects tax regulations up to the year 2026, improving payroll accuracy for Belgian users. This fix addresses a previously identified discrepancy.
Original PR description
Forward-Port-Of: odoo/enterprise#103824
This update fixes an issue where the ‘Next Milestone’ display in the Project list view was missing the milestone deadline. The fix ensures that milestone names now accurately include the deadline, providing users with clearer project timelines. This improves the usability of the Industry FSM module.
Original PR description
**Steps to Reproduce:** - Install the Industry FSM module. - Navigate to Project Configuration. - Enable Milestones. - Go to the Project list view. - Observe that the Next Milestone does not display the deadline along with the milestone name. **Issue:** The milestone display name is incomplete and does not include the deadline date. **Cause:** The required context was not passed in the action, so the display_name computation did not add the deadline to the milestone name. **Fix:** Pass the appropriate context in the action to correctly compute and display the name along with its deadline. Task: 5255295 Forward-Port-Of: odoo/enterprise#103895 Forward-Port-Of: odoo/enterprise#103160
This update fixes a bug in the invoice import process within Odoo Enterprise v18.4. Previously, the wrong company's purchase tax could be applied when invoices were processed, particularly through automated cron jobs. This change ensures that the correct tax is selected based on the company setting, improving invoice accuracy and compliance.
Original PR description
In v18.4, the invoice import has been refactored with these 2 PRs: - [189979](https://github.com/odoo/odoo/pull/189979) - [75327](https://github.com/odoo/enterprise/pull/75327) This introduced a small bug where, in a multi-company setup, an `account.tax` could be selected from the wrong company when `_fetch_mail()` was called from the cron `Mail: Fetchmail Service` or if the method was called manually from the wrong company. Ticket: opw-5375785
This update fixes an issue where public channels in Odoo were incorrectly configured, defaulting to an internal user instead of being publicly accessible. The change sets the `group_public_id` to `None` to ensure channels are correctly designated as public, improving channel visibility and collaboration.
Original PR description
Since #206619, the fixed test has used a wrong value for `group_public_id`, as if it's not set, the default is `Internal User`. This change sets it to `None` to make the channel public. Forward-Port-Of: odoo/odoo#243237
13 changes
Resolved issues and error corrections
This update fixes a visual issue where long product names in the combo configurator popup caused misalignment of product cards. The change ensures all product cards maintain consistent alignment and dimensions, regardless of name length, providing a cleaner and more professional user experience.
Original PR description
Before this commit: ================= Product cards with long names caused a slight vertical misalignment in the combo configurator popup, resulting in inconsistent card sizes within the grid. After this commit: ================== Ensure all product cards remain uniformly aligned and maintain consistent dimensions in the combo configurator popup, even when product names are long. Task:5447320 Forward-Port-Of: odoo/odoo#241720
This update corrects a discrepancy in the calculation of employment bonuses for the Belgian payroll module (l10n_be_hr_payroll). The changes ensure bonus calculations are accurate up to March 2026, aligning with the latest tax regulations. This update maintains accurate payroll reporting for our Belgian clients.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update corrects a calculation error in the Belgian payroll module (l10n_be_hr_payroll) related to the 3000 deduction. The change ensures that the deduction amount is accurately reflected up to the year 2026, aligning with updated Belgian tax regulations. This ensures accurate payroll reporting and compliance for users in Belgium.
Original PR description
Forward-Port-Of: odoo/enterprise#103824
This update corrects a technical issue where bank statements were incorrectly accessing elevated permissions. The change removes this unnecessary access, improving security and stability within the account module. This ensures data integrity and prevents potential vulnerabilities.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242899 Forward-Port-Of: odoo/odoo#242771
This update ensures that leave dates automatically recalculate when an employee's or contract's working schedule changes. Previously, leave calendars weren't updated, leading to potential inaccuracies. This fix maintains accurate leave balances by reflecting the latest schedule.
Original PR description
purpose: Accepted leaves should be recomputed upon working schedule change. - made the `resource_calendar_id` change on the leave when it's changed on the corresponding employee/contract, then forced recomputation of its dates from the new resource calendar task-id: 5424312 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242381 Forward-Port-Of: odoo/odoo#241284
This update fixes a minor issue in the HTML editor's testing process. The change ensures that test actions are executed correctly, preventing redundant selections and improving the reliability of hoot tests. This enhances the overall stability of the HTML editor module.
Original PR description
The `simulateArrowKeyPress` method used in hoot tests performs both an actual `press` and modifies the selection. However, in some cases, the `press` already updates the selection because of our own listeners, which leads to a selection similar to performing the action twice. This commit avoids this by making sure the default `press` did not get prevented by our own custom listeners before modifying the selection. task-5438683 Forward-Port-Of: odoo/odoo#241604
This update fixes an issue where the 'Next Milestone' displayed in the Project list view was missing the deadline date. The fix ensures that milestone names now accurately include the deadline, providing clearer visibility for project timelines. This improves the accuracy of project planning and reporting.
Original PR description
**Steps to Reproduce:** - Install the Sale Project module. - Navigate to the Project module. - Enable Project Stages. - Go to the Project list view. - Observe that the Next Milestone does not display the deadline along with the milestone name. **Issue:** The milestone display name is incomplete and does not include the deadline date. **Cause:** The context overridden in sale project did not pass the required context, cause the display_name computation did not add deadline to the display name. **Fix:** Passed the appropriate context in the action context to ensure the display name is correctly computed and displayed with its deadline. Task: 5255295 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243189 Forward-Port-Of: odoo/odoo#241853
This update fixes a display issue in the Industry FSM module where milestone names weren't showing their associated deadlines. The fix ensures that milestone names now accurately include the deadline date, providing users with clearer project timelines within the Project Configuration section.
Original PR description
**Steps to Reproduce:** - Install the Industry FSM module. - Navigate to Project Configuration. - Enable Milestones. - Go to the Project list view. - Observe that the Next Milestone does not display the deadline along with the milestone name. **Issue:** The milestone display name is incomplete and does not include the deadline date. **Cause:** The required context was not passed in the action, so the display_name computation did not add the deadline to the milestone name. **Fix:** Pass the appropriate context in the action to correctly compute and display the name along with its deadline. Task: 5255295 Forward-Port-Of: odoo/enterprise#103895 Forward-Port-Of: odoo/enterprise#103160
This update resolves a minor issue that caused tests for embedded actions to sometimes fail unpredictably. By adding a necessary wait for the user interface to update, we've made the tests more reliable and consistent. This ensures our software continues to function as expected.
Original PR description
In this commit, we add a missing await for an animation frame in an embedded action test. This ensures that the test waits for the DOM to update properly before proceeding, preventing potential flakiness in the test execution. runbot error~237752 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243240
This update resolves a technical error that prevented users from successfully creating and saving bank statements within the Bank Journal Transactions feature. The issue stemmed from an undefined data source within the application, now corrected by utilizing props for data access. This ensures a smoother and more reliable experience for users.
Original PR description
We get an owl error: `TypeError: Cannot read properties of undefined (reading 'root').` The code tries to read data from this.env.model, but it is undefined. Steps To Reproduce: 1. Install `account_accountant` 2. Go to Accounting Dashboard > Bank > `...` > Transactions 3. Open in the list view 4. Select any number of transactions 5. Type something in the statement field of one of the rows 6. Press Create and Edit to create a new Statement 8. Save the statement Ticket [link](https://www.odoo.com/odoo/project.task/5352277) opw-5352277
This update fixes an issue where public channels were incorrectly configured, defaulting to an internal user instead of a public setting. The change sets the `group_public_id` to `None` to ensure channels are correctly identified as public, improving channel visibility and functionality.
Original PR description
Since #206619, the fixed test has used a wrong value for `group_public_id`, as if it's not set, the default is `Internal User`. This change sets it to `None` to make the channel public. Forward-Port-Of: odoo/odoo#243237
This update resolves an issue where user avatars in the Odoo Chat UI were appearing distorted or incorrectly sized. The fix applies a standard image scaling style ('object-fit: cover') to ensure avatars are displayed correctly and consistently. This improves the user experience and visual appearance of user profiles.
Original PR description
Before this commit, user avatars in the Chater UI were not displayed using the object-fit: cover style, causing distorted or improperly scaled images. Current behavior before PR: <img width="671" height="380" alt="image" src="https://github.com/user-attachments/assets/a4b7ef3a-0c69-4fec-bf2a-70c9bd89236e" /> Desired behavior after PR is merged: <img width="663" height="384" alt="image" src="https://github.com/user-attachments/assets/479586c8-a01c-45fb-9e46-9246616e1329" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242912 Forward-Port-Of: odoo/odoo#242320
This update fixes a potential issue where payroll calculations could incorrectly show employees owing money to the state. The change ensures that taxable income defaults to zero when state deductions exceed gross income, preventing inaccurate pay slips and ensuring correct tax reporting.
Original PR description
This commit simply defaults the computed taxable income amount to 0 in case the state deductions are greater than their gross income. Otherwise our payslips would imply that these employees are owed money by the state opw-5137280 Forward-Port-Of: odoo/enterprise#98114
3 changes
Resolved issues and error corrections
This update corrects a technical issue where the `TaxBase` element was missing from FAIA XML reports for invoices with multiple taxes. This ensures compliance with Luxembourg tax reporting requirements and prevents potential errors when submitting reports to tax authorities. The fix was triggered by a specific test case.
Original PR description
### Issue: The `TaxBase` element was missing in the generated FAIA XML, although it is required when a product line has multiple taxes ### Steps to reproduce: - Use a l10n_lu company - Create an invoice with a product line that has two taxes - Download the General Ledger → FAIA XML report - Observe that `TaxBase` is not included before the TaxBaseDescription element ### Specs & reference: FAIA v2.01 (full) XSD files: https://pfi.public.lu/dam-assets/backup/FAIA/FAIA/XSD_Files.zip opw-5360519 Forward-Port-Of: odoo/enterprise#103543 Forward-Port-Of: odoo/enterprise#101178
This update fixes an issue where the 'Next Milestone' display in the Project list view was missing the deadline date alongside the milestone name. The fix ensures that milestone names now accurately show both the name and its associated deadline, improving project visibility and tracking. This enhancement provides clearer information for project managers.
Original PR description
**Steps to Reproduce:** - Install the Industry FSM module. - Navigate to Project Configuration. - Enable Milestones. - Go to the Project list view. - Observe that the Next Milestone does not display the deadline along with the milestone name. **Issue:** The milestone display name is incomplete and does not include the deadline date. **Cause:** The required context was not passed in the action, so the display_name computation did not add the deadline to the milestone name. **Fix:** Pass the appropriate context in the action to correctly compute and display the name along with its deadline. Task: 5255295 Forward-Port-Of: odoo/enterprise#103160
This update resolves a technical error that occurred when selecting a customer in the Ecuadorian Point of Sale (POS) system. The fix ensures a customer is always selected, specifically 'Consumidor Final,' which is required for compliance with Ecuadorian tax regulations. This prevents tracebacks and ensures accurate reporting.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#102221
1 change
Resolved issues and error corrections
This update resolves a technical error that prevented users from opening the Trial Balance report when no report lines were available. The fix adds a check to avoid an error when report lines are missing, ensuring the report can always be generated correctly. This improves the reliability of a key financial reporting tool.
Original PR description
Currently, An error is generated while a user is trying to open the 'Trial Balance' report when report lines are not available. Steps to reproduce: - Install an `account_reports` module (without demo). - Go to Accounting / Configuration / Management / Accounting Reports, and open the `Trial Balance` report. - Open the `Trial Balance` line and delete all (Expressions)lines from it. - And Open Accounting / Reporting / Audit Reports / Trial Balance. `IndexError: tuple index out of range` An error occurs when the system tries to access report lines at [1], but no lines are available. Link [1]: https://github.com/odoo/enterprise/blob/c54267a89fb5013138abffdb03a456da2b8a7938/account_reports/models/account_trial_balance_report.py#L428 To resolve this, add a condition to check that if the report has no lines then skip the process of adding a `Total` in the report lines. Sentry-6286872462
4 changes
Resolved issues and error corrections
A bug was causing errors when switching between the Timesheet grid view and stopping timers, due to sample data incorrectly reflecting running times. This update ensures all sample timesheets have their timers paused, resolving the issue and improving the stability of the Timesheet grid.
Original PR description
Steps to reproduce: - Open Timesheets app, - Click on search(magnifying lens) to open on cell with no records. - Let sample record be loaded. Issue: - Timer is already started. If you switch back to grid view and stop the time it throws traceback as it has data of sample records. Reason: - The sample records can have record states that are running. Fix: - Make sure all the sample records created have their timer paused using field `is_timer_running`. - Update condition in time display to check if time is running instead using `is_timer_running` not using `time_start` and `time_pause` as `time_pause` is not an active field. task-5267303 Forward-Port-Of: odoo/enterprise#102035
This update corrects a display issue on the website related to subscription products. Previously, the delivery period was shown in English, regardless of the user's language setting. This fix ensures that the delivery period is now correctly translated into the user's preferred language, improving the customer experience.
Original PR description
This commit[^1] introduced a "Deliver Every [period]" text on the website for subscription consumable products, but used the raw selection key that was not translated. As a result, people would see only the "Deliver Every" part in their language, and the period in English. To fix this, we added a computed field with a properly translatable string that is used on the website. Issue reported by support. [^1]: https://github.com/odoo/enterprise/commit/beb7238882eda1fd36aa22bdb6441b8bd5556ef3 Forward-Port-Of: odoo/enterprise#103645
This update removes a confusing field from the payment report generation process. Previously, a separate 'Payment Date' was required, leading to user confusion when creating payment advice reports. Now, standard payment dates are used, streamlining the reporting process and improving clarity.
Original PR description
Before: * Generate Payment report wizard showed a separate Payment Date field. * This caused confusion when generating payment advice reports. After: * Removed the Payment Date field from the localization Generate Payment report wizard. task-5443068
This update fixes a naming inconsistency within the Odoo Enterprise system. The 'acc_number' field on the res.partner.bank was renamed to 'account_number' to align with standard naming conventions. This ensures data accuracy and simplifies future system updates.
Original PR description
'acc_number' res.partner.bank field was renamed 'account_number' See: https://github.com/odoo/odoo/commit/113d77eb35aa8f8b503043d1201b6cdf78e9be83#diff-22e97cf61c6826e67cd9a3276bdb292e997cb1117ca44c1749c69d5d01931787
8 changes
Resolved issues and error corrections
This update fixes an issue where the timesheet timer wasn't correctly associated with the task being worked on. The fix ensures the timer uses the correct task or project from the list view, providing a more accurate and user-friendly timesheet experience. This improves the reliability of time tracking.
Original PR description
### Issue: When looking at the list of timesheet for a task, we can start the time but the timer have default values that don't correspond to the task. ### Cause: `startTimer` in the `timesheetTimerService` is called from the timesheet timer hook without vals. It then makes an orm call to `action_start_new_timesheet_timer` to retrieve the fields (project or task) but as nothing is given in the vals, the selected project is the one returned by `_get_favorite_project_id()`. ### Solution: Get the context of the list view to retrieve the task or the project and input it in `vals`. opw-5342525
This update resolves a minor typo within the Odoo Enterprise system. The change ensures the naming of attachment files accurately reflects their associated external IDs and intended functionality. This improves data consistency and reduces potential confusion.
Original PR description
Fix typo – Correct the ir_attachment file name to match the external ID and its functionality. OPW-5428700
This update corrects a technical issue where the test button on the IoT device interface incorrectly reported successful status even when errors were occurring. The fix standardizes the data format used for IoT device communication, ensuring accurate status reporting and improved reliability of the device testing process. This prevents misleading feedback for users.
Original PR description
This commit fixes several situations where a positive status would be given by the test button despite the presence of an error: - If the websocket connection was used but there was a timeout - If the websocket connection was used but there was any other error - If any 6-digit error code was returned when using the stable IoT box To fix these issues, we stop using the `data['message']` field, since it gets ignored by the websocket confirmation controller. We now use the same result format as the other requests (and the stable IoT box). We also add a check for the `"timeout"` that we receive when a websocket request times out. Forward-Port-Of: odoo/enterprise#103817
This update ensures the employment bonus calculations in the l10n_be_hr_payroll module accurately reflect bonus amounts up to March 2026. This fix addresses a recent adjustment to Belgian tax regulations regarding employment bonuses, maintaining compliance and accurate payroll reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update fixes a minor issue in the SendCloud integration where the product ID was incorrectly accessed. The change ensures the system reliably retrieves product information using the correct 'id' key, preventing potential data retrieval errors. This improves the accuracy of SendCloud order processing.
Original PR description
Same fix as d4fae97, the id was retrieved by doing `[0]` but the proxy object has changed so we need to use the `id` key to get the value instead. ----- Ticket: opw-5433254
This update corrects a calculation error in the Belgian payroll module (l10n_be_hr_payroll) related to the 3000 deduction. The change ensures the deduction accurately reflects tax regulations up to the year 2026, improving payroll accuracy for Belgian businesses. This fix addresses a previously identified discrepancy.
Original PR description
Forward-Port-Of: odoo/enterprise#103824
This update clarifies the terminology used in the Odoo Enterprise payroll module. The 'Other Input Types' and 'Payslip Other Input Types' menu items have been renamed to 'Salary Input Types' to improve user understanding and ease of navigation. This change enhances the overall user experience within the payroll system.
Original PR description
Updated the Input type for better clarity and easier understanding for users: - '**Other Input Types**' : 'Salary Input Types' - '**Payslip Other Input Types**' : 'Salary Input Types' **task-5474028**
This update resolves a bug where the 'copy link' button in the salary calculator generated a 404 error. The fix ensures the offer is saved before generating the link, preventing errors related to missing offer IDs. This improves the usability of the salary calculator for generating offer links.
Original PR description
Steps to reproduce: 1- Open salary calculator 2- Do not edit any fields 3- Click on copy link button 4- Open the link Issue: When you open the link you'll see a 404 page. Cause: The salary calculator essentially creates an offer. When no fields are modified in the form, the offer isn't created yet. When a link is created for that offer, the offer id part of the link is NewId_xxx. Fix: Modify the widget that copies the link to clipboard to first save the offer before generating the link. Task-5441297
16 changes
Resolved issues and error corrections
This update ensures that branch names on Thai tax invoices are displayed in the correct language based on the customer's language settings. Previously, all invoices used English regardless of the partner's language. This improves the accuracy and professionalism of invoices for Thai customers.
Original PR description
Currently, l10n_th_branch_name is not translatable. Regardless of the language setting, it is printed in English on the tax invoice. This PR addresses that. Task-5438534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue where logging was incorrectly triggered when viewing sales quotes within the Odoo portal. The fix prevents unnecessary requests to the quote URL, ensuring accurate logging and a smoother user experience. This improves system stability and reduces potential performance impacts.
Original PR description
Steps: - Install sales app. - Copy portal of an SO. - use it in editor link or somewhere where preview_url is used. Issue: - Quotation viewed log note adding on the SO. Cause: - `get_link_preview_from_url` method do request on the url that's why it calling it's controller and adding log note. Fix: - Add check for uid in session or `Sec-Fetch-Site` in request header to ensure request is actually coming from user not from some method. opw-5409727
This update ensures that eTIMS configuration warnings are displayed only for companies operating in Kenya. Previously, these warnings appeared for all companies, causing confusion. This change improves the accuracy and relevance of the warnings, streamlining the user experience.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334
This update prevents a problem where users in different branches could accidentally create duplicate tax names. Previously, Odoo only checked for duplicates within a user's visible branches. Now, Odoo checks all branches to ensure each tax name is unique, avoiding errors and streamlining accounting processes for companies with multiple locations.
Original PR description
**Description of the issue/feature this PR addresses:** In companies with many branches, a user could create a tax name that already exists in another branch. This happened because Odoo only checked for duplicates in the branches the user could see. To reproduce: 1. Create `Branch A` and `Branch B`. 2. A user with access ONLY to `Branch A` creates "Tax 1". 3. A user with access ONLY to `Branch B` creates "Tax 1". 4. Both are saved, creating a duplicate name. This fix adds sudo() to the check. Now, Odoo will check all branches to make sure the name is unique, even if the user cannot see the other branches. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the year field in certain payroll reports was incorrectly displaying a comma. Removing the comma ensures accurate reporting and consistent data presentation for Belgian payroll calculations. This change improves the reliability of financial reports.
Original PR description
. Remove the comma on the year filed on the crossponding reports task-5417861
This update corrects a bug where admin users could inadvertently change the default options for course ratings. The fix ensures that existing ratings and reviews remain unchanged, regardless of edits or deletions made by administrators. This maintains the integrity of course feedback data.
Original PR description
*: website_slides The default values for the admin user should not be changed by editing or deleting others' messages in courses. task-5326273
This update corrects a bug that occurred when a leave request was linked to a refused allocation and the 'Time Off: Cancel invalid leaves' cron job ran. The fix prevents an error caused by accessing an empty data structure, ensuring the system handles refused allocations correctly.
Original PR description
When a leave is linked to a refused allocation and the cron ``Time Off: Cancel invalid leaves`` runs, a traceback occurs. Steps to reproduce the error: - Install ``hr_holidays`` without demo data -…
When a leave is linked to a refused allocation and
the cron ``Time Off: Cancel invalid leaves`` runs, a traceback occurs.
Steps to reproduce the error:
- Install ``hr_holidays`` without demo data
- Create a new Time Off Type > Time Off Requests, Approval: No Validation >
Allow Negative Cap: True > Maximum Excess Amount: 2
- Create an Accrual Plan using default values
- Create a New Allocation
- Allocation Type: Accrual Allocation
- Set the Time Off Type and Accrual Plan created above
- Allocation: 1 day > Approve
- Create a new Time Off in the near future (in the current month) and select the Time Off Type created above
- Go back to the Allocation > Refuse
- Run the cron ``Time Off: Cancel invalid leaves``
Traceback:
``IndexError: list index out of range``
https://github.com/odoo/odoo/blob/bc5f24195a486112574900015ecbcf0e3ba32145/addons/hr_holidays/models/hr_leave.py#L1535-L1536
Here, ``leave_type_data`` becomes ``defaultdict(<class 'list'>, {})``
because when the allocation is refused and the cron runs,
the ``get_allocation_data`` method returns an empty defaultdict.
As a result, accessing the index leads to the above traceback.
sentry-6874651972
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update ensures that Manufacturing Orders created through the MTO (Make to Order) route correctly link back to the original Sales Order. Previously, the link was missing, hindering reporting and traceability. This fix ensures accurate tracking of products moving through the manufacturing process.
Original PR description
Problem: Manufacturing Orders should contain information about their origin, but during an MTO route, sale_line_id remains unset after the MO is created when the Sales Order is confirmed. Solution: While preparing the values for the MO (`_prepare_mo_vals`), we will assign the `sale_line_id` based on the MO's move, which has the origin sale_line_id during the MTO route. Steps to replicate on Runbot 18: - Product with MTO and Manufacture routes - BoM with at least one component 1. Create a Sales Order for the product and confirm 2. Navigate to the MO via the smart button 3. Check the field sale_line_id with the inspector, note it is False. opw-5257401
This update fixes an issue where newly created channels weren't immediately visible in the Kanban view. The change ensures channel creators receive a notification, making the channel appear instantly without needing a manual refresh. This improves the user experience and streamlines channel creation.
Original PR description
**Description of the issue/feature this PR addresses:** When creating a channel from the Kanban view, the newly created channel was not visible until a manual refresh. **Current behavior before PR:** When a channel is created from the Kanban view, it does not appear immediately. This happens because the channel creator does not receive the bus notification upon channel creation. **Desired behavior after PR is merged:** The channel creator now receives the bus notification, ensuring that the newly created channel is immediately visible in the Kanban view without requiring a manual refresh. Backport of : #228348 task-[4510421](https://www.odoo.com/odoo/project/1519/tasks/4510421) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a potential issue where canceling a payment could inadvertently unlink related accounting movements. This change ensures data integrity by preventing the removal of these movements, maintaining accurate financial records. It's a small but important fix for reliable accounting operations.
This update resolves an issue where users without specific group permissions would encounter errors when pinning or unpinning embedded actions. Previously, this prevented superuser mode operations (like automated tasks) from functioning correctly. Now, the system checks if the environment is in superuser mode, allowing for seamless action management regardless of user group membership.
Original PR description
Prior to this commit, an AccessError would be raised when pinning or unpinning embedded actions if the current user did not belong to the 'documents.group_documents_user' group. This could cause issues during operations running in superuser mode (e.g., automated actions, installation scripts, or sudo() calls) because the check strictly validated the user's groups without considering the environment's superuser flag. This commit adds a check for `self.env.su` to ensure the AccessError is not raised when the environment is in superuser mode. Task-5380727
This update resolves an issue where the Point of Sale tour would fail when selecting products with configuration options. The fix ensures that the tour only selects products without configuration, preventing the popup failure and improving the tour's reliability. This enhancement ensures a smoother experience for users.
Original PR description
In certain cases, the product selected in the tour would be a product that require a configuration (having attribute lines), which would lead opening a popup that is not handled in the tour, leading to a failure. When selecting the product we now make sure that we select a product that does not require any configuration. same fix as this one : https://github.com/odoo/odoo/pull/241098 runbot-234734
This update resolves an issue where importing electronic invoices would fail if a bank account already existed for the same supplier, even on a different company. Now, the system correctly identifies and utilizes pre-existing bank accounts linked to the same supplier partner, streamlining invoice import processes.
Original PR description
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for…
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for that vendor on a child company, the search for a bank account linked to the same company would not find that pre-existing bank account on the parent company. When later trying to create it, the unicity constraint on (sanitized_acc_number, partner_id) would trigger, failing the import. Current behavior before PR: The electronic invoice cannot be imported if the same IBAN account already exists on the partner but on another company than the invoice being created, even though we are going to create the invoice for a partner linked to that other company. Desired behavior after PR is merged: Banks account already linked to the partner are found irrespective of the company, provided the partner (account holder) is the same. This should be correct since the res.partner.bank company_id is a related on res.partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue within the Accounts Coverage Report that was incorrectly flagging duplicate report lines. The fix ensures the report accurately reflects account data without these false positive errors, improving data reliability for financial reporting. This change impacts the accuracy of balance sheet reporting.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732
This update ensures that thumbnails are correctly updated for shared requests, even when accessed publicly. Previously, public users accessing shared requests didn't see updated thumbnails. This change resolves an issue where thumbnail propagation was skipped due to user permissions, ensuring a consistent experience for all users.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511
This update fixes an issue where Time-Off Responsible users couldn't refuse fully accepted leave requests. The fix ensures these users have the necessary permissions to unlink related calendar entries, allowing them to properly manage leave requests as intended. This improves the usability of the HR holiday management process.
Original PR description
****Behavior:**** When a user who is Time off Responsible but not Officer or Admin and is marked as responsible for an employee tries to refuse a fully accepted leave an access error occurs. This…
****Behavior:**** When a user who is Time off Responsible but not Officer or Admin and is marked as responsible for an employee tries to refuse a fully accepted leave an access error occurs. This occurs because approving a leave creates a resource.calendar.leave linked to the hr.leave, and when refusing it, the system will try to unlink it. https://github.com/odoo/odoo/blob/72e8a29dd0edb0ca3d464142ce869f38f96c730a/addons/hr_holidays/models/hr_leave.py#L896-L901 According to access rules of r.calendar.leaves, Time-off Responsibles are not allowed any access for entries of other employees. Approving them doesn't cause an error because the create operation uses sudo(), assuming that the user must have had valid rights to access the function. This is not the case for the unlink. **Solution:** This fix checks wether the user has write access to the related hr.leave record, then uses sudo(). The idea is that if they are allowed to modify the state of the leave, they can refuse the leave, and therefore should be able to go through the following operations. This is in a similar fashion as the behavior for approving the leaves. ****Steps to Reproduce:**** - Create a Leave Type that requires validation from a manager, and assign one to an employee. - Remove any access rights to Time-Off for the user, but leave Time off Responsible checked. - Assign the user as time-off responsible for the employee - Log in as the user and approve the leave - When refusing the leave, you should get an access error. opw-5178783
7 changes
Resolved issues and error corrections
This update prevents a bug where clicking on list view group headers while in edit mode would trigger incorrect 'required field' error messages. The fix ensures that edit mode calls complete before other actions are taken, eliminating data inconsistencies and improving the user experience.
Original PR description
Steps to reproduce: - Have a record where modifying a field triggers another field to be required in the frontend only - Apply a group by on a list view of this record - Edit a record and modify that field - While still in edit mode, click on another group header Before: Clicking on the group header triggers both `onGroupHeaderClicked` and `onGlobalClick` simultaneously, causing `leaveEditMode` to call `save` twice. The `save` mutex prevents duplicate API calls, but the second call then runs `checkValidity` with stale data, raising a false "required field" error. After: While clicking on the group header still triggers both `onGroupHeaderClicked` and `onGlobalClick` simultaneously, each `leaveEditMode` call waits for any ongoing call to complete before executing. No "required field" error is raised. opw-5388825
This update corrects a validation error within Odoo Studio that occurred when users attempted to add help tooltips to fields in the Contacts list view. The issue stemmed from a missing 'help' attribute in the field definition, which Odoo Studio was incorrectly interpreting. This fix ensures proper functionality and compatibility with Odoo Studio customizations.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357
This fix prevents the 'Update Prices' button from appearing on sales orders when a pricelist hasn't been configured. Previously, the button was incorrectly displayed, potentially leading to users manually adjusting prices without using the standard pricelist system. This change ensures a cleaner user experience and enforces the correct pricelist workflow.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request addresses a small error in the French tax reporting (l10n_fr) module. Specifically, a mistake was identified and corrected within a specific tax box (15_2). This ensures accurate tax calculations and reporting for French businesses using Odoo.
Original PR description
During this commit: 869f80b we made a mistake in the box 15_2. no task id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects minor errors in the 2026 balance sheet and profit & loss reports for the Danish localization. These changes involve adjusting formulas and text within the reports, likely due to an oversight during development. This ensures accurate financial reporting for Danish businesses using Odoo Enterprise.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id
This update fixes a potential issue with how Odoo tours mock Clipboard API calls, particularly in headless environments. By delaying cleanup until the action's listener has finished, the system avoids delays and ensures accurate mocking, preventing browser wait states or permission errors. This change was prompted by a new Chrome policy.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode.
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments. By delaying cleanup steps, the system now ensures the API call is fully processed before attempting to clean up, preventing browser waits or permission errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode.