Daily updates from Odoo
Thursday, October 9, 2025
15 changes · master
Resolved issues and error corrections
WhatsApp message read indicators can now be shared consistently across message previews and chat bubbles. This reduces duplicated logic and helps ensure users see the same read-status cues in more places.
Original PR description
Before [this](https://github.com/odoo/odoo/pull/230075), the `showSeenIndicator` was part of the `Message` component, since that is the only place it was used, but with the intended change it will now be used by the `NotificationItems` and `Chatbubble` to show in the message previews. As the `showSeenIndicator` was part of the message component we had to redifine this getter every time we had to use it. This commit moves it from message component to message model so that it can be reused anywhere it is needed. Community PR: https://github.com/odoo/odoo/pull/230075 task-4825814
This fix prevents invoices from failing during tax calculation when no external tax is found for a customer's ZIP code. The system now safely treats missing manual tax details as empty, allowing users to continue computing taxes without interruption.
Original PR description
Currently, an error occurs when computing taxes for an invoice. **Error:** `KeyError: 'manual_tax_amounts'` **Cause:** When a user clicks the `Compute Tax` button, the system calculates the tax for…
Currently, an error occurs when computing taxes for an invoice.
**Error:**
`KeyError: 'manual_tax_amounts'`
**Cause:**
When a user clicks the `Compute Tax` button, the system calculates the tax for that invoice, including the `manual_tax_amount` [1]. However, if no tax is found for a given customer ZIP code, the `tax_values_list` becomes empty [2]. As a result, `manual_tax_amounts` in the base line also becomes empty.
Later, when the system tries to fetch the `manual_tax_amounts` key from extra_tax_data, it raises a KeyError [2], because the key no longer exists.
Additionally, the condition in [3] indicates that there is no guarantee that the `manual_tax_amounts` key will always be present in the base_line.
**FIX:**
This commit ensures that if the manual_tax_amounts key does not exist, an empty dictionary {} is used instead. This prevents the KeyError from occurring during tax computation.
[1]- https://github.com/odoo/enterprise/blob/b17b6b4e5ca3085d831fc763457496b5c5b639c5/account_external_tax/models/account_external_tax_mixin.py#L155-L163
[2]- https://github.com/odoo/enterprise/blob/a51aee8f6e8bce2aa699d3199d6723495464a762/account_external_tax/models/account_external_tax_mixin.py#L88
[3]- https://github.com/odoo/odoo/blob/241c170dbece8c1652db9ca1aa935b2106ede532/addons/account/models/account_tax.py#L1330
sentry-6919182805
Forward-Port-Of: odoo/enterprise#96401This update changes how AI tool functions are called so they are easier to customize and stay aligned with newer Odoo versions. It helps reduce compatibility issues for future overrides without changing the user-facing AI experience.
Original PR description
To ease the override and compatibility with what is done in 19.0, we call the function with kwargs instead of args. Forward-Port-Of: odoo/enterprise#96630 Forward-Port-Of: odoo/enterprise#96528
Gantt group headers now keep the right size so they remain visible and aligned while users scroll. This prevents oversized headers from breaking the sticky behavior, especially on smaller mobile screens.
Original PR description
Gantt group headers could stop being sticky because their width was fixed based on the number and size of columns. Even though they were set to position: sticky, oversized headers could no longer remain aligned when scrolling, as they extended beyond the viewport and were constrained by the document width. This was especially noticeable on mobile, where group headers are often wider than the screen. The fix applies a max-width style to these headers, capping their size to the available space so they remain sticky without overflowing the document. task-4970992 Forward-Port-Of: odoo/enterprise#96612 Forward-Port-Of: odoo/enterprise#96015
The Mexican electronic invoicing module now preserves valid accented characters, including ü, in legal names. This prevents compliant customer or company names from being incorrectly altered and helps avoid issues with SAT invoice validation.
Original PR description
Previous commit (#95207) removed accents for names including character ü which indeed is a recognized character for SAT opw-5125107 Forward-Port-Of: odoo/enterprise#96043
The Indian payroll demo contract now uses Mitchell Admin as the HR Responsible instead of OdooBot. This makes the sample offer signing flow better match a realistic logged-in user scenario for demos and testing.
Original PR description
Currently, OdooBot is set as the HR Responsible in the default contract template demo data. To make the offer signing process more realistic and aligned with the login user, OdooBot is replaced with Mitchell Admin. task-5095841 Forward-Port-Of: odoo/enterprise#95176
Quality checks for products tracked by serial number now correctly remain failed when the check is failed from a receipt. This prevents defective items from being incorrectly marked as passed, improving inventory and quality control accuracy.
Original PR description
Serial number tracked product are marked as pass even when they fail a move_line type of check. ### Steps to reproduce: * Create a product tracked by serial number * For this product create a control…
Serial number tracked product are marked as pass even when they fail a move_line type of check. ### Steps to reproduce: * Create a product tracked by serial number * For this product create a control point: - Control per quantity - Operations : Receipts * Create a receipt for this product * Mark the receipt as Todo * Start the Quality check from the receipt, without using the smart button. * Fail the Quality check * The Quality check still passes ### Issue: When validating a quality check and it fails: https://github.com/odoo/enterprise/blob/d48228127c239e45938551d9bbac734afab8b31a/quality_control/wizard/quality_check_wizard.py#L84-L92 I will not go through the standard process with show_faillure_message where the user can select failed_qty, it directly goes to confirme_fail>_move_to_failure_location: https://github.com/odoo/enterprise/commit/49149580d34ec5583559fa0288356fec6cb2c514#diff-2ffdc2ffc25417076b580b772447514c7e9d8b3e2d2fff2d3100721eb5ccbaf4L455-R457 In our case since failed_qty is still at 0 this new condition transfer the quality check to pass. In the case of serial numbers, the quality check is done one by one, the failed_qty can be retrived from check.move_line_id.quantity opw-5015266 Forward-Port-Of: odoo/enterprise#92966
Payroll payment reports now handle employees who have multiple bank accounts, including accounts assigned a 0% salary split. This prevents report generation from failing and lets payroll teams produce the CSV reliably in split-payment setups.
Original PR description
-When generating a payment report CSV for user with multiple bank accounts that have a salary split of 100%/0%, a traceback occurs. -The logic has been adjusted so that bank account of 0% split percentage can be included in the payment report. Forward-Port-Of: odoo/enterprise#94468
When an employee contract is signed, the selected company car is now reliably recorded in the employee history even if the value was already present on the contract version. Offer summaries also show the selected car and bike names, making compensation details clearer for HR and employees.
Original PR description
As when signing the employee contract, the version related to that contract is already created and we just set the version active, the value of the car does not change, so the tracking is not triggered and it's not added into the chatter. This PR force the car_id and ordered_car_id to be tracked by adding the initial value the employee precommit tracking values, before the version is activated (so before the employee get the new values from the newly active version). Also, this PR adds the selected car and bike names to the offer summary. Task-4962922 Forward-Port-Of: odoo/enterprise#90915
The update moves HR-related scheduling tests into the HR-specific project module so builds no longer fail when the HR app is not installed. This keeps automated checks aligned with installed apps and improves reliability without changing user-facing behavior.
Original PR description
Steps to reproduce: - start test_auto_schedule_flex_resource when hr not installed. => `AttributeError: 'res.users' object has no attribute 'action_create_employee' Source: - action_create_employee comes from hr, but the test is in project_enterprise Fix: - tests related to hr moved to project_enterprise_hr Forward-Port-Of: odoo/enterprise#96365
The Time Off screens now correctly open the group request wizard from list, calendar, and Gantt views. This ensures managers can create group time off requests without the button failing or being ignored.
Original PR description
See https://github.com/odoo/odoo/pull/226574 **Issue** - When clicking header buttons other than approve/refuse in Time Off list view, the actions are not processed correctly. - Added New Group Time Off to calendar and gantt view **Steps to Reproduce** 1. Navigate to Time Off > Management > Time Off or Allocations 2. Switch to List view 3. Click on New Group button 4. Action is not executed properly **Root Cause** Previously, handleViewButtonClick only processed approve/refuse actions and ignored other header button actions. Now, non-leave actions are correctly forwarded to the default handler. Task ID: 5062846 Forward-Port-Of: odoo/enterprise#95153
Closing the AI chat window in Discuss is now covered by a test to ensure it does not cause a crash. This helps keep the messaging experience stable when users dismiss AI-assisted drafting.
Original PR description
https://github.com/odoo/odoo/pull/230609
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058 Forward-Port-Of: odoo/enterprise#94144
The spreadsheet document tests now load the full chart support they need before running. This prevents later tests from failing unpredictably when they rely on specialized chart types such as treemap or geo charts.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#96697
The payroll settings now show the Accounting section for every country, making the Batch account move lines option accessible to all users. SEPA-specific payroll settings remain limited to SEPA countries, so businesses outside SEPA can use the accounting batching option without seeing irrelevant payment settings.
Original PR description
Made the "Accounting" block visible for all countries and placed the Batch account move lines option inside it, instead of inside Payroll SEPA. As a result, Payroll SEPA remains visible only for SEPA countries, while Batch account move lines is now available for all. task-5138344