Daily updates from Odoo
Friday, September 5, 2025
48 changes
25 changes
Resolved issues and error corrections
The window used to create a new website now displays the title "Add Website." This small fix makes the action clearer for users and improves consistency in the website setup experience.
Original PR description
The modal used to create a new website was missing a title. This commit fixes the issue by setting its header to "Add Website". Forward-Port-Of: odoo/odoo#225387 Forward-Port-Of: odoo/odoo#225302
Welcome messages in direct chats and channels now use more natural wording. This small correction improves readability and makes the first message users see in conversations less confusing.
Original PR description
Description of the issue this PR addresses: Some welcome messages in direct chats and channels contain minor grammatical errors, making them less natural and slightly confusing for end users. Current behavior before PR: Direct chat message: "This is the start of direct chat with %(userName)s" Channel message: "This is the start of #%(channelName)s channel" Desired behavior after PR is merged: Direct chat message: "This is the start of your direct chat with %(userName)s" Channel message: "This is the start of the #%(channelName)s channel" This improves readability and ensures the welcome messages are grammatically correct. task-4952480 Forward-Port-Of: odoo/odoo#223324
The Discuss welcome screen now uses a shared application state instead of temporary screen state to decide when it appears. This prevents inconsistent display behavior caused by page or component lifecycle timing, giving users a steadier experience when opening Discuss.
Original PR description
Before this commit, whether to display the welcome view was based on a component state, so it was dependent on the lifecycle of components This commit changes the condition so that it relies on the store which should prevent inconsistent state. https://runbot.odoo.com/odoo/error/111051 Forward-Port-Of: odoo/odoo#225486 Forward-Port-Of: odoo/odoo#225325
The website editor now shows custom black-to-white color options correctly when dark mode is enabled. This prevents users from accidentally applying the opposite color than the one they selected, improving confidence when editing page designs.
Original PR description
In the html builder, colorpickers belong to the global window (backend), while the elements they target belong to an inner iframe (frontend). When the dark theme is toggled on in the backend, it doesn't affect the frontend. However, given how it works, until this commit, custom black to white color tints were switched visually, but still applied the opposite color (i.e. clicking on the black tint applied white). This commit makes sure that, in such an environment where the colorpicker and the targeted element are not in the same DOM, the color swatches are properly displayed.
This fixes a display issue in inherited templates where added text could disappear when nearby content was removed with branding enabled. Business users benefit from more reliable page and view customizations, reducing unexpected missing text in customized Odoo screens.
Original PR description
With the inherit branding activated, have a xpath in an inherited view that removes a node, and adds some text afterwards in the parent of the removed node Before this commit, the text of the spec was not output. This was because it was appended to the removal ProcessingIntruction that was removed later on After this commit, a spec can add text in a node from which a child has been removed 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#223576
Creating a debit note now records only one clear message in the document chatter instead of two overlapping notices. This reduces confusion for users reviewing accounting document history and keeps audit trails easier to read.
Original PR description
* PROBLEM: install account_debit_note module, add a debit note -> check the log at chatter we will see 2 message, one is 'This entry has been duplicated from ...' and another is 'This debit note was created from..' * Fix by only keep one message log in that case * This continue work of https://github.com/odoo/odoo/pull/214302 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#224762
This fix ensures many-to-many checkbox fields pass the relevant context when looking up available records. This helps related records, such as attachments, appear correctly when special business rules or filters are needed.
Original PR description
**Description of the issue/feature this PR addresses:** When `name_search` is called, the `context` is not passed to the method. In some cases, this is necessary, for example, if the field is related to `ir.attachment` and you want to pass `skip_res_field_check` in the context (see https://github.com/OCA/social/pull/1672). **Current behavior before PR:** The `context` is not passed to `name_search`. **Desired behavior after PR is merged:** Ability to pass `context` to `name_search`. From #215420 Forward-Port-Of: odoo/odoo#225438 Forward-Port-Of: odoo/odoo#216588
The employee organizational chart zoom button now opens the correct public employee view for users without HR access rights. This prevents an error and lets limited-access users navigate the chart as intended.
Original PR description
Steps to Reproduce: 1. Install the HR module and log in with a user account that has no access rights. 2. Open the employee form view and click on the zoom button in the organizational chart. 3. A traceback error will occur. Cause: The action associated with this button is intended for the `hr.employee` model, which the user does not have access to. Fix: Use the action created for public employees to open the organizational view correctly. Task-5039925
This fix prevents an unexpected system error when checking company compatibility for records that use multiple companies instead of a single company field. Users now receive a clear business error explaining which records belong to incompatible companies, helping them correct configuration issues faster.
Original PR description
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that…
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that scenario.
Example on how to reproduce the error in accounting:
```py
company_a, company_b
tax_group self.env["account.tax.group"].create(
{
"name": "Tax Group",
"company_id": company_a.id,
}
)
tax = self.env["account.tax"].create(
{
"name": "30% - Loan Tax",
"type_tax_use": "sale",
"tax_exigibility": "on_payment",
"amount": 30,
"amount_type": "percent",
"tax_group_id": tax_group.id,
"company_id": company_a.id,
}
)
account = self.env["account.account"].create({
...,
"company_ids": [Command.link(company_b.id)]
})
account.tax_ids |= tax
```
Error raised
```
AttributeError: 'account.account' object has no attribute 'company_id'
```
After the PR the following message appears:
```
odoo.exceptions.UserError: Incompatible companies on records:
- “Loan Principal” belongs to company “BE Company Loan Tests” and “Default Taxes” (tax_ids: '30% - Loan Tax') belongs to another company.
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225177The USB device interface now handles cases where a connected device does not provide a valid product name. This prevents unexpected crashes and helps keep IoT hardware connections more reliable.
Original PR description
Before this commit, if a USB device did not provide a valid product string, the USB interface would crash trying to access it. After this commit, we wrap the access in a try/except to prevent the crash. task-5060062 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225564
The accounting invoice menu now triggers the correct action when users refresh outgoing e-invoice statuses. This prevents the system from accidentally running the incoming invoice fetch action instead, helping users keep e-invoice status information up to date.
Original PR description
[FIX] account: add refresh_out_einvoices_status to fetch_einvoices_cog The fetch_einvoices_cog OWL component was missing the trigger for button_refresh_out_einvoices_status, as it always called button_fetch_in_einvoices. Now the function will call a getter to allow easier customization by overriding buttonAction, and it now supports the missing flow for button_refresh_out_einvoices_status. task-4714467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225417
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change default company for "marc demo" user to `(AR) Responsable Inscripto` - login with "marc demo" , go to shop page, and change site language to sapnish - add a product e.g, three set sofa to cart and goto checkout page - proceed and you will be directed to "Address management page" Observatio
Original PR description
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change…
Step to reproduce: - install `l10n_ar` , `website_sale` and `payment_demo` - Add a language e.g. : spanish (AR) - switch to `(AR) Responsable Inscripto` and create a website for this company - change default company for "marc demo" user to `(AR) Responsable Inscripto` - login with "marc demo" , go to shop page, and change site language to sapnish - add a product e.g, three set sofa to cart and goto checkout page - proceed and you will be directed to "Address management page" Observation: "Identification Type " and "AFIP Responsibility" are not translated Cause: After this commit [1], module l10n_ar_website_sale was dropped and address logic was mooved to l10n_ar and l10n_latam_base but the following pot files were not updated, this caused missing of tranlation in following modules [1] https://github.com/odoo/odoo/commit/5a93da8e9220ecbf664b26445b04717a9245ef5e Fix: Add missing translations in respective po and pot files Before: <img width="903" height="517" alt="image" src="https://github.com/user-attachments/assets/f1e265bd-e976-4698-b83b-9de821073b8c" /> After: <img width="806" height="374" alt="image" src="https://github.com/user-attachments/assets/a04dfde9-8e5d-4699-a1a4-1a8c36339f63" /> opw-5000512 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224260
Adds a test to ensure contact tag searches return the expected format. This helps prevent a traceback when users add tags to contacts, improving reliability without changing user workflows.
Original PR description
Add basic test case for PR https://github.com/odoo/odoo/pull/221866 to ensure that the _search_display_name method on res.partner.category returns a list domain Forward-Port-Of: odoo/odoo#222165
An unstable automated test in the website module has been skipped because it was causing inconsistent validation failures. This helps keep the release process reliable by avoiding false alarms while the underlying test issue can be addressed separately.
Original PR description
Test seems dodgy to start with (cf odoo/odoo#224814 disabling it), and apparently #225034 made it mostly but not entirely broken: that PR did manage to pass in [140299] but broke two stagings before that ([140290], [140291]), and then broke the 4 stagings afterwards (one PR got flagged but was apparently an innocent victim). [140299]: https://runbot.odoo.com/runbot/batch/2119196/build/88387072 [140290]: https://runbot.odoo.com/runbot/batch/2119088/build/88383126 [140291]: https://runbot.odoo.com/runbot/batch/2119112/build/88383656
Website editors can now remove a background image from the Floating Blocks snippet without triggering an error. This makes page editing more reliable and avoids interruptions while customizing ecommerce website content.
Original PR description
Steps to reproduce: - Open a website in edit mode - Drag & drop the "Floating Blocks" eCommerce snippet - Remove the background image of the second block - A traceback is raised Cause: The `editingEl` was `undefined` when calling `showMainColorPicker`, leading to an error. Solution: Use `useDomState` to safely compute the value of `showMainColorPicker` based on the current `editingEl`.
Chatbot conversations now keep channel history cleaner by avoiding unwanted blank lines when a message has no content. This prevents confusing or cluttered chat transcripts for users and support teams reviewing conversations.
Original PR description
When a chatbot conversation contains messages with empty body, this empty body would be converted into a newline which is not desired. This commit ensures that empty messages are not converted into newlines in the channel history. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225455 Forward-Port-Of: odoo/odoo#225001
The website builder now shows the right label for the color setting when configuring hover animations, such as displaying “Overlay” for the Zoom Out effect. This reduces confusion for users editing website images and restores expected behavior from the previous builder.
Original PR description
The commit 80b5db99a3c26c3dd4fb5c55e04b8813dddb5b8d brought the options for "on hover" animations into the new website builder. The label for the "Color" option used to change depending on the current effect, and this was lost in the new builder. This commit brings it back Steps to reproduce: - Open website builder - Add an animation "On Hover" (this can be done on images) - Set the "Effect" to "Zoom Out" - Bug: the label for the color is "Color" instead of "Overlay" task-4367641
The website builder now correctly shows language codes, such as FR, when that label option is selected for the language selector. This prevents confusion for website editors configuring multilingual site headers and ensures the published selector matches their choice.
Original PR description
During the initial [website builder refactor], a mistake happened when porting the option for the label of the language selector. This commit adds the missing key in the views parameter when the "Code" is choosen Steps to reproduce: - Open website builder, on a multi-language website - Click on the language selector in the header - Select "Code" for the "Label" of "Language Selector" - Bug: Instead of showing the code (for example "FR"), it shows the language name (for example "Français") [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
The website backend now correctly stays in debug mode when a user enters debug mode from a website page and opens the editor/backend area. This avoids confusion for administrators and support teams who rely on debug mode to inspect or troubleshoot website settings.
Original PR description
Before this commit, the debug mode was not correctly applied in the website backend when navigating from a website page. While the `?debug=assets` URL parameter was present, the debug mode was only active within the website's iframe, not the main backend interface itself. Steps to reproduce: - Go on a website page - Enter debug mode by adding `?debug=assets` to the URL (not ctrl+k) - Click on editor on the top left to navigate to website backend - Check with `odoo.debug` in console - Debug is activated in the iframe not in the backend Forward-Port-Of: odoo/odoo#223800
Payroll localisation test setup has been corrected so attendance-related overtime fields are only used where the attendance module is available. This reduces failed automated checks across country payroll packages and helps keep localisation updates reliable.
Original PR description
**Issue:**
The test_{xx}_contract_template_loading test fails across all localisations due to incorrect fields being passed.
**Cause:**
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution.
**Solution:**
Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module.
build_error-231680The Swiss payroll occupation report is now clearly read-only, preventing users from trying to add or delete entries that the system cannot save. This avoids confusing database errors while keeping the report fully available for review.
Original PR description
The model `l10n.ch.occupation` is backed by an aggregated SQL view (GROUP BY). PostgreSQL does not support inserts or deletes on such views, so exposing Create/Delete in the UI led to errors. This change makes the report safe to use by disabling creation and deletion on the list view (`create="0" delete="0"`), keeping it read-only while fully browsable. task-5042279
Fixed an issue where adding many lists to a spreadsheet could place unrelated menu actions in the middle of list entries. This keeps spreadsheet menus organized and easier to use when working with larger spreadsheets.
Original PR description
Steps to reproduce: - Add 25 lists in a spreadsheet => The order of the lists is not correct, menu items like "Re-insert static pivot" are positioned inside the list items. This commit fixes the sequence computation of the menu items for the pivots, lists and charts in spreadsheet to always be inside one integer (from 50 to 51 for pivots, 53 to 54 for lists, ...). Task: 5025230
This fix updates an automated Planning test so it uses today's date directly instead of relying on a function. It helps prevent build failures and keeps quality checks reliable without changing customer-facing Planning behavior.
Original PR description
Now the tour use edit with the date of today and not a function runbot build error: 164213 Forward-Port-Of: odoo/enterprise#93856 Forward-Port-Of: odoo/enterprise#93816
Fixed an issue in Chilean point-of-sale localization where cash in/out operations could fail when a receipt printer was connected. This helps stores complete cash movement workflows smoothly and print the needed receipt without interruption.
Original PR description
Before this commit, when a printer was connected, performing a cash in/out operation would raise an error when trying to print the receipt. opw-5060974 Forward-Port-Of: odoo/enterprise#93834
A flaky automated test in Odoo Studio was stabilized so it no longer fails randomly when the test runner moves faster than form inputs can update. This helps keep validation pipelines reliable and reduces noise from false failures.
Original PR description
The def test_rename function (tour web_studio_main_and_rename) crashed undeterministically because the tour engine is now faster, inputs soimetime do not have the time to update. This commit fixes one instance of this. runbot-error-163471 Forward-Port-Of: odoo/enterprise#93826
13 changes
Resolved issues and error corrections
This update fixes an internal automated test so it consistently creates sample calls in the intended order. It helps prevent false test failures and supports more reliable maintenance of the VoIP AI feature.
Original PR description
[FIX] voip_ai: ensure call creation order in test Before this commit in `test_cron_transcribe_recent_voip_call_two_calls_at_same_time` test, we were attempting to have two calls one created after another. However since the creating of the second (earlier) call was based on the absolute date, when the setUp took longer then anticipated the order was the opposite of the desired. With this commit we ensure that the 2nd call will have create_date before 1st by pushing it back from the 1st call create date (not with creation of the 1st call)
This update fixes calendar setup data so working hours are calculated correctly instead of being set manually with wrong values. It improves reliability for Belgian payroll validation, attendance Gantt behavior, and fixed-schedule planning scenarios.
Original PR description
- remove the `hours_per_week` field from creation to allow model to compute as its no not readonly So it is set with wrong values in some calendars
Refreshing the Employees page from the Payroll menu now keeps users within the Payroll area instead of switching them to the general Employees app. This avoids confusion and keeps the payroll-specific navigation available after a page refresh.
Original PR description
When you go in Payroll / Employees / Employees, then refresh, you're back on the employees app (with the menu from employees app not the ones from payroll) This is because the URL after the action is just "/odoo/employees". fixed by redirecting to "/odoo/payroll/employees" Task-5045428
This update fixes an automated test for Belgium payroll accounting so it runs reliably again. It helps keep payroll-related checks stable and reduces false errors in the development pipeline.
Original PR description
runbot.error: 224180
This fix ensures a quality control test works reliably when the module is installed on its own without demo data. It helps prevent false test failures related to serial number label printing, improving confidence in quality control updates without changing user-facing behavior.
Original PR description
## Issue:
The test `test_receipt_validation_triggers_serial_number_label_print` fails when running `quality_control` alone without demo data
## Cause:
The user is missing the group `stock.group_production_lot`, that enable serial number printing
As a result, the condition `self.env.user.has_group('stock.group_production_lot')` in `stock.picking` `_get_autoprint_report_actions()` is not satisfied
The `button_validate()` in `stock.picking` will have an empty report_actions and will not print anything
The Demo data that allow the test to work is in `stock`
https://github.com/odoo/odoo/blob/9b08449f25cd16dc15117d305726380298c313d8/addons/stock/data/stock_demo.xml#L176-L182
## Steps to reproduce:
- Install only `quality_control` (no demo data)
- Run the test `test_receipt_validation_triggers_serial_number_label_print`
related-to: https://github.com/odoo/enterprise/pull/90134
opw-4790427
Forward-Port-Of: odoo/enterprise#93857
Forward-Port-Of: odoo/enterprise#93296This fix updates the financial reporting interface so item deletion continues to work after a related platform behavior changed. It helps prevent errors or inconsistent behavior when users remove linked entries in account reports.
Original PR description
This PR is related to odoo/odoo#225391 which makes onDelete async. opw~5019621
The payroll sample dashboard has been aligned with the main dashboard so users see a more consistent example. The main payroll dashboard display is also now centered correctly, improving presentation in the interface.
Original PR description
Changes: - Adjustments to sample dashboard to reflect the changes made in main one - Fixed display of main dashboard previously not centered in the interface Task ID: 5005256
Helpdesk and mail-related tests were updated to match recent platform changes in the community edition. This keeps automated checks aligned with the current behavior and helps avoid false failures in future releases.
This fix updates field service sales and stock logic after removing a duplicate internal field. It helps product quantities and related sales lines continue to work correctly without relying on outdated data references.
Original PR description
In this PR (https://github.com/odoo/odoo/pull/223686), we removed the `section_line_id` field as it was a duplicate of `parent_id`. This commit adapt the domains to fit with the field changes: - `parent_id` is not stored, so we can't search for that field in domain anymore. We replace `filtered_domain` by `filtered`. - Adapt the `_updateQuantity` method to use an orm searchRead instead of a domain. Co-authored-by: nipl-odoo <nipl@odoo.com> Linked: https://github.com/odoo/odoo/pull/223686 task-5009037,4966574
This fix prevents errors when printing receipts for cash in or cash out operations in Chilean point of sale setups. Businesses using a connected printer can complete these cash movements without disruption.
Original PR description
Before this commit, when a printer was connected, performing a cash in/out operation would raise an error when trying to print the receipt. opw-5060974 Forward-Port-Of: odoo/enterprise#93834
The salary calculator now displays its footer buttons properly on mobile screens. This makes it easier for users to configure benefits and copy salary offer links without layout issues or hidden buttons.
Original PR description
Previous behavior: - when in mobile view, footer buttons are not aligned and Copy Link button folded and not fully visible New behavior: - make Configure Benefits and Copy link appear side-by-side on mobile and each take 50% width - move container width to an explicit wrapper for the Copy link widget and keep the widget's `btn_class='btn w-100'` so the inner button fills its container (fixes folding) Task ID: 5042824
This update makes an automated Web Studio rename test more reliable by ensuring input changes are handled consistently. It helps reduce random test failures, supporting smoother validation and release processes without changing customer-facing features.
Original PR description
The def test_rename function (tour web_studio_main_and_rename) crashed undeterministically because the tour engine is now faster, inputs soimetime do not have the time to update. This commit fixes one instance of this. runbot-error-163471 Forward-Port-Of: odoo/enterprise#93826
Fixed an issue where using the shortcut from settings to open the Projects Folder could take users to Documents without selecting the Projects folder. This ensures users land in the intended folder, reducing confusion when managing project documents.
Original PR description
Reproduce: 1. Install documents_project 2. In config settings, use the arrow next to the Projects Folder 3. You end up in Documents, but not in the Projects folder. This is because folder-matching keys in the search panel must be `Number`s but we forgot to convert `user_folder_id` properly for this. Follow-up of 6bdcc357. Task-5055163
10 changes
Resolved issues and error corrections
The Unsplash image search now handles duplicate images returned in the same search results. This prevents users from seeing an error when selecting images, such as during searches where Unsplash sends repeated results.
Original PR description
This commit fixes an OwlError when we try to render the images received from Unsplash after a search. The issue is that Unsplash can send duplicate images in the same batch of images. When we render those in a `t-foreach` and use the image `id`s as the keys, we get a duplicate key error. This is fixed by expanding on the previous filtering code, which ignored duplicates over multiple batches. We now ignore duplicates within batches as well. At the time of writing, Unsplash is sending us duplicate images on a search for "Inventory". opw-5027032 P.S., this is really just an extension of this PR here #224059. Specifically, the 18.0 FW. In 18.0, the Unsplash code that I changed in the original PR (#223789) was moved from `addons/web_unsplash/static/src/components/media_dialog/image_selector.js` to `(...)/components/media_dialog_legacy/image_selector.js`. This PR fixes the "copy" of that code that got moved.
Analytic line amounts now use the company currency rounding instead of the foreign currency rounding. This prevents misleading totals when foreign currencies have coarser rounding rules, improving accuracy for accounting review and reporting.
Original PR description
Steps to reproduce: - set the rounding of a foreign currency to 1.0 - have you company currency's rounding to 0.01 - create a move with a line with an analytic distribution - post it - go to analytic line Issue: The amount will be displayed with a rounding of 1.0 and not 0.01 opw-4997047
The Veri*Factu regime key dropdown on Spanish invoices now shows the expected options. This helps users complete compliant Spanish e-invoicing workflows without being blocked by an empty selection field.
Original PR description
### Issue: The dropdown for the regime key doesn't show any value, even when it's supposed to. ### Steps to reproduce: - Install "l10n_es_edi_verifactu" and switch to a Spanish company - Create an invoice for a Spanish partner with the tax "21% G (Goods)" for example - In the page "Veri*factu" the field "Veri*Factu Regime Key" has a dropdown but no values to choose from ### Cause: This field uses the widget `dynamic_selection` which applies a filter on the possible values of the selection. This filter is simply the field `l10n_es_edi_verifactu_available_clave_regimens` which is computed from the list of possible values and the tax_ids on the invoice. As this field is computed and non stored but do not appear in the view, it is never recomputed, so the dropdown shows no values. ### Solution: Add the field in the view, and make it invisible. opw-5039271
This fix ensures that when a customized view removes an element and adds text in the same area, the added text is correctly displayed. It prevents missing text in inherited templates when branding/debug metadata is enabled, improving reliability for customized Odoo screens.
Original PR description
With the inherit branding activated, have a xpath in an inherited view that removes a node, and adds some text afterwards in the parent of the removed node Before this commit, the text of the spec was not output. This was because it was appended to the removal ProcessingIntruction that was removed later on After this commit, a spec can add text in a node from which a child has been removed 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#223576
This fixes an error message that could fail when checking company compatibility on records linked to multiple companies. Users now receive a clear explanation of the incompatible company setup instead of a technical crash, helping them correct accounting or multi-company data issues faster.
Original PR description
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that…
`_check_company` can be called on models that don't have a `company_id` field, but they might have a `company_ids` one. In this case the message logged as the user error should be able to handle that scenario.
Example on how to reproduce the error in accounting:
```py
company_a, company_b
tax_group self.env["account.tax.group"].create(
{
"name": "Tax Group",
"company_id": company_a.id,
}
)
tax = self.env["account.tax"].create(
{
"name": "30% - Loan Tax",
"type_tax_use": "sale",
"tax_exigibility": "on_payment",
"amount": 30,
"amount_type": "percent",
"tax_group_id": tax_group.id,
"company_id": company_a.id,
}
)
account = self.env["account.account"].create({
...,
"company_ids": [Command.link(company_b.id)]
})
account.tax_ids |= tax
```
Error raised
```
AttributeError: 'account.account' object has no attribute 'company_id'
```
After the PR the following message appears:
```
odoo.exceptions.UserError: Incompatible companies on records:
- “Loan Principal” belongs to company “BE Company Loan Tests” and “Default Taxes” (tax_ids: '30% - Loan Tax') belongs to another company.
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225177This fixes a rounding issue where loyalty discounts could use slightly more points than intended because of currency calculation precision. Customers and businesses now see loyalty point balances adjusted more accurately after sales orders are confirmed.
Original PR description
## Version
18.0+
## Issue
A slightly higher number of loyalty points might be used when python division can't be precise enough.
## Steps to reproduce
- Create a new Discount & Loyalty program:
- Program Type: Loyalty Cards;
- Conditional rules: None;
- Rewards: 1:
- Reward Type: Discount;
- Discount: 0.03$ per point on Order.
- Create a new Loyalty Card for any partner (remember which one):
- Change the points balance for 3030.
- Create a new Quotation for the previously selected partner as customer:
- Add a product:
- Use any product;
- Quantity: 1;
- Unit Price: 3000.0;
- Taxes: None.
- Apply the Reward and Confirm the SO;
- Check Loyalty Card's details at the bottom of the SO.
opw-4928963This fixes an error that could prevent gamification challenge report emails from being sent when some expected data was missing. The email template now handles missing values safely, improving reliability for users sending challenge reports.
Original PR description
If we use dict['foo'] in the template and that foo key does not exit, then a key error will be raised but if we use dict.get('foo'), then we can define which default value be returned whether None or ''.
Calling dict['foo'] or '' is no longer valid in python3.11, but better to use get method.
Steps to reproduce bug:
1: Create a challenge for gamification.challenge model
2: Set 'Display Mode': "Indiviual Goals"
3: Set any simple goal, set other required fields
4: Click on "Start Challenge" button
5: Click on "Send Report" button
Observation:
The mail xml template will fail to render and raise server error.
Solution:
Use get method to call the dictionary key value to safeguard.
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-prOdoo now handles missing SEPA pre-notification settings during module reinstallation, preventing an error when batch payments use SEPA Direct Debit. This keeps installation and reinstallation flows stable for companies using SEPA payment processing.
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-5042153Fixed an issue where adding many spreadsheet lists could cause related menu options to appear in the wrong place. This keeps spreadsheet menus organized and easier for users to navigate when working with many lists, pivots, or charts.
Original PR description
Steps to reproduce: - Add 25 lists in a spreadsheet => The order of the lists is not correct, menu items like "Re-insert static pivot" are positioned inside the list items. This commit fixes the sequence computation of the menu items for the pivots, lists and charts in spreadsheet to always be inside one integer (from 50 to 51 for pivots, 53 to 54 for lists, ...). Task: 5025230
Spreadsheet menus now keep list, pivot, and chart actions grouped in the correct order, even when many lists are added. This prevents unrelated actions from appearing in the middle of list entries, making the spreadsheet menu clearer and easier to use.
Original PR description
Steps to reproduce: - Add 25 lists in a spreadsheet => The order of the lists is not correct, menu items like "Re-insert static pivot" are positioned inside the list items. This commit fixes the sequence computation of the menu items for the pivots, lists and charts in spreadsheet to always be inside one integer (from 50 to 51 for pivots, 53 to 54 for lists, ...). Task: 5025230