Wednesday, April 15, 2026
32 changes · master
New functionality added to Odoo
This update adds a new configuration option within the Belgian payroll module to accurately track sick leave taken without requiring a certificate. This change ensures compliance with Belgian regulations and provides more precise reporting on employee absences related to illness.
Original PR description
Adding configuration for the Belgian sick time off without certificate work entry. task-6110080 Forward-Port-Of: odoo/enterprise#113666
Enhancements to existing features
This update streamlines expense reimbursement by integrating it directly into the payslip as a payment option. Previously, a separate reimbursement button was used, which has now been replaced with 'Add to Payslip,' simplifying the process and reducing potential errors. This change improves the accuracy and efficiency of expense tracking.
Original PR description
* 'Add to payslip' is added as a payment_mode instead of having the button for Employee reimbursement. * Posting payslip reimbursment acts as 'Add to payslip' * Prediction of Product is done for batch create of expenes to avoid the glitch effect on expense form view. task-5491410
Resolved issues and error corrections
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, a warning forced users to enable this feature, which wasn't always necessary. Now, users can access all tax returns regardless of the GST e-filing setting.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests…
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Com PR: https://github.com/odoo/odoo/pull/247216 Task-5486586 Forward-Port-Of: odoo/enterprise#113741 Forward-Port-Of: odoo/enterprise#105983
Features or functions removed from Odoo
This pull request removes a function within the Odoo Enterprise module that was identified as unused. This cleanup simplifies the codebase and reduces potential maintenance overhead. The change has a low impact on business operations.
Original PR description
This function is not used anywhere.
Code cleanup and technical improvements
This update simplifies the longpolling service, making it easier for the development team to maintain and update. This change improves the overall stability and reliability of the IoT integration, reducing potential downtime. The update was driven by a need for better maintainability.
Original PR description
We simplify the longpolling service to make it easier to maintain. see odoo/odoo#243554
This update adds a new feature to group sign requests by the email addresses of the signers. This allows for better organization and management of sign requests, particularly when multiple people are signing the same document. The change utilizes a new model to track unique signer email combinations.
Original PR description
Added a new "Group By" option in the sign request view to group documents by signer email combinations. Since request_item_ids are stored in a One2many relation, direct grouping is not possible. To enable this, a new model (`signer.group`) was introduced to represent unique sets of signer emails. Each sign request is linked to a corresponding signer group based on a normalized and hashed list of signer emails. task-4978668
This update allows users to directly link to specific sheets within the enterprise spreadsheet application. When a link is shared, it will always open the intended sheet, and the sheet will automatically restore correctly when the page is refreshed. This enhances usability and sharing capabilities.
Original PR description
Add support for `sheet_id` in the router to reflect the active sheet. On initialization, read `sheet_id` from the router and activate the corresponding sheet if it exists. Fallback to the first sheet when the parameter is missing or invalid. Update the router when the active sheet changes, while avoiding unnecessary updates when the sheet remains unchanged. This allows sharing links to a specific sheet and ensures the correct sheet is restored on page refresh. Task: [6068613](https://www.odoo.com/odoo/project/2328/tasks/6068613)
This update moves the RDO field from the individual partner record to the company record in the Odoo system. This change optimizes database performance by reducing unnecessary data storage and aligns the field's usage with its intended purpose – exporting company-level data. It's a minor improvement that enhances database efficiency.
Original PR description
[IMP] l10n_ph_reports: move RDO field from partner to company This commit moves the field `l10n_ph_rdo` from model `res.partner` to `res.company` As the field is only ever used for export with the company datas, this will avoid to overload the db with a column poorly used task-6071014
This update resolves a test failure related to currency discrepancies in DIAN move detection. The system now ensures that all test moves use the same currency, correcting a previous configuration that caused the test to fail. This ensures accurate duplicate move detection for Colombian tax reporting.
Original PR description
Following [PR](https://github.com/odoo/odoo/pull/248421), duplicate move detection now also checks the currency of both moves. Consequently, the `test_validate_duplicate_cufe` test case is failing because the moves in the test use different currencies. This commit ensures both moves use the same currency to fix the test. task-5916255
This update resolves an issue where overridden group names within the accounting module weren't being correctly translated into Odoo's internationalization files (POT). By adding specific XMLIDs to the `account_accountant` module, the system now accurately exports these group names for consistent translation across all Odoo languages. This ensures accurate translations for users in different regions.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently. Forward-Port-Of: odoo/enterprise#113470 Forward-Port-Of: odoo/enterprise#112898
This update fixes a discrepancy in the Board of Accountancy (BOA) generation tests for the Philippine version of Odoo. The tests were failing due to a recent change in the Philippine Chart of Accounts (COA). The commit updated the test assertions to accurately reflect the new account codes and names, ensuring the reports generate correctly.
Original PR description
The expected account codes and names in the BOA (Board of Accountancy) generation tests were failing due to a recent update in the Philippine Chart of Accounts (COA). This commit updates the hardcoded CSV test assertions to reflect the new account codes and names so the tests pass successfully. Key account mapping updates in the tests: * 110000 Accounts Receivable -> 103010 Accounts Receivable - Trade * 110201 Input VAT 12% -> 106010 Input VAT 12% * 200000 Accounts Payable -> 201010 Accounts Payable - Trade * 200300 Output VAT 12% -> 206010 Output VAT 12% * 430400 Sales/Revenues -> 401010 Sales/Revenues * 620000 Admin Expense -> 603090 Miscellaneous Expenses Task-5916666 CE PR: https://github.com/odoo/odoo/pull/254973
This update fixes an issue where vendor bills created in the Documents module incorrectly defaulted to the company's currency instead of the vendor's. Now, when a vendor is selected in the Documents module, the bill automatically uses the vendor's currency, ensuring accurate financial reporting. This improves the reliability of vendor billing transactions.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074 Forward-Port-Of: odoo/enterprise#100846 Forward-Port-Of: odoo/enterprise#78380
A recent change to the Hong Kong Payroll module's employee view caused an installation error. This fix removes a dependency on a now-unnecessary field, restoring the module's ability to install correctly. It also addresses a related issue with data labeling within the payroll process.
Original PR description
See https://github.com/odoo/odoo/commit/3259a7fae4ca4ee98f7e02da5109c43cd9e77f69 This commit changed the employee view and removed the departure date, which was used in the inherited view in the Hong Kong Payroll. This causes the module to no longer be installable, requiring this fix. Also fixes another issue from the same task, which made the l10n_hk_leaving_hk in `hr.employee.departure` to end up at the wrong place and without label. task-6119117
This update fixes an issue where 'All Day' appointments were incorrectly displayed with inflated durations (e.g., 1 day 7 hours). The change ensures that 'All Day' slots now accurately show the duration in days, aligning with how these appointments are intended to be represented. This improves the clarity and accuracy of booking information.
Original PR description
Enabling the "All Day" option on a slot (e.g. 14 Feb, 10:00–17:00) shifts the `end_datetime` by +1 day internally, turning the slot into a longer duration (e.g. 31 hours). Currently, the duration is computed by adding the delta between start and end while assuming the end falls at midnight, which incorrectly increases the effective duration. This caused the booking details page to display an inflated duration for all-day slots (e.g. 1 day 7 hours). Since all-day slots semantically represent calendar days rather than hour spans, the displayed duration is now computed using the date span between start and end. In short, when `allday` is enabled, duration is shown strictly in days. Normal slots continue to display duration in hours. Task-5386301
A recent update caused a technical error when checking sign requests, preventing users from accessing the sign functionality. This fix ensures that type checks are performed correctly before comparisons, resolving the error and restoring normal sign request processing. This change improves the reliability of the sign process.
Original PR description
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.…
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.
Traceback:
```py
File "/home/odoo/src/odoo/saas-19.2/odoo/addons/base/models/ir_http.py", line 415, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/saas-19.2/odoo/http/routing_map.py", line 207, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/enterprise/saas-19.2/sign/controllers/main.py", line 708, in get_sign_request_items
if not sign_request.exists() or not consteq(sign_item.access_token, token) or not sign_item.exists() or not sign_item.signer_email:
TypeError: unsupported operand types(s) or combination of types: 'bool' and 'str'
```
Solution:
We first perform the existence check and then compare the types.
[commit]: https://github.com/odoo/enterprise/pull/111786/changes/f40082f4e6f50dccbfa639edbef08428868cb31d
sentry-7376866293
Forward-Port-Of: odoo/enterprise#112659This update resolves an issue where clicking the 'Details' button during the signing process caused an error. The fix ensures the button is hidden when the system is in signing mode, preventing the error and improving the user experience. This change ensures a smoother signing workflow for internal users.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Create sign request for internal user. - Open document. - Start Signing and click on 'Details' button in contoll panel. Issue: - Clicking this button during signing causes a traceback error. Cause - The button is defined in `sign.SignRequestControlPanel` and is always rendered. In signing mode, the template is reused via XML inheritance (sign.SignSignableRequestControlPanel), but the corresponding JS component (SignableRequestControlPanel) does not implement the openFormView method. As a result, clicking the button leads to a runtime error. Solution - Control the visibility of the "Details" button using a getter. The getter returns true in SignRequestControlPanel (normal mode) and false in SignableRequestControlPanel (signing mode), ensuring the button is hidden when the required method is not available. task-6074593 Forward-Port-Of: odoo/enterprise#112299
This update eliminates a brief, distracting flash of a confirmation button on user messages in the Odoo Enterprise app. The fix ensures the button only appears on genuine agent confirmation messages, improving the user experience and reducing visual noise. This was a minor cosmetic issue.
Original PR description
#### Issue The optimistic user message briefly becomes newestMessage without a subtype, so the “Let’s do it!” button flashes for a few milliseconds on the user’s own message before it gets posted. That looks distracting. #### Fix Guarding on subtype_id in both the message action and isActive logic to make sure the button only appears on real tool-confirmation messages. task-id-6060262
This update fixes a recurring error that occurred when refreshing the Payslips list within the payroll module. The issue stemmed from a system signal causing components to be destroyed prematurely, leading to crashes. The fix prevents components from making calls when destroyed, ensuring a stable and reliable Payslips experience.
Original PR description
Bug: Payroll > Payslips refresh couple of times -> error (componenet is destroyed) Cause: A signal from the controller to re-render before mounting the first one, creates another component and calls for the destruction of the first, yet the first component can make calls and cause a crash. Fix: Prevent the component from making calls if it's destroyed. Task#6067771
This update corrects a bug in the web_studio report editor that was causing unwanted spacing to appear in generated reports. The fix prevents automatic insertions between layout sections, ensuring reports print correctly. This improves the overall quality and consistency of reports created within web_studio.
Original PR description
… sections Before this commit, the html_editor automatically put placeholders between hearder, article and footer nodes (identified with classes) This is caused by odoo/odoo@edf7f7bb0c62978640c181eccb4934855d5d872d. This caused issues because at print time those cracks are not printed because of base/ir_actions_report.py:def _prepare_html (which separates header, footer, and articles to pass them to wkhtmltopdf) After this commit, those placeholders are not present in those cracks. opw-6048955 Forward-Port-Of: odoo/enterprise#113800 Forward-Port-Of: odoo/enterprise#112458
This update resolves a test failure related to inter-company stock transfers. The test required access to specific lot IDs, which were only available when using the Odoo demo database. This fix ensures the test runs correctly in a standard, non-demo environment.
Original PR description
*: sale_purchase_stock_inter_company_rules ### Steps to reproduce: - Create a DB without demo data - Install stock_dropshipping, sale_purchase_stock_inter_company_rules - Run the test `test_08_dropship_inter_company_vendor_to_customer` ### Issue: The test `test_08_dropship_inter_company_vendor_to_customer` fails here: https://github.com/odoo/enterprise/blob/fd3c9d894d8821ed1d1a110cdffb5e16fb54590a/sale_purchase_stock_inter_company_rules/tests/test_inter_company_po_to_so.py#L497-L501 since the `lot_ids` are only visible for users with the `stock.group_production_lot` group: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/views/stock_picking_views.xml#L310-L318 And this group is only implied with demo data: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/data/stock_demo.xml#L190-L193 opw-6085811 Forward-Port-Of: odoo/enterprise#113120
This update resolves a visual issue where text in the benefit configuration section would split and misalign with checkboxes when viewed on different screen sizes. The fix ensures all text remains on a single line, improving the user experience and preventing layout problems. This change improves the clarity and usability of the benefit setup process.
Original PR description
Step to reproduce: play with the width of the window, at some point text splits and item are unaligned. Cause: with some window width, the text is splitted on 2 lines, which makes it unaligned with the checkbox. Solution: force text on same line using style="white-space: nowrap". Task: 6069017 Forward-Port-Of: odoo/enterprise#113570 Forward-Port-Of: odoo/enterprise#113386
This update resolves a visual issue where non-internal users were seeing a 'No IM status available' icon in the WhatsApp channel. The fix ensures the icon only appears when status information is actually available. Additionally, a new category has been added to the channel member list for users without status updates.
Original PR description
Since [1], non-internal users don't receive the IM status of other users. This leads to the "No IM status available" icon to be shown to non-internal users. This commit fixes the issue by only showing the icon when the value is available. This commit also adds a category in the channel member list for users missing status information. [1] https://github.com/odoo/odoo/pull/251938
This update simplifies the way vendor bills are viewed and managed within Odoo Enterprise. It reverts a previous change that disrupted the bill form and list views, restoring the original functionality. This ensures users can easily access and work with vendor bill information.
Original PR description
This reverts commit 509ca37eef3a6dc9d148f0a11f350d41704eb02f.
This update reverts a recent change that incorrectly relied on document sequence editability for predictive name suggestions in the accounting module. The system now correctly uses the established `quick_edit_mode` logic, ensuring accurate and reliable name suggestions for users. This resolves a potential issue impacting the usability of the accounting features.
Original PR description
In https://github.com/odoo/enterprise/commit/4a61583b77835a648279bff492173469f2329a46 the condition in `_onchange_name_predictive` was updated to use `document_sequence_editable` instead of `quick_edit_mode`. However, the predictive logic is based on `quick_edit_mode`, not sequence editability. So this commit reverts that change.
This update corrects a display issue in the batch payment reports. Previously, the report would show default 'demo' values (like 'ABC Holder Name') when an account holder name wasn't specified. Now, the report correctly leaves these fields blank when no account holder information is provided, ensuring accurate reporting.
Original PR description
**Steps to reproduce:** - Install the `account_batch_payment` module. - Navigate to Invoicing > Customers > Payments. - Create a new payment with `Payment Type: Send` and select a customer without…
**Steps to reproduce:**
- Install the `account_batch_payment` module.
- Navigate to Invoicing > Customers > Payments.
- Create a new payment with `Payment Type: Send` and
select a customer without setting an `Account Holder Name`.
- Create a batch payment including this payment.
- From the gear icon, click `Print Batch Payment`.
**Observation:**
In the generated report:
- `Account Holder Name` shows `ABC Holder Name`.
- `Memo` shows `Demo Ref`.
**Root Cause:**
At [1], the default demo values ("ABC Holder Name", "Demo Ref") are rendered
when the fields are empty, instead of being left blank.
**Fix:**
This commit ensures that the `Account Holder Name` and `Memo` are `blank`
in the printed Batch Payment report when their values are not set.
[1]:
https://github.com/odoo/enterprise/blob/327d4478128f33fb2e0c477533bd4983178abf17/account_batch_payment/report/account_batch_payment_report_templates.xml#L36-L38
opw-6092595
Forward-Port-Of: odoo/enterprise#113891
Forward-Port-Of: odoo/enterprise#113515This update resolves a technical issue that prevented users from generating sale commission reports when filtering by the current period. The fix corrects a formatting error in the report's data processing, ensuring accurate reporting and preventing a system error. This improves the reliability of sales performance analysis.
Original PR description
Before this commit, the following traceback could occurs when filtering the current period in achievements.
File "/home/arj/PycharmProjects/worktree/saas-19.1/enterprise/sale_commission/report/achievement_report.py", line 79, in _search
date_to_list = date_to_domain and [datetime.strptime(d[2], '%Y-%m-%d') for d in date_to_domain if len(d) == 3 and d[2]]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 333, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data 'today' does not match format '%Y-%m-%d'
Forward-Port-Of: odoo/enterprise#112981This update corrects a bug where the payroll warning date incorrectly jumped to the next month when the system date was set before the closing day. The fix ensures the warning remains in the current month until the closing day has passed, preventing confusion and ensuring accurate payroll calculations. A related documentation error was also addressed.
Original PR description
steps to reproduce: - install `hr_payroll` - set closing day as "5th of next month" (via schedule warning) - set system date as <5 of the month - notice that the warning date jumped to next month description: - it should stay in the current month until closing day has passed cause: - there was no check for if the closing day has passed while in the next month scenario fix: - jump to next month only if today has passed closing date. (also fixed a wrong docstring) [task#6084911](https://www.odoo.com/odoo/project/1251/tasks/6084911) Forward-Port-Of: odoo/enterprise#112597
This update corrects a display issue in predefined filters within Odoo Enterprise, replacing the "Invalid Datetime" error with the correct smart date options. This improves the user experience when editing filters for tasks and messages, ensuring accurate date range selections. A related change also updates date range logic for certain filters, such as excluding today's date in some cases.
Original PR description
In many predefined custom filters (eg. `Project > All tasks > Search Bar > Closed On > Last 30 days`), when editing the filter (eg. click on the label), the editor opens on "Invalid Datetime". This…
In many predefined custom filters (eg. `Project > All tasks > Search Bar > Closed On > Last 30 days`), when editing the filter (eg. click on the label), the editor opens on "Invalid Datetime". This PR makes the predefined filters that match an existing smart date land on the smart dates instead of "Invalid Datetime". WHY: The way the date ranges are coded in the python files does not match the expected structure of the smart dates. FIX: By reformatting the domain of the predefined filter the search model is able to interpret that as smart ranges and displays the correct label and dropdown option when editing the filter. NOTE: - The reformatting of the domain sometimes also changes the logic (ie which records that are displayed). Notably in the IM livechat the "Last 7 days", "Last 30 days" ... filters now exclude today. This was asked by the framework PO (CTH) and I double checked with the discuss PO (FHE). - The task also include making a new relative range filter, but was split in 2 so that this part can be merged before the freeze (see odoo/odoo#252484) - We also change the smart date "Last 12 months" to "Last 365 days" as this is clearer from a user perspective and last 365 days was more used in arch filters. (previously when applying last 12 months smart date the range was set to the the 1st of 12 months ago to the 1st of the current month) - I also added some helpers to the test files to make them more readable and shorter. Community PR: odoo/odoo#257914 task#5959944
This update fixes an issue where rental product prices were incorrectly shown as list prices in search results. The change ensures that users see the accurate rental price, improving the shopping experience and preventing pricing discrepancies. This was a result of recent searchbar refactoring.
Original PR description
After the searchbar refactoring in [1], In the search results, rental product prices were incorrectly replaced by their list price. Ensure the correct rental price is displayed instead of the list price. task-6105283
This update corrects inaccurate titles and links within the Phone dashboard. The changes ensure users are directed to the correct information, enhancing the clarity and usability of this key reporting tool. This fix was made to improve the overall user experience.
Original PR description
This commit fixes two titles (and links) in the Phone dashboard. Task: 6120857 Forward-Port-Of: odoo/enterprise#113828
This update removes the 'im_status' field from partner records, which was previously used to track user online/offline presence. This change logically aligns the tracking of user status with the user model itself. It also removes the 'bot' IM status, streamlining data management.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/248168 Upgrade PR: https://github.com/odoo/upgrade/pull/9861 This commit removes the im_status field from python's partner model. The concept of IM status belongs logically to the user model since it's about users's online/offline presence. This commit also removes the "bot" IM status.
This update streamlines a key function within the account reports module, specifically in how it generates SQL queries for analytic coverage. This simplification enhances the speed and efficiency of report generation, leading to faster processing times and a better user experience. The change is a routine optimization.
Original PR description
Simplification of the function 'compute_sql_analytic_coverage' in account_analytic_line in the report module. Forward-Port-Of: odoo/enterprise#113842