Daily updates from Odoo
Friday, October 17, 2025
46 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 German tax report has been reorganized after removing a previously used balance column. This keeps the report logic aligned with the new layout and helps ensure tax report results remain reliable for German localization users.
Original PR description
After removing the balance column, we need to refactor the code that depends on it task-5046641
Odoo Discuss channels and groups now record the user who created them as the owner, making ownership visible in the member list. Member permissions are tightened so users can only directly access their own membership details, improving privacy and control around channel data.
Original PR description
1. Add a new field to store the owner of a channel/group. The owner is the user who created the channel/group. Owner should have a special icon in the member list. 2. Modify the access rights of channel members: channel member can only read/write current user data ACL : is_self can do everything, others denied and use sudo whenever reading for others, or for writing Task-4107790
Point of Sale alert popups have been refreshed with a clearer design and more consistent, user-friendly wording. This helps cashiers and staff better understand warnings or required actions during sales, payments, printing, and localized fiscal workflows.
Original PR description
Task: [#5153312](https://www.odoo.com/odoo/project/1737/tasks/5153312) --- Created a new `PosAlertDialog` component that extends the existing `AlertDialog` with an updated design. Also revised alert messages across all POS modules to make them more user-friendly and consistent.
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
UAE payroll now excludes unpaid leave and unpaid sick leave days when calculating end-of-service amounts and related provisions. End-of-service payslips also show the total unpaid leave days, giving payroll teams clearer and more accurate information.
Original PR description
This commit excludes the Out Of Contract Unpaid Leaves and Unpaid Sick Leave days from the EoS and EoS Provision Salary Rule Calculations. We also show the total number of unpaid leave days on the EoS payslip. task-4886104 Forward-Port-Of: odoo/enterprise#97063 Forward-Port-Of: odoo/enterprise#95465
Refreshing webhooks from settings now disconnects existing products from the point of sale before sending a fresh menu to UrbanPiper. This helps ensure the external ordering platform receives an up-to-date menu and reduces mismatches between Odoo and UrbanPiper.
Original PR description
Following this commit: - On refreshing webhooks from settings, products will be unlinked from pos. - Fresh menu will be updated to Urbanpiper platform task-5163764 Forward-Port-Of: odoo/enterprise#97000
POS users can now change whether a product is available for food delivery directly from the product information popup. This helps restaurants react faster to stock or kitchen constraints without leaving the POS workflow.
Original PR description
Before this commit: ------------------------- There was no way to change the food availability status of a product from the POS terminal. After this commit: ------------------------- Added an option in the POS UI product info popup to toggle the availability of products for configurations that support food delivery handling. Task: 4951476 Forward-Port-Of: odoo/enterprise#91681
Bank statement imports now choose the quickest reconciliation method based on file size. Small imports are reconciled immediately, while larger imports continue to run in the background to avoid slowing down the user.
Original PR description
When doing an import, to avoid taking too much time we decided to trigger the cron directly but for small files it's not really efficient. When the file has less than 80 statement lines we do the auto reconcile otherwise we trigger the cron. task-5162686 Forward-Port-Of: odoo/enterprise#97004
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
Shipping label printing can now use a printer selected for each delivery operation type instead of automatically choosing the first available compatible printer. This helps warehouses route labels to the right printer by default, reducing manual work and printing mistakes.
Original PR description
Printing shipping labels is performed from the backend, once the shipping info are received in the chatter. The printing command is sent to the frontend via the user bus, then though longpolling to the iot box. This commit adds the possibility to select a printer instead of choosing automatically the first (with the right report associated) on the list. As the change is made on a stable version, we are using system parameters to store the selected printer without adding a new field. We associate a printer with the picking type, in order for to be able to have different printers by default on different picking types. Task: 4792491 Forward-Port-Of: odoo/enterprise#97034 Forward-Port-Of: odoo/enterprise#86818
Customer statement emails sent from a child contact now generate the correct PDF attachment instead of an empty statement. The Customer Statement button is also hidden when there are no transactions or no amount due, reducing confusion for accounting users.
Original PR description
**Steps to reproduce:** 1. Go to Accounting > Customers > create a company with child contact (invoice) (both having name and email). 2. Create an invoice with the child contact as customer and…
**Steps to reproduce:** 1. Go to Accounting > Customers > create a company with child contact (invoice) (both having name and email). 2. Create an invoice with the child contact as customer and confirm it. 3. Go to the child contact and open the Customer Statement smart button. 4. Download the PDF → data is shown correctly. 5. Send the statement → the attachment in the sent mail is empty. **Issue:** - When sending customer statements via email from a child contact, the generated PDF attachment contains no data, showing empty amounts and transactions. - Additionally, the "Customer Statement" button was still visible even when the total due was zero. **Cause:** - The button visibility condition checks for `total_due == 0.0 and not has_moves`, which didn’t properly cover all use cases. **Solution:** - Update button visibility condition to: `invisible="not has_moves or total_due == 0"` ensuring it is hidden when there are no moves or the total due is zero. **opw-5009182** Forward-Port-Of: odoo/enterprise#96017 Forward-Port-Of: odoo/enterprise#93162
This fix corrects how bank synchronization actions are triggered from the bank journal status area. As a result, customer-facing actions that previously failed to be sent should now work as intended.
Original PR description
The aim of this commit is fixing the usage of doActionButton. In this commit [[1]], we added two usages of doActionButton but it was wrongly done. It means, for a functional POV, that the action is never send to the customer. [1]: https://github.com/odoo/enterprise/commit/379f8bf0d9f55dda1998750fd5cbe48a2d84b00e
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
Argentina VAT report exports now generate both required text files for Type C vendor bills and invoices without taxes. This helps businesses meet AFIP filing requirements and avoids incomplete report downloads.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
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
Shipping label printing through IoT can now use a selected printer for each picking type instead of automatically choosing the first matching printer. If a shipping label or document is printed without a linked IoT printer, users now receive a clear error message instead of a technical traceback.
Original PR description
Printing shipping labels is performed from the backend, once the shipping info are received in the chatter. The printing command is sent to the frontend via the user bus, then though longpolling to the iot box. This commit adds the possibility to select a printer instead of choosing automatically the first (with the right report associated) on the list. As the change is made on a stable version, we are using system parameters to store the selected printer without adding a new field. We associate a printer with the picking type, in order for to be able to have different printers by default on different picking types. backport of odoo/enterprise#86818 Task: 4792491 Forward-Port-Of: odoo/enterprise#97396 Forward-Port-Of: odoo/enterprise#95794
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
The AI live chat website block now behaves more consistently with website themes and editing tools. This improves the visitor experience with cleaner design, better readability, smoother fullscreen behavior, and stronger accessibility support.
Original PR description
Resolve theme options compatibility, editing behavior, accessibility and design problems affecting UX and standards compliance. Adherence to theme options: - Apply border-radius correctly to target…
Resolve theme options compatibility, editing behavior, accessibility and design problems affecting UX and standards compliance. Adherence to theme options: - Apply border-radius correctly to target elements - Fix bg-color applying to text-area instead of intended container Edition: - Remove resize/style options on the column since these are not retained on save - Fix the preview that mismatch with actual rendered result - Resolve title/form misalignment in edit mode - Ensure "OR" text readability across different background colors - Preserve container size when the "fullscreen" feature is activated Accessibility: - Add missing focus state for form fields - Add role="presentation" to icons - Add role="button" to anchor tags functioning as buttons Design: - Reduce oversized title font size - Adjust container width on xl and xxl breakpoints - Smooth fullscreen transition to prevent abrupt activation | 19.0 | this PR | |--------|--------| | <img width="1092" height="424" alt="image" src="https://github.com/user-attachments/assets/5cd85204-b9af-4810-9458-c4c96dad562d" /> | <img width="1083" height="409" alt="image" src="https://github.com/user-attachments/assets/b83f2d18-0135-4f5d-b420-11f58070c8a3" /> | task-5089787 Forward-Port-Of: odoo/enterprise#94767
The General Ledger now shows the Initial Balance line first when using the Load more option. This prevents missing or duplicated ledger entries when users load account lines in smaller batches.
Original PR description
### Issue: The "Initial Balance" line in the General Ledger is not the first line with the "Load more" option ### Steps to reproduce: - Accounting > Configuration > Accounting Reports > General…
### Issue: The "Initial Balance" line in the General Ledger is not the first line with the "Load more" option ### Steps to reproduce: - Accounting > Configuration > Accounting Reports > General Ledger - Change the Load more limit in the options to a small number, i.e. 4 - Open the General Ledger and unfold an account with more than 10 lines - There is no Initial Balance line, it appears when clicking "Load more" ### Cause: The General Ledger query have this line `ORDER BY 2, move_name, 1`. Here 2 refers to the date and 1to the `account_move_line.id`. But the initial balance line has these columns equal to `NULL` so this ORDER BY will place it at the end of the results. When the limit is smaller than the total number of lines, the initial balance is not fetched by the query. **Additional issue** The limit is incremented several times. In our case, we set the option at 4. It gets incremented [here](https://github.com/odoo/enterprise/blob/edb4ba5b98be9f9ae3617cc6e66c5e3376a1b56c/account_reports/models/account_report.py#L7172) because the load more option is triggered, and also [here](https://github.com/odoo/enterprise/blob/edb4ba5b98be9f9ae3617cc6e66c5e3376a1b56c/account_reports/models/account_general_ledger.py#L239) for no apparent reason (it is not needed "for the Initial balance"). So the query is called with `limit=6`, six lines are retrieved when clicking on "Load more". Considering a scenario where there are 10 lines for the account (with the initial balance) and "Load more limit" set to 4: - The first query gets the lines 1-6 but only 1-4 are displayed. - Clicking "Load more", the offset is 4, the query gets the lines 5-10. 10 being the initial balance, it is put in first position by [this piece of code](https://github.com/odoo/enterprise/blob/edb4ba5b98be9f9ae3617cc6e66c5e3376a1b56c/account_reports/models/account_general_ledger.py#L79-L91). So the lines displayed are 10, 5, 6, 7 - Last click on "Load more", offset is 8, query gets 9 and 10, displays 10, 9. In the end, one line is not displayed, and the initial balance is displayed twice. ### Solution: Add `NULLS FIRST` in `ORDER BY` to always have the Initial Balance as the first line returned by the query. Also remove the unnecessary `limit+1`. opw-5105652 Forward-Port-Of: odoo/enterprise#96136
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
SAF-T reports now show the required tax payable amount when reverse charge taxes are used, instead of reporting zero. This helps ensure Romanian tax filings match authority expectations and reduces the risk of incorrect compliance reporting.
Original PR description
When a reverse charge tax is used, we export a `TaxInformation` with a zero amount instead of the real amount of the tax. The tax authority requires to show the tax to pay and doesn't care about the tax to receive... In order to fix this, we only sum the tax details of lines having positive repartition lines. opw-5125678 Forward-Port-Of: odoo/enterprise#97315 Forward-Port-Of: odoo/enterprise#97117
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
Fixes a bank reconciliation issue where choosing a write-off account with a default tax could remove an already matched bill or invoice. Users can now add the account without losing existing reconciliation work, reducing manual rework and errors.
Original PR description
In the Bank reconciliation widget, users can click a button to set the account to write off the remaining balance. However, if the chosen account has a default tax set, the widget will lose any existing matches with invoices. Steps to reproduce: - Have an account with a default tax - Create a bill with a total - Create a bank statement for a greater amount - Open the bank reconciliation widget - In the created statement, first add the bill, then click 'Set Account,' and choose the account with tax Issue: Bill matching will be lost. This occurs because we remove and recreate the matching line, but we don't keep the line to be reconciled. opw-5002624 Forward-Port-Of: odoo/enterprise#96006
Spreadsheet pivots now let users drill into related fields even when a dimension is already selected, while still preventing duplicate selections of the exact same dimension. Date and datetime fields can also be selected again with different granularities, making analysis by day, month, or year more flexible.
Original PR description
Before this commit: - Once a dimension (e.g, 'Customer') was selected in a pivot, it could not be used for drilling into related fields, preventing cross-model exploration. - Date and datetime fields could not be re-selected to use different granularities (day, month, year, etc.). After this commit: - The pivot forbids re-selecting the exact same dimension but still allows users to drill and select fields from related models. - Date and datetime fields remain selectable to allow choosing different granularities, improving flexibility in pivot analysis. Task: [5114511](https://www.odoo.com/odoo/2328/tasks/5114511) Forward-Port-Of: odoo/enterprise#95898
Uruguayan electronic invoices now include zero-value lines in the official CFE submission as free delivery items. This prevents missing invoice details when reporting free products, deliveries, or fully discounted lines to the tax authority.
Original PR description
## Description of the issue The client wants to register 0.0 line to the CFE (delivery line with price 0.0): based on our findings, the only way to report lines with 0 values to the DGI is by…
## Description of the issue The client wants to register 0.0 line to the CFE (delivery line with price 0.0): based on our findings, the only way to report lines with 0 values to the DGI is by configuring the line as a "free delivery." (invoice indicator 5). But this lines is not been reported as part of the CFE xml (neither as a Free Delivery line or discount ## Steps to reproduce 1. Create a Uruguayan electronic invoice (sales default journal on a UY company) 2. Add a line with quantity 1. price 0 3. Add a second line with quantity 1, price 500 and discount 100% ## Before this PR 1. if we have a line with price unit != 0.0 but with total price of the line 0.0 (as the second line), then we are reporting the invoice line as Free Delivery. 4. But, If we have an invoice with line with price unit 0.0 (example first line) then is not being informed in the CFE at all ## After this PR Both lines are informed to DGI using the invoice indicator 5 (Free Delivery) You can check this on to generate CFE XML in demo mode (not need to connect to UCFE) If you want more visual example please connect to UCFE in testing enviroment and check the generated PDF file. References [Odoo task](https://www.odoo.com/odoo/project/967/tasks/5015691) LATAM 1350 / ADHOC task 53445 Forward-Port-Of: odoo/enterprise#89808
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
Creating a vendor bill from an IRN now correctly looks for a purchase journal across all companies in the tax unit, not just the main company. This prevents bill creation failures for multi-company tax units when the main company lacks a purchase journal.
Original PR description
Before this PR: - The system searched for a purchase journal only in `company_id`. - In a tax unit with multiple companies, if the main company had no purchase journal configured, record creation failed with a 'NOT NULL constraint violated' error. After this PR: - The journal search now checks all companies in `company_ids` (or falls back to `company_id`), - allowing the system to find a valid purchase journal across the tax unit. Forward-Port-Of: odoo/enterprise#97255
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
This fix ensures Mexican electronic invoice XML attachments are created with the correct file type even when the user has limited permissions. It prevents related accounting documents from being missed when document centralization is enabled.
Original PR description
When creating an XML attachment as a user without Write access on the ir.ui.view model, the Mimetype will be set to plain/text. In particular, this causes issues when Accounting centralization is enabled in Documents, as the corresponding Document will only be generated if the Mimetype is application/xml. Creating the XML as Superuser avoids this issue. Similar to https://github.com/odoo/odoo/pull/124507 opw-5057038 Forward-Port-Of: odoo/enterprise#97325 Forward-Port-Of: odoo/enterprise#95197
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