Daily updates from Odoo
Friday, October 17, 2025
26 changes · master
Enhancements to existing features
Salary offers now open the employee record when the selected contract template is actually tied to an employee, instead of showing the contract template view. This makes navigation clearer for HR users and helps them reach the relevant employee information faster.
Original PR description
If the selected contract template on the salary offer is an employee record, then we souldn't open the contract template view, but instead open the employee view with the correct record selected. task-5082709
The helpdesk stage form now uses clearer wording for the time before a ticket is considered rotting. This makes the setting easier for users to understand by showing the value directly as a number of days.
Original PR description
**Specifications:** Change the label of `rotting_threshold_days` field and show days as a unit of measure in the form view. **After this PR:** 'Days to rot' -> 'Rotting in __ days' Task-5149031
ESG screens and reports now use shorter field labels by removing repeated unit text where users already know the context. Several views were also reviewed and tooltips were added to make ESG data entry and reporting easier to understand.
Original PR description
This commit mostly removes the units displayed on field labels to have condensed labels since the unit is known by the ESG users. It also reviews some views and adds some tooltips. task-5138748
The barcode app interface has been refined to look cleaner and more consistent on mobile devices. The changes improve readability and prevent visual glitches such as content showing through, oversized shadows, cramped buttons, and off-center text.
Original PR description
This PR fixes a few design issues: - Adds a background to prevent underlying content from showing through - Deletes prominent box-shadows - Prevents the chatter buttons from shrinking - Centers the…
This PR fixes a few design issues: - Adds a background to prevent underlying content from showing through - Deletes prominent box-shadows - Prevents the chatter buttons from shrinking - Centers the text on mobile task-5113549 PR-commu: https://github.com/odoo/odoo/pull/229542 | Before | After | |--------|--------| | <img width="407" height="577" alt="footer-bg-avant" src="https://github.com/user-attachments/assets/74c25c20-a119-4448-bbb5-0c5ee13eff57" /> | <img width="402" height="559" alt="footer-bg-after" src="https://github.com/user-attachments/assets/17533695-314c-4be7-b9b0-c290ff9fe144" /> | | <img width="409" height="581" alt="shadow-before" src="https://github.com/user-attachments/assets/b29b802a-68c3-4fc2-a327-8e62b2d9e2cd" /> | <img width="411" height="561" alt="shadow-after" src="https://github.com/user-attachments/assets/47add086-25b5-4612-969b-5bd60390e4f8" /> | | <img width="401" height="579" alt="log-note-buttons-before" src="https://github.com/user-attachments/assets/839ac7c8-18af-4270-a8c0-960c63cf68d5" /> | <img width="405" height="560" alt="log-note-buttons-after" src="https://github.com/user-attachments/assets/06577c82-2093-4ea8-b715-838ec9d0b623" /> | | <img width="402" height="574" alt="text-before" src="https://github.com/user-attachments/assets/70cabab3-b925-4a2a-8e2c-3936e4957e5a" /> | <img width="407" height="559" alt="text-after" src="https://github.com/user-attachments/assets/f172763c-5f93-47f8-8a68-9f0e991f38cd" /> |
Modules can now explicitly state when they use paid in-app services, instead of being labeled paid just because they depend on the IAP infrastructure. This helps avoid incorrectly marking free localization and integration modules as containing paid services.
Original PR description
Currently, we have a `has_iap` field on the `IrModuleModule` model which is used to display whether the module contains In-App Purchases, i.e. a paid service provided through IAP. However, this field is computed based on whether the module has an (indirect) dependency to the `iap` module. This is a bit too simplistic as relying on the `iap` module does not mean that the service is paid and consumes IAP credits. For instance, we have many EDIs modules now that rely on IAP, but that are totally free (e.g.: Malaysia POS, Spain POS, Switzerland Payroll, ...) To tackle this, we introduce a new field in the manifest: `iap_paid_service`. If set to True, we explicitely mark the module as a module that uses IAP credits, and therefore contains In-App Purchases. task-5048119
The Tasks button on Helpdesk tickets now uses the same checkmark icon as other task-related views. This makes the interface more consistent and easier for users to recognize when planning interventions.
Original PR description
Before this commit: --- The 'Tasks' stat button displayed in the Helpdesk Ticket form view (visible when planning an intervention) used a different icon than other task-related views, leading to inconsistency in the user interface. After this commit: --- The 'Tasks' stat button now uses the fa-check icon for consistency with the other views where similar buttons are used, providing a more coherent and clear visual appearance. task-5138828
Default working schedules for companies in India now use a 10:00 to 19:00 workday instead of 08:00 to 17:00. This better matches local business norms and reduces manual setup for Indian payroll configurations.
Original PR description
Currently, employee working hours in Indian companies are not aligned with local standards. The system default time range is, 08:00-17:00. This commit updates the configuration so that for companies located in India, the default working schedule reflects Indian working hours — 10:00 to 19:00. Task ID: 5158751
An information icon with guidance has been added next to the payslip period field. This helps payroll users enter the full and correct period, reducing confusion and potential data entry mistakes.
Original PR description
Added help text next next to payslip period so that the user enters the correct complete period Task-4996387
Work entries now show a file-text icon when a description is present, making details easier to spot in planning views. Automatically generated work entries are no longer pre-filled with descriptions, reducing unnecessary text and keeping records cleaner.
Original PR description
This PR aims to: - Add a file-text icon on pills with a description (with padding adjustments for file/lock icons) - Prevent generated work entries from being pre-filled with a description task-5026021
The point of sale integration for UrbanPiper now prepares order data directly from the order record instead of depending on a separate store service. This keeps the setup cleaner and makes the logic easier to reuse and maintain, with no expected change for day-to-day users.
Original PR description
**In this commit:** Move the `getOrderData` method to the `pos.order` model. This change allows the data preparation logic to be accessed directly via the model, avoiding reliance on the `pos_store` service. Task: 4827509 Related: https://github.com/odoo/odoo/pull/212748
Resolved issues and error corrections
This update corrects an issue in account reports where some report calculations could use the wrong record context. The fix helps ensure financial report values are computed reliably and reduces the risk of incorrect report output.
Original PR description
Forward-Port-Of: odoo/enterprise#97144
This update adds test coverage to ensure Indian GSTR-1 reporting handles sales involving reverse charge tax and SEZ supplies with LUT correctly. It helps reduce the risk of incorrect tax report submissions for businesses operating under these GST scenarios.
Original PR description
Adding GSTR1 test case with RCM tax and SEZ (with LUT) see https://github.com/odoo/odoo/pull/213931 Forward-Port-Of: odoo/enterprise#95669 Forward-Port-Of: odoo/enterprise#87486
The AI assistant in the website builder now works correctly when used on product pages. This prevents a "Missing Record" error and lets users continue editing product descriptions without interruption.
Original PR description
__Current behavior before commit:__ Using `/ai` in the website builder sends the record id as a string leading to an error in the backend because `browse` expects an integer as input. __Description of the fix:__ Use `search` instead of `browse` to support id sent as string as well as to validate ACL and existence of the record. __Steps to reproduce the issue on runbot:__ 1. Go to `/shop`. 2. Click on a product. 3. Open the website builder. 4. Enter `/ai` in the description below the product title. => A "Missing Record" error appears. Forward-Port-Of: odoo/enterprise#95163
The Point of Sale settlement flow now handles cases where a previously loaded customer has been removed from the database. This prevents reload errors and helps keep PoS operations running smoothly after customer record cleanup.
Original PR description
Before this commit, if a previously loaded partner was deleted from the database, reloading the PoS would trigger an error because the partner record could no longer be found. opw-5137871 Forward-Port-Of: odoo/enterprise#97173 Forward-Port-Of: odoo/enterprise#96491
Odoo Studio now avoids saving an invalid link setting when users create a related field pointing to partner child contacts. This prevents crashes during later field updates and keeps customized sales order forms more reliable.
Original PR description
On sale order, create a related field to res_partner.child_ids Before this commit, the related field is not stored but has a relation_field to parent_id (res.partner) During an onchange (outside of studio), this will crash. After this commit, we unset relation_field in this case as it doesn't make sense (the relation_field should reference a res.partner field, not a field presetn in the current model) opw-5155440 Forward-Port-Of: odoo/enterprise#97274 Forward-Port-Of: odoo/enterprise#96950
This fixes an issue in Point of Sale Enterprise that could cause an error when opening Studio from the preparation activity display. The change improves reliability for users customizing or managing the preparation display workflow.
Original PR description
This commit prevents a NewId to be used in a domain when opening studio from the activity display. runbot error #233396 Forward-Port-Of: odoo/enterprise#97332
Fixed an issue where opening the AI assistant from a blog record could show an error instead of starting normally. The system now checks for planned activities only when that type of record supports them, preventing disruption for website blog users.
Original PR description
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog`…
Currently, an error occurs when the user clicks on the AI icon at the top. Steps to Reproduce: - Install the `website_blog` module. - Go to `Website > Configuration > Blog > Blogs`. - Open any `blog` and click the `AI icon` at the top. `AttributeError: 'blog.blog' object has no attribute 'activity_ids'` This error occurs after [this commit]. When the user clicks the AI icon, it attempts to create an AI channel and fetch planned activities if any exist. However, the blog.blog model does not have the activity_ids attribute because it does not inherit from mail.activity.mixin. As a result, the error is raised [1]. This commit ensures that the system only checks for activities if the record has the activity_ids attribute; otherwise, it returns empty data, indicating no activities found. [1]- https://github.com/odoo/enterprise/blob/64fa9e46f6195bd4312130cce33b94a129584523/ai/models/mail_thread.py#L12 [this commit]: https://github.com/odoo/enterprise/commit/7333dc779c75479c708edb7ecd1c0a0d4d2ae619 sentry-6942245851 Forward-Port-Of: odoo/enterprise#97136
Project portal users can now use a back button from the shared project Gantt view. This makes navigation easier and reduces friction when moving between shared project information and the portal.
Original PR description
Currently, project portal users cannot easily navigate back from the project portal view.This commit adds a back button in the gantt view of project sharing to improve navigation. Also, the project sharing gantt view is added in this commit- https://github.com/odoo/enterprise/pull/80545/commits/daaea2742a9ee786045ea805941eb3e8374c99d1 task: 5075423 Forward-Port-Of: odoo/enterprise#95461
This fix removes now-unnecessary extra request details from a database API call after the underlying service was corrected to handle them automatically. It reduces redundant handling in the database synchronization flow without changing expected user-facing behavior.
Original PR description
Since odoo/internal#3823 the `ids` and `context` arguments erroneously became mandatory on the SaaS `/json/2/<__model__>/<__method__>` route, as the override was missing default values. Since odoo/internal#3830 added these default values, there is no need to add these arguments any more, and this commit removes them from the method BaseApi:post_json2 of the databases module. Task-id: none Forward-Port-Of: odoo/enterprise#97098
This fix ensures several company name and address fields in French VAT report submissions are filled within ASPOne's required length limits. It helps prevent rejected or invalid XML-EDI filings caused by values that are too long.
Original PR description
The aim of this commit is making sure that the field Designation, DesignationSuite1, DesignationSuite2, AdresseVoie and AdresseComplement are correctly filled. Indeed, the XSD implied that these fields have to be respectively 35, 35, 35, 30 and 35 characters max. [Documentation 2025](https://www.aspone.fr/files/tutoriaux/xmledi/Documentation_XML-EDI.zip) no task id Forward-Port-Of: odoo/enterprise#97335 Forward-Port-Of: odoo/enterprise#97199
Features or functions removed from Odoo
This change removes leftover files from a previously deleted HR contract spreadsheet dashboard module. It prevents inactive, incomplete module artifacts from lingering in the codebase, reducing maintenance noise without affecting active business features.
Original PR description
Module was originally removed by 46052c4bc5ad1bd2549a6125202e0671b56beac8 but was necromantized back into unlife by the translations export 0c1874473050f6e3cb68601737e3b4216aee5cad, being revived as a directory with a data file and a translation file but no manifest. Forward-Port-Of: odoo/enterprise#97326
Code cleanup and technical improvements
IoT system-related helper code was reorganized into a dedicated system file to make future maintenance easier. This reduces internal complexity and helps developers add new IoT utilities with less risk of code conflicts, without changing expected user behavior.
Original PR description
To reduce the size of the helpers file, and avoid struggling with circular imports when trying to add new utilities in system.py, we moved all system utilities to system.py file. Community PR: odoo/odoo#230735
The spreadsheet code has been reorganized so the calculation model is separated from the screen display logic. This prepares spreadsheets to run without a visible interface, such as on servers or in background workers, improving future flexibility and scalability.
Original PR description
One day we have a simple repo that does everything,
The next the repo has 2 packages:
- packages/o-spreadsheet-engine that contains the spreadsheet model and all the plugins
- src that contains all the components that shows the spreadsheet on screen and the rendering logic in general
The goal of the change is to be able to load the Model in headless mode, in nodejs and eventually in a webworker
Task: 4179627This update modernizes how many Odoo Enterprise apps read and save system configuration settings. It should not change day-to-day behavior, but it makes the underlying code safer and easier to maintain across accounting, banking, AI, and related features.
Original PR description
community: https://github.com/odoo/odoo/pull/223180 upgrade: https://github.com/odoo/upgrade/pull/8647 documentation: https://github.com/odoo/documentation/pull/15077
The sales commission area no longer shows a redundant forecast configuration option or unused forecast views. This makes the settings and reports cleaner while keeping forecast fields available when users choose to display them.
Original PR description
Before: - A setting existed to toggle forecast display, but most forecast fields were already optional, making the setting ineffective. - Some views linked to the sale.commission.plan.target.forecast model was unused. - The `Achievement Forecast` setting in res.config.settings was present but served no real purpose. - In pivot view under measures forecast field is default selected. After: - Removed the now-redundant forecast setting. - Deleted unused views tied to the forecast model. - All forecast-related fields remain optional for display directly in the view. - Removed the unused “Achievement Forecast” config option. - Forecast field in not default selected in pivot view Impact: - Simplifies the codebase by removing dead settings and views. - Ensures cleaner configuration and UI behavior. - Easier to maintain and understand for future updates. task-4903751
This update streamlines how WhatsApp discussion messages determine whether they can be translated. It is an internal cleanup that should make the messaging code easier to maintain without changing the user experience.
Original PR description
https://github.com/odoo/odoo/pull/232128