Wednesday, June 10, 2026
33 changes · saas-19.3
Enhancements to existing features
This update improves the D300 VAT report for Romanian businesses. The report's name has been changed to better align with local regulations and reporting requirements. This ensures accurate and compliant financial reporting for our Romanian customers.
Original PR description
Rename VAT report fom Romania task-5423935 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252511
Resolved issues and error corrections
This update fixes a minor visual issue in the manufacturing process. The 'days' text was missing from the lead time field, creating a slightly confusing user experience. The fix ensures the 'days' label is always displayed correctly, improving clarity and usability for users managing manufacturing schedules.
Original PR description
Step to reproduce: 1. Go to Manufacturing 2. Create a new BoM or open an existing one 3. Go to the Miscellaneous tab 4. The 'days' text is missing after the manufacturing lead time field Fix: - Display the missing 'days' text after the manufacturing lead time field. - Fix the layout so that 'days' is perfectly aligned for both fields. Task-6246424
Features or functions removed from Odoo
This update corrects a minor issue where a file was incorrectly added to the Odoo account_peppol module. The file was a byproduct of a previous porting effort and a discrepancy in a related version. This change ensures the system operates with the correct configuration.
Original PR description
It was added in the FW-port of the PDP PR by the cherry-picking since there was a diff in the file in saas-19.2 (where the file still existed). task-None
This update fixes an issue where the project template dropdown in demo mode had a cluttered appearance, making it difficult to read. The fix removes a styling element that caused text to overlap, ensuring a clean and user-friendly experience for all users.
Original PR description
Steps to reproduce: == - Login as demo/onboarding user - Open Project app - Click on New - Observe the template dropdown list Issue: == The template dropdown items are rendered with collapsed row height and poor vertical spacing in demo mode, making the list hard to read. Cause: == The template dropdown items utilized the `pe-0` utility class, which removed the padding at the end of the element. For non-admin users this caused the template name to touch the right edge of the container. Fix: == Removed the `pe-0` from the `DropdownItem` to restore standard right-side padding, and ensure consistent and readable row heights for both Admin and Demo users. task-5338191 Forward-Port-Of: odoo/odoo#267610 Forward-Port-Of: odoo/odoo#242983
This update resolves a test failure caused by incorrectly sending raw PDF data instead of the expected base64 encoded format. The fix ensures test data is properly formatted, preventing errors and maintaining the stability of the payroll accounting module.
Original PR description
This commit fixes an error when running the `test_employee_job_change` test on Python 3.14, which is stricter about base64 validation. Ultimately, the root issue was that raw PDF content was being passed when a base64 representation was actually expected (which is obviously invalid base64). runbot-938173 Forward-Port-Of: odoo/enterprise#119786 Forward-Port-Of: odoo/enterprise#118523
This update resolves an issue where users were unintentionally able to select properties within the field selector widget. The fix adds a new option to the widget and includes a corresponding test to ensure proper functionality. This improves the user experience and prevents potential data entry errors.
Original PR description
- Backporting this [commit], for adding the `allow_properties` option to `field_selector` widget in `saas-18.2` for using the functionality in linked enterprise commit. - Also, added a test for `allow_properties` option. - For forward ports, only the test will be merged, as `allow_properties` is already included in the original commit. [commit]: https://github.com/odoo/odoo/pull/215767/changes/7cd18c07b5e008bff072d10375c908eb77434fde sentry-7378769090 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268545 Forward-Port-Of: odoo/odoo#257833
This update resolves a potential error in the Hong Kong payroll calculations. Specifically, it prevents a division-by-zero issue that could occur when a resource calendar is missing or when an employee has zero hours per week. This ensures accurate payroll processing for Hong Kong businesses.
Original PR description
. Add a check for a null resource calendar and zero hours per week. task-6229271 Forward-Port-Of: odoo/enterprise#117685
This update fixes an issue where subtype information was lost when messages were moved between records in Odoo. Now, users will see the subtype description in the chatter interface, providing clearer context for conversations. This enhancement improves communication and data transparency.
Original PR description
Currently, when we move a message from one record to another, the subtype is cleared.Because of this, the description is not visible and the transferred record shows it as empty. In this commit, we append the subtype description into the message body.So the user can see the subtype description in chatter. task-6227750 Forward-Port-Of: odoo/odoo#265003
This update resolves an error that occurred when sending invoices with Danish VAT numbers via Peppol. Now, customers in Denmark can use VAT numbers without the 'DK' prefix, and the system will correctly generate the Peppol endpoint. This ensures invoices are processed correctly and avoids potential errors during international electronic invoicing.
Original PR description
Current behavior before PR: - Currently, when we include `DK` country prefix in the VAT number, it automatically computes the peppol endpoint with the `DK` prefix for customer from Denmark. - However, there are cases where the VAT number may not include `DK` country prefix, while the corresponding peppol endpoint still does. - In such situations, when sending an invoice via Peppol, the following error occurs: "Errors occurred while creating the EDI document (format: UBL BIS Billing 3.0.12): The VAT of the customer should be prefixed with its country code." Desired behavior after PR is merged: - Now customer from Denmark can have vat without country prefix `DK` and peppol endpoint with prefix `DK` and can send invoice via peppol. task-6119563 Forward-Port-Of: odoo/odoo#263262
This update resolves an issue where generating PDFs with fillable forms containing no data would cause a system error. The fix skips the PDF merging process when no content is present, preventing an error and ensuring PDFs are always generated correctly. This improves the reliability of PDF reports.
Original PR description
Version: 19.0 Issue: - Uploading a fillable PDF with no filled-in values caused an error. Cause: - When all form fields are empty, nothing is drawn on the ReportLab overlay canvas, producing a 0-page PDF. - Calling getPage(0) on an empty page list raised an IndexError. Fix: - Skip the page merge when the overlay has no pages to avoid the IndexError on empty fillable forms. Forward-Port-Of: odoo/enterprise#119803 Forward-Port-Of: odoo/enterprise#119677
This update fixes a visual issue in the portal chatter interface, specifically the alignment of the Follow/Unfollow button. The problem was caused by duplicate padding settings that have now been removed. This ensures a cleaner and more professional look for users interacting with shared projects.
Original PR description
**Steps to reproduce:** 1. Log in as a portal user. 2. Open a shared project and then open any task within it. 3. Observe the vertical spacing above the Follow/Unfollow button and the chatter…
**Steps to reproduce:** 1. Log in as a portal user. 2. Open a shared project and then open any task within it. 3. Observe the vertical spacing above the Follow/Unfollow button and the chatter component. **Issue:** The chatter UI has incorrect vertical spacing, causing elements like the Follow/Unfollow button to sit too far down and appear misaligned. **Cause:** The pt-2 padding class was hardcoded in two separate locations: 1. The compileChatter wrapper in project_sharing_form_compiler.js. 2. The portal.Chatter XML template. When combined this caused a double-padding effect forcing excessive space. **Fix:** Removed the hardcoded pt-2 class from both the JavaScript compiler wrapper and the core XML template. This eliminates the double-padding conflict. This resolves the alignment issue in Project Sharing and does not affect the layout or functionality of other portal components. task-4203362 Forward-Port-Of: odoo/odoo#268977 Forward-Port-Of: odoo/odoo#257490
This update ensures that descriptions are correctly populated on sales order lines when adding delivery items. Previously, only the product name was used, leading to incomplete order details. This fix maintains consistent and accurate product descriptions across all order stages, improving order clarity and reporting.
Original PR description
When a line is added to a delivery related to a sale order, the corresponding line created in the sale order uses only the display_name as a description. This commit makes sure that if a previous SO line exists for the product, the new line uses the same description. Otherwise we call `get_product_multiline_description_sale()` Steps to reproduce: - Create a product with a description in the Sales tab - Create a quotation with any product (can be said product) and confirm it - Go to the delivery action, and add a new line with the product in the view, set delivered quantity to 1 - After Validating, you'll notice that the new line in the Quotation doesn't have a description opw-6175891 Forward-Port-Of: odoo/odoo#267425 Forward-Port-Of: odoo/odoo#262276
This update enhances the SMS account registration process by adding clear error messages to the IAP system. Specifically, it now identifies issues like unsupported countries or inactive database records, providing better guidance to users. This improves the reliability and user experience of the SMS feature.
Original PR description
This commit add some error messages (country_not_supported, not_active_db) received by IAP. Task-6240200 IAP: https://github.com/odoo/iap-apps/pull/1612 Forward-Port-Of: odoo/odoo#267459
This update fixes an issue where the Balance Sheet report export was incorrectly including all accounts instead of the selected one when using the date filter. The fix removes a filtering process that was unintentionally introduced, ensuring the report accurately reflects the user's chosen account selection. This improves the reliability of financial reporting.
Original PR description
Steps: - Open Balance Sheet report and unfold lines - Open the General Ledger from a line with an account - On GL report, change date filter - Export XLSX report -> We export all accounts instead of the one selected in the search bar Cause: Since f8dceec74e44ffe4aef67655be8811c96da91eba we filter out the filter if a default account is defined in the context which is the case in the `caret_option_open_general_ledger` method Fix: Remove the filtering as the behavior that was fixed by the mentioned commit does not happen anymore. opw-6234427 Forward-Port-Of: odoo/enterprise#119588 Forward-Port-Of: odoo/enterprise#119156
This update fixes a visual issue where the carousel display would become unstable when images were resized or changed. The update uses a new system to automatically adjust carousel item heights, ensuring a smooth and consistent user experience. This prevents layout problems and improves the overall appearance of the website builder.
Original PR description
In a carousel snippet all carousel items keep a consistent height to prevent layout jitter when sliding. The height synchronization was broken in the `s_carousel` snippet when item dimensions were modified via border overlays (padding changes). The issue was caused by the resize event being triggered from a different jQuery instance than the one used to register the height synchronization listener, preventing the handler from being executed. Steps to reproduce (Border Overlay): 1. In the website builder, add the `s_carousel` snippet. 2. Drag the lower border overlay so that the height of an image increases. 3. Navigate through the carousel and observe height changes causing a jitter effect. Task: [5135520](https://www.odoo.com/odoo/project/974/tasks/5135520) Forward-Port-Of: odoo/odoo#268722 Forward-Port-Of: odoo/odoo#265549
This update prevents a disruptive 'Access Error' in the command palette that appeared when users without accounting access attempted to use accounting report commands. The fix ensures that the system gracefully handles access restrictions, improving the user experience. It corrects a technical issue where the system incorrectly displayed an error message instead of simply not offering the command.
Original PR description
…n-accounting users Before this commit, users without accounting access rights would encounter an "Access Error" when typing in the command palette. This occurred because the 'account_report_variants' command provider was registered in the global namespace and unconditionally executed an RPC call to (get_available_variants) as soon as the user typed two or more characters. The backend ACLs correctly blocked this request, but resulted in a disruptive error dialog for the user. This commit fixes the issue by verifying that the user has access to the accounting reports or the acounting app, if they don't it would return an empty list. Steps to reproduce the bug: 1. Log in as admin 2. Go to the Users view 3. Set ESG to 'No' 4. Set Accounting to 'No' 5. Refresh the page 6. Open and use the command palette -> Access Error: You are not allowed to access 'Accounting Report' records. task: 6246337 m
This update ensures that fiscal category and product information is automatically loaded when using the self-order blackbox feature. Previously, this data wasn't consistently available, leading to potential inaccuracies. This change improves the reliability and accuracy of self-order transactions.
Original PR description
Before this commit, the fiscal category and the products work in and work out weren't necessarily automatically loaded when using the self with a blackbox, it is now the case. Forward-Port-Of: odoo/enterprise#117288 Forward-Port-Of: odoo/enterprise#117044
This update fixes an issue where self-order receipts incorrectly displayed 'Service at Table' instead of 'Pickup At Counter' when a customer selected a counter service without identification. This change ensures the receipt accurately reflects the customer's order method, improving clarity and accuracy for both staff and customers. The fix was implemented as part of the standard Odoo development process.
Original PR description
When selecting a preset with a service at counter but without identification, after a self order the receipt header was wrongly showing "Service at Table" instead of "Pickup At Counter". This is now fixed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264454 Forward-Port-Of: odoo/odoo#264115
This update fixes an issue where untaxed invoice lines were incorrectly inheriting datev code from the previous line in the report. This resulted in inaccurate datev reports, particularly for German companies. The fix ensures that untaxed lines now correctly have an empty datev code, aligning with the expected report format.
Original PR description
**PROBLEM** Untaxed move lines would take the datev code of the previous line instead of having no datev code like they should. **STEP TO REPRODUCE** 1. On a german company, create an invoice with a line with tax 19% I, and a line that is untaxed (with a non-null price). 2. On the general ledger, generate the datev zip. 3. Unzip, and open the account entries csv, and notice the 2nd line of the invoice as the datev code set to something instead of it being empty (column BU-Schlüssel). opw-6141003 Forward-Port-Of: odoo/enterprise#118486
This update resolves an error that occurred during DHL delivery confirmations when the scheduled delivery date was missing or set to a past time. The system now automatically sets the delivery date to one hour in the future, preventing the error and ensuring successful order confirmations.
Original PR description
When confirming the delivery of an order using DHL shipping method we get an error that the date must be in the future. This happens when the scheduled date was not set, or set for a time in the past. This commit automatically sets the time to 1 hour in the future and bypasses the user error. opw-6148927 Forward-Port-Of: odoo/enterprise#116211
This update removes a specific message from invoices sent outside of PEPPOL, which was inappropriate for Business-to-Consumer (B2C) customers. The change ensures that B2C invoices are cleaner and more professional, aligning with customer expectations. This fix was implemented to improve the user experience for B2C transactions.
Original PR description
Currently, if the invoice was not sent through PEPPOL, it is indicated in the mail footer. However, this message is not appropriate for B2C customers. To avoid this, we remove this footer for customers with empty or '/' VAT (B2C). task-6167439 Forward-Port-Of: odoo/odoo#269094 Forward-Port-Of: odoo/odoo#262412
This update ensures that DATEV customer and supplier export files accurately reflect customer information for non-EU countries like Switzerland. Previously, incorrect fields were populated, but this fix now correctly uses the 'Land' field for these customers, aligning with DATEV's data format requirements and preventing errors in reporting.
Original PR description
### Issue: In DATEV customer and supplier exports, partners outside the European Union still had the `EU-Land` and `EU-UStID` fields filled However, these fields must only be used for EU countries…
### Issue: In DATEV customer and supplier exports, partners outside the European Union still had the `EU-Land` and `EU-UStID` fields filled However, these fields must only be used for EU countries For non-EU countries, the `Land` field should be filled instead, and is required whenever the country is not Germany https://developer.datev.de/en/file-format/details/datev-format/format-description/debitorskreditors ### Cause: `_l10n_de_datev_get_partner_list` did not distinguish between EU and non-EU countries As a result, any partner with a VAT number could populate `EU-Land` and `EU-UStID`, even if the country was outside the EU Greece also requires a special case: its VAT prefix is `EL` so the `EU-Land` too, while the country code used in `Land` must remain `GR` ### Steps to reproduce: - Install `l10n_de_reports` and switch to the DE company - Create a customer in Switzerland with a valid VAT number - Create and confirm an invoice for that customer - Go to Accounting → Audit Reports → General Ledger - Select the full year - From the gear menu, export DATEV DATA (zip) - Open the `EXTF_customer_accounts` file ### Before the fix: `EU-Land` and `EU-UStID` are filled for the Swiss customer, while `Land` is empty ### After the fix: `EU-Land` and `EU-UStID` are empty for non-EU countries such as Switzerland, while `Land` is correctly filled `Land` is filled using the following priority: 1. Partner country_code 2. Country extracted from the VAT number 3. Empty opw-5902565 Forward-Port-Of: odoo/enterprise#119780 Forward-Port-Of: odoo/enterprise#113835
This update fixes a misleading error message displayed when a shift template's start time was set after its end time. The message has been corrected to accurately state that the start time must precede the end time for a valid shift template. This ensures users receive clear and helpful guidance.
Original PR description
Before this commit, when the user set a start hour after end hour, the error message raised said: "The start hour cannot be before the end hour for a one-day shift template.". Which does not make sense since the start hour has to be before the end hour to be valid. This commit fixes the error message to say the start hour cannot be after the end hour. Forward-Port-Of: odoo/enterprise#119637
This update resolves a crash in the payslip PDF report that occurred when employees didn't have a bank account configured. The fix adds a simple check to ensure the bank account section is only displayed if an employee actually has a linked bank account, improving report stability and preventing errors.
Original PR description
The payslip PDF report crashed when the employee had no bank account configured because the template tried to access bank_account_ids[0] unconditionally. Add a t-if guard on the bank account div to only render it when the employee has at least one bank account linked. Forward-Port-Of: odoo/enterprise#115893
A recent test was failing due to a minor issue with how content snippets were being dropped onto the website builder. This fix ensures snippets are consistently placed in the correct dropzone, resolving the test failure and improving the stability of the website builder functionality. The change is a simple correction to the test setup.
Original PR description
Test that was testing that we cannot drop some snippets in a table of content sometimes failed due to the fact that it could sometimes drop in the wrong drop zone. This happens because 2 dropzones are really close to each other: <--- dropzone ---> [1] <--- toc start ---> <--- dropzone ---> [2] <--- section ---> <--- dropzone ---> [3] ... <--- toc end ---> When we move the snippet thumbnail to the dropzone [2], and drop it by calling `getDragHelper` it recomputes the position of the thumbnail, and sometimes it may drop the snippet in the first dropzone [1], breaking the test flow. We fix it by moving the snippet to the third dropzone [3], where it surely will drop, as there are no neighboring dropzones. runbot-241922 Forward-Port-Of: odoo/odoo#268473
This update clarifies the reporting of employee hours by renaming a confusing column from "Expected Hours" and "Theoretical Hours" to "regular hours". This change ensures that the report accurately reflects the hours an employee is scheduled to work, improving data understanding and reporting accuracy.
Original PR description
The column name "Expected Hours" and "Theoretical Hours" is confusing since it doesn't show the hours that the employee is supposed to work according to their contract, just the number of hours that are not considered overtime. This commit renames the column to better reflect the measure that is shown. task-6123642 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#262230
This update corrects a bug that caused the growth comparison percentage in financial reports to fluctuate when users switched the period order. The original code incorrectly assumed the first period was always the most recent, leading to inaccurate calculations. This change ensures consistent and reliable growth percentage displays regardless of the selected period order.
Original PR description
The feature had originally been implemnted at a time where the period_order couldn't be modified, and always corresponded to what we call 'descending' now. Because of that, we assumed the column at index 0 was always the most recent period ; which caused the growth comparison percentage to change when switching period order. Forward-Port-Of: odoo/enterprise#119782 Forward-Port-Of: odoo/enterprise#118835
This update ensures that sub-properties within records are now correctly exported when using the 'Insert in Spreadsheet' feature. Previously, this functionality was limited, but this fix aligns the export behavior across different views (kanban, list, and spreadsheet) to match the capabilities introduced in version 19.2. This enhances data consistency and usability.
Original PR description
* = [documents_spreadsheet] When exporting properties from records in the web kanban and list views, sub-properties created within a record were previously not supported. Support for exporting these sub-properties has now been added. However, in spreadsheet this should only be enabled from saas-19.2 onwards (where it is already available). To keep the behavior aligned with the usual flow on earlier versions, this filters out the sub-properties exported from the record in `spreadsheet_edition`. community: https://github.com/odoo/odoo/pull/264267 task-6123524 Forward-Port-Of: odoo/enterprise#119603 Forward-Port-Of: odoo/enterprise#118913
This update resolves a technical issue that was preventing French VAT reports from generating correctly. Specifically, a formatting error in the XML data caused a failure. The fix ensures accurate report generation by correcting the handling of street address fields.
Original PR description
When the street field is shorter than 30 char and street 2 is false, we end up with " False" in the xml, which will return an error in aspone. no task id Forward-Port-Of: odoo/enterprise#119718
This update fixes an issue where adding a recurring product to a confirmed sales order without a linked subscription plan would cause an error. The change adds a validation to prevent this, ensuring that recurring products are only added when a valid subscription is present, improving data integrity and preventing unexpected errors.
Original PR description
Steps to reproduce: - Go to Sales → Products. - Create a Service product and enable the Recurring option. - Open an already confirmed Sales Order that does not contain any recurring products. - Add the newly created recurring product to the confirmed order. - Click Save. - Observe that a traceback occurs. Cause: - When adding a recurring product without a subscription plan to a confirmed Sale Order, _timesheet_create_task() attempts to compute a start date using order.next_invoice_date, which is not set. - This leads to a TypeError when `order.next_invoice_date` receives `False`. Solution: - Add a validation to prevent adding recurring products without a subscription plan and raise a proper `UserError` instead of allowing the code to reach task generation logic. task-5932700 Forward-Port-Of: odoo/enterprise#119955 Forward-Port-Of: odoo/enterprise#107691
This update resolves a performance issue within the tests for the 'Discuss' feature in Odoo. The fix optimizes a database query, resulting in faster test execution times. This improves the overall stability and reliability of the Odoo platform.
Original PR description
runbot-243772 https://github.com/odoo/enterprise/pull/119886 Forward-Port-Of: odoo/odoo#269111
This update addresses a performance issue within the Discuss module, specifically related to how it counts conversations. The change optimizes the query, resulting in faster response times and a smoother user experience. This improvement ensures the Discuss feature remains efficient for all users.
Original PR description
runbot-243772 https://github.com/odoo/odoo/pull/269111 Forward-Port-Of: odoo/enterprise#119886
This update fixes a translation error in Odoo's Argentine localization (l10n_ar) module, ensuring fiscal position names accurately reflect their purpose. Previously, a confusing translation led to duplicate entries, which this change resolves, streamlining the system and improving data clarity.
Original PR description
### Description of the issue/feature this PR addresses: Fix fiscal position spanish translation to match with its real purpose. ### Current behavior before PR: * We have a fiscal position name that does not match with its purpose: Represent the local operations inside argentina (country: Argentina) but the name is " Purchases / Sales abroad" * Two fiscal positions have the same translation value and this is confusing ### Desired behavior after PR is merged: * we do not have duplicated fiscal position anymore * Domestic fiscal position is taged with the correct name --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264257 Forward-Port-Of: odoo/odoo#248462