Tuesday, September 9, 2025
17 changes · saas-18.3
Resolved issues and error corrections
This fix prevents errors when a custom application uses a very large image as its icon. Users can continue opening and using menus normally even if saved menu data is too large for the browser's storage limit.
Original PR description
Before this commit, if a user uses a large image as an icon for a custom application, an error could be triggered due to the size limit in localStorage.
Accounting setup now ignores localization templates from modules that are not installable. This prevents error messages when a custom or inherited localization module is present but not yet ready to be installed, making chart setup more reliable.
Original PR description
* Problem: if having a custom module that add extra tax to current localization module, ex: l10n_x inherit l10n_vn module, but the l10n_x module is not installable because it hasn't upgraded yet, the _get_chart_template_mapping include it as well, there for will log error in https://github.com/odoo/odoo/blob/18.0/addons/account/models/chart_template.py#L1219 * Solution: only get available template code for module that installable 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#225821
The payment setup now avoids enabling default payment methods that are incompatible with a provider's manual capture setting. This prevents confusing activation warnings for Stripe and helps businesses configure payments more smoothly.
Original PR description
Steps to reproduce: 1) Check the manual capture checkbox on Stripe. 2) Try to enable it. 3) See the warning that some payment methods can not be activated. Reason: Commit 25feb5b11c2df401580b65e0108145863fcf8987 disallows activating payment methods that do not support manual capture if their provider supports it. Solution: Filter out incompatible pms. opw-4860912 Forward-Port-Of: odoo/odoo#223038
This fix prevents TicketBAI submission errors when invoice or POS sequence names exceed the allowed length. Long sequence values are shortened automatically, making submissions more reliable and avoiding confusing validation messages for users.
Original PR description
Before this commit, records with sequences over 20 characters will present a cryptic error when uploaded to TicketBAI. Steps to reproduce ----- 1. Create a point of sale with a name >20 characters 2. Validate an order on the POS 3. Go to Point of Sale > Orders > Your order, click "Send to TicketBAI" 4. Invalid Operation ``` 002: Fichero no cumple el esquema XSD. Detalle del error: cvc-maxLength-valid: Value 'ThisisaveryveryveryveryverylongPOSnameTEST' with length = '42' is not facet-valid with respect to maxLength '20' for type 'TextMax20Type'. ``` Issue ----- The schema for SerieFactura specifies a TextMax20Type, but the generated sequence can be over 20 characters. Solution ----- Truncate the sequence to 20 characters. opw-4750372 Forward-Port-Of: odoo/odoo#225776 Forward-Port-Of: odoo/odoo#225436
This fix prevents users from editing journal entry numbers directly in the list view once entries are no longer drafts. It helps preserve accounting records and avoids accidental changes to posted entry identifiers.
Original PR description
**Issue** It was possible to edit the journal entry number in the list view even when the entry state was not 'draft'. **Steps to Reproduce** 1. Go to Accounting > Accounting > Journal Entries. 2. Select any journal entry. 3. Double-click on the Journal Number field and attempt to edit it. **Root Cause** The 'name' field in the list view did not have a readonly attribute, allowing inline editing regardless of the journal entry's state. Opw-5009421 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224475
This update corrects how the company context is switched in India localization test flows, preventing errors caused by a read-only company setting. It helps keep automated checks reliable for Indian accounting and sales localization without changing business functionality.
Original PR description
In this PR: - Replaced direct assignment `self.env.company = self.default_company` with proper odoo environment switching pattern to avoid AttributeError when company attribute becomes read-only after initialization.
This update fixes an internal automated test related to Odoo's email server handling. It helps keep development and release checks reliable, reducing the risk of false failures during validation.
Original PR description
Fine-tunning of e31ec012
Odoo now handles browser storage updates correctly when the same app is opened in more than one tab. This prevents cache failures and console errors, helping pages load more reliably for users working across multiple tabs.
Original PR description
Open Odoo in two tabs, in a fresh browser (or delete the IndexedDB). - Open the Contacts app in the first tab; - Open the Contactc app in the second tab; Before this commit, the second tab will not use the cache, and an error will be displayed in the console : `IndexedDB error: The requested version is less than the existing version`. This issue occurs, because the IndexedDB wrapper stores the database version, which is incremented when a new table is needed in order to execute the `onupgradeneeded` function and create the table. Now, the version is not stored anymore. When a new table is needed, the database is opened with the current version + 1. This will execute the `onupgradeneeded` function and create the table.
The website editor now shows the floating blocks snippet more accurately while users are designing pages. Background positioning is applied consistently across the snippet blocks, reducing surprises between the preview and the final page.
Original PR description
This commit fixes an issue with the `s_floating_blocks` snippet where some CSS rules were inactive due to the selector. Previously, the snippet applied a `background-position: top` property to the first block. However, this rule was ineffective because the first block does not include a `s_parallax_bg`. This commit resolves the issue by allowing all blocks to receive the `background-position` property, ensuring the behavior is fully WYSIWYG for the user. task-5068688
The checkout flow now loads delivery-related translations on the website, so customers using another language see the correct translated order button when choosing Cash on Delivery. This improves the multilingual shopping experience and avoids confusing untranslated text at payment.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Enable the Cash on Delivery payment method; 2. have a delivery method which allows cash on delivery; 3. active a second language on the website; 4. go to /shop/payment in the other language; 5. select Cash on Delivery payment. Issue ----- The "Place order" button isn't translated. Cause ----- The `delivery` module isn't listed as "front-end module" for translation purposes, making the translated term unavailable there. Solution -------- Add `delivery` as a front-end module via a `_get_translation_frontend_modules_name` override. opw-4971473
Fixed an accounting issue where manually entered reverse charge tax amounts could show as positive on both balancing lines. This helps ensure tax reports and journal entries reflect the correct debit and credit direction.
Original PR description
When a tax is defined using +100, -100 as repartition lines, the tax amount retrieved from manual_tax_amounts where positive for both lines. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where users in website translation mode could see debug error pop-ups when translating selection field labels. The change improves reliability for website editors and translators without changing normal website behavior.
Original PR description
**PROBLEM** In debug mode, props type errors pop up when clicking on a selection field to translate it. **STEP TO REPRODUCE** 1. Create a form with a selection field in a page. 2. Ensure you're in debug mode assets. 3. Go in translate mode, and click on a string of the selection field to translate it. 4. Props type error should pop up. **CAUSE** `node` is actually of type `Object` (its the target of a jquery event), the props validations expect it to be of type `String`. opw-4896491 Forward-Port-Of: odoo/odoo#221876
The website editor preview for floating block snippets now applies background positioning consistently across all blocks. This helps users see a more accurate WYSIWYG preview while designing pages, reducing surprises after publishing.
Original PR description
This PR fixes an issue with the `s_floating_blocks` snippet where some CSS rules were inactive due to the selector. Previously, the snippet applied a `background-position: top` property to the first block. However, this rule was ineffective because the first block does not include a `s_parallax_bg`. This PR resolves the issue by allowing all blocks to receive the `background-position` property, ensuring the behavior is fully WYSIWYG for the user. task-5068688 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a new company car request through the Belgian salary configurator no longer marks the employee's current car as available. This prevents existing assigned vehicles from being incorrectly freed up before any actual replacement is planned.
Original PR description
When a new car is ordered through the belgian salary configurator, a car is created in the stage 'New Request'. At this state, nothing is planned to change the car so we don't want to set the existing employee car as available for someone else. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes German DATEV reporting for POS sessions that include both sales and refunds with different tax rates. The correct main account is now selected so exports are completed consistently for accounting workflows.
Original PR description
In _get_datev_account, the l10n_de_datev_main_account_id is determined by identifying a singular debit or credit account used in the journal entry. If there’s no unique account, it falls back to…
In _get_datev_account, the l10n_de_datev_main_account_id is determined by identifying a singular debit or credit account used in the journal entry. If there’s no unique account, it falls back to searching for a unique non-tax line among debit or credit lines. In POS, however, there is the possibility of generating journal entries that break this flow: - In a single POS session, add product A with tax 19% and product B with tax 7%. - In the same session, refund product A. - Close the session to generate the entries. In the resulting entry, since both sale and refund are present, it is not possible to discriminate using debit and credit amounts alone, and as a result, the field l10n_de_datev_main_account_id is not populated. Since account 1411 is always the one to be used for l10n_de_datev_main_account_id in this specific case, this commit adds a final fallback filter to select the correct line and ensure the field is populated. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4915272) opw-4915272 Forward-Port-Of: odoo/enterprise#92664
Odoo now handles missing SEPA pre-notification settings during module installation or reinstallation. This prevents an error when SEPA Direct Debit batch payments exist and keeps the setup process from being blocked.
Original PR description
**Issue** When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not…
**Issue**
When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not iterable`.
**Steps to Reproduce**
1. Create a batch payment with SEPA Direct Debit.
2. Uninstall the `account_sepa_direct_debit` module.
3. Reinstall the module.
**Root Cause**
During module (re)installation, the compute method `_compute_sdd_required_collection_date` is triggered before any SEPA mandates or their pre-notification periods exist. This makes `mandates.mapped('pre_notification_period')` return an empty list. The code then calls:
max(minimum_offset, *mandates.mapped('pre_notification_period'))
When the list is empty, this reduces to `max(minimum_offset)`, which is invalid since `max()` with a single integer argument expects an iterable and raises a `TypeError`.
**Fix**
Handle the empty case so that there is a valid fallback both during installation and when mandates have no configured pre-notification period.
Opw-5042153
Forward-Port-Of: odoo/enterprise#93598Loading sample data in Appraisals no longer crashes for users who only have Appraisals administrator access. This prevents setup interruptions caused by related recruitment sample records requiring extra permissions.
Original PR description
The system will crash when user try to load sample data in appraisal. **Steps to produce:-** - Install `Appraisals` and `Recruitment` module. - Make a new user with access right of administrator to…
The system will crash when user try to load sample data in appraisal.
**Steps to produce:-**
- Install `Appraisals` and `Recruitment` module.
- Make a new user with access right of administrator to `only Appraisals`.
- Login with new user.
- `Appraisals > Load sample data`.
**Error:-**
```py
AccessError: You are not allowed to create 'Job Position' (hr.job) records.
This operation is allowed for the following groups:
- Recruitment/Officer: Manage all applicants
ParseError: while parsing /home/odoo/src/odoo/saas-18.4/addons/hr/data/scenarios/hr_scenario.xml:21, somewhere inside <record id="job_consultant" model="hr.job" forcecreate="1">
<field name="name">Consultant</field>
<field name="no_of_recruitment">5</field>
<field name="contract_type_id" ref="hr.contract_type_interim"/>
<field name="description">We are currently looking for someone like that to join our Consultant team.</field>
</record>
ValueError: ParseError('while parsing /home/odoo/src/odoo/saas-18.4/addons/hr/data/scenarios/hr_scenario.xml:21, somewhere inside\n<record id="job_consultant" model="hr.job" forcecreate="1">\n <field name="name">Consultant</field>\n <field name="no_of_recruitment">5</field>\n <field name="contract_type_id" ref="hr.contract_type_interim"/>\n <field name="description">We are currently looking for someone like that to join our Consultant team.</field>\n </record>') while evaluating
'action = model._load_demo_data()'
```
**Root Cause:-**
- When a user is granted access rights only for the Appraisal module and attempts to load sample data for it, an error occurs. This happens because the sample data at [1] includes the `creation of records` related to the `Recruitment module`. Since the user does not have the required access rights for Recruitment, the system raises a permission error.
**Solution:-**
- In this commit, we resolve the issue by using `sudo()` while loading the data.
[1]: https://github.com/odoo/odoo/blob/fabfeb55c56fbc7136bd1c3a72e9d6ee99f39714/addons/hr/data/scenarios/hr_scenario.xml#L21-L26
**sentry-6795776877**