Daily updates from Odoo
Monday, September 22, 2025
101 changes
21 changes
Resolved issues and error corrections
Spanish translations for Peruvian tariff fractions and withholding codes were corrected so users see the right wording in localization workflows. This helps reduce confusion and supports more accurate Peruvian electronic document handling.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
This update ensures invoices for foreign customers use an alphanumeric Other Buyer ID in Saudi e-invoicing XML. This helps avoid ZATCA acceptance warnings and supports smoother invoice compliance checks.
Original PR description
When an invoice is being issued to a Foreign Customer, the Other Buyer ID (Other Buyer ID (BT-46) <cac:AccountingCustomerParty / cac:Party / cac:PartyIdentification / cbc:ID>) should be OTH and filled accordingly to avoid an acceptance warning from ZATCA. According to ZATCA, the value needs to be in alphanumeric format, even if the value does not follow the specific country's VAT format Task-id: 5075005 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#227294 Forward-Port-Of: odoo/odoo#226593
The website editor now correctly hides the image width setting when an image is placed inside a card. This restores expected behavior and helps prevent users from applying layout options that do not make sense in that context.
Original PR description
When converting the options to Owl, the behavior from commit [1], which hid the image width option for images inside cards, was lost. We are reintroducing it here. [1]: https://github.com/odoo/odoo/commit/4dcd1f9607ecc1ea932e02128a3e6f01d652cba6
Event track emails now use embedded image-based icons instead of relying on external icon fonts that many email systems do not support. This ensures recipients see the intended visual elements consistently in their invitations or notifications.
Original PR description
Font awesome classes must no be inserted into email as external servers do not use them so icons are not displayed. This commit replaces i tags with font awesome classes in mail by images. Task-5082165 Forward-Port-Of: odoo/odoo#226331
The automation rule trigger dropdown now uses the correct background color when dark mode is enabled. This removes a visual inconsistency, making the interface easier to read and more polished for users working in dark mode.
Original PR description
Steps: - Install `base_automation` - Enable dark mode - Open Automation rules - Create a new rule - open trigger dropdown - the dropdown background is still in light mode This commit apply $dropdown-bg on `o_field_base_automation_trigger_selection` opw-5064357 Forward-Port-Of: odoo/odoo#226666 Forward-Port-Of: odoo/odoo#226116
This fix prevents an error when a Chilean electronic tax document is imported more than once. Users now receive the intended message instead of encountering a system traceback, improving reliability for Chilean accounting workflows.
Original PR description
### Steps to reproduce: - Install 'l10n_cl_edi' and switch to a Chilean company - Import twice the same DTE XML file. ### Cause: This [commit](https://github.com/odoo/enterprise/commit/42744fcecdbd36ea0101070c68299227a9f204a6) forgot to add the `_()` method to format the message. As `append()` only needs one argument but two are given, there is a traceback. opw-5080094
This fix ensures contracts with no amount due are no longer incorrectly marked as needing an invoice. It helps teams avoid unnecessary invoice follow-up work and keeps subscription billing status accurate.
Original PR description
Forward-Port-Of: odoo/enterprise#94626
This fixes an error that could occur when point-of-sale orders calculated external taxes through AvaTax. Removing the outdated reference helps ensure tax data can be prepared without interrupting checkout or order processing.
Original PR description
Since [this PR](https://github.com/odoo/enterprise/pull/82623), defination of `_get_lines_eligible_for_external_taxes` was removed but a reference to it still remained, causing the following error when calling the `_get_line_data_for_external_taxes` method:. `AttributeError: 'pos.order' object has no attribute '_get_lines_eligible_for_external_taxes'` Fix: Removed reference to `_get_lines_eligible_for_external_taxes` from `_get_line_data_for_external_taxes` at [1]. [1]- https://github.com/odoo/enterprise/blob/9a1544d19c1f5f3546c04022a11601df43199d10/pos_avatax/models/pos_order.py#L15-L18 sentry-6843827499
Approval demo data no longer adds the same administrator approver twice. This prevents duplicate approval entries when users open their approval requests, keeping demo approval workflows cleaner and less confusing.
Original PR description
steps to reproduce: - install approvals with demo data - click on My approvals > My requests Issue: - approval category sets approver `user_admin` and demo data also sets `user_admin` as approver so it creates double entry for `user_admin` in DB Fix: - removed `user_admin` in approval request because it will be added directly through approval category task-4677549
The website editor now correctly applies the “Code” label option for multilingual language selectors. This fixes a display issue where choosing language codes still showed the full text label, helping sites present compact language choices as intended.
Original PR description
Scenario: - have more than one language on website - edit website page - select the lang selector - change Language Selector > Label to Code Result: the render is the same than "Text" Cause: the view website.header_language_selector_no_text that should be enabled for code label type is missing from the website builder refactoring (9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2). opw-5022850
Single-company databases can now detect duplicate records even when the company field differs. This makes data cleanup more reliable and helps users merge duplicate records that were previously missed.
Original PR description
**Issue** In single company databases, it wasn't possible to find duplicate records with different `company_id` values to merge them (in multi company databases, it is possible to enable the "Cross-Company" option on the deduplication rule). **Change** Always ignore the company field in single company databases. opw-4794408 Forward-Port-Of: odoo/enterprise#94797 Forward-Port-Of: odoo/enterprise#93184
The website editor now shows newsletter mailing list names without extra numeric identifiers when adding checkbox options. This makes the form setup clearer for users and helps avoid confusing labels on newsletter subscription forms.
Original PR description
In the "Subscribe to newsletter" form, "Add new Checkbox" on the web editor for "Subscribe to" field lists mailing list with number. This commit removes the number by fetching the records from mailing list via "name" and not "display_name". Steps to Reproduce: 1. Add a form 2. Change action to "Subscribe to Newsletter" 3. Click on "Subscribe to" field 4. Click on "Add new Checkbox" and you see the numbers on the list. opw-4730089 Forward-Port-Of: odoo/odoo#210891
Users can now open the debug Data view on records that include field properties without triggering an error. This makes troubleshooting and support workflows more reliable when custom or dynamic property fields are present.
Original PR description
Example Steps: - Install `crm` - Add a random field properties in a random form view - Enable debug mode - Open debug menu - Select Data - Traceback ```py raise ValueError(f"Invalid field…
Example Steps:
- Install `crm`
- Add a random field properties in a random form view
- Enable debug mode
- Open debug menu
- Select Data
- Traceback
```py
raise ValueError(f"Invalid field {field_name!r} on model {self._name!r}")
ValueError: Invalid field 'properties.xyz' on model 'x.y'
```
There are two causes for this problem.
First, we use orm.read to retrieve data from records, which does not directly handle sub-field properties. We only need to use `definition_property` (which contains the overall schema of the JSON field).
Second, when displaying the data, we use JSON.stringify with `replacer`:
```js
get content() {
const record = this.props.record;
return JSON.stringify(record, Object.keys(record).sort(), 2);
}
```
In this case, replace contains all the keys present in record, sorted. The problem is that the properties fields are themselves objects that contain the keys: `name`, `string`, `type`, `default`, `value`.
And giving an array to replace in `JSON.stringify` will filter the keys and keep only those that are whitelisted in it.
```js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
const foo = {
foundation: “Mozilla”,
model: “box”,
week: 45,
transport: “car”,
month: 7,
};
JSON.stringify(foo, [“week”, “month”]);
// ‘{“week”:45,“month”:7}’, only keep ‘week’ and “month” properties
```
This will ignore the keys of the properties fields.
The fix is therefore to sort the object before stringifying it, without using replace.
Thanks to these two fixes, the data is displayed as expected, regardless of whether there are field properties or not.
opw-5017425
Forward-Port-Of: odoo/odoo#225572
Forward-Port-Of: odoo/odoo#224084A test setup was corrected so discount and pricelist settings are enabled when needed. This prevents automated checks from failing in sales-only scenarios, helping keep releases reliable without changing customer-facing behavior.
Original PR description
This commit fix runbot issue cause by PR https://github.com/odoo/odoo/pull/226859 to compute discount depending on pricelist. Cause: - In subscription discount and pricelist are default enable that allow discount to compute properly and set it to 0 but when only sale is installed test was breaking because non of the condition was enabled require to compute discount properly. Fix: - Enabled discount and pricelist feature in testcase to compute discount properly runbot-232685
Fixes a crash that occurred when users tried to translate a chatter message from the mobile action menu. Mobile users can now use message translation reliably without being interrupted by an error.
Original PR description
Steps to reproduce: - Open any chatter with a message on mobile - Try to translate the message using the Translate mobile action => Throws traceback This happens because the component here is `MessageActionMenuMobile` instead of `Message`, and MessageActionMenuMobile does not have the `onClickToggleTranslation` method. This PR fixes the issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227578 Forward-Port-Of: odoo/odoo#223567
This fixes a Point of Sale restaurant issue where orders could be incorrectly marked as needing preparation when no preparation printer or display categories were configured. Staff can now proceed with payment without seeing an unnecessary preparation prompt, reducing confusion during checkout.
Original PR description
Steps to reproduce: - Open a pos restaurant config that has no prep printer/display. - Add an orderline. - The order button appear and if you try to pay the popup ask for send to preparation is shown. Issue: If there is no preparationCategories for a config getOrderChanges consider that all the available categories are the preparationCategories. Fix: If there is no preparationCategories, set the orderline uiState hasChange to false. Note: When no preparation printer category is defined, no categories is to be return by default. For the preparation display, if no preparation categories is selected preparationCategories will return all the available categories. Task-5016231 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#222950
Restaurant POS orders no longer ask staff to send items to preparation when no preparation printer or display category is configured. This avoids confusing extra steps during checkout and keeps the order flow aligned with the restaurant setup.
Original PR description
Steps to reproduce: - Open a pos restaurant config that has no prep printer/display. - Add an orderline. - The order button appear and if you try to pay the popup ask for send to preparation is shown. Issue: If there is no preparationCategories for a config getOrderChanges consider that all the available categories are the preparationCategories. Fix: If there is no preparationCategories, set the orderline uiState hasChange to false. Note: When no preparation printer category is defined, no categories is to be return by default. For the preparation display, if no preparation categories is selected preparationCategories will return all the available categories. Task-5016231 Forward-Port-Of: odoo/enterprise#92541
Survey invitation emails now correctly refresh their subject when a selected email template has been changed. This prevents outdated subject lines from being sent and helps teams keep survey communications consistent.
Original PR description
Description of the issue/feature this PR addresses: Fixed [previous commit] where the subject doesn't update when the template was updated. This was due to a filter in place preventing this from happening. Steps to reproduce on runbot: 1. Go to mail templates and search for Survey 2. Open the Survey: Invite template 3. Update the subject on this template 4. Open the Surveys app and select any survey 5. Click on Share and then enable send by email 6. Change the template being used 6. The subject will stay the same [previous commit]: https://github.com/odoo/odoo/commit/16a2c28c9aec307f7ce9dbed0a660b512db31f3a opw-4654411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227460 Forward-Port-Of: odoo/odoo#221049
This fix prevents an error when opening Studio from a newly created Project dashboard. It handles the case where no project update record exists, so users can customize the view without triggering a server error.
Original PR description
An error currently occurs when opening the studio view. Steps to reproduce: --- - Install `Project` and `web_studio` - Project > Configuration > Projects > Create a New Project - Click on the `Dashboard` button > Open studio view - Error in terminal Traceback: --- `TypeError: object of type 'bool' has no len()` This error occurs because `project.update` doesn’t have any records. When opening the studio view, at [1] it tries to compute the record’s name, which is `False`, and `False` has no length. [1]- https://github.com/odoo/odoo/blob/e0322e2cbc16d2405e66f3b16cbabeac2ad265e7/addons/project/models/project_update.py#L80 sentry-6830573412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the project side panel from failing when two project-related extensions use the same display order for statistic buttons. Business users benefit from a more reliable project view, especially in databases with multiple installed modules or customizations.
Original PR description
Description of the issue/feature this PR addresses: If a sequence in function _get_stat_buttons in project.project is repeated, the view view fail because we are using the sequence as key Current behavior before PR: If we repeat a sequence in two independent modules, the view fails. Desired behavior after PR is merged: The view works as expected --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227382
A mislabeled language setting in the Dutch balance sheet report was corrected so the affected term appears under the intended German language code. This helps ensure financial reports show the right localized wording for users working with translated statements.
Original PR description
One term in the Dutch balance sheet was having the `nl` language code instead of `de`. This commit corrects that. Forward-Port-Of: odoo/enterprise#95118
8 changes
Resolved issues and error corrections
Survey invitation emails now correctly update their subject line when a different email template is selected. This prevents outdated or incorrect subjects from being sent and helps keep survey communications consistent with configured templates.
Original PR description
Description of the issue/feature this PR addresses: Fixed [previous commit] where the subject doesn't update when the template was updated. This was due to a filter in place preventing this from happening. Steps to reproduce on runbot: 1. Go to mail templates and search for Survey 2. Open the Survey: Invite template 3. Update the subject on this template 4. Open the Surveys app and select any survey 5. Click on Share and then enable send by email 6. Change the template being used 6. The subject will stay the same [previous commit]: https://github.com/odoo/odoo/commit/16a2c28c9aec307f7ce9dbed0a660b512db31f3a opw-4654411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227460 Forward-Port-Of: odoo/odoo#221049
This fix updates Spanish translations used in Peruvian electronic invoicing and stock documents, including tariff fraction labels and withholding code names. It helps businesses avoid confusing or inconsistent wording in localized tax and logistics records.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
This fixes unstable automated checks around live chat call status and agent assignment. It helps ensure live chat quality checks are consistent, reducing false failures during releases without changing customer-facing behavior.
Original PR description
Since [1], rtc sessions are garbage collected when creating new live chat sessions. Rtc sessions that didn't receive any update during the last minute are considered as inactive. This can interfere with agent assignation tests: operators in a call are not prioritized. If the session is garbage collected, they are not in a call, and tests can fail. fixes runbot-232705 [1]: https://github.com/odoo/odoo/pull/211359 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#227648
The website editor now shows newsletter mailing list names without extra numbers when adding checkbox options. This makes the form setup clearer for users and avoids confusing labels in the editor.
Original PR description
In the "Subscribe to newsletter" form, "Add new Checkbox" on the web editor for "Subscribe to" field lists mailing list with number. This commit removes the number by fetching the records from mailing list via "name" and not "display_name". Steps to Reproduce: 1. Add a form 2. Change action to "Subscribe to Newsletter" 3. Click on "Subscribe to" field 4. Click on "Add new Checkbox" and you see the numbers on the list. opw-4730089 Forward-Port-Of: odoo/odoo#210891
Fixes an issue where internal notes on Point of Sale orders appeared as raw JSON in order lists after note color data was added. The note is now shown in a readable text format while keeping the underlying note details intact.
Original PR description
steps to reproduce: ------------------- 1. Install pos_restaurant, web_studio 2. Go to Orders > add the internal_note field on the order list view using Studio. 3. Open a POS, add a product, then…
steps to reproduce: ------------------- 1. Install pos_restaurant, web_studio 2. Go to Orders > add the internal_note field on the order list view using Studio. 3. Open a POS, add a product, then unselect the product so you can add an internal note that applies to the whole order (not only to the product). issue: ------- In the orders list view, the internal_note field is displayed in JSON format. cause of the issue: ------------------- Commit 705e8cf introduced color changes in the `internal_note` field and changed its value to JSON. https://github.com/odoo/odoo/blob/7c34f4166d86910fc8c56547245c2cef86ca5f64/addons/point_of_sale/static/src/app/screens/product_screen/control_buttons/orderline_note_button/orderline_note_button.js#L123-L128 https://github.com/odoo/odoo/blob/7c34f4166d86910fc8c56547245c2cef86ca5f64/addons/point_of_sale/static/src/app/screens/product_screen/control_buttons/orderline_note_button/orderline_note_button.js#L99-L113 The order was then created with this JSON value, which caused it to be displayed incorrectly in the list view. https://github.com/odoo/odoo/blob/7c34f4166d86910fc8c56547245c2cef86ca5f64/addons/point_of_sale/static/src/app/services/pos_store.js#L1345-L1347 solution: --------- Add a non stored computed field to display in string format, without altering the original `internal_note` structure **With fix:** <img width="1916" height="240" alt="image" src="https://github.com/user-attachments/assets/f38530bc-491a-427e-a4ea-39d726f2024b" /> opw-5050847 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Danish minimal financial reports were corrected so report lines use the right values and cleaner labels. This helps businesses relying on Danish reporting get more accurate balance sheet and profit/loss outputs with consistent translations.
Original PR description
In the minimal reports of l10n_dk, it appears that some expression ended with a sign and the report engine was given wrong value. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will change the translation accordingly to the other commits task-4949062 Forward-Port-Of: odoo/enterprise#94350 Forward-Port-Of: odoo/enterprise#91135
This fixes an issue where the project side panel could fail to load when different modules used the same ordering value for project statistic buttons. The panel now remains usable even when those values overlap, improving reliability for users with multiple project-related modules installed.
Original PR description
Description of the issue/feature this PR addresses: If a sequence in function _get_stat_buttons in project.project is repeated, the view view fail because we are using the sequence as key Current behavior before PR: If we repeat a sequence in two independent modules, the view fails. Desired behavior after PR is merged: The view works as expected --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227382
Miscellaneous changes
When scanning the barcode of a loyalty card, there was an error saying the code is invalid. Instead it should select the partner linked to the card if there is one. Steps to reproduce: ------------------- * Create a loyalty program, and a loyalty card with a partner * Copy the barcode of the loyalty card * Open the POS, and scan the barcode of the loyalty card > Observation: The error "Invalid code" appears, and the partner is not selected opw-4653983 Forward-Port-Of: odoo/odoo#21
Original PR description
When scanning the barcode of a loyalty card, there was an error saying the code is invalid. Instead it should select the partner linked to the card if there is one. Steps to reproduce: ------------------- * Create a loyalty program, and a loyalty card with a partner * Copy the barcode of the loyalty card * Open the POS, and scan the barcode of the loyalty card > Observation: The error "Invalid code" appears, and the partner is not selected opw-4653983 Forward-Port-Of: odoo/odoo#215674 Forward-Port-Of: odoo/odoo#213831
5 changes
Resolved issues and error corrections
This fixes incorrect Spanish translations for Peruvian electronic invoicing and stock-related tax/shipping codes. Users working in Spanish will see clearer, more accurate tariff and withholding labels, reducing confusion in local compliance workflows.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
This fixes errors in Danish minimal financial reports where extra signs caused incorrect values to be processed. Report labels and translations were also cleaned up so the reports are clearer and more consistent for users.
Original PR description
In the minimal reports of l10n_dk, it appears that some expression ended with a sign and the report engine was given wrong value. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will change the translation accordingly to the other commits task-4949062 Forward-Port-Of: odoo/enterprise#91135
A mislabeled language code in the Dutch balance sheet report has been corrected. This helps ensure the right translated term appears in financial reporting, reducing confusion for users viewing localized reports.
Original PR description
One term in the Dutch balance sheet was having the `nl` language code instead of `de`. This commit corrects that.
The point of sale payment screen now correctly prevents validation on mobile when no payment method is selected. This helps avoid incomplete or invalid payment flows for staff using mobile devices.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. community PR: https://github.com/odoo/odoo/pull/225917 task-id: 5072759 Forward-Port-Of: odoo/enterprise#94100
The Planning app now shows only the hours that belong to the selected week when a flexible employee's shift spans multiple weeks. This prevents overstated progress bars in the weekly Gantt view and gives managers a more accurate view of allocated time.
Original PR description
### Steps to reproduce: - Install Planning app - Create a shift for a flexible employee that starts on Friday and end on the following Tuesday for example - Go to the gantt view for the week that the shift should start at - Notice the progress bar is showing the whole allocated hours not just the week's hours ### Cause: This mainly happening because when the employee is flexible we are getting the value by multiplying the hours_per_day of his schedule by the period.days and the period is the shift period ### Fix: We use the interval we are just checking as the period now so if the shift is extended to the next week we are just going to use the end of the week as the interval end not the shift's end_datetime opw-5022800 Forward-Port-Of: odoo/enterprise#93404
11 changes
Enhancements to existing features
Payslips created through a pay run now use the same naming format as off-cycle payslips. This makes payroll records easier to identify and keeps naming consistent across payroll workflows.
Original PR description
Computed the name of payslips generated through using a payrun, in order to follow the same naming convention as those created off-cycle Task-5075930
Unused internal code from older timesheet grid features was removed because the features that depended on it no longer exist. This keeps the timesheet module easier to maintain without changing the user experience.
Original PR description
**1. _get_last_week()**
This method was previously used in _group_expand_employee_ids(). However, _group_expand_employee_ids was removed in version 17.3
Commit - https://github.com/odoo/enterprise/commit/c47d14a51068edbcac4ceb12e3c68835f57b6951 so this method is now unused.
**2. remove legacy code related to old grid view**
**_prepare_duplicate_timesheet_line_values()** This method was used in **adjust_grid().** Since adjust_grid() was removed in saas-16.2
Commit - https://github.com/odoo/enterprise/commit/f0ab0ba31f70bdb9c9e9f9b00c3679771cc49cb8 This method is now also unused.
task-5068036The task timesheet form has been adjusted so subtotal information displays correctly on mobile devices. This makes shared project task pages easier to read and use on smaller screens.
Original PR description
- adapt the structure inside the `oe_subtotal_footer` group Task-4347949
Resolved issues and error corrections
Several help and documentation links across Odoo Enterprise were corrected to open the 19.0 documentation instead of the older 18.0 pages. This helps users reach the right guidance for their current version and avoids confusion from outdated instructions.
Original PR description
Community PR https://github.com/odoo/odoo/pull/227546. Forward-Port-Of: odoo/enterprise#95009
Updated automated tests for the Stock Barcode app to match a related platform change in how pack-adding actions are called. This helps keep barcode picking workflows reliable and prevents test failures during ongoing maintenance.
Original PR description
Following the change in the community counterpart in [#226043](https://github.com/odoo/odoo/pull/226043), `action_add_entire_packs` now uses ids instead of recordsets (as it's meant to be called directly through JS code). Adapt tests to reflect this change. Task-5065793 Forward-Port-Of: odoo/enterprise#94562
Free subscription contracts are now correctly cleared from the invoicing queue when there is nothing to bill. This prevents users from seeing or processing unnecessary invoice prompts for zero-value contracts.
Original PR description
Forward-Port-Of: odoo/enterprise#94626
Field service tasks created from a template now correctly keep the template's Under Warranty setting. This prevents warranty-covered work from being missed or treated incorrectly after task creation.
Original PR description
**Steps to reproduce:**
- Install industry_fsm_sale
- Create a task template with "Under Warranty" enabled
- Create a task from that template
**Issue:**
The created task does not carry over the "Under Warranty" value from the task template.
**Cause:**
The `under_warranty` field has `copy=False`, so the value is not transferred.
**Fix:**
Updated the copy method to check for `copy_from_template` in the context. If the task template has "Under Warranty" enabled, the field is explicitly set on the new task.
task: 5083386
Forward-Port-Of: odoo/enterprise#95114
Forward-Port-Of: odoo/enterprise#94924Bookkeeper and related accounting users can now access the document summary section of Indian tax returns without being blocked by a permissions error. This removes an interruption in tax return review and helps finance teams navigate permitted records smoothly.
Original PR description
Before: - Bookkeeper users (`group_account_user`) encountered an access error of gstr document summary line when opening tax returns. - The error occurred because access rights were missing for the given model. Fix: - Added access rights for readonly, basic and accounting users. - Bookkeeper users can now view and navigate their permitted tax return records without errors. Impact: - Ensures smooth access to tax returns for Bookkeeper role. Forward-Port-Of: odoo/enterprise#94580
The project budget demo data has been updated to remove sample purchase order content that is no longer relevant. This prevents demo environments from referencing purchasing features that are no longer required by the budgeting app.
Original PR description
Since 5cf91390dd7c320c3348d509d3f33a499e760259, `account_budget` doesn't depend on `purchase` anymore. Remove `purchase` related demo data. Forward-Port-Of: odoo/enterprise#95091
A mislabeled language code in the Dutch balance sheet report was corrected so the affected term appears under the right language. This helps ensure financial report labels are displayed consistently for users working with localized reports.
Original PR description
One term in the Dutch balance sheet was having the `nl` language code instead of `de`. This commit corrects that. Forward-Port-Of: odoo/enterprise#95118
Features or functions removed from Odoo
An unused behind-the-scenes formatting method was removed from accounting reports because it duplicated existing behavior. This simplifies maintenance without changing how users view or interact with reports.
Original PR description
Removing `format_value` method, as it does nothing more than `_format_value` and is never called by the client.
32 changes
Enhancements to existing features
Payslips that have reached the validated stage now display as "Done" instead of "Validated". This aligns the wording with pay runs, reducing confusion for payroll users reviewing payroll progress.
Original PR description
If the payslip status is "validated", the display status for the payslip is "Validated". The display has been changed to "Done" to match with the payrun's status.
Resolved issues and error corrections
Creating a field service task from a template now correctly keeps the template’s “Under Warranty” setting. This prevents service teams from losing warranty information when using task templates, helping avoid incorrect billing or follow-up handling.
Original PR description
**Steps to reproduce:**
- Install industry_fsm_sale
- Create a task template with "Under Warranty" enabled
- Create a task from that template
**Issue:**
The created task does not carry over the "Under Warranty" value from the task template.
**Cause:**
The `under_warranty` field has `copy=False`, so the value is not transferred.
**Fix:**
Updated the copy method to check for `copy_from_template` in the context. If the task template has "Under Warranty" enabled, the field is explicitly set on the new task.
task: 5083386
Forward-Port-Of: odoo/enterprise#95112
Forward-Port-Of: odoo/enterprise#94924Spanish translations for Peruvian tariff fraction entries and withholding codes were corrected so users see clearer, consistent labels. This reduces confusion when working with Peruvian electronic invoicing and stock localization data.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
Event-related emails now use embedded image icons instead of website-only icon styling. This helps recipients see the intended visual elements consistently across email clients and external mail servers.
Original PR description
Font awesome classes must no be inserted into email as external servers do not use them so icons are not displayed. This commit replaces i tags with font awesome classes in mail by images. Task-5082165 Forward-Port-Of: odoo/odoo#226331
Website sitemaps now avoid listing the same page more than once when website controllers are customized or extended. This helps keep sitemap files cleaner for search engines without changing which pages are included.
Original PR description
When extending controllers (e.g. `WebsiteSale.shop`), sitemap entries were duplicated because deduplication relied on the endpoint function object. Overridden methods result in different function objects but identical sitemap URLs, leading to duplicates. This commit fixes the issue by deduplicating on the generated sitemap location (`loc['loc']`) instead of the function object, ensuring unique URLs in the sitemap even when controllers are extended. Fixes #224193 Forward-Port-Of: odoo/odoo#226810 Forward-Port-Of: odoo/odoo#224406
This fix corrects Philippine localization tax setup so VAT-exempt fiscal positions and taxes are classified properly. It helps businesses avoid incorrect tax labels or country restrictions when configuring Filipino company accounting.
Original PR description
### Steps to reproduce: - Install "l10n_ph" and switch to a Filipino company - Check the tax "0% Exempt", it has both "VAT Exempt" and "VAT Registered" ### Cause: The CSV was badly generated because of the fiscal position tax mapping before 18.3. ### Solution: Fix the CSV. Also delete the country for the fiscal position "VAT Exempt". This is a [recommendation from AYH on discord](https://discord.com/channels/678381219515465750/687337689988726949/1410930795329097880). opw-5044305 Forward-Port-Of: odoo/odoo#227261
The product comparison page layout has been adjusted so desktop visitors no longer see unnecessary horizontal scrollbars. This keeps the comparison table aligned with the page header and footer, improving the browsing experience without changing functionality.
Original PR description
This PR fixes an issue about the `website_sale_comparison` page showing an unwanted scrollbar on desktop. Since each `.o_wsale_compare_table_column` element comes with a padding on the left and right side, it was creating a misalignment between the page content and the page header and footer. With this commit, we fix the issue by assigning a new `width` to the container, based on those padding values. task-5076730 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Automation Rules trigger dropdown now uses the correct background color when dark mode is enabled. This fixes a visual inconsistency so users get a cleaner, more consistent experience while creating automation rules.
Original PR description
Steps: - Install `base_automation` - Enable dark mode - Open Automation rules - Create a new rule - open trigger dropdown - the dropdown background is still in light mode This commit apply $dropdown-bg on `o_field_base_automation_trigger_selection` opw-5064357 Forward-Port-Of: odoo/odoo#226666 Forward-Port-Of: odoo/odoo#226116
This fixes an automated test so it works correctly when demo data is present. It helps keep quality checks reliable and prevents false failures during development and release validation.
This update corrects a typo in internal documentation for a core Odoo operation. It does not change how the system works, but helps keep developer-facing guidance accurate and easier to understand.
Original PR description
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
This fix updates an automated barcode inventory test so it waits for the correct step before continuing. It helps reduce false build failures and improves confidence in the stock barcode workflow validation.
Original PR description
The `test_put_packs_in_existing_pack` tour was using an erroneous trigger causing race condition. This commit replaces this trigger by another one to be sure previous step is completed before going forward. Runbot build error: [232638](https://runbot.odoo.com/odoo/runbot.build.error/232638)
A timing issue in an accounting guided test was fixed so product selection is properly recognized before the next check runs. This improves reliability of automated validation, especially when localization features take slightly longer to load.
Original PR description
Issue: The tour was failing because the product was not being selected in time. As a result, the subsequent step that checks whether the product is selected was consistently failing. Cause: In the Romanian localization, the `FetchInvoicesCogMenu` component uses an `isDisplayed` argument with async/await. This introduces a delay before the component is fully rendered. Meanwhile, the tour step was executing too early, before the product was actually selected. Fix: Increase the wait time to 1000ms to ensure the product is properly selected before the following step is executed.
This fixes an issue where subscription contracts with no amount due could still appear as needing an invoice. It helps keep billing queues cleaner and prevents staff from spending time reviewing contracts that should not generate invoices.
Original PR description
Forward-Port-Of: odoo/enterprise#94626
This update makes Malaysia electronic invoicing tests more consistent by using fixed tax settings in additional scenarios. It reduces the chance of test failures caused by unrelated default tax or product tax changes, helping maintain confidence in future updates.
Original PR description
follow-up on https://github.com/odoo/odoo/pull/227111 The fixes helped improve the stability of the tests, but a few using different ways of setting up their invoices (or SO) went through without the change. This adds the fixed tax to these as well, so that they should no longer fail if a side effect changes the default tax/product tax. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the website builder by delaying tooltip checks until they are actually needed. This reduces unnecessary work during page editing and should make builder rows render more quickly, especially on complex pages.
Original PR description
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#223945
The salary offer screen now uses theme-aware background colors instead of a fixed color. This improves readability and visual consistency for users working in dark mode.
Original PR description
With this commit the background-color is not hardcoded anymore; the background color is calculated with the bootstrap variable text-bg-secondary task-5089515
An unnecessary background log message was removed from the spreadsheet chart configuration area. This keeps browser tools cleaner for support and development without changing how users work with spreadsheets.
Original PR description
Task: 0
The account merge wizard now uses the full available space to show its list view. This fixes a display issue where the list became progressively narrower during repeated rendering, making the wizard harder to use.
Original PR description
Use the full width of the wizard to display the list view. It was even worse because the width of the view was being reduced in multiple renders with a few frames per second.
The website shop checkout test was made more reliable by waiting for page elements before continuing. This helps reduce false test failures and keeps quality checks aligned with the current "Add to Cart" button wording.
Original PR description
The add_to_cart_snippet_tour was unstable due to race conditions. some steps executed before their target elements were actually present, causing failures in subsequent steps. This commit ensures the tour runs reliably by adding explicit wait conditions between the affected steps, so the elements are guaranteed to exist before moving on. In addition, the tour is updated to reflect the recent change where the button label was renamed from "Continue Shopping" to "Add to Cart" [1]. [1] https://github.com/odoo/odoo/commit/786c6c00701bcc30c1f2aa04d7fd9ee7bd4c511b#diff-5ac64dbfc12558f048e995a7d75f91d915161063741ddf36281062b273598a51 runbot-231474
This fixes a crash in the website editor when resizing the title area of a newly added Floating Cards item. Users can now add and adjust these cards without encountering an error, improving reliability while editing website pages.
Original PR description
*: html_builder In the "Floating Cards" snippet, after adding a new card, when trying to resize its title column vertically, a traceback appears. It happens because this grid item does not have the `g-col-*` class, which is needed for the resize in grid mode to work. This commit adds this class. Steps to reproduce: - Drop a "Floating Cards" snippet. - Add a card. - Click on the new card title and resize the column vertically. => Traceback The issue was previously addressed in [1], but a refactor of the Floating Cards snippet in master introduced a duplicate template, and the fix was applied to the incorrect one. [1]: https://github.com/odoo/odoo/commit/78f6e70e0777f5b063524ead73ddaae93ba55f22 Forward-Port-Of: odoo/odoo#226260
Users can now open the debug Data view on records that include field properties without encountering an error. This helps administrators and support teams inspect record data reliably, including custom property fields.
Original PR description
Example Steps: - Install `crm` - Add a random field properties in a random form view - Enable debug mode - Open debug menu - Select Data - Traceback ```py raise ValueError(f"Invalid field…
Example Steps:
- Install `crm`
- Add a random field properties in a random form view
- Enable debug mode
- Open debug menu
- Select Data
- Traceback
```py
raise ValueError(f"Invalid field {field_name!r} on model {self._name!r}")
ValueError: Invalid field 'properties.xyz' on model 'x.y'
```
There are two causes for this problem.
First, we use orm.read to retrieve data from records, which does not directly handle sub-field properties. We only need to use `definition_property` (which contains the overall schema of the JSON field).
Second, when displaying the data, we use JSON.stringify with `replacer`:
```js
get content() {
const record = this.props.record;
return JSON.stringify(record, Object.keys(record).sort(), 2);
}
```
In this case, replace contains all the keys present in record, sorted. The problem is that the properties fields are themselves objects that contain the keys: `name`, `string`, `type`, `default`, `value`.
And giving an array to replace in `JSON.stringify` will filter the keys and keep only those that are whitelisted in it.
```js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
const foo = {
foundation: “Mozilla”,
model: “box”,
week: 45,
transport: “car”,
month: 7,
};
JSON.stringify(foo, [“week”, “month”]);
// ‘{“week”:45,“month”:7}’, only keep ‘week’ and “month” properties
```
This will ignore the keys of the properties fields.
The fix is therefore to sort the object before stringifying it, without using replace.
Thanks to these two fixes, the data is displayed as expected, regardless of whether there are field properties or not.
opw-5017425
Forward-Port-Of: odoo/odoo#225572
Forward-Port-Of: odoo/odoo#224084The website editor now correctly hides the image width setting when an image is placed inside a card. This restores the intended editing experience and helps prevent layout options that do not apply in that context.
Original PR description
When converting the options to Owl, the behavior from commit [1], which hid the image width option for images inside cards, was lost. We are reintroducing it here. [1]: https://github.com/odoo/odoo/commit/4dcd1f9607ecc1ea932e02128a3e6f01d652cba6 Forward-Port-Of: odoo/odoo#227444
The project budget demo data was updated to remove sample purchase information that no longer applies. This prevents demo environments from relying on an app connection that has been removed, keeping setup cleaner and more reliable.
Original PR description
Since 5cf91390dd7c320c3348d509d3f33a499e760259, `account_budget` doesn't depend on `purchase` anymore. Remove `purchase` related demo data.
This update ensures invoices for foreign customers in Saudi e-invoicing use an accepted alphanumeric Other Buyer ID value. It helps avoid ZATCA acceptance warnings and supports smoother invoice validation for affected businesses.
Original PR description
When an invoice is being issued to a Foreign Customer, the Other Buyer ID (Other Buyer ID (BT-46) <cac:AccountingCustomerParty / cac:Party / cac:PartyIdentification / cbc:ID>) should be OTH and filled accordingly to avoid an acceptance warning from ZATCA. According to ZATCA, the value needs to be in alphanumeric format, even if the value does not follow the specific country's VAT format Task-id: 5075005 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#227511 Forward-Port-Of: odoo/odoo#226593
This fixes an issue where the Project screen could fail when two independent modules used the same ordering value for stat buttons. The view now remains usable even when those values are duplicated, reducing disruption for users working with customized project setups.
Original PR description
Description of the issue/feature this PR addresses: If a sequence in function _get_stat_buttons in project.project is repeated, the view view fail because we are using the sequence as key Current behavior before PR: If we repeat a sequence in two independent modules, the view fails. Desired behavior after PR is merged: The view works as expected --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227382
This fixes an error that could occur when calculating external taxes for point-of-sale orders using AvaTax. The change removes an outdated internal reference so affected orders can process tax data correctly.
Original PR description
Since [this PR](https://github.com/odoo/enterprise/pull/82623), defination of `_get_lines_eligible_for_external_taxes` was removed but a reference to it still remained, causing the following error when calling the `_get_line_data_for_external_taxes` method:. `AttributeError: 'pos.order' object has no attribute '_get_lines_eligible_for_external_taxes'` Fix: Removed reference to `_get_lines_eligible_for_external_taxes` from `_get_line_data_for_external_taxes` at [1]. [1]- https://github.com/odoo/enterprise/blob/9a1544d19c1f5f3546c04022a11601df43199d10/pos_avatax/models/pos_order.py#L15-L18 sentry-6843827499 Forward-Port-Of: odoo/enterprise#93490
Mobile shoppers now see clearer visual feedback when browsing secondary product images. This removes confusing duplicate dot indicators so the image area feels intentional and less like a broken carousel.
Original PR description
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The…
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The attempt was of emulating carousel indicators. Unfortunately, since dots were absolute positioned, the design failed to correctly communicate the user the actual behavior, leading to confusion and to the impression that the element itself was affected by a bug. This commit simply toggle a class, triggering the right design when necessary. Note that this implementation doesn't need to be scoped for specific resolutions, since cards are scroll-able only on mobile. Debouching is not required neither since the events are fired when the user intentionally interact with the element only. task-5082527 --- Before https://github.com/user-attachments/assets/8cbe6040-2e5d-48d6-951a-65f8fe0aae6c ---- After https://github.com/user-attachments/assets/9f3671ec-77eb-478b-840f-676f91bf50e2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Restaurant POS orders no longer appear as needing preparation when no preparation printer or display category is configured. This prevents unnecessary prompts during payment and keeps the ordering flow clear for staff.
Original PR description
Steps to reproduce: - Open a pos restaurant config that has no prep printer/display. - Add an orderline. - The order button appear and if you try to pay the popup ask for send to preparation is shown. Issue: If there is no preparationCategories for a config getOrderChanges consider that all the available categories are the preparationCategories. Fix: If there is no preparationCategories, set the orderline uiState hasChange to false. Note: When no preparation printer category is defined, no categories is to be return by default. For the preparation display, if no preparation categories is selected preparationCategories will return all the available categories. Task-5016231 Forward-Port-Of: odoo/enterprise#92541
This fixes cases where selecting text inside editor buttons or adjacent links could accidentally include too much content. Users editing website or HTML content can now double- or triple-click more predictably without replacing an entire button or selecting text from the next link.
Original PR description
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For…
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For buttons, when we triple click, we select the content of the button node Commit 2: [FIX] html_editor: limit word selecting of double click inside link Before this commit: when two links or buttons are next to each other without a space, double clicking the last word of the first link will spread the selection over the second link's first word. This is the default of browser's behavior. Reproduction: 1. create 2 links with different urls, one with label `test one`, second with `test two` 2. double click the `one` of the first link, the selection will spread to the second link. so `one` and `test` are both selected After this commit: We seperate the double click selection correction to the link plugin. Because now we have the selection properly set inside the link without including the feff characters, the previous fix of the selection isn't needed anymore. task-4897848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219278
A Dutch balance sheet label had the wrong language code, causing it to be treated as Dutch instead of German. This fix assigns the correct German language code so the report displays the intended translated term consistently.
Original PR description
One term in the Dutch balance sheet was having the `nl` language code instead of `de`. This commit corrects that. Forward-Port-Of: odoo/enterprise#95118
Features or functions removed from Odoo
This change removes a temporary HR screen adjustment that is no longer needed because the alignment issue has been fixed properly elsewhere. Users should see the same corrected field layout, with less temporary customization to maintain.
Original PR description
This PR removes the hotfix for the alignment issue of the m2o field as it is fixed more properly by the PR https://github.com/odoo/odoo/pull/226214. Task-5078736
Documentation and clarification updates
ALUBENA TERRA has added its signed Contributor License Agreement documentation. This is a legal and administrative update that helps confirm contributions can be accepted under Odoo's contribution rules.
Original PR description
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
13 changes
Resolved issues and error corrections
This fix prevents an error that could occur when editing replenishment rules linked to confirmed manufacturing orders. Users can update min/max replenishment values without the page crashing in this specific manufacturing planning scenario.
Original PR description
When modifying fields in a replenishment rule with an associated Manufacturing Order (MO) in a confirmed state and a lead_timedate between date_start and date_finished, the orderpoint.id sometimes…
When modifying fields in a replenishment rule with an associated Manufacturing
Order (MO) in a confirmed state and a lead_timedate between
date_start and date_finished, the orderpoint.id
sometimes contained <NewId>. This resulted in a KeyError when attempting to
index res[orderpoint.id] in _quantity_in_progress.
Steps to reproduce:
Install MRP
Go to Inventory > Operations > Replenishment
1. Click new > select product `[[D_0045_GR] Stool (Grey)]` and set min and max as 1
2. Press 'Order' button of selected product
3. Open Bill of material of product `[D_0045] Stool`
4. Go to the Miscellaneous Page and make Manuf. Lead Time it 10 days and save it.
5. Open manufacturing order of product `[[D_0045_GR] Stool (Grey)]`
6. Select Scheduled Date Field and put it 2 days into the future if date is 2
future date should be 4.
7. Go back to Inventory App Operations>Replenishment.
8. Remove default filters To Reorder and Not Snoozed.
9. Stool Grey should now be visible make the `Min = 2` and then only click on Max
Value (Not anywhere else, do not save it).
KeyError: 8
Solution:
1.Check if the orderpoint exist in res
2.If the key does not exist we initialize it.
3.This ensures there are no key errors.
Sentry - 6135193468This fixes an error that could occur when the appointment calendar processed multiple events at the same time. It helps ensure video call redirection links are generated reliably for bookings, reducing failed appointment flows.
Original PR description
In the event of calendar.event() having multiple id's such as `calendar.event(1,2)` within `_compute_videocall_redirection` it is possible that the `models.py` returns the following: `ValueError: Expected singleton or no record: calendar.event(2, 1)` Solution: Replacing 'self.get_base_url()' and 'self.access_token' with 'event.get_base_url' and 'event.access_token' allowing only single event record instead of multiple at once. Sentry - 6491567020
This fix prevents an error when preparing a manufacturing order after the component separator is left blank during batch production with serial-numbered products. Users can continue the preparation process without being interrupted by a system traceback.
Original PR description
When user unsets the Component separator in Batch Production of serial number,
A traceback will appear.
Steps to reproduce the error:
- Create two Product A and B
- Tracked by Unique Serial Number
- Create a MO > Product: Product A > Quantity: 2
- Components > Product: Product B > To Consume: 2
- Confirm > Produce All
- Unset Component separator > Prepare MO
Traceback:
```
File "/home/odoo/src/odoo/addons/mrp/wizard/mrp_batch_produce.py", line 52, in _compute_production_text_help
text += wizard.component_separator + move_raw.product_id.display_name
TypeError: unsupported operand type(s) for +: 'bool' and 'str'
```
https://github.com/odoo/odoo/blob/47992d61a1ffa96287099be7dee8f9f244d835d4/addons/mrp/wizard/mrp_batch_produce.py#L52
Here, When ``component_separator`` is False.
It will lead to the above traceback.
sentry-6625936682
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prCreating a new user no longer fails if a specific mail notification setting has been removed or renamed. The system now checks whether the setting exists before applying it, helping administrators avoid an unexpected error during user setup.
Original PR description
When the reference to external ID `mail.group_mail_notification_type_inbox` is not found while creating a user a value error is thrown. **Steps to reproduce:** * Install the module mail. * Delete/rename id `mail.group_mail_notification_type_inbox` from External Identifiers. * Create a new User and save. `Value Error:External ID not found in the system: mail.group_mail_notification_type_inbox` **Solution:** * Make `raise_if_not_found=False` and add an if statement to check for `inbox_group` and only proceed if it exists. **Sentry-6564294068** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users now receive a clear validation message when an asset depreciation period is set beyond supported date limits. This prevents confusing system errors during asset confirmation and helps users correct unrealistic depreciation settings.
Original PR description
Currently, creating an asset with an excessively long depreciation duration (e.g., 50,000 years) causes an error during depreciation computation. **Steps to Reproduce:** 1. Go to Accounting > Assets & Liabilities > Assets. 2. Create new assets with a duration of 50,000 years for depreciation method. 3. Click on the "Confirm/Compute Depreciation" button. **Error:** `ValueError - year 502025 is out of range` **Cause:** The computation of the last depreciation date relies on `relativedelta`. When the duration is too long, it produces a year value far beyond python’s supported datetime range, which raises an error during computation. **Fix:** This commit wraps the computation in a `try/except` block and raises a user-friendly Validation Error instead of a traceback. sentry-6832993432
Timesheet reports printed from a sales order now show the related helpdesk ticket name when time was logged on a ticket. This makes billed support work easier to identify and avoids reports showing only the helpdesk team name.
Original PR description
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report from the sale order -> the task column will contain only the helpdesk team name, while it should contain "helpdesk team / ticket name" Problem: ======== on the report template, the task name is fetched from line.task_id only, but helpdesk timesheets are linked to a ticket through line.helpdesk_ticket_id Solution: ========= use conidtionally line.task_id or line.helpdesk_ticket_id to display the task name opw-5002650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the Project view from failing when two independent modules use the same ordering value for project statistic buttons. It makes the view more reliable for businesses using multiple project-related customizations or add-ons.
Original PR description
Description of the issue/feature this PR addresses: If a sequence in function _get_stat_buttons in project.project is repeated, the view view fail because we are using the sequence as key Current behavior before PR: If we repeat a sequence in two independent modules, the view fails. Desired behavior after PR is merged: The view works as expected --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Planning now shows progress for flexible employee shifts based only on the hours that fall within the selected week. This prevents shifts spanning multiple weeks from making the current week look over-allocated.
Original PR description
### Steps to reproduce: - Install Planning app - Create a shift for a flexible employee that starts on Friday and end on the following Tuesday for example - Go to the gantt view for the week that the shift should start at - Notice the progress bar is showing the whole allocated hours not just the week's hours ### Cause: This mainly happening because when the employee is flexible we are getting the value by multiplying the hours_per_day of his schedule by the period.days and the period is the shift period ### Fix: We use the interval we are just checking as the period now so if the shift is extended to the next week we are just going to use the end of the week as the interval end not the shift's end_datetime opw-5022800
This fix ensures payment file details are passed correctly when other payment-related customizations rely on them. It reduces the risk of errors in Swedish ISO 20022 payment processing setups that use inherited or extended behavior.
Original PR description
Pass all arguments to super-call of _get_company_PartyIdentification32-method in account_iso20022/models/account_journal_iso20022_se.py so they can be passed correctly in other modules inheriting the method.
The newsletter subscription form editor now shows clean mailing list names when adding checkbox options. This prevents confusing numbers from appearing beside mailing list choices, making setup clearer for website editors.
Original PR description
In the "Subscribe to newsletter" form, "Add new Checkbox" on the web editor for "Subscribe to" field lists mailing list with number. This commit removes the number by fetching the records from mailing list via "name" and not "display_name". Steps to Reproduce: 1. Add a form 2. Change action to "Subscribe to Newsletter" 3. Click on "Subscribe to" field 4. Click on "Add new Checkbox" and you see the numbers on the list. opw-4730089 Forward-Port-Of: odoo/odoo#210891
This fix ensures helpdesk ticket information appears correctly in timesheet reports when relevant. It corrects a previous report update that did not target the right report element, helping users see complete task, project, and ticket context.
Original PR description
Description of the issue/feature this PR addresses: The previous commit attempted to extend the timesheet report <td> to display tickets by using position="attributes" on a new <td>. This approach does not work in Odoo reports because position="attributes" can only modify existing elements. There is no indication that the behavior of not displaying tickets was intentional, so this PR corrects that implementation. Current behavior before PR: - The previous fix did not correctly locate the existing <td> element for task/project info. Desired behavior after PR is merged: - The existing <td> is correctly found and updated to include show_ticket in its t-if.
Fixed an editor issue that could cause an error when users selected linked content and changed it between numbered and bulleted lists. This improves reliability while editing to-do items and other rich text content.
Original PR description
Steps to Reproduce: 1. Go to To-Do 2. Create a link 3. Select all using Ctrl + A 4. Switch to order list and then unordered list. 5. Traceback occurs Description of the issue: - This issue occurs because a feff (zero-width no-break space) character is present inside the link. When the link is inside a list and the list type is changed, the `removeFEFF` method is triggered. `removeFEFF` removes the feff characters, but the selection is preserved based on positions from when those feffs were still present inside the link. As a result, after the list type is changed, restoring the selection causes a traceback. Solution: - Triggered `clean_handlers` before preserving the selection. This ensures feff characters are removed from the link before the selection is preserved, preventing invalid selection offsets and avoiding the traceback. task-5095561
Timesheet reports printed from sales orders now show the related helpdesk ticket name alongside the helpdesk team. This makes billed support work easier to identify and reduces confusion for customers and staff reviewing reports.
Original PR description
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report…
to reproduce: ============= 1. make helpdesk team billable and records timesheets 2. create a helpdesk ticket and link it to a sale order 3. log timesheets on the ticket 4. print the timesheet report **from the sale order** -> the task column will contain only the helpdesk team name, while it should contain "helpdesk team / ticket name" Problem: ======== in helpdesk_timesheet we inherit `hr_timesheet.timesheet_table` to adapt it to helpdesk tickets, but we use `show_ticket` to display the ticket name, which is only set in `hr_timesheet.report_timesheet` and `hr_timesheet.timesheet_project_task_page` but not in `sale_timesheet.timesheet_sale_page` which is the one used when printing the report from the sale order. Solution: ========= `show_ticket` should be set with value `bool(lines.helpdesk_ticket_id)` which is equivalent to `line.helpdesk_ticket_id` in the t-if condition. so we can directly use `line.helpdesk_ticket_id` and remove the `show_ticket` variable. opw-5002650
10 changes
Enhancements to existing features
The Turkish Nilvera e-invoice integration now includes automated tests to help confirm that invoice processing continues to work as expected. This reduces the risk of future changes causing unnoticed issues in Turkish electronic invoicing workflows.
Original PR description
There are no tests for the Turkish e-invoice module. This commit adds that. Task ID: 4655864
Resolved issues and error corrections
Fixed an issue where the website donation button could fail if a pre-filled donation option had no amount entered. This prevents an error page and keeps the donation flow usable for visitors and website editors.
Original PR description
When the user clicks the ``Donate Now`` button and one of the pre-filled options
has a null amount, A traceback will appear.
Steps to reproduce the error:
- Go to Website > drag and drop donation button > Edit > Click on Donate Now button
- Add new pre-filled option with Null amount > Save
- Click on Donate Now button
Traceback:
```
ValueError: could not convert string to float: ''
```
https://github.com/odoo/odoo/blob/638268a81ed5a292a02d7fc353c4954159de54e1/addons/website_payment/views/payment_form_templates.xml#L86
Here, ``donation_amount`` will be an ``empty string('')``.
So, It will lead to the above traceback.
This commit will add a fallback value for a null amount.
sentry-6703335051
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prOdoo now handles invalid or non-image files more gracefully when users try to set a Discuss channel profile image. This prevents an error from interrupting channel setup and improves reliability for users who accidentally upload the wrong file type.
Original PR description
Currently, an error is encountered on uploading non-image files(e.g .txt, .csv) rather than image file, in the discuss channel. **Steps to reproduce:** - Install Discuss module - Navigate to Discuss channels. - Create new Channel and upload [this](https://docs.google.com/spreadsheets/d/1k_s_V7Q-zA9uQUaQblsJtBHC4VlEFM-w/edit?usp=drive_link&ouid=101212513075316114369&rtpof=true&sd=true) file as group's profile image. **Error:** `ValueError: Compute method failed to assign discuss.channel(<NewId origin=4>,).avatar_128` **Root Cause:** On uploading a file compute method expects a `Id` and here we are receiving `temporary id` as `<NewId origin=4>`, on using this id at [1] raising an error. [1]- https://github.com/odoo/odoo/blob/44a9831f125800743504a5cc55b395980ddc9ce7/addons/mail/models/discuss/discuss_channel.py#L126 **Solution:** This commit handles error on uploading a corrupt image in the discuss channel. Sentry- **6690968543**
This fix helps Odoo handle Twilio connection problems more cleanly when network issues or request timeouts occur. It reduces unexpected failures in mail-related services by identifying the type of connectivity problem more accurately.
Original PR description
The error occurs when the Twilio API call fails due to network issues. This commit ensures that a ConnectionError is raised when a connection issue occurs with the Twilio API, and a TimeoutError is raised in case of a request timeout. sentry-6541206983 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website contact forms no longer show an unnecessary blank space before the reCAPTCHA privacy line when labels are positioned at the top. This makes forms look cleaner and more professional for visitors without changing how reCAPTCHA works.
Original PR description
Steps to Reproduce: 1. Go to _Settings_ and search for reCAPTCHA. 2. Add the required keys. 3. Go to _Website_ and enter edit mode. 4. Drop any _Contact Form_ snippet. 5. Make the labels to top. 6. Enable the _Show reCAPTCHA_ option. 7. Notice an unnecessary blank space before the privacy policy line. Issue: The reCAPTCHA line created unnecessary blank space when aligned to the left. Reason: The line was placed inside the form block, which reserves space for a label. Since reCAPTCHA has no label, an empty placeholder space appeared. Fix: Hide the unused label by setting its visibility to `none` for the reCAPTCHA line, removing the extra blank space. Before: <img width="1464" height="406" alt="image" src="https://github.com/user-attachments/assets/b5fc0fc2-104d-4a3e-a6c9-fab34992ee0d" /> After: <img width="936" height="772" alt="image" src="https://github.com/user-attachments/assets/8d721d90-b7fa-45a5-8d0c-a750ec504a12" /> task-4756289
Maintenance equipment pages no longer fail when imported maintenance requests have no request date. The system now fills in a sensible default and handles missing dates safely, improving reliability for teams importing maintenance data.
Original PR description
Currently, an error occurs when accessing equipment if the maintenance request data is imported with an empty request date. **Steps to reproduce:** - Install Maintenance app. - Create new equipment…
Currently, an error occurs when accessing equipment if the maintenance request data is imported with an empty request date. **Steps to reproduce:** - Install Maintenance app. - Create new equipment (e.g; laptop) - Import [this](https://docs.google.com/spreadsheets/d/1QDwpRtbHemXJLpZRf0eLM2mN_58tfsTA/edit?usp=drive_link&ouid=113889705772170635141&rtpof=true&sd=true) file in Maintenance Requests. - Open the newly created equipment form view. **Error:** `TypeError - unsupported operand type(s) for -: 'datetime.date' and 'bool'` **Cause:** Here at [1], it tries to subtract a `False` value (i.e., no `request_date`) from a `datetime.date`, which causes a traceback. [1] - https://github.com/odoo/odoo/blob/ffd9c0f96bda1bad1ad2059d9be2fae54b60eace/addons/maintenance/models/maintenance.py#L109 **Fix:** This commit ensures a default `request_date` (today's date) is assigned during maintenance request creation if none is provided and ensures proper computation when the request date is not set. sentry-6734276358
This fix prevents the command palette from crashing when a status field has no available choices, such as in certain Field Service task flows. Users can continue working normally; the unavailable command is simply hidden instead of causing an error.
Original PR description
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks…
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks - Create a new task with the new created project - Then using the keyboard shortcut ctrl + k for command search, an error occurs **Cause:** - When the `stage_id` statusbar had no possible values, `this.getAllItems()` returned an empty array. - The command `isAvailable` unconditionally accessed `this.getAllItems().at(-1).isSelected`, which is undefined, causing a crash.[see](https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/fields/statusbar/statusbar_field.js#L147-L148) **Fix** - Add safe check in the command action so it does not attempt to select a non-existent "next" item. **Result** - The command palette no longer crashes when the `stage_id` field has no available items. Instead, the command is simply unavailable. opw-5084130 upg-3130405 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
This fixes an issue where the Cloudflare Turnstile verification code could be added more than once on website forms. The change helps avoid duplicate checks and potential form behavior problems for visitors.
The Peppol status column is now correctly hidden on vendor bill lists. This removes irrelevant information from the bills view, making it clearer for accounting users.
Original PR description
Was supposed to be fixed in related commit but done incorrectly. Related: https://github.com/odoo/odoo/commit/d5a2a802c911994294bdd9ef739232e54fb7358e#diff-85bbebe496014ea47e573d3c54aa4b37ba32991e51f06e20e5a40d632602b5afR64 opw-livechat-886115213
Timesheet reports now include the related helpdesk ticket information when time is logged through Helpdesk. This helps teams connect reported work back to the customer issue, improving visibility and follow-up.
Original PR description
backport of https://github.com/odoo/enterprise/pull/95179 opw-5002650