Tuesday, April 7, 2026
19 changes · saas-19.1
Enhancements to existing features
This update adds labels to journal entries that initiate cash basis accounting. This provides clearer traceability, allowing us to understand exactly which documents led to the creation of cash basis line items. It improves auditability and simplifies troubleshooting related to cash basis reporting.
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 resolves a technical issue that caused Odoo to crash when calculating annual leave days for newly created employees. The fix prevents the system from attempting direct database queries when a record is in its initial 'New' state, ensuring smoother operation and preventing errors.
Original PR description
This commit will add a guard condition to the `l10n_ae_annual_leave_days_total`'s compute method to skip SQL execution when the record has no database ID. Why: Users experienced a server-side traceback when opening Odoo Studio on the employee form and enabling the 'Annual Leave Days Total' field. The traceback occurred because the field's compute method attempted to execute a direct SQL query using `self.ids`. What: - Added a check for `self.ids` at the beginning of the compute method. - Ensured the field defaults to `0` or a neutral value if the record is still in the "New" state. task-5940225 Forward-Port-Of: odoo/enterprise#112867
This update resolves an issue where spreadsheet names weren't correctly reflected after renaming. By removing the outdated caching mechanism and using 'no-cache' headers, the system now always fetches the latest spreadsheet data, ensuring users always see the correct version.
Original PR description
This reverts commit 8f3e242e197b2f269827499b0d89b2e9080f5d09. Etag was computed from the spreadsheet content, but we forget to take spreadsheet metadata (like the name, ...) into account. So when user renames a spreadsheet, the browser still has the old version in cache and does not fetch the new name. This commit removes the ETag and use no-cache headers to ensure browsers always fetch the latest version of the spreadsheet data. Task: 5441251
This update fixes an issue where clicking links within charts directed users to the wrong view for data sources. Now, links correctly navigate users to the appropriate view type (e.g., a list view for a list datasource), improving the user experience and ensuring accurate data access.
Original PR description
Currently, if the user clicks on a datasource link (inside a chart) they will be directed to the default view of the action realted to the datasource model but it will not go to the corresponding type of view (e.g. a list datasource should direct to a list view). Task-5957004
This update resolves a technical issue that could cause errors when generating sales achievement reports, specifically when filtering by the current period. The fix ensures the system correctly handles date formatting, preventing a ValueError and ensuring reports run smoothly. This improves the reliability of sales reporting.
Original PR description
Before this commit, the following traceback could occurs when filtering the current period in achievements.
File "/home/arj/PycharmProjects/worktree/saas-19.1/enterprise/sale_commission/report/achievement_report.py", line 79, in _search
date_to_list = date_to_domain and [datetime.strptime(d[2], '%Y-%m-%d') for d in date_to_domain if len(d) == 3 and d[2]]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 333, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data 'today' does not match format '%Y-%m-%d'This update resolves an issue where the system incorrectly identified late hours for employees without a recorded check-in time. The fix ensures that late hours visibility is only calculated when an employee has a valid check-in record, preventing errors and improving the accuracy of time tracking reporting.
Original PR description
_compute_l10n_sa_late_hours_visible, calling min() on the mapped check_in values and then .date() would crash with an AttributeError when check_in is False (e.g. during an onchange triggered by clearing the check_in field in the form view). Filter out records without a check_in before computing the date range, and mark them as not visible since late hours cannot apply without a check-in time. task-6067640
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 and preventing user confusion.
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 minor issue with the TDS/TCS report amounts in the Odoo accounting module for Russia (l10n_in). The automatic +/- sign handling was previously removed, and this change ensures the correct positive or negative sign is displayed for these report amounts, aligning with current tax regulations. This ensures accurate reporting for tax compliance.
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 ensures that only invoices can be grouped within the account_edi_ubl_cii module. Previously, grouping was allowed for various document types, which could lead to inconsistencies. This change improves data accuracy and compliance by limiting grouping to invoices, the intended use case.
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 resolves an issue where a company's Tax ID wasn't correctly displayed in documents. The fix ensures that the Tax ID entered in the document layout settings is now accurately shown, improving data visibility for accounting reports. This was caused by a previous code change and has been corrected.
Original PR description
### Steps to reproduce: - Download Accounting app - Open 'Settings' > 'Companies' > 'Document Layout' > 'Configure Document Layout' - Enter a 'Tax ID' and click continue > 'Tax ID' doesn't show in the document ### Cause of issue: The problem was introduced by https://github.com/odoo-dev/odoo/commit/fa55c2d1ca5db203ffaa13e10e4e4209717b7a6d, as the commited changes don't use the `company.vat` set by the user to be displayed in the documents. ### Fix: Since the `forced_vat` is only used in a few localizations, it is logical to check if the `company.vat` available for usage if there's no `forced_vat`. opw-5981630
This update resolves an error that occurred when a purchase order line's promised date was removed. Previously, the system would fail to calculate on-time delivery rates. The fix ensures that the comparison between dates only happens when a promised date is actually set, preventing the error and maintaining accurate reporting.
Original PR description
Currently, an error occurs when the user removes the promised date on a purchase order line. **Steps to Reproduce:** - Install the `purchase_stock` module. - Create a `purchase order` with an order…
Currently, an error occurs when the user removes the promised date on a purchase order line. **Steps to Reproduce:** - Install the `purchase_stock` module. - Create a `purchase order` with an order line. - `Confirm` the purchase order. - `Validate` the receipt using the smart button on the purchase order. - In the order line, make the `Promised Date` (optional, hidden) field visible. - Remove the value of the `Promised Date` and save. `AttributeError: 'bool' object has no attribute 'date'` After [this commit], the partner on-time rate depends on the promised date. When the user removes the Promised Date from the purchase order line, it tries to compute partner on-time rate. When it filters the move records based on the comparison between the PO line promised date and the move date and accesses the date from promised date [1], it raises an error. This commit ensures that the comparison between the move date and the promised date is performed only when the promised date exists. [this commit]: https://github.com/odoo/odoo/commit/2ce0107c914f5eab3b724119ef6c812c347cdc8d#diff-c3231f0c5829f511c10589fc2c2298fe1c03d59f59a04a1ba8a60c85383ffa42 [1]- https://github.com/odoo/odoo/blob/2936763b700fcf31e3fd126a7c412c274783f342/addons/purchase_stock/models/res_partner.py#L57 sentry-7384699891 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a problem where chart links didn't always direct users to the correct view type (like a list view) for data sources. Now, clicking on a datasource link within a chart will reliably take you to the appropriate view, improving the user experience and data accuracy.
Original PR description
Currently, if the user clicks on a datasource link (inside a chart) they will be directed to the default view of the action realted to the datasource model but it will not go to the corresponding type of view (e.g. a list datasource should direct to a list view). Task-5957004 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
This update fixes several issues within the Odoo spreadsheet component, improving its reliability and functionality. It includes bug fixes related to date formatting, grid layout, and error handling, ensuring a smoother user experience. This change is part of the 19.1 release.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fc2f8cdb34 [REL] 19.1.13 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fc2f8cdb34 [REL] 19.1.13 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/d0cd1efd9b [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/1a702e5b33 [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/24744dda83 [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/1719b27c12 [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/3586ef9341 [FIX] package: clean o-spreadsheet-engine leftovers [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/f8e7d2a595 [REV] spreadsheet: remove o-spreadsheet-engine package [Task: 6081583](https://www.odoo.com/odoo/2328/tasks/6081583) https://github.com/odoo/o-spreadsheet/commit/45e20d4f99 [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/11befa290e [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/c2891d4fa2 [FIX] config: move to ESM release tool [Task: sotg](https://www.odoo.com/odoo/2328/tasks/sotg) https://github.com/odoo/o-spreadsheet/commit/b2c6821808 [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/06c6715224 [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 reporting module, preventing duplicate data from being generated in the XML reports. The fix ensures that only one row (positive or negative) is populated, resulting in more accurate and reliable financial reports. This improves data consistency and reduces potential errors.
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
This update corrects a bug where invalid timezone selections (like 'localtime') in the event creation process caused website rendering errors. The fix removes unsupported timezones from the selection list, ensuring event dates display correctly and preventing potential runtime issues.
Original PR description
### Issue before this commit: When creating an event, the timezone selection dropdown could include values such as localtime or Factory. If one of these values was selected and the event was later…
### Issue before this commit: When creating an event, the timezone selection dropdown could include values such as localtime or Factory. If one of these values was selected and the event was later displayed on the website, it will led to a traceback error such as: Unknown timezone localtime. As a result, the event page will fail to render correctly or trigger runtime errors related to timezone handling. ### Steps to reproduce the issue: 1. Install Ecommerce and Events apps 2. Go to Ecommerce > Site > Events 3. Create a new test event 4. Activate the Unpublished button 5. Click on the button "Events" 6. Set the display timezone as localtime 7. Click the button "Go to website" 8. Traceback will appear saying: Unknown timezone localtime ### Cause of the issue: The issue was caused by the way the list of available timezones was generated. Timezones are retrieved using the system-provided timezone database through Python’s zoneinfo module. This list includes certain special or internal entries such as localtime and Factory. These entries are not meant to be used as real timezones but were still included in the selection field used by the event model. Since the code responsible for formatting event dates expects valid IANA timezone identifiers, selecting one of these special entries could cause failures. ### Reason to introduce the fix: The fix ensures that unsupported or special timezone entries are excluded from the list of selectable timezones. By filtering out values such as localtime and Factory, the system prevents users from selecting timezones that cannot be safely used in event date computations. opw-5994939 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where adding captions to images with `display:block` incorrectly removed surrounding text blocks. The fix ensures captions are applied correctly and the caption button remains active, preventing multiple captions from being added to the same image.
Original PR description
Steps to reproduce: - Go to To-do - Open a demo record (e.g., "Welcome Mitchell Admin") - Click on an image - Click on "Caption" from the toolbar - Click on the image again Description of the issue:…
Steps to reproduce: - Go to To-do - Open a demo record (e.g., "Welcome Mitchell Admin") - Click on an image - Click on "Caption" from the toolbar - Click on the image again Description of the issue: - When adding a caption, the parent paragraph block of sibling nodes is removed, making them direct children of the editable area. - After adding a caption, reopening the powerbox does not show the caption button as active, allowing multiple captions to be added on the same image. Cause: - When the image has `display:block`, `closestBlock` returns the image itself as its closest block. - As a result, when a caption is added to an image, its parent paragraph block is not split around the image even if the image has sibling nodes, and when `unwrapContents` is called, both the image and its siblings get unwrapped, making them direct children of the editable area. - Since `closestBlock` is the image (and not a `<figure>`), the caption button in the toolbar is not marked as active even when a caption already exists, so clicking it again adds another caption instead of removing the existing one. Solution: - Instead of using the image's `closestBlock` directly, find the `closestBlock` of its parent element. - This ensures the correct block is found even when the image has `display:block`. task-6051549 Forward-Port-Of: odoo/odoo#256436 Forward-Port-Of: odoo/odoo#255064
This update fixes an issue where the website header padding was incorrectly removed, leading to unexpected spacing. The change ensures the header boundaries are always visible regardless of background colors or images, improving the overall visual consistency of the website. This resolves a minor aesthetic problem and maintains a polished user experience.
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 resolves a visual problem in the website editor previews, specifically with the filmstrip layout. The issue was caused by undefined variables that prevented certain styles from applying, leading to a missing placeholder rectangle. The code has been updated to ensure these variables are correctly defined, restoring the expected design.
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#255339
This update resolves a warning related to outdated software used in our documentation generation process. The change ensures compatibility with newer versions of Docutils, preventing potential issues with future updates. This ensures our 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