Tuesday, June 9, 2026
22 changes · 19.0
New functionality added to Odoo
This update improves the Swiss payroll payslip report by incorporating the necessary source tax rate information. This ensures accurate tax calculations and reporting for Swiss businesses using Odoo Enterprise, aligning with local tax regulations.
Original PR description
This commit adds the source tax rate in the payslip report for Swiss payroll. task-4979330 Forward-Port-Of: odoo/enterprise#112842
Enhancements to existing features
The SMS account registration flow now shows clearer messages when setup cannot continue, such as unsupported countries or inactive databases. This helps users understand why registration failed and what may need attention instead of seeing a generic error.
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
Resolved issues and error corrections
Odoo now accepts the official Turkish placeholder VAT identifiers used for invoices to non-taxpayer consumers and overseas customers. This prevents valid Nilvera-related Turkish invoices from being blocked when a real tax ID is not required, while keeping normal VAT validation in place.
Original PR description
- Turkish regulations allow the usage of special placeholder identifiers for invoices issued to non-taxpayer end consumers and overseas customers, where providing a real TCKN/VKN is not mandatory. - Although Odoo already referenced these identifiers in the VAT format help message (`11111111111` for TCKN and `2222222222` for VKN), they were still rejected by the Turkish VAT validation logic because they do not pass the standard `stdnum` checks. - This commit extends the Turkish VAT validation to explicitly allow these GİB-approved placeholder identifiers while preserving the existing standard VAT validation behavior and Nilvera test environment exceptions. taskID-6237629
Businesses can now save valid 12-digit Uzbekistan tax IDs for customer contacts. This prevents unnecessary validation errors when entering compliant VAT numbers, reducing friction for invoicing and customer setup.
Original PR description
**Steps to reproduce:** - Install the `base_vat` module. - Navigate to Invoicing > Customers. - Create a new contact and set the country to `Uzbekistan`. - Enter `012345678901` as the `Tax ID` and try to save. **Observation:** `The VAT number [012345678901] for partner [test] does not seem to be valid. ` `Note: the expected format is XXXXXXXXX [9 digits]` **Root Cause:** At [1], the method `check_vat_uz` only validates VAT numbers with exactly 9 digits. As a result, 12-digit VAT numbers are rejected. **Fix:** This commit prevents errors and ensures that users can set a `12-digit` VAT number. [1]: https://github.com/odoo/odoo/blob/017237b975c72ce94ca0e7d91a99a31fd5907749/addons/base_vat/models/res_partner.py#L659-L660 opw-6176587
Website carousels now stay under manual control while a page is being edited. This prevents slides from changing automatically and stealing focus, making page editing smoother and less disruptive.
Original PR description
Commit [3ba3e45] paused carousels upon focus, and resumed it upon focusout. However, that behavior should be disabled in edit mode, as cycling is disabled (moving through the slides is only done manually). Otherwise, the carousel cycles and, after each slide, takes the focus, which makes editing the page a nightmare. [3ba3e45]: https://github.com/odoo/odoo/commit/3ba3e45b2ab995412e1a7ced2c46b9294dc353b8 task-6264462 Forward-Port-Of: odoo/odoo#268333 Forward-Port-Of: odoo/odoo#268046
The Project app now correctly hides the Show Sub-Tasks option in mobile My Tasks when it should not appear. The To-do views also no longer show this option because to-do items do not support subtasks, reducing confusion for users.
Original PR description
Steps to reproduce: - Install project - Open the My Tasks menu on mobile view Issue: The "Show Sub-Tasks" option was visible in the My Tasks menu on mobile view. Cause: The condition only applied `showTaskOptions` to the desktop part of the expression, so the dropdown was still rendered on mobile when there were no embedded actions. Apply `showTaskOptions` to the whole condition to properly hide the dropdown in the My Tasks mobile view. Fix-2: Steps to reproduce: - Install project_todo Issue: The Show Sub-Tasks button was visible in project_todo views even though To-do items do not support subtasks. Fix: Ensure that the Show Sub-Tasks button is hidden in project_todo views. task-6026239 Forward-Port-Of: odoo/odoo#255283
Fixed an issue where the chatter area in shared project tasks had too much space above it, making the Follow or Unfollow button look misaligned. The layout now appears cleaner and more consistent for portal users without changing any functionality.
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 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#257490
The web calendar date logic now keeps the displayed year aligned with the week number when a week crosses from one year into the next. This prevents confusing labels such as showing week 53 under the following year, helping reports and date-based views remain consistent around New Year.
Original PR description
### Description of the issue/feature this PR addresses: getLocalYearAndWeek is used to get the year and week number for a given date. When a week overlaps 2 years, the week number is taken based on…
### Description of the issue/feature this PR addresses: getLocalYearAndWeek is used to get the year and week number for a given date. When a week overlaps 2 years, the week number is taken based on the year where the week has most days. So if a week has 5 days in year Y and 2 in Y+1. The week is taken counting from Y (probably week 53). If a week has 3 days in Y and 4 in Y+1, then the week number is reset to 1. The year, however did not follow the same logic, and was taken as the year of the last day of the ISO week. ### Current behavior before PR: At the end of 2026, this will cause problems because the week number will run as: * 2026, week 52 (all days in 2026, OK) * 2027, week 53 (most days in 2026, last day in 2027, Not OK) * 2027, week 1 (all days in 2027, OK) ### Desired behavior after PR is merged: This commit aims to solve this issue by following the same logic for week number and year, so that the end of 2026 will go as: * 2026, week 52 (no changes) * 2026, week 53 (year is not incremented if week number is not reset) * 2027, week 1 (no changes, but year is incremented when week number is reset) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267871 Forward-Port-Of: odoo/odoo#267656
Portal chatter message links now keep their user-friendly display text after the page is refreshed. This prevents confusing raw links from reappearing and keeps portal conversations easier for customers and users to follow.
Original PR description
Before this commit, a message link posted on a portal chatter would lose it's prettified link (introduced in [1]) upon page refresh. This happens because `prepareMessageBody` needs the thread's `displayName` to create the prettified message link, which is not sent on portal chatter init. This commit fixes the issue by sending the thread's `display_name`. [1] https://github.com/odoo/odoo/pull/221069 task-6204819
Carousel sections in the website editor now keep a consistent height after images or borders are resized. This prevents visible jumping while visitors or editors move between carousel slides, creating a smoother page experience.
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#266173 Forward-Port-Of: odoo/odoo#265549
When a message is moved from one record to another, its subtype description is now added to the message content instead of disappearing. This keeps chatter entries clear for users and prevents transferred messages from appearing empty or missing context.
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
The discussion channel form no longer shows the duplicate option, preventing users from trying to copy channels in a way that caused an access rights error. This keeps the channel menu focused on useful actions and avoids confusion for users.
Original PR description
duplicating channels does not provide much value. when you try to copy channel error comes like `you do not have enough rights to access the field ai_agent_id on Discussion Channel (discuss.channel).` now we are remove the duplicate button from channels form view cog menu as its does make sense to use it there at all. task-5494736 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an unreliable automated test in the website editor by ensuring snippets are dropped in the intended area. The change helps keep quality checks stable and reduces false test failures without changing customer-facing behavior.
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
Employee profile photos now keep their natural proportions in employee form views, preventing vertical images from appearing stretched. The update also aligns the photo styling with similar views for a more consistent employee record experience.
Original PR description
Vertical images were stretched due to changes made during the form view's redesign (a58ed7d) and after adding a fixed size (6d40ab9). We've added an `.object-fit-contain` class to fix this issue and a rounded border to make the image's aligned with other similar views. task-5418517 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262033
This update resolves an issue where uploading fillable PDFs with blank fields resulted in an error. The fix prevents a technical error (IndexError) that occurred when generating PDFs with no data, ensuring that all PDF generation processes now function correctly regardless of form field content.
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.
This update resolves an issue where the commission report displayed empty groups when linked to inactive commission plans. By excluding these plans from the report's initial data processing, the report now accurately shows populated groups, providing a cleaner and more reliable view of commission achievements. This ensures sales teams have accurate data for their performance analysis.
Original PR description
Steps to reproduce: 1. create a commission plan 2. invoice an SO with the linked salesperson to the plan to progress towards the target 3. Archive the commission plan 4. Go to Sales > Commissions > Commissions 5. Remove all filters The `sale.commission.report` includes empty groups for `sale.commission.achievement.report` that are linked to inactive commission plans By excluding said plans from the initial join, the report would display populated groups only without the clutter. opw-6177132 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#119695 Forward-Port-Of: odoo/enterprise#117615
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 conditional check to the report template, preventing it from attempting to access bank account information when it's not applicable. This ensures the report consistently generates without 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.
This update ensures that DATEV customer and supplier export files accurately reflect customer information. Previously, non-EU customers (like those in Switzerland) incorrectly included EU-specific fields. Now, the system correctly uses the customer's country code in the 'Land' field, aligning with DATEV's requirements and improving data accuracy for 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#119593 Forward-Port-Of: odoo/enterprise#113835
This update resolves a minor issue where the displayed name for the Sendcloud website delivery module had a typo ("Sendcould"). All other references within the system use the correct spelling. This ensures consistent and accurate module identification.
Original PR description
The displayed name contained a typo ("Sendcould" instead of "Sendcloud") All other references already use the correct spelling, so no further changes were necessary.
opw-6239003
Forward-Port-Of: odoo/enterprise#118416
Forward-Port-Of: odoo/enterprise#118223This update streamlines spreadsheet document handling by disabling versioning for spreadsheets and frozen spreadsheets. This prevents unnecessary data duplication and improves performance, aligning with how spreadsheets manage their history through revisions. The change also hides the versioning action for these document types.
Original PR description
This PR consists of two commits. The first commit hides the Manage Versions action button for spreadsheet and frozen spreadsheet documents, since versioning is disabled for those records. The second commit is a backport of enterprise commit 0e319d0. It disables document versioning for spreadsheet and frozen spreadsheet documents, as spreadsheets already manage their history through spreadsheet revisions. This avoids creating unnecessary document history attachments when spreadsheet data is written or when a spreadsheet is copied. Task: [6236496](https://www.odoo.com/odoo/project/2328/tasks/6236496) Forward-Port-Of: odoo/enterprise#119619 Forward-Port-Of: odoo/enterprise#118484
This update corrects a display issue related to Sunday formatting in the Thai (th_TH) locale, which was impacted by a recent Chrome browser update. The change ensures consistent and accurate date display across different Chrome versions, maintaining a positive user experience for Thai-speaking customers.
Original PR description
Chrome 148 changed the display format for Sundays in the th_TH locale. This commit modifies the test to expect either the full or abbreviated day name, depending on what the browser Intl API actually returns. Forward-Port-Of: odoo/enterprise#119708
This update prevents empty ICS calendar files from being generated when scheduling shifts. Previously, clicking 'Add to Calendar' resulted in an unusable file. The fix ensures ICS files are only created when a valid shift slot is linked to a resource, improving the scheduling process.
Original PR description
**Step:** - install planning - create a resource - create an open shift for a future date - in Gantt view: - publish shift and select the created resource - click “Publish & Send” - check the email and click “Add to Calendar” **Issue:** Currently, clicking “Add to Calendar” generates an empty ics file. **Reason:** During ics file generation, the planning token to find a slot using the planning date and employee. but, no matching slot is found, so the process returns an empty slot, resulting in an empty ics file. **Fix:** Generate the `planning_url_ics` only when a slot is linked with an employee. Otherwise, hide the “Add to Calendar” button and do not generate the ics file. Forward-Port-Of: odoo/enterprise#118978