Tuesday, April 7, 2026
21 changes · saas-19.2
Enhancements to existing features
This update simplifies the process of upselling non-recurring products when the subscription start date aligns with the next invoice date. A technical adjustment was made to prevent errors related to zero prorata ratios, ensuring accurate invoicing and subscription confirmations. This change improves the reliability of the subscription upselling process.
Original PR description
Make easy for module that extend sale subscription to allow for some specific case to upsell subscription with start_date = next_invoice Forward-Port-Of: odoo/enterprise#112730
This update adds labels to journal entries that initiate cash basis accounting. This provides clearer traceability, allowing us to understand exactly which transactions led to the creation of cash basis line items. It improves auditability and simplifies reconciliation processes.
Original PR description
To have a more explicit reference from which documents a cash basis base line was created, now we put the name of the two journal entries that triggered the caba. target: 18.0 -> master Task [link](https://www.odoo.com/odoo/project.task/5883344) task-5883344 Forward-Port-Of: odoo/odoo#257795 Forward-Port-Of: odoo/odoo#246610
Resolved issues and error corrections
This update addresses a warning displayed on payslips when GOSI (Saudi Government Social Insurance) contributions are zero. This change ensures compliance with version 19.2 and above, preventing issues with WPS report generation. The fix adds a minimum GOSI contribution percentage to trigger the correct reporting.
Original PR description
[IMP] l10n_sa_payroll: GOSI integration warning
When all of the GOSI contributions are 0, I showed warning in payslip
This is for version 19.2 and above.
task - 6032714This update fixes a restriction in the bank reconciliation process. Previously, tax lines set to 'reconcilable' could not be manually unmatched, even when necessary. Now, users can unmatch these tax lines when reconciling transactions, ensuring accurate accounting and streamlining the bank reconciliation workflow.
Original PR description
In the bank reconciliation widget, tax lines are protected from unreconciliation to maintain tax integrity. However, when the tax account is set as reconcileable the user may need to manually unmatch transactions. Steps to reproduce: - Open the 'Tax Paid' account and enable 'Allow Reconciliation' - Create a bill using a tax and post it - Go to the Bank Reconciliation widget - Select a statement line and match it with the tax line from the bill Issue: The line cannot be unmatched because the related button is missing opw-5871821 Forward-Port-Of: odoo/enterprise#112540 Forward-Port-Of: odoo/enterprise#110186
This update fixes a technical error that prevented users from correctly updating lot numbers on stock move lines. The change ensures that lot IDs are properly linked within the Odoo system, resolving a previous bug that caused errors during inventory adjustments. This improves the reliability of stock tracking.
Original PR description
Since ce2a8f9c929, quality.check.lot_id (Many2one) was changed to lot_ids (Many2many), but the write() override in stock.move.line still assigns a raw integer to the field. This causes a ValueError when changing the lot on an MO move line. With this commit, use Command.link() to properly link the record to the Many2many field. Forward-Port-Of: odoo/enterprise#110180
A bug was preventing users with access rights from successfully checking out visitors in the Frontdesk module. This update corrects a filtering issue within user groups, ensuring the 'Check Out Visitor' button now redirects to the correct confirmation page. This resolves a frustrating user experience.
Original PR description
## Short functional explanation of the error When a user checks in, a mail is sent in the chatter, containing a button 'Check out Visitor'. When a user who should have access to the Check Out feature clicks on the button, we are redirected to a 'Not Found' page. ## Reproduction Steps 1. Go to Frontdesk. Click on Open Desk and check in a visitor. 2. Go back to the Frontdesk app. Click on visitors. 3. Click on the visitor you just checked in. 4. Click on the 'Check Out Visitor' button in the chatter. ### Expected behavior A page should appear with the text: 'The visitor has been successfully checked out'. ### Unexpected behavior A 'Not found' page pops up. ## Origin of the issue We filter users who can benefit from the check-out feature using groups. However, the group used to perform this filter is written incorrectly, leading to a condition that is always True, and always returning a request not found. __ opw-5937326 Forward-Port-Of: odoo/enterprise#108331
This update ensures that when creating a planning slot for a service product, the system now correctly utilizes the worksheet template assigned to that specific product, rather than a default template. This resolves an issue where the planning slot wasn't reflecting the intended worksheet, leading to inaccurate planning data.
Original PR description
Steps to reproduce: - Assign a worksheet template to a service product. - Create and confirm a Sale Order with that product. - Click “To Plan” smart button and add a planning slot. Current behavior: The slot receives the first worksheet template, ignoring the product's template. Expected behavior: The slot uses the worksheet template defined on the product. task-5966786
This update fixes a misleading chart in the Purchase & Vendor Analysis dashboard. The chart title was previously inaccurate, suggesting supplier dependency instead of showing purchase orders by buyer. The title has been corrected to accurately reflect the data displayed, improving clarity for users.
Original PR description
Issue Before This Commit: ====================== Currently, the pie chart titled `Supplier Dependency Chart` in the Purchase & Vendor Analysis under the Logistics section is misleading because it…
Issue Before This Commit: ====================== Currently, the pie chart titled `Supplier Dependency Chart` in the Purchase & Vendor Analysis under the Logistics section is misleading because it suggests that the chart represents dependency on each supplier. However, the chart actually shows how many purchase orders are created by each buyer. Additionally, when there are no purchase orders, the sample pie chart displayed uses the title `Purchase Order by Buyer`, which creates inconsistency between the actual chart title and the sample chart title. Steps to Reproduce: ================= - Install the **purchase_stock** module with demo data. - Go to the **Dashboard** app. - Open the **Purchase & Vendor Analysis under the Logistics** section. - Scroll down to locate the pie chart titled **Supplier Dependency Chart**. Cause of the Issue: ================ In this [PR](https://github.com/odoo/enterprise/pull/93921), at [this line](https://github.com/odoo/enterprise/pull/93921/changes#diff-61d19b77200011a8808542c134a675631e6d4b4dbc88ca99353cacfe3448b396), The pie chart title was incorrectly set to `Supplier Dependency Chart`, which does not reflect the underlying data, as the chart displays purchase orders grouped by buyer. After This Commit: ================ The pie chart title is corrected from `Supplier Dependency Chart` to `Purchase Order by Buyer`, ensuring it accurately repersent the underlying data and avoids misleading users. TaskID-5891759 Forward-Port-Of: odoo/enterprise#110434
This update fixes a discrepancy in the way tax report amounts are displayed for TDS (Tax Deduction at Source) and TCS (Tax Collected at Source) reports in the Odoo system for the Russian market (l10n_in). The change ensures accurate reporting of these amounts, aligning with recent system updates. This improves the reliability of financial data for Russian businesses using Odoo.
Original PR description
In https://github.com/odoo/odoo/commit/17a6117ed88c29b5bc4db0c872bcdbc109a7d98b, the automatic +/- sign handling was removed from the tax grid logic. To stay consistent with this change, the newly added TDS Report 2025 has been updated accordingly. task-6097997 Forward-Port-Of: odoo/odoo#257775
This update fixes an issue where proforma invoices were incorrectly displaying 'Order' as the document title instead of 'Pro Forma'. The fix ensures the correct title is generated when printing proforma invoices, improving the accuracy of sales documentation. This change was triggered by a previous update and resolves a discrepancy in how the document title is set.
Original PR description
Issue: --- `layout_document_title` is not correctly set in proforma document. Steps to reproduce: 1- Create a SO and confirm. 2- Print the Pro forma invoice. The title is Order while it should be Pro Forma. Cause: --- This issue is introduced after #232539. `is_proforma` is not set before setting `layout_document_title`. opw-6043669
The automated testing process for Odoo has been updated to more accurately manage timeout settings. Previously, a single, lengthy timeout was used regardless of whether tests were running on a small or large set of modules. This change adjusts the timeout based on the scope of the tests, preventing unnecessary delays and ensuring faster test execution. This improves the stability and speed of our automated testing.
Original PR description
Hoot suites (test_unit_desktop and test_unit_mobile) are now split and run in each sub builds on runbot [1]. As a consequence, the historical timeout isn't accurate anymore (we don't need a 1h…
Hoot suites (test_unit_desktop and test_unit_mobile) are now split and run in each sub builds on runbot [1]. As a consequence, the historical timeout isn't accurate anymore (we don't need a 1h timeout when only a part of the suite is run in a sub build). On the other hand, the whole suite is also run at once in nightly builds. There, the 1h timeout is sometimes not enough, as the suite keeps growing. This commit makes the timeout more accurate by taking into account 2 different cases: if the suite is run for a subset of modules, or if it is run for the whole codebase. This allows it to timeout earlier on regular builds if it is deadlocked, and it doesn't timeout anymore on nightly builds. [1] https://github.com/odoo/odoo/pull/234132 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#257478
This update ensures that only invoices can be grouped within the account_edi_ubl_cii module. Previously, other document types like journal entries could be grouped, which has now been corrected. This change improves data accuracy and consistency within the invoicing process.
Original PR description
[FIX] account_edi_ubl_cii: Allow only invoices can be grouped Before this commit, no check was done on the document type at line grouping. This commit adds the check `is_invoice` so that we cannot group (e.g.) a journal entry type move no-task Forward-Port-Of: odoo/odoo#257314 Forward-Port-Of: odoo/odoo#255359
This update automatically checks out employees from attendance records when they are archived. Previously, archived employees remained checked in, which created inconsistencies. This change ensures accurate attendance tracking and simplifies the process of managing archived staff.
Original PR description
Before: - When an employee was archived, their attendance was not updated. After: - When an employee is archived, if they are currently checked in, they will be automatically checked out at the current timestamp. task-5916700 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256083 Forward-Port-Of: odoo/odoo#255524
This update fixes several issues within the Odoo spreadsheet component, ensuring improved stability and functionality. It includes bug fixes related to date formatting, grid behavior, and error handling, enhancing the user experience. This update is part of the 19.2 release.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/cad5c61d12 [REL] 19.2.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/cad5c61d12 [REL] 19.2.6 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/964c1b6b61 [FIX] Grid: hide the table resizer in readonly mode [Task: 6054035](https://www.odoo.com/odoo/2328/tasks/6054035) https://github.com/odoo/o-spreadsheet/commit/a58e378577 [FIX] package: update types/jest to match jest version [Task: 6092447](https://www.odoo.com/odoo/2328/tasks/6092447) https://github.com/odoo/o-spreadsheet/commit/3183db9d53 [FIX] formats: bypass date format for invalid dates [Task: 6032998](https://www.odoo.com/odoo/2328/tasks/6032998) https://github.com/odoo/o-spreadsheet/commit/2dbe2f6192 [FIX] Formats: properly format dates with 3 year digits [Task: 6032998](https://www.odoo.com/odoo/2328/tasks/6032998) https://github.com/odoo/o-spreadsheet/commit/245be692e2 [FIX] package: clean o-spreadsheet-engine leftovers [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/8490ed8d26 [REV] spreadsheet: remove o-spreadsheet-engine package [Task: 6081583](https://www.odoo.com/odoo/2328/tasks/6081583) https://github.com/odoo/o-spreadsheet/commit/af097c3738 [FIX] side panels: fix layout of panels with tabs [Task: 6022696](https://www.odoo.com/odoo/2328/tasks/6022696) https://github.com/odoo/o-spreadsheet/commit/626368f758 [IMP] Errors: Add error origin position for #SPILL errors [Task: 5959985](https://www.odoo.com/odoo/2328/tasks/5959985) https://github.com/odoo/o-spreadsheet/commit/0beafbe5fe [FIX] config: move to ESM release tool [Task: sotg](https://www.odoo.com/odoo/2328/tasks/sotg) https://github.com/odoo/o-spreadsheet/commit/51dce8ceb4 [FIX] DV: Allow use of cellPosition-related functions in rules [Task: 5868662](https://www.odoo.com/odoo/2328/tasks/5868662) https://github.com/odoo/o-spreadsheet/commit/22a7de630a [FIX] CF: Allow use of cell position-related functions in formula [Task: 5868662](https://www.odoo.com/odoo/2328/tasks/5868662) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update corrects an issue in the Slovakian VAT report generation, ensuring accurate reporting of financial data. The fix prevents duplicate information from being included in the XML report, resolving a potential discrepancy in tax calculations. This improves the reliability of financial reporting for Odoo users in Slovakia.
Original PR description
Add missing `sk_29.vat` in row 32 formula and ensure only one of the rows is filled: row 32 for positive amounts, row 33 for negative ones. This prevents both rows from being populated at the same time and fixes the generated XML accordingly. Related: https://github.com/odoo/enterprise/pull/112963 task-6040973 Forward-Port-Of: odoo/odoo#257528
This update fixes an issue where the website header padding would disappear under certain background color conditions, causing visual inconsistencies. The change ensures the header boundaries are always visible, regardless of the page's background color or image, improving the overall website appearance and user experience. This resolves a minor visual bug.
Original PR description
Before this PR, the left/right padding of the header would be removed when the header had no background color or when its background color matches the pages color. In these cases, the header boundaries were not visible and so we allowed the header to take more space. However, the previous condition would not check if the page had a background image, or if the header had a shadow defined. The header would have visible boundaries and the element on the extremities would be stuck to the boundaries. This commit updates the condition to include any possible option that would make the header boundaries visible. task-5367502 Forward-Port-Of: odoo/odoo#244413
This update fixes alignment issues and removes distracting lines within the attendance system tray, improving its visual clarity. Additionally, it allows certain attendance components to retain the system tray open after check-in or check-out, providing greater flexibility for users. This addresses a previous usability concern.
Original PR description
# [FIX] hr_attendance: alignment This commits revamps the attendance systray by aligning items and removing horizontal lines between attendance entries. # [FIX] hr_attendance: allow not to close systray based on condition This commits allows components inheriting from the attendance menu to conditionally close the systray. By default, the dropdown will be closed on check-in and check-out to preserve the original behaviour. See odoo/enterprise#113189 task-6088779
This update corrects a bug where the 'Track Inventory' field was incorrectly displayed for service and combo products. The fix restores the intended restriction, ensuring this field only appears for products that can be physically stored (like goods).
Original PR description
Issue before this commit: ========================= The 'Track Inventory' (is_storable) field is visible for products of type service or combo, where it should not be applicable. Steps to Reproduce:…
Issue before this commit: ========================= The 'Track Inventory' (is_storable) field is visible for products of type service or combo, where it should not be applicable. Steps to Reproduce: ========================= - Install the Inventory module without demo data. - Ensure **'Lots & Serial Numbers'** is disabled in the configuration. - Go to Inventory > Products > Create a new product. - Change the product type from 'Goods' to 'Service' (or Combo). Result: The 'Track Inventory' field remains visible. Cause of the issue: ========================= The invisible condition on the field was unintentionally removed in this [PR](https://github.com/odoo/odoo/pull/242834), [here](https://github.com/odoo/odoo/pull/242834/changes#diff-9afa40fdafcf103e7456e139c259f78469ea7e675c79f6d13dfe7db2d43c38d6R188). Previously, it was restricted using: **invisible="type != 'consu'".** With This Commit: ========================= Restore the invisible condition on the 'is_storable' field, ensuring it is only visible for storable (goods) products and hidden for service and combo products.
This update resolves a visual problem in the website editor previews, specifically with the filmstrip layout. An undefined variable was causing placeholder rectangles to disappear, resulting in a broken design. The fix removes an unused template and ensures the correct styling is applied.
Original PR description
The editor previews are not having the expected design due to the `c` and `p` variables being undefined. Steps to reproduce for eg. filmstrip: - Disable the `categories_opt_top` (Categories: top) - Hover the "Top" editor button - See the filmstrip is missing it's placeholder rectangle "text" due to the width style not being applied. task-6047816 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257029 Forward-Port-Of: odoo/odoo#255339
This update resolves an issue related to the way receipts are generated in Point of Sale. The change removes an outdated function used for image processing, ensuring better stability and compatibility with newer versions of Odoo. This improves the reliability of the receipt generation process.
Original PR description
This commit simplifies the qrcode generation and background color handling while removing reliance on deprecated (since v12.1.0) Pillow Image getdata() function. Reference: - https://pillow.readthedocs.io/en/stable/deprecations.html#image-getdata
This update addresses a warning related to the Docutils library, a key component of our API documentation. The change ensures compatibility with a newer version of Docutils, preventing potential issues with our documentation generation process. This ensures our API documentation remains reliable and up-to-date.
Original PR description
Argument "writer_name" will be removed in Docutils 2.0. Specify writer name in the "writer" argument. Reference: - https://docutils.sourceforge.io/0.22/RELEASE-NOTES.html#writers Forward-Port-Of: odoo/odoo#257348