Daily updates from Odoo
Wednesday, June 18, 2025
14 changes · 18.0
Enhancements to existing features
The point of sale now requires the scale reading to change before another weighed item can be added. This helps meet LNE certification requirements and reduces the risk of accidentally reusing a previous weight, even when other items are added in between.
Original PR description
In order to satisfy certification requirements from the LNE, we implement the following: - A product is weighed at e.g. 200g and added to the order - Another product is weighed. The weight must change from 200g before the user is allowed to add the item. - This should also happen even if another non-weighed product is added in-between. task-4859589 Enterprise PR: https://github.com/odoo/enterprise/pull/87296 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Slovenian companies can now use the national Model 01 payment reference format on customer invoices and sales journals. This helps payments follow local banking standards and makes invoice reconciliation more reliable for Slovenian businesses.
Original PR description
In this PR: - Introduced a new "Slovenian 01 (SI0125-1235-8403)" format for payment references, following Slovenia’s Model 01 standard. This format is selectable in Sales journals (Advanced Settings) and set as the default for Slovenian companies. task-4805083
This update improves UK company validation by using the standard company ID field, reducing duplicate data entry and improving consistency. It also updates CIS reporting and fixes payroll-related issues, including handling special tax code prefixes more reliably.
Original PR description
1) Re-use standard Company ID instead of creating a new field 2) Improve Company Validation for the UK 3) Update CIS Report
This update ensures the Enterprise point-of-sale IoT integration uses the latest behavior to avoid weighing the same item twice. It helps reduce checkout mistakes when products are weighed through connected scales.
Original PR description
The main changes are in the community PR odoo/odoo#213537. This commit simply adds a call in the `scale_service.js` override to ensure the new behaviour is also enabled in Enterprise. task-4859589
SEPA Direct Debit mandate checks now recognize mandates linked to child contacts when registering payments. If this setup may indicate a configuration issue, users receive a warning instead of being blocked by an error.
Original PR description
When creating a SEPA Direct Debit (SDD) mandate for a contact, mandates linked to a child contact are not recognized as valid at payment registration. It should be but it suggests a configuration issue so it needs a warning but not an error. task-4507135
Resolved issues and error corrections
Fixed package PDF reports so multiple packages no longer overlap on the same page. Each package now starts on its own page, making printed inventory package labels or reports readable and easier to use.
Original PR description
When printing package reports, when having two or more packages, every package was printing one on top of another, instead of cleanly one on each page. ### Steps to reproduce 1. Click on the general…
When printing package reports, when having two or more packages, every package was printing one on top of another, instead of cleanly one on each page. ### Steps to reproduce 1. Click on the general settings tab, and look for Packages in the search bar. Then, check the box under Operations in the Inventory section. 2. Go to the inventory app. 3. Click on receipts and New. 4. Fill the "Receive from" field, add a product line and specify an amount under "Demand". 5. Click on Mark as Todo. Then, click on the hamburger menu of the product line and add at least 2 packages, spreading the product amounts across them. 6. Click on validate. Then, click on the action menu (cog), click on print and click on "Packages". Once the PDF has finished downloading, open it. #### Expected behavior Each page prints the content of a single package. #### Unexpected behavior On the pdf, all the packages are one on top of another. ### Origin of the issue In the /odoo-community/addons/stock/report/report_package_barcode.xml file, a for-each operation is present. This for-each iterates over each package present in the report. However, no page break was setup. ### Explanation of the fix I simply added a page breaker as an anchor (line 150). ___ opw-4806024
Attendance durations are now calculated from the employee's original start and end times for fully flexible schedules. This prevents hours from being overstated when time zone adjustments are involved, improving payroll and attendance accuracy.
Original PR description
This commit fixes the calculation of the duration of an attendance record for an employee on a fully flexible working schedule. Previously, we were using the adjusted start and end times, which were adjusted from their original values to be the outer bounds of the interval made up of the original times and the UTC-converted times. This resulted in a duration that was too long. Now, we use the original start and end times to calculate the duration of the attendance because this value is timezone-agnostic.
This fixes an issue where slideshow navigation buttons could disappear after saving and reopening HTML content, such as appointment descriptions. Keeping these buttons prevents display errors and ensures users can continue navigating embedded slideshows normally.
Original PR description
Scenario: - in 18.0, insert a slideshow in sanitize_form=True (the default) html field, for example an appointment description - reload the page Result: the slideshow button have disappeared and a…
Scenario: - in 18.0, insert a slideshow in sanitize_form=True (the default) html field, for example an appointment description - reload the page Result: the slideshow button have disappeared and a traceback appear Issue: Since 3deb8050831c69ca1e32039622b322ffa38cc497 the slideshow uses BUTTON tags instead of LI. The "sanitize_form" field options enable the lxml cleaner "forms" option which removes FORM tags, and kill BUTTON, INPUT, SELECT, TEXTAREA tags. So the buttons used for navigation are removed which causes an issue with the code not expecting it. Fix: We could: - switch buttons to other tags: but not very stable and bootstrap is using buttons itself for similar widget - have a code that refill the button on page display if they disappeared: it's lot of code and we need to be hacky with bootstrap to remove previous carousel and start on the new one we rendered dynamically - allow button in sanitization: they are removed to remove forms, but button can be used anywhere in the page, and they should be as risky as link (which are allowed) for XSS. This fix change the sanitization of forms to allow BUTTON tags. opw-4844700
This fix keeps a customer’s manually selected invoice sending method, such as Email, from being automatically changed to Peppol when Peppol details are present. It reduces confusion during invoice sending and ensures staff choices are respected.
Original PR description
Prevent invoice send method from being overwritten to "Peppol" when it is already manually set to another value like "Email". Steps to reproduce: 1. Install the Peppol module. 2. Create a contact with "Email" as invoice send method and a valid Peppol endpoint. 3. Create an invoice for that contact. 4. Click "Print and Send". 5. The method wrongly switches to "Peppol" instead of staying "Email". A similar overwrite also occurs when clicking "Verify" next to the Peppol endpoint verification on the contact form, but in that case the user sees it immediately, making it less confusing. This fix prevents overwriting the send method if it is already manually set. opw-4826186
This fix prevents scheduled accounting auto-posting from repeatedly retrying the same failed journal entry. It avoids endless error logging and the potential buildup of thousands of unnecessary chatter messages, helping keep accounting operations and system records under control.
Original PR description
**Steps to reproduce:** - For simplicity, create a new account. - Create a new journal entry, with one line on the newly created account. - Set the date to today or older. - Set auto-post to "At…
**Steps to reproduce:** - For simplicity, create a new account. - Create a new journal entry, with one line on the newly created account. - Set the date to today or older. - Set auto-post to "At date". - Make sure the journal has autocheck_on_post set to True. - Keep the journal entry in draft, and duplicate it until you have 100 copies. (Make sure auto-post is set to "At date" on all of the copies aswell) - Set the newly created account to 'Deprecated'. - Manually execute the scheduled action "Account: Post draft entries with auto_post enabled and accounting date up to today" **Issue:** The scheduled action fails and then falls into an infinte loop, and logs an error on the chatter every minute, which could lead to thousands of mail_message records beign created. **Cause:** If the autopost scheduled action fails on a certain move, it marks it as 'move.checked = False'. So that when it is calls itself again (if the number of moves to post is greater than or equal to 100), it won't fetch the same move and fail again. But having 'journal_id.autocheck_on_post = True' in the search domain allows autopost to fetch the same move it marked before (if the journal allows it), which leads to an infinite loop. **Solution:** If autopost fails on a move, set 'auto_post' to 'no' so it won't be fetched again. opw-4815790 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Activities view now looks beyond the initial batch when some records are hidden by access rules, helping the list fill up to the selected page size. This prevents users from seeing fewer activities than expected when changing the pager limit.
Original PR description
**Step to reproduce:** - login as Marc demo - from odoo home page, click on activities icon - click "view all activities" - remove "My activities" filter (you are left with "Overdue or Today") (this…
**Step to reproduce:** - login as Marc demo - from odoo home page, click on activities icon - click "view all activities" - remove "My activities" filter (you are left with "Overdue or Today") (this will show, how many records are accessible to you at this time, say x) - from pager, change limit to smaller value — say y, where y<x. Observation: Number of records returned is z such that z<y **Issue:** currently, when a `limit` is passed to `_search` method it first fetches that much record and then filter out the accessible ones so the final number of records will always be <= limit https://github.com/odoo/odoo/blob/f448966f727a89e26c3f8b08001c0cb116b3ce0a/addons/mail/models/mail_activity.py#L352-L357 **Example**: here we have 5 accessible records if we search now, with limit 5, what happens is, first 5 records are initially fetched then filtered out for access, in this case we get 3 and those 3 activities are returned ``` +----+-------------------+ | ID | ACCESSBILE OR NOT | +====+===================+ | 1 | yes | +----+-------------------+ | 2 | no | +----+-------------------+ | 3 | yes | +----+-------------------+ | 4 | yes | +----+-------------------+ | 5 | no | +----+-------------------+ | 6 | yes | +----+-------------------+ | 7 | yes | +----+-------------------+ ``` Fix: We optimistically increase the search space by factor of 2 in hope that we alteast find the `limit` amount of records opw-4744785 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes macOS keyboard shortcuts in the HTML editor so Option or Command with Backspace/Delete removes the expected word or line instead of a single character. It makes text editing feel consistent with normal Mac behavior and reduces frustration for users editing content in Odoo.
Original PR description
Problem: On macOS, pressing Option (Alt) + Backspace does not delete the previous word as expected. Instead, only a single character is removed. Cause: The `hotkey_service` does not support registering shortcuts that use the `Alt` key, which macOS relies on for word-level deletion. This prevents native macOS editing behavior from being handled properly. Solution: Add a dedicated `keydown` listener for macOS that manually handles deletion shortcuts involving `Alt` (Option) and `Command`. This restores expected word and line deletion behavior for macOS users. Steps to reproduce: - On macOS, enter a two-word line in the editor. - Press Option (Alt) + Backspace. - Only the last character is deleted, instead of the last word. opw-4781484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Colombian company migrations now load accounting setup starting with parent companies before their subsidiaries. This avoids duplicate account or journal records and reduces the risk of migration failures for multi-company databases.
Original PR description
In migration scripts, while loading the chart of accounts, we should always initiate with parent companies to avoid creating duplicate chart records. When a new account is added and the chart is…
In migration scripts, while loading the chart of accounts, we should always initiate with parent companies to avoid creating duplicate chart records.
When a new account is added and the chart is loaded from the child company before the parent (due to sequence, name ordering), the account will be created for both companies. Sometimes resulting into singleton error from [here](https://github.com/odoo/enterprise/blob/saas-18.3/account_reports/models/chart_template.py#L31).
With this commit, the COA for Colombian-based companies will now be loaded hierarchically — i.e. parent company first — ensuring proper inheritance and avoiding redundant account or journal creation.
Community PR - #182706
UPG - [2982418](https://upgrade.odoo.com/odoo/upgrade.request/2982418)
Traceback faced:
```python
Traceback (most recent call last):
File "/home/odoo/src/odoo/saas-18.3/odoo/service/server.py", line 1396, in preload_registries
registry = Registry.new(dbname, update_module=update_module, install_modules=config['init'], upgrade_modules=config['update'])
File "<decorator-gen-6>", line 2, in new
File "/home/odoo/src/odoo/saas-18.3/odoo/tools/func.py", line 83, in locked
return func(inst, *args, **kwargs)
File "/home/odoo/src/odoo/saas-18.3/odoo/orm/registry.py", line 167, in new
load_modules(
File "/home/odoo/src/odoo/saas-18.3/odoo/modules/loading.py", line 487, in load_modules
migrations.migrate_module(package, 'end')
File "/home/odoo/src/odoo/saas-18.3/odoo/modules/migration.py", line 220, in migrate_module
exec_script(self.cr, installed_version, pyfile, pkg.name, stage, stageformat[stage] % version)
File "/home/odoo/src/odoo/saas-18.3/odoo/modules/migration.py", line 257, in exec_script
mod.migrate(cr, installed_version)
File "/home/odoo/src/odoo/saas-18.3/addons/l10n_co/migrations/1.0/end-migrate_update_taxes.py", line 8, in migrate
env['account.chart.template'].try_loading('co', company)
File "/home/odoo/src/odoo/saas-18.3/addons/account/models/chart_template.py", line 160, in try_loading
return self._load(template_code, company, install_demo, force_create)
File "/home/odoo/src/odoo/saas-18.3/addons/account/models/chart_template.py", line 244, in _load
self._load(template_code, subsidiary, install_demo, force_create)
File "/home/odoo/src/odoo/saas-18.3/addons/account/models/chart_template.py", line 227, in _load
self._post_load_data(template_code, company, template_data)
File "/home/odoo/src/enterprise/saas-18.3/account_reports/models/chart_template.py", line 29, in _post_load_data
'account_tax_return_journal_id': closing_journal.id,
File "/home/odoo/src/odoo/saas-18.3/odoo/orm/fields_misc.py", line 117, in __get__
raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: account.journal(28, 29)
```
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-prUploading attachments to project tasks now works correctly in multi-company setups when the related project folder belongs to another company. This prevents disruptive server errors and keeps document handling reliable for users working across companies.
Original PR description
**Issue**: A server error related to alias domains is raised when uploading an attachment to a task if the associated project folder is assigned to a company in a multi-company environment. **Steps…
**Issue**: A server error related to alias domains is raised when uploading an attachment to a task if the associated project folder is assigned to a company in a multi-company environment. **Steps to reproduce:** - Set up a multi-company environment with Company 1 and Company 2. - Go to Settings > Technical > Email > Alias Domains: - Create "alia1.odoo.com" and assign it to Company 1 - Create "alia2.odoo.com" and assign it to Company 2 - In Settings > Users > Mitchell Admin: - Set Company 1 as the default company - Ensure access to both companies - With Company 2 enabled: - Create a new project - Add a stage (e.g., "New") and create a task within it - Go to Documents > open the "Projects" folder in list view - Select the folder linked to the created project. - Make the Company field visible and set it to Company 2. - Return to the project and try uploading an attachment to the task A server Error appears in the top-right corner. opw-4731193