Thursday, October 2, 2025
37 changes · saas-18.4
Resolved issues and error corrections
The recruitment talent record’s open applications button now shows the same set of related applications as the displayed application count. This prevents users from seeing a mismatch between the number shown and the applications opened, making candidate follow-up more reliable.
Original PR description
`_get_similar_applicants_domain` used in `action_open_applications` did not return the same domain used in `_compute_application_count`. Fixed by complementing the domain within `_get_similar_applicants_domain` used in the action to include applications with the same associated `pool_applicant_id` as the current applicant/talent. Task-5092128
This fix prevents an error from appearing when users edit the refusal email for a job applicant. The unavailable option to save that edited message as a template is hidden in this version, allowing the refusal process to continue smoothly.
Original PR description
Steps to reproduce: - open any applicant in recruitment app - click on refuse button - enable send email toggle key - edit the message - try to save the template Issue: - traceback pop ups and not able to save the template Reason: - The method 'open_template_creation_wizard' is missing, causing the error when trying to save the template. This method was not implemented. Solution: - Remove the 'save the template' feature for this version by adding the context. It require two fields which are not present in the current model, thus avoiding the error. task-4948736
The employee payroll form once again shows the Patrena code field needed for Belgian payroll processing. Related payroll provider codes for UCM and SD Worx were also rearranged so they appear more clearly, two per row, making the form easier to use.
Original PR description
Restored the Patrena code field and arranges the other related codes (UCM & SD Worx) so that they are displayed two per row. task-5052003
Fixes the Belgian payroll working schedule change flow so users are taken back to the employee form with the new version selected after validation. This avoids landing on an outdated version list and makes it easier for HR users to continue their work in the right place.
Original PR description
…dule change The working schedule change wizard was redirecting to a list of version when validating. This was the old behavior with the contract. Instead, redirect to the employee form view with the new version selected. task-5126204
Attendance officers who are not HR officers can now create, edit, and delete attendance records for employees they manage without running into access errors. This helps delegated attendance management work as intended while keeping the permission expansion limited to the necessary attendance flow.
Original PR description
…rs to create attendances Because creating attendance records requires access to the `version_ids` field on the employee and subsequently `hr.version` records, which require `hr.group_hr_user` group on the user. This change runs said flow in sudo mode only if the user has `hr_attendance.group_hr_attendance_officer` or it's implying groups. task-5071058 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now open Time Off from an employee profile without encountering a Missing Record error. This ensures the Time Off page uses the correct employee context, improving reliability for HR self-service workflows.
Original PR description
**Steps to reproduce (without demo data):** - Install hr_holidays - Go to "My Profile" - Open "Time Off" **Issue:** Accessing Time Off from a user profile triggers a `Missing Record` error. **Cause:** The system was passing the user’s active_id to the employee record incorrectly. **Fix:** Now, when the context's active_model is 'hr.employee', the correct active_id is applied. **Commit issue:**https://github.com/odoo/odoo/pull/225839 Forward-Port-Of: odoo/odoo#229497
This fixes the favorite star in spreadsheet dashboards so it immediately shows the correct selected or unselected state after a tap on mobile devices. The change removes confusing visual feedback and makes the mobile experience consistent with the rest of Odoo.
Original PR description
The star icon on mobile would have a strange behaviour. After clicking it, the star would not change between filler/not filled until clicking elsewhere. It turns out that on mobile, after a click the hover rule is applied. And our hover rule would modify the icon to be the opposite of what it should be. This commit changes the CSS to use the same css as `BooleanFavoriteField` to stay consistent with the rest of Odoo. Task: [5092945](https://www.odoo.com/odoo/2328/tasks/5092945) Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227663
The Fleet app’s vehicle kanban view now opens the contracts button correctly. This helps users access vehicle contract information from the dashboard without confusion or extra navigation.
Original PR description
Fix contracts button in vehicle kanban Task-5109335 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228341
Recurring subscription billing now skips subscriptions linked to archived companies. This prevents customers from being invoiced for companies that are no longer active, reducing billing errors and follow-up corrections.
Original PR description
## Issue: When a company with active subscriptions is archived, the recurring invoicing cron still processes these subscriptions. Subscriptions for archived companies must not be invoiced. ## Steps to reproduce: 1. Create a company A. 2. Create a subscription for company A with next invoice date <= today. 3. Archive the company. 4. Run the scheduled action "Sale Subscription: generate recurring invoices and payments". 5. Unarchive the company and check the subscription. It should not have been invoiced. (Adjust the user's Allowed Companies if needed to access it.) backport-of: a93e7ec opw-4904325 Forward-Port-Of: odoo/enterprise#95408
This fix ensures that updating followers across multiple records correctly handles removals without losing pending changes. It prevents inconsistent subscription results when several items are updated at once, improving reliability for Mail-related workflows.
Original PR description
When updating `message_partner_ids` on a batch of records, the previous implementation of the inverse method could lead to incorrect results if the new value implied unsubscription. The `message_unsubscribe()` method, called inside the loop over the records, unlinks `mail.followers`. This `unlink` operation invalidates all the fields cache. As a result, when processing the next record in the batch, its cached fields (the new value of `message_follower_ids`) were erased, causing the logic to fail. This commit fixes the issue by postponing all unsubscription operations. opw-5050023 Forward-Port-Of: odoo/odoo#227499
This fixes the XML field name used for dates in linked invoice data for Italian electronic invoices. The correction helps prevent valid invoices with customer references from being rejected by Italy's SdI validation system.
Original PR description
The name for the date in DatiFattureCollegate (56e08bb091d39a18ea1c8e7699321b953a8823e1) is wrong. It is not DataDocumento but Data as per https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiGenerali/DatiFattureCollegate/Data/18
How to reproduce the issue:
- With l10n_it, create an invoice and fill the customer reference field.
- Generate the xml and validate through https://fex-app.com/servizi/verifica
- The following error related to the date happens: E-invoicing (Italy) La fattura elettronica è stata rifiutata dall'SdI. File non conforme al formato : Invalid content was found starting with element 'DataDocumento'. One of '{Data, NumItem, CodiceCommessaConvenzione, CodiceCUP, CodiceCIG}' is expected. riga: 80 - colonna: 24
opw-5082016
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#229120
Forward-Port-Of: odoo/odoo#227260This update prevents Spanish tax report setup and automated checks from failing when date information is not yet available. The report logic now handles incomplete data safely while keeping the usual validation in place when dates are provided.
Original PR description
The `_get_mod_period_and_year` method assumed that `options['date']` would always be present with `date_from` and `date_to`. However, during the automatic `TestEveryModel.test_computed_fields_without_dependencies`, this method is called on a `new()` record where no options are provided. This resulted in a `KeyError: 'date'`. We now gracefully handle missing or incomplete `options` by returning `(None, None)` instead of raising an exception. This ensures that tests and new records can be created without errors, while preserving the original validation logic when valid options are given. build_error-231511 Forward-Port-Of: odoo/enterprise#94154
This fix ensures UAE invoice PDFs display correctly when invoice lines have no taxes. It prevents column misalignment, making printed invoices clearer and more professional for customers.
Original PR description
**Steps to reproduce:** 1- Install UAE localization (l10n_ae). 2- Create an invoice without adding any taxes in the invoice lines. 3- Print the invoice → column alignment is broken. **Issue:** In UAE…
**Steps to reproduce:** 1- Install UAE localization (l10n_ae). 2- Create an invoice without adding any taxes in the invoice lines. 3- Print the invoice → column alignment is broken. **Issue:** In UAE localization, the invoice report shows misaligned columns when the tax field is empty. **Cause:** Since Odoo 18.4, the core report logic hides the tax column when no taxes are applied. However, l10n_ae does not handle this scenario properly while replacing columns, which results in broken alignment. **Solution:** Added a condition in l10n_ae to correctly handle the case when the tax field is empty, ensuring column alignment is maintained in the invoice report. **Before Fix:** <img width="777" height="326" alt="image" src="https://github.com/user-attachments/assets/1416c03a-9da5-45fe-8ade-2a9037f70812" /> **After Fix:** <img width="767" height="341" alt="image" src="https://github.com/user-attachments/assets/9d418945-45e2-409e-b00e-b4f8272ea013" /> opw-4965240 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where Turkish localization General Ledger CSV exports could be generated blank after a prior report change. The export now correctly includes the expected ledger entries, helping users retrieve accurate accounting data.
Original PR description
## Before this commit: After the refactor of the General Ledger in the referenced commit, `l10n_tr_reports` no longer able to fetch the `aml_ids`. This caused the CSV export of the General Ledger to be generated as blank. Ref commit: https://github.com/odoo/enterprise/commit/235a5160d13296328b79e4092a8b88a733628268 ## After this commit: Ensured that `aml_ids` are properly retrieved, so that the General Ledger CSV export contains the expected data.
Shop Floor now shows by-products in the right manufacturing card context and avoids irrelevant location details. Operators also get clearer quantity information and can create tracked by-product quantities directly, reducing confusion during production recording.
Original PR description
Shop Floor by-products fixes: - show by-products not linked to a workorder only on mo card - do not show locations for by-products - always show quantity done / to consume quantity - clicking (+) on tracked by-products now opens the create quant dialog rather than the quants list view task: 4781451 Forward-Port-Of: odoo/enterprise#91341
Fixes an issue where the background color picker closed unexpectedly when previewing colors for table cells. This makes editing table cell colors smoother and avoids interrupting users while formatting content.
Original PR description
Problem: When applying a background color to a `td`, the color picker dismisses unexpectedly. Cause: After c810b0c17b2f882b0ab5d073ba38464bffb0617e, we rely on the class `o_selected_td` to check if…
Problem: When applying a background color to a `td`, the color picker dismisses unexpectedly. Cause: After c810b0c17b2f882b0ab5d073ba38464bffb0617e, we rely on the class `o_selected_td` to check if we are in a selected `td` to keep the toolbar open. However, in another fix (254efd86cd1ce871807fdc25479ebc5beeb4eab3), we removed that class during the color preview operation. Previewing a color on a `td` triggers a selection change, which runs `shouldBeVisible`. Since `o_selected_td` is not found, the toolbar closes along with the color picker. Solution: Update https://github.com/odoo-dev/odoo/commit/254efd86cd1ce871807fdc25479ebc5beeb4eab3. A better fix is to use `o_selected_td_bg_color_preview` which will undo the `box-shadow` when we preview a color. Steps to reproduce: 1. Add a table. 2. Select a cell. 3. Apply a background color. 4. Select the cell again. 5. Hover a color to preview. → The color picker dismisses once a color is hovered. opw-5066309 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225827
This fix allows users to delete an employee version from the versions list without seeing an incorrect warning that the record no longer exists. It improves reliability for HR teams managing employee history and keeps the employee version workflow from being blocked.
Original PR description
Issue/Current Behavior: It is not possible to delete a version of an employee. Steps to Reproduce: 1. Create an employee. 2. Create a new version of the employee. 3. Click on the smart button of versions and delete a record from the list view. 4. It gives warning that the record doesn't exist or might be deleted. Solution: Fixed the issue by checking that the context version exists or else the empty recordset. task - 5002995 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Uploaded file fields added to Field Service worksheet templates now appear correctly in the customer signing portal. This ensures customers can review all worksheet information before signing reports, reducing confusion and incomplete approvals.
Original PR description
Steps to reproduce: ------- - Install industry_fsm_report module - Open FSM app - Select worksheets from settings in the configuration - Go to worksheet templates in the configuration - Create a worksheet template - Click the design template button. You arrive in the studio - Add file field and close it - Create a new task and select a newly created template in the worksheet template - Click the worksheet button in the control panel - Upload a file and save it - Click on the sign report button - Here file field is not visible Issue: ------- The file field is not visible in the worksheet portal. Cause: ------ The view of the file field is not created for the worksheet portal. Solution: ------- Created the view of the file field to display in the worksheet portal. task-3691529 Forward-Port-Of: odoo/enterprise#95754 Forward-Port-Of: odoo/enterprise#56035
This update prevents subscription invoice sections for combo products from being overwritten with incorrect values. It helps ensure invoices keep the right section information and avoids adding unnecessary section details.
Original PR description
This commit improve fix of PR https://github.com/odoo/enterprise/pull/90989 to avoid overriding right combo section values and avoid setting unnecessary values on the section. opw-5069278 Forward-Port-Of: odoo/enterprise#95831 Forward-Port-Of: odoo/enterprise#94776
When warehouse users split a reserved package in the Barcode app, the new split line now keeps the original source package instead of losing it. This helps ensure partial deliveries and package transfers remain accurate and traceable.
Original PR description
### Before this PR: - Put a package in WH/Stock with quantity 100 - Create delivery for partial quantity for example 50 - Go to app barcode - Try to split the package into two different packages scanning another destination Package - The splitted line will be created with empty package instead of the package already reserved before ### After this PR: Scanning another destination package , the new line created splitting the old one will have the package_id Forward-Port-Of: odoo/enterprise#95779 Forward-Port-Of: odoo/enterprise#81170
This fixes an automated accounting test so the account merge wizard waits for the final action before closing. It helps prevent false test failures and keeps release validation more stable, with no expected change for end users.
Original PR description
The last check of the tour is always true. So it sometimes closes too early. Wait really for the last operation for the last check runbot-error-108440 Forward-Port-Of: odoo/enterprise#95991
This fix avoids rounding too early during inventory value revaluation, which could cause small calculation differences to build up into incorrect negative values. Businesses get more reliable stock valuation figures and fewer accounting inconsistencies during revaluation.
Original PR description
Before this commit, the remaining_value_unit_cost was rounded before any computation. In the case where the numer of layers with remaining value and remaining quantity increase, the rounding error introduced by that rounding quickly explodes, leading to a negative remaining_value during revaluation computation. After this commit, the remaining value is rounded at the end, after the computations and the checks. This ensures that the rounding error remains constant and does not accumulate over the execution of the method. opw-4901966 Forward-Port-Of: odoo/odoo#228767 Forward-Port-Of: odoo/odoo#222690
Fixes several issues that could make Knowledge comments disappear, fail to load when switching locked articles, or crash in code blocks. Users should see comment markers consistently after saving, reloading, and moving between read-only articles.
Original PR description
### Issue 1: Summary: When a user adds a comment inside a baseContainer element, the comment beacons created during the comment insertion can be discarded during the document normalization step. How…
### Issue 1: Summary: When a user adds a comment inside a baseContainer element, the comment beacons created during the comment insertion can be discarded during the document normalization step. How to reproduce: - Open an article in Knowledge. - Select text and change the block style from "Paragraph" to "Normal" using the powerbox. - Add a comment on the selected text using the powerbox. - Write a message in the comment thread. - Save and reload the article. Issue: - The comment beacons disappears from the editor and the user can't see it anymore. Resolution: When the editor is initialized, `div` are not yet categorized as paragraph related elements. The `comments_plugin` logic to identify valid positions for comments beacons should take that into account and allow elements which are candidates to be a paragraph related element. ### Issue 2: Summary: There was an issue where comments were not displayed when switching from a locked article to another (read-only). How to reproduce: - Create two articles and add a comment on each. - Lock both articles (so that they are effectively read-only). - Switch from one article to the other. Issue: - Comments are not displayed to the user. Resolution: When switching between read-only articles, `KnowledgeHtmlViewer` is not fully reloaded and continues using the same `CommentBeaconManager` instance for the newly opened article. As a result, comment beacons are not displayed when switching article. The simplest solution to this issue is to re-instantiate a new `CommentBeaconManager` whenever the HTML value changes to ensure comments are correctly displayed. ### Issue 3: There is an issue in the logic of `computeVerticalDimensions` to display comments. If the `top` value of a thread in the article is `0`, it will be filtered out and not displayed because `top` was used as a boolean value. Instead, it should properly consider `top` as a finite number to display the comment or not. Note: This issue is not easily reproducible because there are few configuration where a comment would have a top value equal to 0. ### Issue 4: There is a crash when inserting a knowledge comment in a `/code` block: In this previous [task], insertion in `pre` elements was filtered to prevent non-phrasing content from being inserted (as it is invalid per the html specification). To prevent a crash, knowledge comments will be disabled in `<pre>` elements, as they rely on `anchor` elements for the comment position in the article body. [task]: 216e9eb task-4984152 Forward-Port-Of: odoo/enterprise#95952 Forward-Port-Of: odoo/enterprise#91408
This update adjusts internal automated tests so they no longer depend on demo or default user settings being present. It helps keep support, timesheet, payroll, and localization checks stable across environments without changing customer-facing features.
Original PR description
The community counter part makes the tests independent from `env['res.users']._default_groups()`. `helpdesk.group_helpdesk_manager` is the only group that is given to `base.default_user_group` in the master data (is that normal?), so we need to give it explicitly in the tests since we don't rely on the default user groups anymore in tests Forward-Port-Of: odoo/enterprise#92410
This fixes missing Swiss payroll menu entries for individual accounts and monthly reporting. Payroll teams can once again access these reports directly, supporting regular payroll review and compliance work.
Original PR description
… menuitems