Daily updates from Odoo
Thursday, April 30, 2026
31 changes · master
Enhancements to existing features
This update simplifies the asset depreciation views in Odoo, making them easier to use. Redundant information has been removed, and the search functionality has been streamlined to focus on key depreciation settings. A default 'Active' filter has been added for clarity.
Original PR description
Simplify the asset depreciation views by removing redundant information and improving usability. The method column is removed from the assets list since it is already included in the depreciation model name. The depreciation model list is cleaned up to show only the model by default, while filters for method, period, and number of depreciations remain available in the search view. A default Active filter is also added to display only active records. task-6128781 Forward-Port-Of: odoo/enterprise#115665 Forward-Port-Of: odoo/enterprise#114419
This update moves a collection of tests designed to run after the Odoo Enterprise installation. These tests ensure the core functionality is working correctly following the setup process. This improves the stability and reliability of the Enterprise version.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/262056
This update removes outdated 'magic buttons' embedded within standard email templates. Instead, these buttons are now added after the email has been processed, streamlining the user experience and ensuring consistent functionality across all email communications. This change improves the reliability of email actions triggered by standard templates.
Original PR description
Before this commit: There were magic buttons that were part of the body of some standard email templates. After this commit: Remove all magic buttons that are part of the body of All standard email templates and add them after the mail is processed Task-3186268
This update adjusts the popover that appears when setting time off requests in Payroll > Time Offs. Previously, the popover had a fixed width, causing issues with button placement. This change creates a dynamic popover that adapts to its content, ensuring a cleaner and more user-friendly experience.
Original PR description
When going into Payroll > Time Offs > Clicking on a cell > Clicking Set, the popover that appears is just the default MultiCreatePopover, which has a maximum width of 276px. In some cases, many buttons appear besides duration or in the footer, so we want the popover width to be dinamical instead. To do this, we create a new Popover that extends the original. The object is the same, but this way we can override the template and add mw-100 to the class of the body, so that the popover will adjust to its contents. Task: 5990385
This update simplifies the names of payroll structures used in the Belgian localization for Odoo Enterprise. The change reduces the length of these names, improving readability and maintainability within the system. This is an internal improvement that doesn't impact users directly.
Original PR description
Change the payroll structure names for the Belgian locatization to be shorter. task-6159009
This update streamlines the softphone interface by simplifying the pill design and improving clarity. The changes include a visual update to recording and transcription indicators, as well as a removal of the 'On hold' pill. This enhances the user experience and reduces confusion.
Original PR description
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the…
Before this PR, the design of the pills were not consistent and a bit confusing. Instead, the recording pill is replaced by a red recording circle, the transcribing pill is replaced by the "Transcribing..." text and the On hold pill is taken out. In the active state of the Hold and Record/Stop button the text is changed respectively to text-warning and text-danger. Before, the "transcribing" status depended on the recording status to be displayed, now it can be displayed whether or not the call is being recorded. task-5882281 | | Before | After | |--------|--------|--------| | Hold | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 44" src="https://github.com/user-attachments/assets/27f3f08e-40ae-440d-8024-2f16484b8e32" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 17 33" src="https://github.com/user-attachments/assets/4ff3e9ba-a2e4-4d0d-9e3d-eccc32c9e8c8" /> | | Hold + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 33" src="https://github.com/user-attachments/assets/96344c97-d56e-4887-bb16-94518b48faec" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 38 01" src="https://github.com/user-attachments/assets/5246614b-d18e-42ef-b84e-1ed783a700d2" /> | | Hold + Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 25 01" src="https://github.com/user-attachments/assets/cde4cd38-9162-4f36-bd91-faba26d71556" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 31" src="https://github.com/user-attachments/assets/af8fa55a-73cd-452d-924d-735d5ea2ff09" /> | | Hold + Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 38" src="https://github.com/user-attachments/assets/09dd22f6-c865-476e-8b02-1ffc92a0da1a" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 08" src="https://github.com/user-attachments/assets/62d7bc4c-2912-4324-8736-e40627048c49" /> | | Record | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 59" src="https://github.com/user-attachments/assets/dc8672d9-a8ba-484e-a1f1-ce3789aaa688" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 24 27" src="https://github.com/user-attachments/assets/102aea8f-98bf-4898-902f-7981fce37176" /> | | Record + Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-16 at 16 18 50" src="https://github.com/user-attachments/assets/0e24d78a-0a43-4a8e-ab85-7fb5b059d959" /> | <img width="389" height="689" alt="Screenshot 2026-03-16 at 17 36 05" src="https://github.com/user-attachments/assets/d2f56fdf-ad6b-4aaa-9eeb-39c47407c903" /> | | Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 39 00" src="https://github.com/user-attachments/assets/38ed1208-8b8c-4d34-89f9-e0c756bef49b" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 37 54" src="https://github.com/user-attachments/assets/f0eb6ebd-6a51-49e0-ac74-44ebfed7a23b" /> | | Forced Record + Forced Transcribing | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 47 39" src="https://github.com/user-attachments/assets/57635d0d-60ac-4c2c-81b0-016dde2461a9" /> | <img width="389" height="689" alt="Screenshot 2026-03-17 at 15 44 27" src="https://github.com/user-attachments/assets/59cba9d5-5d4f-4589-a5f0-c9484007c618" /> |
Resolved issues and error corrections
This update addresses minor typographical errors and inconsistencies in the French reporting module (l10n_fr_reports). The changes ensure accurate and professional wording within the reports, improving clarity and user experience. This is a routine maintenance fix.
Original PR description
Fixes typos and ensures wording consistency No task ID Forward-Port-Of: odoo/enterprise#115595
This update resolves an error preventing users from accessing the Spain VAT Books report. The issue stemmed from an outdated reference in a template, which was corrected to ensure proper functionality. This ensures users can accurately generate and review their VAT reports.
Original PR description
**Steps to reproduce:** - Install the `l10n_es_reports` and `accountant` modules. - Switch to an ES Company. - Navigate to Accounting > Reporting > Spain > `VAT Books`. **Error:** `Element '<xpath…
**Steps to reproduce:** - Install the `l10n_es_reports` and `accountant` modules. - Switch to an ES Company. - Navigate to Accounting > Reporting > Spain > `VAT Books`. **Error:** `Element '<xpath expr="//button[@t-if='this.props.line.chatter and !this.ui.isSmall']" position="replace"/>' cannot be located in element tree` **Root Cause:** After commit [1], the condition `this.ui.isSmall` was removed from the template `account_reports.AccountReportLineNameCustomizable` at [2]. However, the inherited template `l10n_es_reports.VatBooksLineName` was not updated accordingly and still references the old condition, which leads to the error. **Fix:** This commit prevents errors and ensures that users can open the `VAT Books` report by applying a fix similar to [2]. [1]: https://github.com/odoo-dev/enterprise/commit/fd0afa474600586e8703ec377f962c8d7d94307a [2]: https://github.com/odoo/enterprise/blob/7362f1c5be7f496bdab660ed8fad37a6dd283616/account_reports/static/src/components/account_report/line_name/line_name.xml#L81 opw-6169697 opw-6170173 Forward-Port-Of: odoo/enterprise#115412
This update resolves visual inconsistencies and usability problems that arose after relocating benefit information within the employee contract section of Odoo Enterprise. The change improves the user experience when managing employee compensation and benefits, ensuring a cleaner and more intuitive interface.
Original PR description
Task: 6141770 Forward-Port-Of: odoo/enterprise#114765
This update resolves an issue where the 'Create a Payslip' button wasn't functioning properly when no payslips were initially present. The fix corrects a technical error in the system's code, ensuring the button now reliably creates a new payslip when needed. This improves the W2 report generation process.
Original PR description
1.Install l10n_us_hr_payroll 2 Navigate to Payroll>Reporting>W2 Report. 3.Open/Create W2 form and try to add payslip by clicking "Add a line". 4."Create a payslip" button appears if their are no valid payslips. 5.Click it, it won't work! Root cause: - `onAdd` bind was missing in the controller - Renderer applied an additional `.bind(...)`, breaking the callback Fix: - Pass a dedicated `createNewPayslip` action from controller - Remove double binding in renderer - Forward callback directly to helper component task-[5928770](https://www.odoo.com/odoo/project/1251/tasks/5928770) Forward-Port-Of: odoo/enterprise#114263 Forward-Port-Of: odoo/enterprise#111735
This update corrects a bug that prevented users from successfully booking appointments with flexible hour slots in version 19.0. The issue stemmed from a rounding error in how appointment URLs were generated, leading to a 404 error. The fix ensures accurate slot durations are used, allowing for seamless appointment booking.
Original PR description
Steps to reproduce: 1. Install `appointment` 2. Create an appointment type with the followings 3. Schedule type flexible and a slot of 20 min. 4. Share this appointment and try to book appointment…
Steps to reproduce: 1. Install `appointment` 2. Create an appointment type with the followings 3. Schedule type flexible and a slot of 20 min. 4. Share this appointment and try to book appointment for 20 min. Issue: - 404 Error occurs after selectiong the slot Cause: - In 19.0, commit https://github.com/odoo/enterprise/commit/9bae0e13e7bf5e0db25a60fc2683bc51eccb4447 started using slot.duration when building the booking URL for flexible slots. However, slot.duration is rounded to 2 decimals, so a 20-minute slot is serialized as 0.33 instead of its exact value. During validation, the end datetime is recomputed from this rounded duration, which no longer matches the original slot boundaries. This mismatch causes the slot to be considered invalid and the controller raises NotFound. Solution: - Compute the slot duration directly from slot_start_dt_tz and slot_end_dt_tz when building the URL, preserving the full precision. opw-5924312 Forward-Port-Of: odoo/enterprise#108870
This update fixes an error in how emission factors are converted within the Odoo Enterprise ESG module. The previous process incorrectly handled unit and currency conversions, leading to inaccurate calculations. This change ensures that emission calculations are now precise and reliable.
Original PR description
Issue: ---------------------------------------- The conversions using Emission factors are done in the wrong way. Steps to reproduce: ---------------------------------------- - Install `esg` module - Create an Emission Factor from ton to kg of 1000 - Create a new Emission using the new factor, set the unit as kg - Notice the conversion is wrong Cause: ---------------------------------------- The two uom are inverted when calling `_compute_quantity()`. Same occured for the currencies. opw-6152413 Forward-Port-Of: odoo/enterprise#115575 Forward-Port-Of: odoo/enterprise#115246
This update resolves an issue where the IoT box pairing dialog could freeze indefinitely. Additionally, it corrects a display problem with language-specific placeholders, ensuring the IoT box is correctly recognized and usable across different languages. This improves the overall user experience for IoT device integration.
Original PR description
This commit fixes two small issues with IoT pairing: 1. When pairing an IoT box, even after the DB has discovered the IoT box and added it as a record, the dialog will keep waiting forever. If you close the dialog manually the IoT box appears as expected. 2. If using a language other than English, the placeholder 'Connecting' name will not be replaced when the IoT finishes pairing. The IoT box can still be used as normal however. Forward-Port-Of: odoo/enterprise#115627
This update resolves an issue where the POS system was loading all employees regardless of configuration. Now, the system only loads employees based on the POS setup, improving performance and reducing unnecessary data loading. This change ensures a smoother and more efficient POS experience.
Original PR description
Before this commit, when some employee was assigned to advanced or minimal employee, all of the employees were loaded in the POS session, because there was no basic employee assigned to the POS config. opw-5898068 Forward-Port-Of: odoo/enterprise#115109
This update ensures that modifying an employee's details in Belgium no longer affects their payroll information in India. Specifically, fields like Basic Salary and Fixed Allowance remain consistent, streamlining payroll processing and reducing the risk of errors. This change improves data accuracy and simplifies management for our Indian operations.
Original PR description
Changing an employee in Belgium should not affect the following fields in Indian payroll: Basic Salary percentage Basic Salary Fixed Allowance Fixed allowance percentage L10N In PF Employee Amount Employer task-6044787
This update removes the payment QR codes displayed on mobile versions of Odoo. Due to technical limitations, implementing a direct link to bank apps was not feasible without additional providers. The QR codes have been hidden on mobile to improve the user experience.
Original PR description
When a payment meets few conditions, we display a qr code to invite the user to scan it with his bank app. But in mobile it doesn't make sens. We would like to implement a link instead, so the user can open his bank app directly from odoo, but it doesn't seems doable for free without any providers. We will hide the qr code on mobile displays for now. task-4563391 Linked:https://github.com/odoo/odoo/pull/255486
This update corrects a bug in the overtime tour within the Odoo Enterprise system. Previously, the tour incorrectly targeted an input field, leading to unintended interactions. This fix ensures the tour accurately directs users through the overtime ruleset flow.
Original PR description
The tour previously matched the input field underneath the popup and interacted with the wrong element, the fix scope the selector to the modal. task-6172067 Forward-Port-Of: odoo/enterprise#115458
This update adds comprehensive tests for the new customer rating functionality introduced in odoo/enterprise#109696. The tests ensure that rating emails are only sent when appropriate (slot completion or report signing) and that the rating process itself functions correctly. This improves the reliability and accuracy of customer feedback collection.
Original PR description
This commit adds tests for the customer ratings flow introduced in odoo/enterprise#109696. Specifically, it checks that the customer rating request email is only sent upon completing the slot, or after signing the customer report. It also tests the rating itself. task-6147846 Forward-Port-Of: odoo/enterprise#114834
This update makes the timesheet assistant view more user-friendly by implementing small adjustments for better clarity. These changes enhance the overall experience for users managing their timesheets within the Odoo Enterprise system. The update focuses on improving usability and streamlining the assistant view.
Original PR description
Improve the assistant view with small adjustments to enhance clarity and user‑friendliness. Forward-Port-Of: odoo/enterprise#115573 Forward-Port-Of: odoo/enterprise#114339
This update resolves a bug where portal users were incorrectly seeing the 'View Timesheets' button, even without the necessary permissions. The fix involved updating how the system determines access to timesheets, ensuring only authorized users can see this option.
Original PR description
**Issue:** The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets. Currently, we have added _sale_order_get_page_view_values in the sale module, which is overridden in sale_timesheet. We are using it here. task-4745519 Forward-Port-Of: odoo/enterprise#115620 Forward-Port-Of: odoo/enterprise#113481
This update resolves a technical issue within the Odoo Enterprise system's point-of-sale (POS) functionality. Specifically, a misconfigured import statement was corrected, ensuring proper operation of the adam_scale driver. This change improves system stability and reliability.
Original PR description
This PR fixes the wrong import in adam_scale_driver.py opw-6173563 Forward-Port-Of: odoo/enterprise#115625
This update corrects a technical issue that prevented payruns from being created correctly in the Hong Kong localization. The fix involved renaming a missing function within the HR payroll module, restoring normal payrun functionality. This ensures accurate payroll processing for Hong Kong users.
Original PR description
In the big commit adding eMPF to the hk localization, a function was miss named and was causing an error when trying to create a payrun. In this commit we fix the naming of the function and everything goes back to working. Task: 5960503
This update fixes an issue where payrun creation incorrectly displayed the current month, including today's date. The change adds a necessary keyword to ensure the payrun period accurately reflects the intended timeframe, improving the accuracy of payroll reporting.
Original PR description
During the step that shows leaves in payrun creation, the period including today's date was always shown (i.e. if month, the current month). This was because of a missing keyword in the context which was making the logic fallback on the default. We add the keyword and everything goes back to working. Task: 5961725
This update resolves a problem where the OCR success banner and 'Reload AI data' button disappeared after an invoice was reset to draft. It also corrects an internal error where an incorrect state was used, ensuring the document previewer boxes interface functions correctly. This improves the user experience when invoices are corrected.
Original PR description
When an invoice sent to the OCR was reset to draft after being posted, few UI problems were occurring: - The OCR success banner would appear, but couldn't be interacted with. It shouldn't appear at all as the results of the OCR were already fetched at this point. - The "Reload AI data" button wasn't showing. - The boxes interface wasn't available on the document previewer. This commit also fixes occurrences of extract state `validation_to_send` used instead of `to_validate` (the state `validation_to_send` never was a valid value for `extract_state`, so not sure where that came from). opw-none
This update corrects a calculation error in the 2033D-2 report for French tax filings. Specifically, the report was incorrectly summing the amounts of dynamic lines, leading to inaccurate totals. This fix ensures the report accurately reflects financial data for compliance purposes.
Original PR description
Fixed an issue where the total aggregation for line I-C in the 2033D-2 report didn't add the amount of dynamic lines. no task id Forward-Port-Of: odoo/enterprise#115434
This pull request removes a temporary workaround implemented to address an issue with insurance reporting in Spain. The change removes a conditional statement and associated TODO note that were introduced as a temporary fix. This improves the stability and accuracy of the Spanish tax reporting module.
Original PR description
Remove the TODO comment and if condition introduced [here](https://github.com/odoo/enterprise/pull/100413#pullrequestreview-3924342281) task-5214023
A bug was causing timesheets to be incorrectly linked to other employees when created through the timesheet systray. This was due to a formatting error in how user IDs were passed during the timesheet creation process. This update corrects the issue, ensuring timesheets are accurately recorded for the intended user.
Original PR description
# Steps to reproduce: - Open a billable project and a task - Open the timesheet systray - Create timesheet # Current behaviour The timesheet is recorded for another employee. # Root cause This happens because the `user_id` passed to the record update was lacking the right `[id, name]` format. As a consequence, the timesheet was created without a user (`False`), thereby linking it to another employee than the current user. task-6169253 Forward-Port-Of: odoo/enterprise#115420
This update corrects a minor issue where the 'delete' option was missing from certain reports related to returns and checks. This was caused by lingering references to the default 'new' state value after a database optimization was implemented. The fix ensures the 'delete' option is consistently available, improving usability.
Original PR description
In odoo/enterprise#103149, the default value for the state of the returns and checks were removed to use False by default to reduce space in the database. However, a few reference were left using the default value which was 'new'. To reproduce (using working files): - Create a working files - Open the menu of the working file in the working files kanban view - The option delete isn't present Forward-Port-Of: odoo/enterprise#115513
This update resolves a problem where the size of the product search bar was incorrectly set, causing issues with a website tour. The change ensures the size attribute is only applied to the product search bar, preventing disruptions to other website search functionalities. This improves the stability and reliability of the website.
Original PR description
__Before commit__ odoo/enterprise@1111381c set the size attribute of the product search bar. However, the view inherits from `website.website_search_box`, which means that all search boxes on the website will have the size attribute set if `website_sale_renting` is installed. The tour `dropdowns_and_header_hide_on_scroll` fails in saas-19.3 because odoo/odoo@9394e17a added a step that depends on the size of the main website search bar, which may vary because of this. __After commit__ Only set the size attribute to the product search bar as intended. runbot-242449 Forward-Port-Of: odoo/enterprise#115433
This update adds a new test case to ensure that public employees can correctly access holiday information within the Gantt view. This fix addresses a previous issue and strengthens the overall reliability of the HR holiday scheduling functionality. It ensures consistent access for all employee types.
Original PR description
Add a test for the issue resolved in https://github.com/odoo/odoo/pull/261937 No related task Forward-Port-Of: odoo/enterprise#115593
This update resolves an issue where exporting VSME reports would fail if the base year was not a standard 4-digit year. The fix adds validation to ensure only valid years are used, preventing errors and ensuring report generation works correctly. This improves data reliability for VSME reporting.
Original PR description
Currently, an error occurs when exporting VSME reports if the base year is not a valid 4-digit year. **Steps to Reproduce:** 1. Install the `esg_csrd` module with demo data. 2. Create new "**VSME Reports**" with `Base Year = 1`. 3. Now, click on "**Print**". **Error:** `ValueError - Invalid isoformat string: '1-01-01'` **Cause:** The base year is directly used to build a date in [1], resulting in `datetime.date(1, 1, 1)`. In [2], this is formatted to **"1-01-01"** and used in a domain search, which raises a ValueError due to an invalid ISO date format. **Fix:** - Adds a **constraint on base year** to ensure only valid years (1000–9999) are allowed for new VSME Report records. - Adds a **helper validation method** to verify base year before performing computations on existing records. sentry-7419431039 Forward-Port-Of: odoo/enterprise#115725 Forward-Port-Of: odoo/enterprise#114453