Daily updates from Odoo
Navigate
Branch
Saturday, September 6, 2025
34 changes
32 changes
New functionality added to Odoo
Mexican payroll users can now generate and view the required CFDI XML directly on individual payslips. This supports local payroll compliance and also adds a way to manually adjust ISR tax when payslips span two months, avoiding incorrect negative calculations.
Original PR description
This adds the CFDI xml on individual payslips. Task: 4299196
Enhancements to existing features
Partner-specific instructions in barcode stock operations now scroll with the stock move list instead of staying fixed in the header. This keeps long instructions from taking over the screen and makes it easier for warehouse users to continue working through stock moves.
Original PR description
The partner-specific instructions div can take up too much space if it contains multiple lines, so we move it out of the header into the stock move list, so that we can scroll away from it with the rest of the stock moves. Task ID: [5060030](https://www.odoo.com/odoo/my-tasks/5060030)
Odoo Enterprise now lets backend users keep their preferred light, dark, or device-based appearance across sessions and devices. This improves comfort and consistency, especially for users who rely on system-wide dark mode settings.
Original PR description
*: test_discuss_full_enterprise This commit implements the support for the browser/device/system prefered color scheme in addition to arbitrary light/dark schemes. Also, it persists accross sessions…
*: test_discuss_full_enterprise This commit implements the support for the browser/device/system prefered color scheme in addition to arbitrary light/dark schemes. Also, it persists accross sessions (and devices) the color scheme choosen by the user in a `res.user.settings`. Note that, as for the existing "dark mode", it only applies to the backend. About the browser/device/system scheme support, please note that as the only current way to actually detect the color scheme (light/dark) to apply is via the `prefers-color-scheme` media query, hence run in the browser ; the server as no way to know it by itself [1]. To work around this limitation, the (existing) cookie is used as the link between the client and server. The drawback is that a reload has to be performed when the user has its browser/device/system set to "dark" and connects for the first time. [1]: Chrome implements the HTTP header `Sec-CH-Prefers-Color-Scheme` but no other browser does at this time and the corresponding spec is very much a "work in progress/draft" at the moment... References: - https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme - https://chromestatus.com/feature/5642300464037888 - https://wicg.github.io/user-preference-media-features-headers/#sec-ch-prefers-color-scheme task-4282066 task-4286033 task-4812669
The VoIP Calls and VoIP Providers pages now show helpful guidance when there is no content yet. This makes it easier for users to understand what to do next instead of seeing a blank view.
Original PR description
This commit adds no-content guides to improve usability. Previously, there was no help message shown in the VoIP Call and VoIP Provider views. Task - 5058364
When a helpdesk ticket is converted into a sales lead, the system now assigns the lead to the sales team leader if the ticket's responsible person is not part of that sales team. This reduces the chance of new sales opportunities being left unassigned and overlooked.
Original PR description
The wizard that converts tickets to leads already has a heuristic to assign the new leads to a user if the ticket's responsible user is also a salesperson in the target team, but if they are not, then the lead remains without responsible and could be missed if no automatic assignment rules exist. This commit extends that heuristic: the wizard now automatically assigns the newly created lead to the sales team's leader if it failed to find the ticket's responsible in the team's members. task-4684660
This update reorganizes accounting-related menu entries across several Odoo Enterprise apps and localizations. Users should find reports, configuration items, and accounting tools in more consistent places, reducing time spent searching through menus.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/225344 task-5060337
Indian localization reports now let each bank template decide whether payment CSV exports include a header row, instead of relying on fixed bank-specific rules. The HDFC export format was also aligned with bank requirements, while an unused template model was removed to simplify maintenance.
Original PR description
- Added a boolean field `include_header` to `enet.bank.template` to control whether CSV exports include a header row for batch payments. - Updated the batch payment CSV generation logic to use this new flag instead of hardcoded checks for specific bank templates. - Removed the `enet.template` model along with related fields and access rules to simplify the codebase. This change improves flexibility in CSV export formatting and reduces code complexity. Upgrade PR: https://github.com/odoo/upgrade/pull/8311
Users are now prompted to complete identity verification as soon as they add a bank account in Odoo, rather than waiting until their first payment. Odoo supports this with an email, notification, and scheduled activity so the process is less likely to be missed.
Original PR description
Users currently initiate the KYC flow automatically when making a first payment. This improves the KYC flow by prompting users to complete it as soon as they add a bank account in Odoo. We send them an email, create a notification and schedule an activity to ensure they complete the KYC process. Task ID: 4487895
Odoo now sends message reactions made by users through WhatsApp, so customers can see those reactions in their WhatsApp conversations. This keeps chat interactions more consistent between Odoo and WhatsApp and avoids confusion when reactions previously stayed only inside Odoo.
Original PR description
Add support for sending reaction type messages via the WhatsApp API by introducing the `reaction` message type in the WhatsAppApi. This resolves the issue where reactions made by Odoo users are not reflected in the customer's WhatsApp conversation. API Documentation: https://developers.facebook.com/docs/whatsapp/cloud-api/messages/reaction-messages Task-4828394 Forward-Port-Of: odoo/enterprise#93932 Forward-Port-Of: odoo/enterprise#88520
UrbanPiper integration errors now show the specific message returned by the service instead of a generic technical error. This helps teams identify and resolve setup or API issues faster, such as duplicate store references.
Original PR description
Before this commit: --- - HTTP errors from UrbanPiper API only showed the generic Python exception. - It was difficult to identify the actual cause (e.g., duplicate store ref_id). After this commit: --- - HTTP error handling now extracts the `message` from the API JSON response. - The displayed/logged error clearly reflects the real cause of the failure. task-5026169 Forward-Port-Of: odoo/enterprise#92713
The Italian tax export flow now shows a 'Close' button instead of 'Submit' for monthly LIPE periods that are not quarter-end months. This makes the action clearer for users and helps avoid confusion when closing month-end tax reporting views.
Original PR description
- Dynamically set the `submittedLabel` to 'Close' instead of 'Submit' when the tax period do not correspond to the last month of a quarter (March, June, September, December). task-4825570 Forward-Port-Of: odoo/enterprise#86920
Indian reporting now uses the updated PAN entity identifier instead of the older PAN field. This helps keep tax reports and payroll demo data aligned with the latest partner identification model, improving consistency for GST reconciliation and related reporting.
Original PR description
Community PR - https://github.com/odoo/odoo/pull/214189 Upgrade PR - https://github.com/odoo/upgrade/pull/7865 Task [link](https://www.odoo.com/odoo/project/967/tasks/4137199) task-4137199
Employees can now register more than one bank account and choose how their salary is distributed between them. Payroll supports fixed-amount allocations first, then distributes the remaining salary by percentage, making salary payments more flexible for employees and HR teams.
Original PR description
[IMP] Employees can have multiple bank accounts This PR aims to allow employees to associate with more than one bank account. Salary computation: Bank accounts can be allocated a fixed amount or a percentage. First, Bank accounts with "Fixed" type are processed, the remaining of the salary is distributed onto the "Percentage" bank accounts according to their percentages. Task-4908556
This update keeps checkout-related behavior aligned with recent address selection changes and UPS delivery page adjustments. It helps ensure customers can continue using checkout flows reliably after related website sale updates.
Original PR description
### [IMP] l10n_test_website_sale: adapt tour_new_billing_ec During the redesign of the address selector, the "Add address" button was moved out of `o_portal_address_row`. This commit updates the test accordingly. task-4904868 ### [IMP] website_sale_ups: adapt to changes task-4307725 ---- See also: - https://github.com/odoo/odoo/pull/209545 - https://github.com/odoo/upgrade/pull/8397
The OCR correction interface now lets users apply scanned text boxes to more fields and select multiple boxes at once. This should make entering and correcting bill and bank statement data faster and more flexible, especially when creating multiple statement or invoice lines from scanned documents.
Original PR description
This commit refactors and improves the OCR boxes interface used to fill in the fields of bills and bank statements. It is now available on all fields, instead of only the fields detected by the OCR. The supported field types are: char, text, html, integer, float, monetary, date, datetime and many2one. It is now possible to select multiple boxes at once. The behaviour will vary depending on the situation: - On textual fields, it will concatenate the content of all boxes and set that value. - For numeric and date fields: - on regular fields, it isn't supported as it doesn't make sense. - on x2many fields, it will create one line from each box. - On top of this, if lines were created using the tool, it will search for aligned boxes among the selection to fill in the corresponding line. task-[5055731](https://www.odoo.com/odoo/project/2068/tasks/5055731)
The purchase product catalog now better connects suggested purchase quantities with the kanban product cards. Suggested items are easier to spot, can be filtered interactively, and adding a product uses the recommended quantity when available.
Original PR description
Description of the issue/feature this PR addresses: The new Suggest UX of the purchase product catalog is more visible (part 1) but not linked directly to the kanban view of the catalog. This PR syncs the new UX with the kanban view. Current behavior before PR: No Link between the product catalog Kanban (of the purchase module) and new Suggest UX. Desired behavior after PR is merged: Show the kanban cards with suggested quantities first, with active style and with the suggested quantities. Change the Add button of the Kanban card from adding 1 unit to suggested quantity if any Make the Suggest UX and Kanban card interactive with the filtering. Part 1 - PR: https://github.com/odoo/odoo/pull/215363 Task: [4783508](https://www.odoo.com/odoo/project/966/tasks/4783508) I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
The Master Production Schedule now separates direct and indirect actual demand, making it easier to understand where needs are coming from. It also improves replenishment suggestions by accounting for early replenishment and highlights products where real demand is higher than forecast, helping planners spot risks sooner.
Original PR description
This commit will apply the following improvements on the information display of MPS: - Add an `Actual Indirect Demand` field instead of adding all the actual demand to the same field. It is direct if it's from SO, and indirect if it's from MO/ transfer to subcontracting location. - Handle the early actual replenishment by taking it into calculation when suggesting forecasted replenishment in the future. - Add a filter `Forecast Too Low`to filter out MPS where actual demand is greater than the forecasted demand. - Indicate if the actual demand is greater than the forecasted by coloring it red. Task-4936437
VoIP users can now choose whether to transfer a call immediately or first speak with the colleague receiving the transfer. They can manage both conversations more easily by switching between calls or ending one while keeping the other active, improving customer handoffs and call handling.
Original PR description
This commit introduces several new options to the transfer feature that already exists in VoIP. Those options are: 1. The user can choose between transferring the current call directly to a potential…
This commit introduces several new options to the transfer feature that already exists in VoIP. Those options are: 1. The user can choose between transferring the current call directly to a potential transferee selected or to ask them first (point 2). 2. The user is able to make another call to the potential transferee before making the transfer. 3. The user can switch between the two active calls (the customer and the potential transferee) freely. 4. The user is able to terminate any one of the two calls while having the other one active. Technical changes to achieve the above options include: - Introduced another session `transferSession` along with `mainSession`. Both sessions are handled through their getter/setter. Also, there is an `activeSession` attribute in the user agent that determines the current active session. - Changed several functions in the userAgent service and the call_model.js to handle both sessions smoothly. - Changing the ContactInfo component props to accept a contact and a phoneNumber instead of a call object. - Introducing a TransferConfirmation component that gives the user the options listed above. - Introducing a CallBanner component that shows the other call when having two calls. - filtered the potential transferee contacts so as not to have the current call contact. Task-4866867
Barcode users handling subcontracting can now open the correct manufacturing order details directly from move lines. This streamlines subcontracting checks and removes an older intermediate record display that no longer fits the updated process.
Original PR description
We remove record components and instead make sure the subcontract details button on the move lines links directly to the correct backend MO form view. task-4321311
VoIP call recordings are now saved at a lower audio bitrate to reduce storage use. This should make recording files smaller without noticeably affecting call recording quality, since typical VoIP audio already uses similar quality levels.
Original PR description
This commit changes the bitrate of call recordings to 8 kbps. This change is intended to reduce the file size. A higher bitrate is not useful anyways, since most VoIP proivders use a similarly low bitrate.
Resolved issues and error corrections
This update adjusts internal appointment tests to match a recent change in how editable selections behave. It helps keep automated quality checks reliable, reducing the risk of false test failures during future releases.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/224818 task-4585835
Closing an AI chat before the assistant replies no longer shows an unnecessary error to the user. The system now quietly ignores the failed error-posting step when the chat has already been closed, making the experience smoother and less confusing.
Original PR description
If a user sends a message to an ai agent and then closes the chat channel before receving the response, an error will be shown. Cause of the error : When the ai agent tries to post the response to the chat channel, an error happens because the ai chat channel was deleted when it was closed. This error isn't the error that is shown to the user. This error is actually caught on the client side and then `/ai/post_error_message` controller is called to post that error to the chat channel. The controller method checks the existence of the chat channel and throws a new error because the chat channel cannot be found and this error is shown to the user. Solution: Just do nothing instead of throwing an error if the channel isn't found.
Spreadsheet menus now keep pivot, list, and chart options in the correct order, even when many lists are added. This prevents actions such as reinserting a static pivot from appearing in the wrong place and keeps spreadsheet navigation clearer for users.
Restaurant point-of-sale sessions now correctly load calendar bookings linked to restaurant tables. This helps staff see relevant appointments on the floor plan and reduces missed reservations or scheduling confusion.
Original PR description
Issue: The calendar envents that have a restaurant table ressource are not loaded in the pos if the config is in restaurant mode. Fix: If the config is a restaurant the calendar_event pos domain will return a domain containing the appointment_ressources linked to the config restaurant tables. This commit also fixes the test that checks for the appointment-label on the floor plan. Task-id: 4970986 Forward-Port-Of: odoo/enterprise#93134 Forward-Port-Of: odoo/enterprise#90809
Creating Intrastat tax returns no longer triggers an error caused by date handling in the system context. This helps accounting users complete required Intrastat filings without interruption.
Original PR description
Before this PR: - Creating Intrastat tax returns raised a type error. - The error came from date objects (`forced_date_from` / `forced_date_to`) being stored in the action context. Since date objects are not JSON-serializable, hence the `.create()` in refresh_checks fails. After this PR: - Converted `forced_date_from` and `forced_date_to` into strings before passing them in the context. - Parsed these values back into date objects using `fields.Date.from_string()` when needed in `_try_create_returns_for_fiscal_year` of the `account.return.type` model. - Intrastat tax return are created without errors. Task-5059218
This fix prevents Point of Sale order validation from getting stuck in an endless loading loop. It ensures downloaded POS orders use the correct process to include related order data, improving reliability for affected POS workflows.
Original PR description
*: pos_settle_due, pos_urban_piper The `pos.order` model was missing from pohibitedAutoLoadedModels which was causing infinite loop when validating an order. This commit add this models to the pohibitedAutoLoadedModels variable. Now when downloading an order from the PoS the `read_pos_orders` method should be used, it will returns all related order data. Forward-Port-Of: odoo/enterprise#93532
This update corrects a precision issue in Indian payroll gratuity percentage calculations that caused an automated test to fail. It improves consistency of payroll-related calculations across environments, reducing false failures during validation.
Original PR description
Issue: The test_in_hr_version_percentage_computation test fails due to an Incorrect gratuity percentage value. Cause: The issue arises from the calculation logic not rounding up the percentage correctly and giving a different value in runbot, leading to a mismatch in the expected result. Solution: - Change the l10n_in_gratuity_percentage field to use digits=(16, 4) for better precision, ensuring the correct gratuity percentage is returned. - Change the test case accordingly. build_error-231597
Default PDF filenames for localized invoice and accounting reports now follow the report name configured on the print action. This makes downloaded or emailed documents easier to identify and keeps naming consistent across affected localizations.
Original PR description
Default pdf report name should match the "print report name" set on the action report Task 4646733
Fixed a problem that could prevent users from opening the rental schedule from product and quantity views. This restores access to rental planning information and avoids an error interrupting daily rental workflows.
Original PR description
Issue ----- When opening the rental schedule view from the `qty_at_date` widget or from the form view of a product, an error occurs: ``` Traceback (most recent call last): ... File…
Issue
-----
When opening the rental schedule view from the `qty_at_date` widget or
from the form view of a product, an error occurs:
```
Traceback (most recent call last):
...
File "/data/build/enterprise/sale_stock_renting/models/product_product.py", line 162, in action_view_rentals
result = super().action_view_rentals()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_renting/models/product_product.py", line 66, in action_view_rentals
context: dict = ast.literal_eval(action.get('context', '{}'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/_monkeypatches/ast.py", line 28, in literal_eval
return orig_literal_eval(expr)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/ast.py", line 66, in literal_eval
node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/ast.py", line 52, in parse
return compile(source, filename, mode, flags,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<unknown>", line 2
{
IndentationError: unexpected indent
```
Introduced by https://github.com/odoo/enterprise/pull/87234
Fix
---
This commit fixes the action `sale_renting.action_rental_order_schedule`
by removing the leading newline in the action context, which caused the
evaluation to fail.
task-4720184Salary contract signing no longer assumes every contract has exactly two signatures. This prevents signing errors for contracts with more or fewer required signers, improving reliability for HR contract workflows.
Original PR description
The issue was that it was assumed all contracts will have the same number of signatures(2). This is now generalized for any number of signatures. Task - 5005069 Forward-Port-Of: odoo/enterprise#92000
This fixes an internal automated Planning test so it uses the current date directly instead of relying on a function. The change helps keep test runs stable and reduces false build failures, with no expected impact on everyday users.
Original PR description
Now the tour use edit with the date of today and not a function runbot build error: 164213 Forward-Port-Of: odoo/enterprise#93943 Forward-Port-Of: odoo/enterprise#93816
The VoIP AI demo data was adjusted to remove unnecessary customer references and use the United States as the country for sample call records. This keeps demo examples cleaner and more consistent for testing or demonstrations.
Original PR description
This commit removes unnecessarily added new partner references in demo data, and sets country_id to US in voip call demo data. Task-5059990
2 changes
Resolved issues and error corrections
This fix prevents image report generation from failing on Windows when temporary files are accessed by the external conversion tool. Businesses using Odoo on Windows should see fewer report export errors and smoother document/image generation.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: On Windows tempfile.NamedTemporaryFile won't allow access from external process. This result in "ContentAccessDenied" error when wkhtmltoimage process is executed. Below is the example error message on Windows: 2025-09-06 13:11:52,587 15780 WARNING odoo_insights odoo.addons.base.models.ir_actions_report: Wkhtmltoimage failed (error code: 1). Message: Exit with code 1 due to network error: ContentAccessDenied The only solution used by most projects is to use delete=False argument and delete the temp file manually later Desired behavior after PR is merged: I should work without error on Windows. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Twilio SMS sending problems are detected, reported, and shown in related notifications and mailing records. It also fixes SMS test flows so test messages are sent to the intended number and users receive clearer feedback when messages succeed or fail.
Original PR description
Followup of odoo/odoo#206818 and odoo/enterprise#93495 Provide various improvements in testing tools, notably to better cover twilio feedback and error type management. Provide various fixes linked to error types, propagation, error messages. Fix propagation to mail notification and mailing traces, which was missing in original PR. For more details see sub commits. Task-5053537 Forward-Port-Of: odoo/odoo#225036