Daily updates from Odoo
Navigate
Branch
Monday, September 8, 2025
39 changes
25 changes
Enhancements to existing features
Discuss calls now have clearer, more consistent controls, with layout options moved directly into the call view for easier access. Meeting views also gain more flexible panels and expanded actions, making collaboration smoother across chat, live chat, WhatsApp, documents, knowledge, and AI-assisted messaging.
Original PR description
https://github.com/odoo/odoo/pull/223004
Payroll teams can now apply contract index updates more consistently from standard payroll screens. The update also improves the selection flow from list or kanban views and makes the wizard easier to use, reducing manual effort and confusion.
Original PR description
task-4997195
This change improves the performance of Indian GST return reporting. Businesses using these reports should see faster processing when preparing GST-related submissions, reducing wait times during compliance work.
Notifications across the system will now disappear automatically instead of remaining fixed on screen. This keeps the interface cleaner and reduces interruptions for users during everyday work.
Businesses can now define the steps a return should follow and set the filing deadline relative to the tax period. This gives accounting teams more flexibility to match local reporting processes and manage manually created returns more accurately.
Original PR description
We are adding more flexibility for returns especially the one that will be created by the user. They will now be able to specify which workflow of states the return will use as well as the deadline after the tax period. task-5056885
Users’ dark mode choice is now saved with their account instead of only in the browser. This keeps the preferred appearance after logging out and back in, and can carry across devices for a more consistent experience.
Original PR description
Previously, dark mode was accessed via a cookie. This caused the dark mode setting to be lost when a user logged out and logged back in, defaulting to light mode. With this commit, the dark mode preference is now stored in the user session, making it persist across devices. task-4286033
This update adds coverage to ensure documents are correctly copied when a project is duplicated. It also refreshes related guided test steps so project, field service, and helpdesk sales workflows continue to be validated after recent interface changes.
Original PR description
_*:helpdesk_sale_timesheet,industry_fsm_sale,industry_fsm_stock The test case has been added, and some test tour has been fixed. task-4946932
Contract template screens have been updated to better match the payroll information shown on employee records, creating a more consistent experience for HR teams. The change also corrects display issues such as missing currency indicators on salary-related fields, helping users review compensation details more clearly.
Original PR description
Makes the contract templates views similar to how things are displayed in the payroll tab on the employee. Also fixes some issues like missing currency on some fields. Task: 4954431
Users can once again plan an existing item from a single selected Gantt cell and create a new item across the first continuous block of selected cells. This improves scheduling speed and restores workflows that were no longer available in multi-create mode.
Original PR description
In multi create mode, it was no more possible to plan records by clicking on a cell. In the same way, it was no more possible to create a record in several contiguous cells (in a single row). With this PR we restore those features: - plan: if a single cell is selected, a button "Plan" will be available on right of the button "Add" among the multi selection buttons. Click on that button will open the plan dialog - create: if some cells are selected, click on the button "New" (in the control panel) will allow to create a record for the first block of contiguous selected cells (in a row) Task ID: 5067958
Australian payroll can now handle allowances that need special rate and limit calculations. This helps payroll teams apply more accurate allowance rules and supports clearer allowance details on payslips and reporting.
Original PR description
Add special computation for allowances that require rates and limits to be applied. This commit adds a model for adding additional details to allowances. Task ID: 4085719
On-demand quality checks now open in the regular quality check form instead of a separate wizard, with key details such as product, picking or production order, and quality team filled in automatically. This streamlines quality operations, makes the check title editable, and improves visibility of checks that need attention.
Original PR description
**This commit apply the following:** 1. updates the on-demand quality check to use the form view, not the wizard. 2. applies pre-filling the necessary fields in the quality check form, such as the Picking, Production Order, Product and Quality Team. 3. shows quality check Title field and makes it editable in the form view. 4. updates measure_on field to be the same as the quality point. 5. shows quality checks as todo even if they include products that are not in the picking. 6. hides some fields in certain contexts. Upgrade PR: https://github.com/odoo/upgrade/pull/7774 Task-4535415
Financial report annotations are being replaced by pinned chatter messages, so report notes live in the same communication area users already use elsewhere in Odoo. This makes notes more consistent and may eventually allow users to create report annotations from related records by pinning messages, though loading report notes can be slightly slower in some cases.
Original PR description
We are removing the annotations and add them in the chatter instead. We know which messages are annotations based on the pinned_at date, this could also allow user to add annotation directly from the account, move, ... by pinning them (if and when this is possible). task-4900403
Demo call records now use varied creation dates and clearer fictional phone numbers. This makes VoIP AI demonstrations more realistic and helps country detection work consistently during demos or testing.
Original PR description
- Add explicit create_date to avoid having all the calls created at the same time - Remove useless country_id - Pick fictitious phone numbers that will allow the unambiguous computation of the related country Task-5059990
The AI voice transcription component now detects pauses directly in the browser, gives clearer listening feedback, and stops recordings safely when deleted. It also improves summary prompts and adds automated tests, making transcription more reliable and easier to use.
Original PR description
This commit introduces frontend testing for AI components such as the transcription snippet, and the command palette category for the agents.
Adds return deadline tracking and submission wizards for Estonian EC sales, tax, and Intrastat reports. This helps businesses prepare and submit required filings on time, reducing compliance risk and manual follow-up.
Original PR description
- add ec_sales_list return deadline and wizard - add tax_return wizard - add intrastat return deadline and wizard task - 4893904
Fleet users can now create a new vehicle without being forced to enter a registration date or accept today's date by default. Related payroll fleet calculations were updated to handle missing dates, and the Car ATN field now includes clearer guidance.
Original PR description
#### Steps to reproduce Fleet -> New Vehicle (select car) -> Registration Date prefilled + can't save if empty. #### Issue Registration Date field was required and had today's date as default value. #### Fix make field optional, update dependent computations, and add tooltip on dependent field (Car ATN). Changes are on master in both CE and EE. task-5004995
Point of Sale order numbering has been reorganized to make order, refund, self-order, order line, and device identifiers more consistent across POS-related flows. This helps improve traceability and reduces confusion when orders are created from different channels or devices.
Original PR description
*: l10n_br_edi_pos, l10n_se_pos, pos_blackbox_be, pos_enterprise, pos_self_order Sequence management has been reworked. Here is how it now looks: - `order_seq_id`: this sequence is used for all orders in the database. - `order_backend_seq_id`: this sequence is used for all orders that are created from something other than a Point of Sale, for example self-order or a refund from the backend. - `order_line_seq_id`: this sequence is used for all order lines in the database. - `device_seq_id`: this sequence is used to identify all devices that will load the Point of Sale (separated by pos_config). `pos_reference` are now created with this format: `000-0-000000` - First part: Two-digit year - Second part: PoS ID - Third part: incremented sequence, minimum 6 digits (may be more). This sequence is linked to the identity of the first part. taskId: 5004675
Manufacturing setup screens are easier to navigate with clearer operation counts, helpful empty-state guidance, and redesigned cost and time sections. Quality point setup is streamlined from bills of materials and operations, with a new worksheet area for PDF documents while keeping the full quality app experience available.
Original PR description
Some ui enhacements: bill of material - smartbutton with operations & steps counters - no operations content helper inspired by Shop Floor operation - cost & time groups reworked - kanban view - through settings: no content helper quality point - new Worksheet tab for pfd document (with no content helper) - simplified ui when coming from bill of material/operation - (previous ui still available through quality app) task: 5005235
When users add an existing binary file field to a view in Studio, the related filename is now assigned as well. This helps uploaded or attached files display and behave more consistently, reducing confusion when working with documents in customized views.
Original PR description
Add an existing binary field to a view. Before this commit the binary's filename was not set on the binary. After this commit, it is, and togther with https://github.com/odoo/odoo/pull/223781, the field itself is added automatically in the view. task-4991201
The AI website live chat snippet now uses the correct page heading level. This helps avoid duplicate main headings on pages, supporting better SEO and keeping website content structure aligned with guidelines.
Original PR description
Requires: - https://github.com/odoo/odoo/pull/191300 - https://github.com/odoo/design-themes/pull/1043 --------- This PR fixes the `s_ai_livechat` snippet that was using an `<h1>` tag while it should have been a `<h2>` to prevent any SEO issue with two H1 being displayed on the same page. This was also going against our guidelines about heading tag. task-4349019
Resolved issues and error corrections
When users create a new contact directly from a VoIP call, the contact photo now appears immediately instead of showing placeholder text until the call is saved. This makes the call screen clearer and avoids confusion while adding contact details.
Original PR description
Purpose: When creating an inline partner from voip.call, the partner image was not updating properly, forcing alt text to be displayed until voip.call record was saved. Specification: - Created a custom image field widget `voip_contact_image` that overrides the `getUrl` method to handle caching properly by checking if the record is dirty. - Updated the VoIP call views to use the new custom image field. Task-5023035
The AI module will now only install automatically when the required database support is available. This avoids setup problems for Odoo installations on systems that do not have pgvector installed, reducing deployment friction.
Original PR description
Since https://github.com/odoo/enterprise/pull/93271, the ai module is auto_install. This however introduce problems because most computers running odoo doesn't have pgvector installed. In this PR, we're now conditionally auto installing the ai module by introducing this new module with the same dependency as the ai module.
Code cleanup and technical improvements
The Sign module now loads a supporting component only when it is needed, rather than upfront. This internal cleanup can help keep related user guidance and tours lighter without changing day-to-day functionality.
Original PR description
Instead of import hoot-dom in the file, we import queryFirst from odoo.loader.modules so we can lazy load hoot-dom in web_tour.
This update aligns activity handling with the current user-based assignment field instead of an older contact-based reference. It helps keep VoIP activity data consistent with the rest of the mail activity system and reduces future maintenance risk.
Original PR description
community: https://github.com/odoo/odoo/pull/225525 This commit refactors the activity model and component to use the `user_id` field rather than the deprecated `persona` (res.partner). task-4675954
The website generator now relies on the standard website asset bundle instead of an editor-specific bundle. This keeps generated pages aligned with the live website experience and reduces internal coupling to editing tools.
14 changes
Resolved issues and error corrections
This fix prevents an error popup that appeared in debug mode when editors clicked selection field text while translating website pages. It improves the reliability of the website translation workflow without changing visible functionality for regular visitors.
Original PR description
**PROBLEM** In debug mode, props type errors pop up when clicking on a selection field to translate it. **STEP TO REPRODUCE** 1. Create a form with a selection field in a page. 2. Ensure you're in debug mode assets. 3. Go in translate mode, and click on a string of the selection field to translate it. 4. Props type error should pop up. **CAUSE** `node` is actually of type `Object` (its the target of a jquery event), the props validations expect it to be of type `String`. opw-4896491
The point of sale payment screen now correctly disables the Validate button on mobile when no payment method is selected. This helps prevent cashiers from accidentally trying to complete incomplete payments and keeps mobile checkout behavior consistent.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. task-id: 5072759 enterprise PR: https://github.com/odoo/enterprise/pull/94100 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an intermittent automated test failure around marking portal messages as to-do/starred. The change adds a stable marker for whether a message is starred, helping Odoo's testing systems verify the result without relying on hover-only visual cues.
Original PR description
Backport of https://github.com/odoo/odoo/pull/216106 Before this commit, test "test_star_message" was failing frequently on runbot at step to check message was starred have click on "Mark as Todo". This happens because when click on mark as todo, the message is asynchronously starred. However, there's no visual indication other than the message action have yellow filled star icon. This requires hovering the message to see it, but we don't know when we should exactly hover the message to see it. This commit fixes the issue by adding a `data-starred` on the `o-mail-Message` root node of message template that tells whether the message is starred or not. This removes necessity to hover to check whether message is starred. Fixes runbot-227568
This update fixes a failing automated test by ensuring required accounting details are set before the test uses them. It helps keep the manufacturing subcontracting dropshipping workflow validation reliable and prevents false failures in the development pipeline.
Original PR description
this PR fixes the runbot error 230451 introduced by the test of PR https://github.com/odoo/odoo/pull/221009 (a first corrective PR was made here https://github.com/odoo/odoo/pull/224431) fix : populate the accounts of the category before using them
Spanish TicketBAI invoice submissions now shorten overly long sequence names to meet the required 20-character limit. This prevents confusing upload failures when a point of sale has a long name, helping users submit records successfully.
Original PR description
Before this commit, records with sequences over 20 characters will present a cryptic error when uploaded to TicketBAI. Steps to reproduce ----- 1. Create a point of sale with a name >20 characters 2. Validate an order on the POS 3. Go to Point of Sale > Orders > Your order, click "Send to TicketBAI" 4. Invalid Operation ``` 002: Fichero no cumple el esquema XSD. Detalle del error: cvc-maxLength-valid: Value 'ThisisaveryveryveryveryverylongPOSnameTEST' with length = '42' is not facet-valid with respect to maxLength '20' for type 'TextMax20Type'. ``` Issue ----- The schema for SerieFactura specifies a TextMax20Type, but the generated sequence can be over 20 characters. Solution ----- Truncate the sequence to 20 characters. opw-4750372 Forward-Port-Of: odoo/odoo#225436
This fixes an error that blocked users from sending partially paid credit notes through electronic invoicing. Businesses can now complete the credit note sending process without a traceback in affected localization flows.
Original PR description
When User sends the partially paid credit note, A traceback will appear. Steps to reproduce the error: - Install ``l10n_co_dian`` module with demo data and switch to CO Company - Create a Credit note > Confirm > Register a partial payment > Send > Send Traceback: ``ValueError: The following child node is not defined in the template: CreditNote/cac:PrepaidPayment`` https://github.com/odoo/odoo/blob/7136383f47f3f86bc803efaa3837f4879b211b11/addons/account_edi_ubl_cii/tools/ubl_21_credit_note.py#L26 Here, ``cac:PrepaidPayment`` node is missing in the CreditNote. So, It will raise the above traceback when sending the credit note. sentry-6814211355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Date-related fields now correctly apply values provided by the system, even when that value matches the field's original value. This prevents users from seeing an outdated typed value when business logic, such as an onchange rule, re-applies the intended date.
Original PR description
This commit allows date (i.e. date, datetime & daterange) fields to apply a value from the props (e.g. coming from an `onchange`), even if that value is the same as the initial one. Before this commit, it was not possible due to the fact that the date service responsible for the reactivity of the field was updating the input in an incorrect order, causing the field to display the 'input' value, and not the one enforced by the props. Task 4978896 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
Product images in the Point of Sale grid now display without being stretched. This keeps the checkout interface cleaner and makes products easier for staff to recognize visually.
Original PR description
This fix modifies the CSS to use object-fit: contain;. This property scales the image to fit entirely within the container while preserving its aspect ratio. This ensures all product images display correctly, without stretching maintaining a consistent and clean look for the user interface. Steps to reproduce: 1. Install Point of Sale. 2. Open POS session. 3. Notice product images are stretched in the grid. Description of the issue/feature this PR addresses: Current behavior before PR: <img width="1902" height="907" alt="image" src="https://github.com/user-attachments/assets/a2dc2855-c984-4dec-9922-45ff5f1c2ca3" /> Desired behavior after PR is merged: <img width="1910" height="913" alt="image" src="https://github.com/user-attachments/assets/1f13a1bb-ea8e-4de1-8287-06566037a63a" /> opw-5028767 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change corrects how Odoo evaluates access rules when a linked record field is empty. It prevents valid records from being incorrectly blocked during creation or recalculation, improving reliability for company-based access rules.
Original PR description
* STEP TO REPRODUCE: * -Model B , have **m2o** field call **'a'** from Model A, **'a'** field is not required and is a compute store field -Model B have company rule **[('a.company_id', 'in',…
* STEP TO REPRODUCE:
* -Model B , have **m2o** field call **'a'** from Model A, **'a'** field is not required and is a compute store field
-Model B have company rule **[('a.company_id', 'in', company_ids + [False])]**
-After create B record but without **'a'** field or trigger compute of 'a' field that make it become false, we will get access rule error because: **[('a.company_id', 'in', company_ids + [False])]** will transform into **[('a', 'any', [('company_id', 'in', company_ids + [False])])]** , but note that **'a'** field is empty during computation which make the result become wrong because we call filtered_domain again when **'comparator' == any**, the **'self'** in it is the relation value which is 'a' field (empty record so return self)
* SOLUTION: only when all relational value of self have value then we should use any comparator
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-prThis fix ensures that when a vehicle is assigned to a shared contact, Odoo selects the employee from the same company as the vehicle. This prevents the wrong employee from being linked in multi-company setups, improving accuracy in fleet records and assignment logs.
Original PR description
There is a bug when multiple employees from different companies are linked to the same contact. Steps to reproduce: - Create two employees, in two different companies that relate to the same contact (partner) - In one of the two companies, create a vehicle and assign it to the partner created - The field driver_employee_id in the vehicle and assignation log will be assigned to one of the two employees, without taking care of the company of the car To fix this, the domain should also contain the company of the car, and must match the company of the employee. task-4978443 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#221154
This fix ensures the Validate button on the point of sale payment screen is disabled on mobile when no payment method is selected. It helps prevent cashiers from accidentally trying to complete incomplete payments, improving checkout reliability.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. community PR: https://github.com/odoo/odoo/pull/225917 task-id: 5072759
This fix corrects an error in how factoring-related messages are posted and improves handling when Chilean tax authority responses are empty. When a response is invalid, the system now refreshes its authentication token, helping maintain a more reliable connection to SII.
Original PR description
Before the PR: Besides The syntax of message_post was wrong, there are situations where the response from SII is empty. After de PR: Fixed syntax in message_post and clear the token if the response was empty. This improves de connection by getting a new authentication from SII (new token) whenever the response is not a valid one.
This fix prevents subscription payments made through the portal from generating and sending the same EDI-signed invoice twice when automatic invoicing is enabled. Businesses using electronic invoicing localizations should see fewer duplicate documents and cleaner invoice processing.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Use a localization that uses EDI-signed invoices; 2. enable `sale.automatic_invoice` via `ir.config_parameter`; 3. pay for a subscription via the portal. Issue ----- Invoice is generated twice. Cause ----- Commit 7c5fd63729c1 added automatic EDI invoice signing for subscriptions paid via portal. This assumed that the `sale.automatic_invoice` parameter remained unset. If this parameter is set, the invoice is already generated when post-processing a transaction in `sale`. Solution -------- Don't send invoices whose `is_move_sent` field is set to `True`. Also, don't set `from_cron` to `True` on automatic payments, as this is only intended for moves that have `sending_data` filled by `account.move.send.batch.wizard`. opw-4648189
The Pricer point-of-sale integration now prevents users from choosing a sales pricelist on a product variant before that variant has been saved. This avoids an error screen and guides users to save the product first, keeping product setup more reliable.
Original PR description
An error occurs when a user attempts to set the **Pricer Sales Pricelist** on a product variant that has not yet been saved. **Steps to reproduce:** - Install the `pos_pricer` module. - Open the form view of **Product Variants**. - Without saving the record, try to add a **Pricer Sales Pricelist**. - Observe the error. **Error:** `KeyError: False` **Cause:** When the product variant is unsaved, `product._origin` is `False`, leading to a `KeyError` at [1], because `False` is not a valid key in the evaluation of method `_get_product_price()`. [1] - https://github.com/odoo/enterprise/blob/6f96632f23c3955b874a9019ba6a92561dec3172/pos_pricer/models/product_product.py#L139 This commit ensures the `pricer_sale_pricelist_id` field is invisible for unsaved product variant records to avoid inconsistent behavior. It allows users to only set a pricelist after the record has been saved, preventing any invalid computations or errors. Sentry - 6598605111,6696068013