Daily updates from Odoo
Tuesday, August 26, 2025
23 changes · master
Enhancements to existing features
The salary contract page was updated to use a newer internal web approach instead of older browser code. This helps keep the HR salary contract experience maintainable and aligned with current platform standards without changing core business workflows.
Original PR description
wip
The OCR document processing flow no longer creates extra database checkpoints while fetching results. This reduces overhead when many documents are processed at once, improving performance with minimal user-facing change.
Original PR description
Very similar to commit 7f7ff8d, see full explanation in that commit message. This savepoint was also initiated in a loop which could cause performances issues when too many of them are active at the same time. This one is much less critical and can be removed without much trouble. It was only allowing to recover from a serialization failure, in the case where a user was concurrently editing a document while it was being updated by the OCR. Forward-Port-Of: odoo/enterprise#93000
Hong Kong payroll will no longer automatically include a 200 HKD internet allowance. This avoids applying an arbitrary allowance that is not considered common practice, helping payroll defaults better match typical business needs.
Original PR description
Removes the default 200 HKD of internet allowance, as it is not a common practice in any way to give it, and the 200 is arbitrary and is also not common practice of any kind. task-5010960
Enterprise payroll and localization reporting tests were updated to follow the new default tax rounding behavior. This helps ensure Odoo's business calculations stay consistent across community and enterprise versions without requiring extra configuration.
Original PR description
**Purpose**: --- - Align enterprise tests with the community change setting 'Round per Tax Group' (round_globally) as the default tax rounding method. **Changes**: --- - Removed explicit round_globally configuration in tests (now default). - Updated “Round per Line” test cases to run under the global rounding setting. - Adjusted expected results to match the new computation behavior. community pr- https://github.com/odoo/odoo/pull/221027 task-4971648
Resolved issues and error corrections
Planning calendar invites can now be exported even when a shift has no employee assigned. The system uses a safe fallback timezone, preventing an error and ensuring managers can still send or download calendar invites.
Original PR description
Currently, an error occurs when a user tries to export a calendar invite (ICS) for a planning shift that has no assigned resource. **Steps to reproduce:** - Install the `planning` module. - Go to `Planning > New`, and click `Publish & Send`. - Enable developer mode and go to `Settings > Technical > Email > Emails`. - Open the latest email record and click `iCal/Outlook`. **Error:** `AttributeError: 'bool' object has no attribute 'upper'` **Root Cause:** At [1], when no employee is assigned to the shift, `slot.employee_id` is `empty`, so `slot.employee_id.tz` is `False`, which leads to an error. This commit ensures a valid timezone is always used by selecting the current user's timezone or 'UTC' when the shift has no assigned employee. [1] https://github.com/odoo/enterprise/blob/13ce65b8ca61f9a825f2876e2727cddfae83f894/planning/controllers/main.py#L355 sentry-6781639319 Forward-Port-Of: odoo/enterprise#92984 Forward-Port-Of: odoo/enterprise#91889
Cancelling selection or numeric filter setup no longer leaves an extra side panel open. This keeps spreadsheet filter configuration cleaner and avoids confusing stacked panels for users.
Original PR description
…numeric filter Steps to reproduce: - Open the global filter side panel - Click on selection filter or numeric filter - Click on cancel => Two side panels are stacked. Commit 51f2d18f5952a63ced1ed8e1b252650cffc50c2a already fix this issue, but selection and numeric filter were forgotten. Task: 5042490
This fixes an issue in Indian GST reports where matching purchase bills by IRN could fail unexpectedly. The required matching information is now always set, helping bill matching complete reliably and avoiding runtime errors.
Original PR description
Before this IR: - When a purchase document was matched using the IRN number, the variable `matching_keys` was not defined. - This led to an `UnboundLocalError` during bill matching. After this PR: - `matching_keys` is now set together with the IRN number. - This ensures `matching_keys` is always available and prevents runtime errors when IRN matches bills. opw-5037128 Forward-Port-Of: odoo/enterprise#93051
The payroll setup now prevents saving group insurance rates that are zero, negative, or 100% and above. This helps avoid incorrect contract payroll data and reduces the chance of downstream payroll calculation issues.
Original PR description
Prevent users from entering invalid percentages in the `l10n_be_group_insurance_rate` field by adding a `constraint` that warns the user if the input is less than or equal to 0 or greater than or equal to 100. task-4982158
When invoice OCR finds several contacts with the same VAT number, it now chooses the contact with the strongest customer or supplier relationship instead of an arbitrary match. This helps invoices link to the correct partner when companies have multiple addresses or related contact records.
Original PR description
It's possible that multiple partners are sharing the same VAT number, for example, when multiple addresses are set on it (each address will be a child `res.partner` with the same VAT number). Previously, when the OCR matched such partners from their VAT number, it would select one "at random" (based on the default sort of `res.partner`). Now, it will match the one with the highest supplier/customer rank. opw-[4954057](https://www.odoo.com/odoo/49/tasks/4954057) Forward-Port-Of: odoo/enterprise#92398
Swiss payroll declarations now include contact person details only when all required contact fields are filled in. This helps prevent incomplete information from being sent during ELM transmissions, reducing submission errors and follow-up work.
Original PR description
Contact person information should only be transmitted if all 3 fields are filled Forward-Port-Of: odoo/enterprise#93084
This update makes the AI live chat handling more reliable by separating how the system finds different types of AI chat channels. It also cleans up internal access to AI chat actions, reducing the chance of incorrect chat matching while keeping the user experience unchanged.
Original PR description
- In bc4929a0, controller methods were added to call 'post_error_message' , 'close_ai_chat' and 'generate_response' and all orm.call usages that referenced these methods were turned into rpc calls.…
- In bc4929a0, controller methods were added to call 'post_error_message' , 'close_ai_chat' and 'generate_response' and all orm.call usages that referenced these methods were turned into rpc calls. Hence, the visiblity of these methods can be changed to private. Note: 'generate_response' was also renamed because there is already a private '_generate_response' method. - The `_get_or_create_ai_chat` method was changed to receive channel_id parameter to be used for retrieving the ai chat channel if exists. However, this caused a bug because the more than one chat channel could be retrieved by the channel while all the flows that depend on`_get_or_create_ai_chat` expect only one. To fix this, retrieving an ai chat channel was separated into two methods. - `_get_ai_chat_channel` which retrieves channels of type `ai_chat`. All the flows ensure that there will only be one `ai_chat` channel. - `_get_ai_channel_from_id` which receives channel_id parameter and retrieves the ai channels of any type, namely `ai_chat` or `livechat`.
Belgian payroll users now see a clear error when trying to change an employee's working schedule without a contract start date. This prevents an unexpected system crash and guides users to correct the missing employee contract information first.
Original PR description
Prevent the apparition of a traceback when changing the schedule through the wizard Forward-Port-Of: odoo/enterprise#91880
The contract offer screen now hides the signature request button for users who cannot access the related request. This prevents users from clicking a button that would lead to an error, while keeping it visible for authorized users such as signature administrators.
Original PR description
Before this PR, when logged in as a different user from the one responsible for counter-signing the contract, the smart button still showed, and clicking on it caused an error. This PR fixes that, by hiding the smart button when there are no accessible signature requests. Note that sign admins will still be able to see the smart button; users with access to the signature request. Task-4966129 Forward-Port-Of: odoo/enterprise#90819
A missing setting was added to Point of Sale Enterprise tests so they run correctly during automated builds. This helps prevent false build failures and keeps quality checks reliable without changing customer-facing behavior.
Original PR description
steps to reproduce: 1. install pos_enterprise 2. run the test `test_should_not_affect_other_pos_config` or `test_is_header_or_footer_to_false` this commit adds the missing_field `account_tax_return_journal_id` to the test build_error-230301 Forward-Port-Of: odoo/enterprise#90995
The Swiss payroll accounting test setup now gives the test user the needed payroll permissions. This prevents a known automated test failure caused by missing access rights, helping keep payroll-related releases stable.
Original PR description
steps to reproduce: 1. install l10n_ch_hr_payroll_account 2. run test_ema_declaration_2021_11 test added payroll user and manager groups to the test user to avoid missing access rights error build_error-230682
Fixed an issue where opening return links from the dashboard showed the audit-style view instead of the tax return view. This ensures users land on the expected screen and can continue their tax return work without confusion.
Original PR description
When users click on the return links on the dashboard, the audit-style view is opened instead of the tax returns one. task-id: 5016400
The automated accounting walkthrough was adjusted so it opens the correct menu during nightly testing. This helps keep quality checks stable and reduces false build failures for the accounting area.
Original PR description
The nightly build were failing due to the wrong menu being opened, the solution is to use a more generic filter for the Add button, this is not a perfect solution as it will also select add button on other views that we dont want. task-4822215
A small issue in the Documents app was corrected to ensure document-related database queries run as intended. This helps prevent errors in affected document operations and improves reliability without changing the user experience.
Original PR description
odoo/odoo#219105
Code cleanup and technical improvements
The Documents app now checks how long deleted files stay in the trash only when a user actually moves a document there. This avoids an unnecessary background request when opening Documents and reuses the result for repeated deletions, improving responsiveness and reducing resource use.
Original PR description
`get_deletion_delay` is called every time the Documents app is open, even though it's only needed when sending a document to the trash. This adds network latency and uses resources for nothing. With this commit, it's fetched only when needed: when the user sends a document to the trash. It's also cached in memory to avoid repeating the same RPC multiple times if the users deletes multiple documents. The value is very unlikely to change.
This update cleans up parts of the online sales checkout customization code, especially for Chilean and Mexican electronic invoicing flows. It helps prepare the website sales experience for future modernization while keeping current customer-facing behavior essentially unchanged.
Original PR description
task-4919046 Community PR: https://github.com/odoo/odoo/pull/216836
This update simplifies how manufacturing planning schedules are handled behind the scenes. It reduces unnecessary internal processing, helping keep planning data interactions cleaner without changing day-to-day user workflows.
Original PR description
Description ----------- Follow-up on odoo/enterprise@00fd82c15d2fd38634361b7c68b24f724684fb92: - Convert the usage of a context key into a param - Extract the internal implementation of `get_impacted_schedule` to return records instead of ids for internal backend usage and avoiding re-browsing.
This update modernizes an internal part of the employee referral app by using Odoo's standard deprecation approach for an overridden method. It helps keep the module easier to maintain and safer to evolve, with no expected change for everyday users.
Original PR description
https://github.com/odoo/odoo/pull/221244
This update simplifies how cohort and recruitment pivot reports process their filtering data now that only one domain is supported. It reduces legacy complexity in the reporting code, making future maintenance safer while keeping the user-facing reporting experience unchanged.
Original PR description
Since https://github.com/odoo/odoo/pull/186454 and https://github.com/odoo/enterprise/pull/73467, the cohort and pivot views no longer have to handle several domains. Here we finish the job and remove the references to domains, originIndex,...