Daily updates from Odoo
Navigate
Branch
Tuesday, September 9, 2025
63 changes
Security fixes and vulnerability patches
The employee Documents button now finds HR documents reliably, even when document settings were missing or not fully configured after migration. Employee folders are also kept without an individual owner, preventing future employees from gaining unintended access when their record is created during contract signing.
Original PR description
Since migration of https://github.com/odoo/enterprise/pull/80399, some companies cannot retrieve easily their hr documents because their documents hr settings are not activated or not properly…
Since migration of https://github.com/odoo/enterprise/pull/80399, some companies cannot retrieve easily their hr documents because their documents hr settings are not activated or not properly configured. With the new implementation, employee form view smart button redirect to the hr employee folder of the target employee. But if this folder does not exists after the migration or if the documents we not correctly placed in the HR folder before the migration, HR officers cannot retrieve the employees documents. This fix makes the smart button redirect to employee folder if the settings are corrects and activated, but uses the old way to retrieve documents across the whole app if the setting is not active. I both cases, the smart button works as it should. Also, we force having no owner on employee folders to avoid access gain by the applicant themselves when they sign their contract, creating a new employee with the applicant user in the context (making them, by default, owner of the created folder). Task-4869292 Forward-Port-Of: odoo/enterprise#93782
New functionality added to Odoo
Adds a new VoIP provider setting to support PBX systems that require a specific secure web socket transport value. This helps businesses connect Odoo VoIP with a wider range of phone infrastructure with minimal configuration impact.
Original PR description
This PR adds the boolean hack_wss_in_transport for the PBX that needs the contactParams transport "wss"
Enhancements to existing features
A previously inactive automated test for data cleaning merge list behavior has been re-enabled and updated to the current testing framework. This helps ensure the related functionality continues to work correctly and reduces the risk of regressions, with no direct change for end users.
Original PR description
PR [1] merged the data_merge addon, which defined a qunit test and properly declared it in the correct bundle in its manifest, which the data_cleaning addond. Although the test file has been kept, it was no longer declared in the manifest of the new addon, so the test was never run anymore. This commit re-enables it and converts it to hoot. [1] https://github.com/odoo/enterprise/pull/62979
Odoo now supports fiscal categories beyond disallowed expenses, so Belgian fiscal reports can handle deduction rules directly on accounts instead of requiring artificial account splits. This makes fiscal reporting clearer, easier to maintain, and more flexible for cases such as taxis and vehicle-related deductions.
Original PR description
*= l10n_be_fiscal_categories, l10n_be_account_disallowed_expenses_fleet The Fiscal Category system was previously limited to handling Disallowed Expenses in the Belgian fiscal return, where certain…
*= l10n_be_fiscal_categories, l10n_be_account_disallowed_expenses_fleet The Fiscal Category system was previously limited to handling Disallowed Expenses in the Belgian fiscal return, where certain expense types had to be declared separately despite being accounted for normally. This limitation, especially in cases like taxis (25% disallowed rate) or specific vehicle-related deductions, led users to create artificial account categories (e.g., "1205.1 Taxi"), reducing the clarity and maintainability of the fiscal report. This **PR** generalizes Fiscal Categories to support broader fiscal use cases, allowing deduction rates or rules to be defined directly on accounts. It also enhances the Fiscal Report to aggregate and compute all necessary fiscal values more flexibly. In addition, the **PR** renames modules, models, fields, and XML identifiers from the legacy disallowed_expenses structure to fiscal_categories, improving consistency and clarity. Key changes include: Modules: 1. account_disallowed_expenses → account_fiscal_categories 2. account_disallowed_expenses_fleet → account_fiscal_categories_fleet 3. l10n_be_disallowed_expenses → l10n_be_fiscal_categories 4. l10n_be_account_disallowed_expenses → l10n_be_fiscal_categories_fleet Models & Fields: 1. disallowed.expenses.category → account.fiscal.category 2. disallowed.expenses.rate → removed 3. disallowed_expenses_category_id → fiscal_category_id **task**-4848770 Upgrade PR - https://github.com/odoo/upgrade/pull/7825
Project templates are now managed separately from active projects, reducing confusion and making project-related screens and actions cleaner. This improves maintainability across project, field service, helpdesk, sales, documents, forecasting, and timesheet workflows without changing the core business purpose of templates.
Original PR description
_* = document_fsm, document_project, document_project_sale, helpdesk_fsm, helpdesk_fsm_sale, helpdesk_timesheet, industry_fsm, industry_fsm_report, industry_fsm_sale, project_forecast, project_helpdesk, sale_renting, timesheet_grid, sale_timesheet_enterprise Previously, templates were stored in the same `project.project` model with an `is_template` flag. This caused unnecessary complexity in domains, searches, and views, as template records mixed with regular projects. With this change: - Added new model `project.project.template` to store only templates. - Moved related template fields, tasks, and milestones to the new model. - Updated views, menus, and actions to work with the dedicated template model. - Simplified domains by removing `is_template` filters from regular project logic. - Improved maintainability by clearly separating templates from active projects.out relying on `is_template` filters. task-4919975
Customers in Chile and Mexico can now use the main checkout button to submit required invoicing information during online purchases. This makes the checkout flow more consistent and reduces confusion when completing tax-related details.
Original PR description
Use the main website checkout button to submit the forms from CL/MX invoicing info pages. task-4730470
The update adjusts an automated test so it works correctly when the journal field is hidden, such as when only one journal is available. This helps keep the three-way matching feature stable across simpler accounting setups without changing day-to-day user workflows.
Original PR description
- Update the test case to correctly handle situations where the journal_id field is invisible, ensuring compatibility when there are fewer than two journals. Related PR: https://github.com/odoo/odoo/pull/222209 task-4988183
This update lets several Odoo apps save intentionally empty or disabled configuration values instead of ignoring them. It improves reliability when businesses need to clear settings in areas such as accounting reconciliation, point of sale IoT, eBay sales, subscriptions, and electronic signatures.
The IoT app now includes a test button for the Belgian fiscal blackbox module, allowing users to request and view the device status through a notification. This helps businesses quickly confirm whether the fiscal device is responding correctly, reducing troubleshooting time.
Original PR description
This PR adds a "test" button for the fiscal data module in the IoT app. When used it will send a status request to the blackbox and display the result in a notification. It also removes "response_size" supposed to specify how many characters to read in blackbox response which was unused since this PR: https://github.com/odoo/enterprise/pull/87988 task-5055029 Forward-Port-Of: odoo/enterprise#93614
Belgian accounting reports now include a dedicated audit checklist tailored to local compliance needs. Auditors also get more flexibility when reviewing foreign exchange differences, as suggested account filters no longer block access to other accounts.
Original PR description
This **PR** introduces audit checklist specific for Belgian localization by creating a Belgian Audit with the checks. **task**-5015778
The bank reconciliation screen has been refined to make entries easier to read and reduce layout issues across different screen sizes. Visual emphasis, spacing, and hierarchy updates should help users review reconciliation information more comfortably and with fewer overlapping elements.
Original PR description
- Improve reconciled entry design - Fixes layout accross viewports (avoid overlapping elements) - Review font weights and hierarchy - Outline the line only when the chatter is open - Emphasis when statementline opens a popover task-4749379
Before an HR salary offer is generated, the system now verifies that the related contract template has a signature template configured. This helps prevent incomplete offer generation and reduces follow-up corrections during the hiring process.
Original PR description
Pre-offer validations were added to ensure that a signature template is defined on the contract template before generating an offer. task-4427308
The employee form now hides the payslip shortcut when an employee does not have a contract. This keeps the screen cleaner and avoids showing payroll actions that are not relevant for that employee.
Original PR description
The payslip smartbutton on the employee form view was always visible, even when the employee had no contract. task-5067746
UAE payroll calculations now better support contracts based on Attendance and Planning records. This helps produce more accurate payslips for employees whose pay depends on worked time or planned schedules, with added tests to confirm these scenarios.
Original PR description
Updates for the salary rules to accomodate Attendance and Planning-based contracts and test cases for said scenarios opw-[4873312](https://www.odoo.com/odoo/all-tasks/4873312) Forward-Port-Of: odoo/enterprise#93944 Forward-Port-Of: odoo/enterprise#90407
Payroll payrun cards now show action buttons and status colors consistently with the related payslip list view. This reduces confusion for payroll users by making the same payrun information appear the same across views.
Original PR description
This commit changes the visibility conditions of buttons in the payrun kanban view to be consistent with the payslip list view filtered by payruns. Moreover, since the `PayslipListController` is using `PayRunCard` component, which uses `StatusBubble` component that requires information of the payrun model fields, `payslips_with_issues` and `has_error` fields are added to the kanban view to be extracted in `PayslipListController` component and injected to `PayRunCard` as props, which fixes the inconsistent status color. task-5067711
Payroll run pay schedule choices are now limited to the options relevant to the employee localization. Employee lists in pay runs also respect the selected pay schedule, helping payroll teams see only applicable employees and reduce selection errors.
Original PR description
-The pay schedule options in the pay run menu has been adjusted to restrict to the localization's options. -Schedule pay has been included in the list view's domain to show only the related employees. -Domain of employees list view in pay run now include the previously selected schedule pay
This update refines how product catalog sections are handled in Field Service sales and stock workflows. It makes the catalog easier to maintain and should provide a smoother, more consistent experience when organizing products for field service operations.
Original PR description
Follow-up to [previous commit](https://github.com/odoo/enterprise/commit/bbca2c109433c8ee59a43c02ea5d13f1563c95bf) that introduced sections in the catalog. This commit simplifies the code and improves the handling of catalog sections. task-4593041 See also: - https://github.com/odoo/odoo/pull/223910
The Ask AI feature is now easier to access and can refine existing search results instead of repeatedly opening new menus. It also behaves more reliably by only appearing when a suitable AI agent is available and by applying AI-driven interface changes only in the active browser tab.
Original PR description
- Relocated the system prompt to the topic level, enabling any ai.agent to gain natural language capabilities simply by linking to the topic - Enhanced chat continuity through the introduction of the adjust_search tool. Rather than opening a new menu for each query, the ai.agent can now modify the search bar with certain capabilities -- removing existing facets, toggling filters and groupbys, adding new field searches, applying custom domains, and switching view types. Toggling measures for pivot and graph views remains unsupported. - Compressed system prompt TASK-ID: 5024918
Canned responses in live chat are now triggered with a semicolon instead of a colon. This keeps the colon available for a future emoji shortcut and reduces accidental dropdown appearances by only showing suggestions after another character is typed.
Original PR description
- switch the shortcut from : to ; - the dropdown only shows when another character follows the ; shortcut This is a preparation for the emoji shortcut that will be introduced later. By changing the shortcut to ; we can use : as a prefix for emojis. task-4110505 https://github.com/odoo/odoo/pull/186135
Field Service quotation options are now managed directly on each project instead of through a global setting, giving teams more precise control. New Field Service projects also no longer enable recurring tasks by default, aligning them with other optional project features and reducing unnecessary setup complexity.
Original PR description
After this PR, we remove the FSM global setting "Extra Quotations" to only keep it in the project form view. The way we handle the group `industry_fsm.group_fsm_quotation_from_task` is similar to what we do in this PR: https://github.com/odoo/odoo/pull/208005 Also, as it is already the case for "Milestones" and "Task Dependencies" we do not enable the setting "Recurring Tasks" on new FSM projects. We also make some adjustments in recurrence with sale subscription as we removed the global setting. task-4700865
Sales-related enterprise apps now use optional sections instead of the older optional products flow. This simplifies quotation and subscription/rental sales setup by removing outdated optional product logic and aligning related portal, reports, demos, and tests with the new approach.
Original PR description
With the replacement of optional products by optional sections in sale_management, the related logic of optional lines `sale.order.option` and `sale.order.template.option` has to be removed/adapted. This commit removes optional product support across multiple enterprise modules: - Models, views, reports, and portal code relying on `sale.order.option` and `sale.order.template.option`. - Business logic tied to these models. - Test cases related to optional products from various modules. - References in sale_management_renting, sale_subscription, and spreadsheet_sale_management. From now on, optional products are fully replaced by the optional sections. task-4999851 Co-authored-by: Nisarg Patel <nipl@odoo.com> Co-authored-by: Kartik Chavda <kcv@odoo.com>
Live chat agents now have an information side panel with useful context about the current conversation, including linked helpdesk ticket details where available. This helps agents understand customer issues faster and respond more effectively.
Original PR description
Provide context about the conversation to the agent so they can handle it better and quicker. https://github.com/odoo/odoo/pull/214570 task-4771890
Adds configurable overtime rulesets that connect attendance, work entries, planning, and payroll. This helps businesses calculate overtime more consistently and reflect it correctly in payroll processes.
Original PR description
overtimes rules work entry/payroll bridge task-4577691
Outstanding debit and credit hover details for bank journals now show the bank statement line label alongside the date. This makes it easier for users to identify the related bank transaction without opening additional records.
Original PR description
Before this PR: - Hovering over outstanding debits/credits from bank journals only displays the date After this PR: - Hovering over outstanding debits/credits from bank journals now shows both the bank statement line label and date - Format: "Bank statement line label - 01/01/2025" Related PR : https://github.com/odoo/odoo/pull/224165 Task : 5039914
Users can now rename online bank synchronization links directly from the form view. This helps distinguish multiple connections to the same bank, reducing confusion when managing bank feeds.
Original PR description
With some provider, you can have several links to the same bank. This can be confusing for the user. Allowing to edit the sync name from the form view can help the user sort out its links. Not a FIX, but suggestion is from opw-5004182 Forward-Port-Of: odoo/enterprise#93538
Intrastat returns now include a standard reset option, reducing localization-specific setup and making return handling more consistent. French VAT and Intrastat returns are better integrated with electronic submission, including corrected PDF regeneration after reimbursement submissions and more flexible return workflows and deadlines.
Original PR description
Same as EC Sales List and Tax Return, we want a reset button by default for the intrastat return, to avoid having to define it in all localizations. Also took the commits from…
Same as EC Sales List and Tax Return, we want a reset button by default for the intrastat return, to avoid having to define it in all localizations. Also took the commits from https://github.com/odoo/enterprise/pull/88979, as it conflicts with this PR, next to the freeze, and with the same kind of ideas. [IMP] l10n_fr_reports, l10n_fr_intrastat: Account returns integrations Add account return integrations for France: - Vat Return - Intrastat This includes the VAT EDI integrations in account return. Now you can directly submit your vat declarations from an account return. The submit button on account return now opens directly the EDI VAT wizard, so the user can submit automatically from there. Once the submission is properly done, we mark the return as Submitted. Same goes for intrastat. task-4844276 [FIX] l10n_fr_reports: fix tax report pdf inconsistency When you validate a tax return, it will lock the date and generate the pdf for the tax report. In France with the edi, if you have to send a reimbursement declaration, the remaining value of this reimbursement will be carryover for the next period, moving the value from line 27 to line 26. With this change, the pdf of the report will change as well, but we still keep the old pdf in the return attachments, which mean we have 2 pdf with different values for the same tax period. With this commit, we regenerate the pdf once the reimbursement declaration is sent, with the good values. Also, if the user reset the account return, the external value originally created when validating is deleted. task-4844276, task-4932427 [FIX] account_reports: fix return periodicity options Return periodicity options are supposed to be used to define the report period when opening it from account return. But in some cases like Intrastat, if you have multiple localizations with intrastat return type, we won't generate the return periodicity options, as we only do if we have 1 return type. This commit add a new condition on return type we use, checking the country. So if we have one return type for intrastat BE, and one for intrastat FR, we take the good return type based on env company. IMPORTANT: from now on, each new localization return type should define a country on it. no-task [IMP] account_reports: export_file next_action By default, export_file action in account reports return a 'ir.actions.act_window_close' action. This commit adds the 'next_action' params to the export_file function, letting the dev choose a different action to execute after the export is done. no-task [IMP] account_reports: add new action_reset Add a new action_reset function to deal with 2 states (submitted, reviewed) reports. This function comes from l10n_be_reports and will be used mainly for intrastat. no-task [FIX] l10n_lt_reports: missing super() in action_submit override We added a new `action_submit` override here https://github.com/odoo/enterprise/commit/41ff0df22b47ec6eb18e0bc21e7b457cd0c34246, but we forgot to call `super()` at the end of the function. no-task
This update adjusts rental and stock-related behavior so product routes can be optional, giving businesses more flexible product setup options. It also updates related automated checks to ensure inter-company purchasing and barcode subcontracting flows continue to work with the new route configuration.
Original PR description
With this commit
=======================
- Adapt the development to properly handle the Rental route.
For more details, please refer to the related community PR.
Task - [4385221](https://www.odoo.com/odoo/my-tasks/4385221)Studio approval rules can now trigger tailored behavior when rules are created, deleted, archived, or restored. When approval rules apply to invoices, users can no longer mass-confirm invoices, helping ensure required approvals are not bypassed.
Original PR description
This commit introduces a hook on create/delete and archive/unarchive of studio approval rules to be able to refine some business flows. Also, this commit implements the deactivation of the action to mass confirm invoices when there are rules on that model. task-5059159
Resolved issues and error corrections
This fix adds a log warning when automated bank statement reconciliation is configured in a way that ignores the expected time limit. It helps administrators spot a setup that could otherwise make large bank statement imports run longer than expected.
Original PR description
When calling `_cron_try_auto_reconcile_statement_lines` with a limit_time argument but without a `batch_size`, the time limit was silently ignored. With this commit, we display a warning in the logs, because this is probably not the desired behavior. Besides that, when the amount of statement lines become large, it might hang the import of bank statements longer than the expected 3 minutes. Task-id: None Forward-Port-Of: odoo/enterprise#93565
Fixes an issue in Data Cleaning where the discard button in deduplication rules would reload the page without removing the selected record. Users can now reliably discard duplicate candidates after a recent system change altered how related record data is handled.
Original PR description
…efactor. Currently, the discard button is not working correctly when trying to discard a record in the deduplication feature. Steps to replicate: - Go to: Data Cleaning > Configuration >…
…efactor. Currently, the discard button is not working correctly when trying to discard a record in the deduplication feature. Steps to replicate: - Go to: Data Cleaning > Configuration > Deduplication. - Open any Deduplication Rules > Deduplicate > select any record or directly click on the discard button. (Make sure at least one record is available in list view.) - Click `discard` on top left. Issue: `It will load the page but not discard the record.` This is not work because of a recent [refactor](https://github.com/odoo/odoo/pull/205486) where the data of a `many2one` will be an object rather than an array. (task-[3547961](https://www.odoo.com/odoo/project/49/tasks/3547961)) The discard button in the deduplication feature was not working correctly after a recent refactor in Odoo SaaS version 18.4. Previously (in SaaS 18.3), the record.data.group_id many2one field was represented as an array. The discard logic was written to access the group ID as record.data.group_id. After the refactor, the record.data.group_id field is now represented as an object. Thus, record.data.group_id became undefined, which made parseInt() return NaN. Because of this, the application failed to identify the correct group and records to discard, causing the discard action to silently fail and only reload the page without discarding any records. `The issue is also occurring in the runbot.` Summary: This change ensures that the discard button correctly identifies the group and record IDs to discard records. The lines that returns object is [this](https://github.com/odoo/odoo/blob/564348a5172ea98b38c903686c21d007d0e57b48/addons/web/static/src/model/relational_model/utils.js#L517-L523). cause of code : https://github.com/odoo/enterprise/blob/7d020d73762a17386cae4b68c15a5d59a51fb480/data_cleaning/static/src/views/data_merge_list_view.js#L67 reference pr:- https://github.com/odoo/enterprise/pull/90157 **saas~18.4** <img width="1914" height="564" alt="image" src="https://github.com/user-attachments/assets/d8079d6b-abad-4367-b9d5-9055ee4f8cfa" /> **saas~18.3** <img width="1907" height="545" alt="image" src="https://github.com/user-attachments/assets/8add0c64-a6ce-40bd-9df9-ca5de5ab9ac8" /> OPW:- [5043092](https://www.odoo.com/odoo/project/70/tasks/5043092) UPG:- [3116896](https://upgrade.odoo.com/odoo/upgrade.request/3116896) Forward-Port-Of: odoo/enterprise#93606
This fixes an issue where payroll processing could fail when a contract was missing from an employee version. The Contract button now opens the correct employee version, helping payroll users review the right information without unexpected errors.
Original PR description
Problem ---------- The warning message compares the contract_date_start of the version with the date_from of the payslip. So if no contract is defined on the versions, it raises the traceback Solution ---------- Remove this warning message it is useless we only want to know if a contract exists for the version associated with the payslip. Fix the "Contract" Button to open the employee form view with the good version. task-5067543
The payslip screen now guides payroll users through the correct next step by hiding the Confirm button until the payslip has been computed. This reduces confusion and helps prevent users from trying to confirm a payslip before it is ready.
Original PR description
- On a new payslip: the confirm button is invisible, and the compute sheet button is highlighted. - After computation: the confirm button becomes visible and highlighted, while the compute sheet button remains but is secondary. task-5068067
When an employee signs a newer contract, the previous contract is now automatically ended the day before the new one starts. This keeps employee contract records accurate and helps avoid confusion in payroll and HR processes.
Original PR description
When a newer contract for employee is double signed, the older version is closed. However, the 'contract_end_date' for the old version is not automatically updated. The logic has been adjusted to end old contract date the day before the new contract's start date. Forward-Port-Of: odoo/enterprise#93236
The attachment picker used from the message composer now hides shortcut actions that were not relevant in this context. This makes adding Documents files as attachments clearer and avoids confusing options for users.
Original PR description
With the commit (7683daa8a66ee60e689acf61c3d68918df181551) we forgot to adapt the view called by the composer to add attachments from the documents module. We could see the actions used as shortcuts which is not useful here. Task-5071931
The Master Production Schedule edit popup now closes automatically when a user opens a Bill of Materials from it. This prevents a confusing leftover popup and avoids an error when users try to cancel it afterward.
Original PR description
Before this commit: ------------------------- Clicking the BOM field in the edit production schedule pop-up on the MPS page redirected the user to the BOM form view, but the pop-up remained open in…
Before this commit: ------------------------- Clicking the BOM field in the edit production schedule pop-up on the MPS page redirected the user to the BOM form view, but the pop-up remained open in the background. If the user then clicked Cancel on the pop-up, it created a traceback error. Steps to reproduce: ------------------------- 1. Install 'mrp_mps' module. 2. Go to Planning → Master Production Schedule. 3. Click the pencil icon next to a product. 4. In the pop-up, click the BOM value to navigate to the BOM. 5. Notice that the pop-up stays open even after redirection, and closing the pop-up raises a traceback error. Cause of the issue ------------------------- When your onClose arrow function directly executes this.reload(productionScheduleId) without curly braces, it immediately hands over the outcome of that function call to the dialog system. Since this.reload is an asynchronous operation with multiple sequential return values, its immediate outcome may not be a final value. After this commit: ----------------------- The pop-up is automatically closed when navigating to the BOM form view from the BOM field in the Edit Production Schedule popup, ensuring a cleaner and more intuitive user experience. Task Id: 4886331 Forward-Port-Of: odoo/enterprise#90424
This fixes an internal naming mismatch in the VoIP calling feature so it uses the current call session reference consistently. The change helps prevent call handling issues caused by outdated references, with no expected change to normal user workflows.
Original PR description
This commit renames the missing values of `userAgent.session` to be `userAgent.activeSession`. This change was introduced in https://github.com/odoo/enterprise/pull/92315
The Belgian POS certification module now installs without triggering an error. This prevents setup interruptions for businesses enabling Belgian point-of-sale compliance features.
Original PR description
Since this PR (https://github.com/odoo/odoo/pull/215789) there was a traceback on the installation of `pos_blackbox_be` module. task-id: 5073028
Uploading PDFs in the Sign app no longer triggers a confusing error message when debug mode is enabled. This removes unnecessary disruption for users while keeping the upload process working as expected.
Original PR description
Version: - saas-18.5 Steps to reproduce: - Switch to debug mode - Open sign app - Upload any document Before: - The PDF was uploaded successfully, but a traceback appeared in debug mode. - This happened because `referenceDoc` and `activityId` props were set to false (boolean), which is not valid for their types (String and Number). After: - PDFs can be uploaded without any traceback. - Instead of passing false, we now pass undefined, which is valid since the props are optional. Impact: - Users will no longer see confusing tracebacks when uploading PDFs in debug mode.
Changing the template in the Signature Request wizard could fail when the template included fields without a matching signer. This fix prevents the crash so users can continue preparing signature requests smoothly.
Original PR description
version - saas-18.5 Steps to reproduce: 1. install sign module. 2. upload pdf without signature item 3. Open the Signature Request wizard from another app. 4. change the template. 5. traceback occurs. Issue: - In `_compute_only_autofill_readonly`, the code tried to get a user from `role_to_user_map` without checking if it exists. This caused a traceback when a template had items without a matching signer. Solution: - Use `role_to_user_map.get(item.responsible_id.id)` to safely get the user, avoiding the traceback.
This update fixes a compatibility problem that could affect how HR work entries are sorted in newer Python versions. It helps keep work entry processing reliable and prevents errors caused by inconsistent ordering behavior.
Original PR description
Issue with python 3.10 for `sorted` Fixed with a lambda
This fixes an error that could occur when opening or generating the Indian TDS/TCS Excel report after a related data field was renamed. Users can now generate the spreadsheet without encountering a traceback, improving reliability for tax reporting workflows.
Original PR description
With this commit: https://github.com/odoo/odoo/commit/f6d6659f8bf9ab7c7409f584524c7509865a7a45 the `l10n_in_pan` field was removed and replaced with the `l10n_in_pan_entity_id` field, which relates to the `l10n_in.pan.entity` model. However, the fix introduced in that commit wasn’t updated accordingly when the field name changed. With this PR, the field will now be set correctly, and the traceback will no longer occur when generating the TDS/TCS Excel sheet.
A recent change accidentally removed the special layouts used by the payment follow-up report and the Spanish VAT books report. This fix restores those tailored templates so users see the reports in the expected format again.
Original PR description
During a [recent refactoring][1], the follow-up report and Spanish VAT books report lost their custom templates. This commit restores them. [1]: https://github.com/odoo/enterprise/commit/162d2326b2bd4e78aa742ae7bdd125150faf3e08
Fixed an issue that prevented virtual expense cards from being created when the system expected shipping details that virtual cards do not have. This avoids an error during card creation and helps employees or administrators issue virtual cards smoothly.
Original PR description
We were looking for shipping on virtual cards which dont have it this created a traceback.
The website appointment editor now correctly applies the guest invitation setting. This prevents businesses from accidentally enabling or disabling guest attendance when editing appointment types.
Original PR description
Since https://github.com/odoo/enterprise/commit/689a2186fbe3b932b90bef3b64716c8443bad551, The website editor option for allow_guests has an inverted behavior, being toggled when it should not and vice versa. This is only due to a small inversion of values when refactoring the website builder code. Inverse the values when the option is on/off to match expected behavior. Task-4930982 Forward-Port-Of: odoo/enterprise#89938
The bank reconciliation screen has been adjusted to fix visual issues introduced by a previous update. These changes improve readability in dark mode, simplify the statement review button styling, and make the mobile layout more compact.
Original PR description
In commit[1] we introduced a fine tune for the reconciliation widget and missed some issues. - Remove darkmode custom values - Review statement button to simplify styling - Remove kanban record spacing on mobile task-5075635 followup of task-4749379 [1]: odoo/enterprise@f9725d7b01cbd1235f022821a6861adb2955e49
The VoIP softphone on mobile now avoids reopening the device keyboard every time a keypad button is pressed. This makes dialing numbers smoother while still letting users open the keyboard manually by tapping the input field when needed.
Original PR description
**Purpose:** When using the softphone keypad on mobile, pressing any key would automatically trigger the native keyboard, creating a frustrating user experience and making it tedious to dial numbers. **Specification:** Adjusted the behavior so that: -The keyboard drawer still appears the first time the VoIP widget is opened. -However, subsequent key presses on the softphone keypad no longer trigger the native keyboard. -If the user wants to bring up the native keyboard (e.g., to enter letters), they can explicitly tap the top input field. **Task**-4964776
Canadian CPA005 payment files now use a unique batch payment name instead of a blank or repeated payment reference. This prevents rejections from banks such as CIBC and RBC when processing batch payments.
Original PR description
**CPA0005 Alphanumeric Originator's Cross Reference No is blank on non-unique** Impacted versions: - 17.2 - 17.3 - 17.4 - 18.0 - 18.1 - 18.2 - 18.3 - 18.4 - master Steps to reproduce: 1. create a new batch payment 2. create cpa005 payment file 3. rejected by CIBC and RBC Current behavior: - Uses payment_reference which is blank or non-unique - Causes bank to reject on non-unique status Expected behavior: - To have every batch payment reference (name of payment) be unique through the batch
Canadian CPA005 payment files now use a unique batch payment reference instead of a blank or duplicated payment reference. This helps prevent banks such as CIBC and RBC from rejecting batch payment files due to non-unique originator cross-reference numbers.
Original PR description
CPA0005 Alphanumeric Originator's Cross Reference No is blank on non-unique Impacted versions: 17.2 17.3 17.4 18.0 18.1 18.2 18.3 18.4 master Steps to reproduce: create a new batch payment create cpa005 payment file rejected by CIBC and RBC Current behavior: Uses payment_reference which is blank or non-unique Causes bank to reject on non-unique status Expected behavior: To have every batch payment reference (name of payment) be unique through the batch
The report editor no longer shows an unnecessary Label option when users insert a one-to-many or many-to-many table. This reduces confusion because table columns now simply use the selected field name as intended.
Original PR description
… X2M table Click on the powerbox item that opens the popover to insert a x2many table. Before this commit, the popover displayed the "Label" of the field (that is, in the case of a scalar or m2o field) In a table this label is irrelevant. After this commit, we hide the "Label" of the popover, the column takes the name of the field. task-5017334
A Hong Kong payroll employee field now follows the same access rules as other payroll information. This prevents non-payroll HR users from seeing payroll-related details and keeps internal payroll checks passing.
Original PR description
Issue: test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view this test case fail. Reason: The field l10n_hk_mpf_manulife_account only assigned to hr.group_hr_user. So according to test case condition, fields under Payroll tab should belong to payroll user. Fix: Updated the group and restricted with (hr_payroll.group_hr_payroll_user) runbot_error: https://runbot.odoo.com/odoo/runbot.build.error/231295
Overdue invoice follow-up emails will no longer be sent again every day for the same invoice once the final reminder level has already been applied. This prevents customers from receiving duplicate reminders and helps keep automated collections communication accurate.
Original PR description
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Configuration / Invoicing / Follow-up Levels" - Create a unique follow-up level: * Remind 1 day after due date * Send Email:…
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Configuration / Invoicing / Follow-up Levels" - Create a unique follow-up level: * Remind 1 day after due date * Send Email: [checked] * Automatic: [checked] - Create an invoice: * Customer: [any] * Invoice Date: [1 month ago] * Due Date: [1 month ago] * Invoice Lines: [any] - Confirm the invoice - Go to "Settings / Technical / Automation / Scheduled Actions" - Open "Account Report Followup; Execute followup" - Run it manually => A reminder is correctly sent to customer (i.e. message on partner record) - Wait for the following day - Run the scheduled action again **Issue:** The same reminder in sent again. The last reminder will be sent every day even if there is no new invoice. **Cause:** When computing the follow-up status for a contact, all the entries that are due are taken into account. The entries that have already been included in a follow-up should be ignored when computing the same follow-up again. **Solution:** A field on a journal item (i.e. followup_line_id) tracks in which follow-up level the item has been included. We can exclude the journal items that has this field set to the next follow-up level. opw-4964103 Forward-Port-Of: odoo/enterprise#94026 Forward-Port-Of: odoo/enterprise#92191
This fix makes employee document subfolder configuration handle comma-separated folder names with extra spaces correctly. It helps prevent unintended folder names or setup issues when HR document folders are created from configured lists.
Original PR description
Task-5071835
Schedule items in the work entries Gantt view can now be interacted with to display their popover details. This makes it easier for HR users to quickly inspect work entry information without leaving the planning view.
Original PR description
Pill interaction is needed to show the popover
This update skips two automated checks when the full accounting setup is not installed. It prevents false test failures in environments where payments are already created with accounting entries, helping keep validation results reliable.
Original PR description
The aim of this commit is skipping 2 newly added tests from this commit [[1]]. These 2 tests are useful when accountant module is installed because payments are, per default, created without entry in this setup. Without this module, payments are created with an entry and then don't need to be checked. runbot-error-231650 runbot-error-231651 [1]: https://github.com/odoo/enterprise/commit/7c36a5f405a0426bf11eca0e5a8a6cf6a416076c
Features or functions removed from Odoo
The VoIP app no longer includes a separate automatic incoming call rejection option. This simplifies call handling because users can rely on the existing Do Not Disturb feature for the same business need.
Original PR description
Removed the unnecessary auto-reject incoming calls functionality, as standard DND is already available. Task - 5003485
The Indian payroll setup has been simplified by removing separate fields for Dearness Allowance and Payroll Statutory Compliance. Dearness Allowance is now covered within basic salary, while statutory compliance details are managed through Organizational Tax Details, reducing duplicate configuration.
Original PR description
Dearness Allowance is now included in the basic salary, so it is no longer required separately. Additionally, 'Payroll Statutory Compliance' has been handled under 'Organizational Tax Details' as part of a configuration change. This update includes: - Removed 'Dearness Allowance' field. - Removed entire 'Payroll Statutory Compliance' field. - Added upgrade script to remove those fields. Upgrade PR - https://github.com/odoo/upgrade/pull/8363 task-4930170
The OCR extraction module was cleaned up by removing an old data model and field that are no longer used after the newer OCR boxes interface was introduced. This reduces internal complexity and helps maintain the system without changing the user-facing workflow.
Original PR description
Because of time constraints (freeze of version 19.0), the clean up of unused models was removed from the main commit (see 935b25fd). This commit removes the `iap.extracted.words` model and its related `extracted_word_ids` field that are no longer used since the introduction of the new OCR boxes interface. task-[5055731](https://www.odoo.com/odoo/project/2068/tasks/5055731)
Code cleanup and technical improvements
The online lead generation service setting was renamed to match the newer HTML editor naming. This is an internal cleanup that keeps CRM business card scanning and recruitment website integration aligned with platform changes, with no expected impact for everyday users.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/225859 Upgrade PR: https://github.com/odoo/upgrade/pull/8400 As references to web_editor are being removed, the config parameter `web_editor.olg_api_endpoint` was renamed to `html_editor.olg_api_endpoint`.
AI-generated website pages now reuse the website text-processing system to identify and replace page sections more consistently. This should make generated page content fit templates more reliably while keeping the change mostly internal to the website AI flow.
Original PR description
## Purpose The new website's abstract model "HTML text processor" is utilized here for extracting new page template's snippets to replace their content using ai agent, and utilizing it again to fill the new content within the template, supporting ai_generated website pages. ---- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) task-[4825509](https://www.odoo.com/odoo/project/19060/tasks/4532108/project.project/19060/tasks/4825509)
This change reverts a previous internal redesign of field service task templates because it added too much complexity. It is intended to preserve the same user experience while making the underlying implementation easier to maintain.
Original PR description
This PR's purpose is to revert the refactor of the task template done in task-4919945. There should be no functional changes due to this PR. The revert is done because the refactor adds too many code lines and is too complex. Task-5072878
This update changes how shape-related editor paths are referenced in the Sign and marketing automation website sale areas. It keeps these features aligned with the newer editor structure, reducing maintenance risk without changing normal user workflows.
Original PR description
*: marketing_automation_website_sale
The online shop code for subscriptions, rentals, stock-aware rentals, and Chilean/Mexican e-invoicing checkout flows was modernized to use Odoo’s newer interaction framework. This is an internal cleanup that should preserve existing customer-facing behavior while making the shop easier to maintain and improve later.
Original PR description
task-4919046 Community PR: https://github.com/odoo/odoo/pull/223917
This update removes leftover dependencies on the old web editing technology as Odoo moves to newer editing tools. It is mainly an internal cleanup that keeps Payroll, Knowledge, and Sign aligned with the platform evolution, with little expected direct impact for end users.
Original PR description
The web_editor module has been superseded by the newer html_editor and html_builder modules and is no longer used by any other module. Untangling web_editor has been a huge team effort, of which this PR is merely the latest part. Thanks to everyone involved with html_editor and html_builder, as this would not have been possible without your help! Community PR: https://github.com/odoo/odoo/pull/225791