Daily updates from Odoo
Friday, September 12, 2025
135 changes
15 changes
Resolved issues and error corrections
This fix prevents a closed websocket connection from being treated as an unexpected internal error during test handling. It restores the intended cleanup behavior, reducing confusing error reports and improving reliability in core infrastructure.
Original PR description
Followup to 16.0-closed-in-stop-xmo: the condition in `stop` is a `hasattr`, so we need to delete `self.ws` not set it to `None`. Setting it to `None` means the condition passes then blows up as soon as we try to use it, which means we "just" converted all the old `WebSocketConnectionClosedException` to an `AttributeError`. https://runbot.odoo.com/odoo/error/231446 Forward-Port-Of: odoo/odoo#226267
Fixes an issue where users returning from an external link in a dashboard were taken back to the first dashboard instead of the one they had selected. This preserves the user’s place and avoids confusion when navigating between dashboards and linked pages.
Original PR description
Steps to reproduce: - go to dashboards - select a dashboard with external links on scorecard charts for instance (do not select the first dashboard) - click on the chart w/ the external link to be redirected - Go back to the previous page through the browser The selected dashboard is now the first dashboard instead of the one you came from. the behaviour was broken since the introduction of the path-based routing in #157867 as we did not specify a path for the dashboard action but still worked because the action params were sent in the context but this was corrected in #216067 task-5067826 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
Due to time constraints the translations were not added in the commit adding the modules (72ac059edfcc35ad44c5faa9daf971123377af24). This commit adds the translations / fills the `.po` files. The translations were created by LMAN based on the 18.0 po files. Veri*Factu task: task-3745982 Forward-Port-Of: odoo/odoo#226298 Forward-Port-Of: odoo/odoo#225173
Original PR description
Due to time constraints the translations were not added in the commit adding the modules (72ac059edfcc35ad44c5faa9daf971123377af24). This commit adds the translations / fills the `.po` files. The translations were created by LMAN based on the 18.0 po files. Veri*Factu task: task-3745982 Forward-Port-Of: odoo/odoo#226298 Forward-Port-Of: odoo/odoo#225173
This update adjusts an internal email server test to match a changed error message from a supporting mail library. It helps keep automated quality checks reliable without changing how users work with Odoo.
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#226489
This update fixes failing automated tests in the online shop area. It helps keep the website sales feature reliable by ensuring test checks run successfully during validation.
Original PR description
runbot-error-227575 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Documents app now consistently shows the Activities button in the document chatter, including for files linked to other document-related models such as signing documents. This makes it easier for users to manage follow-ups and tasks from the same place without missing activity options.
Original PR description
Step to Reproduce: - Install `Documents_sign` module - open Documents - click on 'info & tags` button on the top right corner to show chatter - Open 'Odoo CLA.pdf' document Observation: - The Activities button is not shown in Chatter. Issue: - after this https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the activities button shows only for those documents which are related to `documents.documents` model or a document has no model, but it should be shown for all documents https://github.com/odoo/enterprise/blob/23fb26ae0f91a5bdb74d0d4fce48b31fa7abef86/documents/static/src/views/kanban/documents_kanban_renderer.xml#L21-L26 Solution: - Remove condition for Kanban and list view to show `activities` button in Chatter opw-5013427 Forward-Port-Of: odoo/enterprise#94361 Forward-Port-Of: odoo/enterprise#93093
The web test runner now reports critical setup problems during dry runs as real errors. This helps Odoo’s automated checks catch blocking test issues earlier and more clearly, reducing the risk of failed or misleading test runs.
Original PR description
The test runner replaces most occurences of `console.log` with a formatted `console.trace`, as to avoid duplicate runbot error messages in general. The issue is that during the dry run, errors that are caught should be logged on the runbot since these errors are more critical (i.e. duplicate test name, which will prevent the runner to run at all). This commit ensures that errors caught during dry run are logged as actual errors to prevent this issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225688
The web test runner now avoids over-simplifying test URLs when specific tests are excluded. This keeps automated test selections accurate, reducing the risk of running the wrong set of tests during development and validation.
Original PR description
Before this commit, when the test runner simplified the URL (e.g. if the runner is given the ID of every test in a suite, it will remove them and only include the suite ID), it always considered IDs as being "included", and ignored the "-" specifying that some IDs should be "excluded". --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225950
This fix makes the online rental checkout test wait until the cart has fully updated after a customer changes the rental duration. It helps prevent false build failures and improves confidence that rental pricing is displayed correctly before checkout checks continue.
Original PR description
steps to reprduce: 1. duplicate multi enterprise 18.0 database 2. run the tour `website_sale_change_rental_duration` in the duplicated database inspired from: https://github.com/odoo/enterprise/commit/c7542e897c537650966497065db9c7d033dcb8ee added a delay to wait when choosing the rental duration, after page is loaded when go to cart , check if the next page is loaded before checking untaxed amount build_error-227718 Forward-Port-Of: odoo/enterprise#93659 Forward-Port-Of: odoo/enterprise#89274
Survey datetime answers now show the same time in list views and detail forms by using the current user's timezone. This prevents confusion when reviewing submitted survey responses across different time zones.
Original PR description
Steps to reproduce ==================== 1. Create survey with some datetime questions. 2. Receive some response on it. 3. Check answer of datetime questions in answer tab. 4. Click on that answer to open form. ->The time shown in answer tab differs from actual value in form. The display_name of survey.user_input.line is computed based on the answers submitted by users. For questions of type datetime, the display_name was generated by converting the datetime value to a string without accounting for the user's timezone, leading to a mismatch between the actual value and the displayed time. After this commit ================== This commit updates the computation of display_name for datetime answers to consider the current user's timezone. Task-4890423 Forward-Port-Of: odoo/odoo#226354 Forward-Port-Of: odoo/odoo#216281
This fix prevents inserted non-editable blocks, such as banners or tables of contents, from blocking full-content deletion in the HTML editor. It adds a blank paragraph before those blocks so users can reliably select all content and delete it, avoiding frustrating editing leftovers.
Original PR description
**Current behavior before PR:** If the first child of an editable element was `contenteditable="false"`, selecting all content and pressing backspace would not remove everything. This was due to a Chromium bug where non-editable elements as the first child are not fully selected. **Desired behavior after PR is merged:** When inserting elements such as a banner or table of contents, a paragraph is added before them. This ensures that the editable element never starts with a non-editable child. task: 5010666 Forward-Port-Of: odoo/odoo#223357
Stripe payment card fields now use the language selected on the website instead of defaulting to the shopper's browser language. This keeps checkout wording consistent for multilingual websites and reduces confusion during payment.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable Stripe; 2. enable a second language on the website; 3. use second language on website; 3. go to checkout; 4. open card payment method. Issue ----- The card field values are displayed using the current browser's locale instead of the website's language. Cause ----- The `locale` parameter isn't included when connecting to the Stripe API. Solution -------- Include the lang from the `html` element via `_prepareStripeOptions`. If not present, let it fall back on the browser's locale. opw-5024805 Forward-Port-Of: odoo/odoo#226045
Fixes an issue in the website editor where choosing a vertical alignment option for a table cell did not apply the change because the menu closed too quickly. This makes table formatting more reliable for users editing website content.
Original PR description
### Steps to reproduce: - Navigate to the Website module. - Drag and drop a Text Snippet. - Create a Table (e.g., /table) and select a table cell. - Click on Vertical Align button in toolbar and apply alignment option. ### Description of the issue/feature this PR addresses: - When clicking on a vertical align option inside the dropdown, overlay was immediately closed. Because of this, the click event handler was not triggered, and the selected vertical alignment was not applied to the table cell. ### Desired behavior after PR is merged: - Prevent overlay from closing by using `data-prevent-closing-overlay`. task-5062814 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an internal dependency used by the Google Maps options in the website editor. It helps prevent editor issues caused by relying on a testing-only component, with no expected change to normal website visitor behavior.
Original PR description
The commit 47e971086ea57219a628a99d35e36354c71a4192 uses `Deferred` in the implementation of the google maps options plugin. But imported it from hoot. This commit fixes the import to use `concurrency.js` instead. task-4367641
This fixes an issue where selected website color palette names were saved without the expected quotation marks after a recent refactoring. Restoring the correct format helps prevent theme customization settings from being misread or applied incorrectly.
Original PR description
Since the refactoring, the `color-palettes-name` value is not surrounded by quotes in the `user_values.scss` anymore. This commit restores the quotes upon selection. task-4367641
13 changes
Enhancements to existing features
This update adds automated checks for point-of-sale event workflows, including event popups, adding event products to orders, and preparing products for loaded events. These tests help reduce the risk of regressions and make event sales in POS more reliable over time.
Original PR description
In this commit: ------------ - We are adding hoot test cases to verify that components return values according to the passed parameters for components like `event_configurator_popup`, `event_registration_popup`, and `event_slot_selection_popup`. - Also, we are adding a test for the `addProductToOrder` method available in the `product_screen` component to ensure the order line is added to the order seamlessly. - Then, we are adding a test for the `createDummyProductForEvents` method available in the `pos_store` service to verify that the products are created for all the loaded events in the POS. task-4945631
Resolved issues and error corrections
This fix stops Odoo from adding a log note when a Saudi e-invoicing error happens before any request is sent to ZATCA. It keeps invoice communication history cleaner by only logging actual ZATCA responses.
Original PR description
In a previous commit e90c35cde2a1f5de5d7bc4db7a525638ca3fab6e, we modified the logic of posting a log note when receiving a response from ZATCA to always log a note of the response. An issue occured because sometimes, Odoo raises user errors before sending a request to ZATCA, In which case, we do not need to log a note. Task-id: 5056724 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#226174 Forward-Port-Of: odoo/odoo#226036
The Point of Sale app no longer crashes when no cashier user is available. Instead, it safely returns no user value, allowing the existing checkout logic to continue as intended.
Original PR description
When there is no user, you get a traceback when it tries to access user.id. As the code that call getCashierUserId handles the fact that a falsy value is returned, we return undefiened when there is no user. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes sure serious setup issues in Odoo's web test runner are reported clearly during preliminary checks. It helps prevent critical test problems from being hidden, improving the reliability of automated quality checks before changes are accepted.
Original PR description
The test runner replaces most occurences of `console.log` with a formatted `console.trace`, as to avoid duplicate runbot error messages in general. The issue is that during the dry run, errors that are caught should be logged on the runbot since these errors are more critical (i.e. duplicate test name, which will prevent the runner to run at all). This commit ensures that errors caught during dry run are logged as actual errors to prevent this issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225688
The web test runner now preserves excluded tests when simplifying test URLs. This prevents selected test runs from accidentally including tests that were explicitly left out, improving reliability for internal quality checks.
Original PR description
Before this commit, when the test runner simplified the URL (e.g. if the runner is given the ID of every test in a suite, it will remove them and only include the suite ID), it always considered IDs as being "included", and ignored the "-" specifying that some IDs should be "excluded". --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225950
Appointment booking notifications are now sent only to the intended internal followers, not to attendees or visitors. This avoids confusing duplicate or inappropriate emails while keeping staff informed when new appointments are created.
Original PR description
[1] introduces the new paradigm of always sending emails to "relevant recipients" which fetches emails and partners linked to the relevant record to send a message.
In appointment the "Appointment Booked" template is only meant to be sent to followers of `mt{_calendar,_appointment}_event_booked` to inform users that a new appointment was created even if they are not personally assigned to it.
`test_request_meeting_message_for_manual_confirmation` is also updated to represent the case of some visitor creating booking an appointment instead of using internal users for everything to better represent real use cases. Additionally each mail.mail record is extracted and checked individually to make sure we send the right contents to the right recipients.
[1]: 1dd6070ecaab385446cc2df7cad444f046812061
task-5075513
task-4711415Survey answers for date and time questions now show times in the current user's timezone. This prevents confusion where the answer list displayed a different time than the detailed answer form.
Original PR description
Steps to reproduce ==================== 1. Create survey with some datetime questions. 2. Receive some response on it. 3. Check answer of datetime questions in answer tab. 4. Click on that answer to open form. ->The time shown in answer tab differs from actual value in form. The display_name of survey.user_input.line is computed based on the answers submitted by users. For questions of type datetime, the display_name was generated by converting the datetime value to a string without accounting for the user's timezone, leading to a mismatch between the actual value and the displayed time. After this commit ================== This commit updates the computation of display_name for datetime answers to consider the current user's timezone. Task-4890423 Forward-Port-Of: odoo/odoo#226354 Forward-Port-Of: odoo/odoo#216281
Users could encounter an error when using the debug Data view on records that include field properties. This fix lets the data view load and display those records correctly, improving reliability for troubleshooting and configuration work.
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#224437
Forward-Port-Of: odoo/odoo#224084Deleting a message that contains a link preview now also removes the related preview automatically. This prevents leftover previews from staying visible and avoids the need for manual cleanup.
Original PR description
**Specifications:** - Ensure link preview is removed when deleting a message. **Purpose:** - Previously, deleting a message with a link preview did not remove the preview, requiring manual intervention. - This fix ensures that when a message containing a link preview is deleted, its associated preview is also removed automatically, improving user experience. task-4678962 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204930
Opening a spreadsheet instruction step in Shop Floor now works without showing an unexpected traceback. This removes a confusing error message for manufacturing users while keeping the spreadsheet step behavior unchanged.
Original PR description
To reproduce: - Make a new BOM for new product P, with 1 operation on assembly line 1 - Add a spreadsheet step to the operation - Make a MO for 1x P - Open shop floor, assembly line 1, click on the spreadsheet step Current behaviour: - The spreadsheet step opens correctly, but we get a traceback Expected behaviour: - The spreadsheet step opens correctly, no traceback task-4965313
Stripe card payment fields now use the language selected on the website instead of defaulting to the shopper's browser language. This creates a more consistent checkout experience for multilingual websites, while still falling back to the browser language when no website language is available.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable Stripe; 2. enable a second language on the website; 3. use second language on website; 3. go to checkout; 4. open card payment method. Issue ----- The card field values are displayed using the current browser's locale instead of the website's language. Cause ----- The `locale` parameter isn't included when connecting to the Stripe API. Solution -------- Include the lang from the `html` element via `_prepareStripeOptions`. If not present, let it fall back on the browser's locale. opw-5024805 Forward-Port-Of: odoo/odoo#226045
This fix prevents invoice attachments from appearing on related credit notes or other standard accounting records after reconciliation. Attachments from reconciled entries will now only be shown in the bank reconciliation view, keeping accounting chatter cleaner and less confusing.
Original PR description
Problem --------- In odoo/enterprise#85991, attachments from reconciled moves were displayed in the chatter along side the moves' attachments. This change was meant to affect only the bank reco widget. However, its scope reached the standard accounting behavior. STEPS --------- 1. Have 'account' installed 2. Create a move 3. Confirm and create the PDF attachment from the Send&Print 4. Create a credit note from it 5. Confirm the credit note -> The 2 moves are now reconciled and the PDF of the invoice is shown in the chatter of the credit note Objective --------- Only show reconciled moves' attachments in the bank reco chatter. Solution --------- Add a context key that is added when the Bank Reco widget is created and remove it when it is deleted. opw-#######
This change improves how Odoo detects whether the newer ngrok service is available for POS Box connectivity. It prevents Odoo from falling back to the older startup method when the service exists but is not yet running because setup still needs configuration.
Original PR description
Before this commit, the check in the ngrok controller for whether to use the new ngrok service or the old method of launching ngrok was flawed. The check used `systemctl is-active`, however this will only succeed if the service is up and running successfully, which isn't the case initially due to the missing token config. After this commit, we use `systemctl is-enabled` instead. This command succeeds as long as the service exists and is not disabled, even if it is currently in error. ```bash > systemctl is-active odoo-ngrok.service activating > echo $? 3 > systemctl is-enabled odoo-ngrok.service enabled > echo $? 0 ``` task-5075770 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226813
1 change
Resolved issues and error corrections
This draft reverses a previous change affecting how rental products behave in the online shop. It likely restores earlier behavior for website rentals while the reverted change is reviewed or corrected.
Original PR description
revert of 655e0875b192575dd699cf36676c02f1c241daa2
28 changes
Enhancements to existing features
The Accounting Reports area now again offers access to financial budget records, but only when debug mode is enabled. This helps administrators and support teams inspect or import budget data without adding clutter for everyday users.
Original PR description
This menuitem was removed with the idea to clean the view, but we now have second thoughts. Having a means to access a tree view of those objects is interesting for debugging purposes and in order to import them. We now put in debug mode only, though. Forward-Port-Of: odoo/enterprise#94155
This update refreshes Belgian payroll demo data and related setup so it better supports the “Running your payroll yourself” Odoo Experience presentation. It helps presenters show a more realistic payroll flow, including employee salary data, payslip inputs, work entries, and accounting demo information.
Original PR description
prepare some demo data for the oxp talk "Running your payroll yourself"
This update refines how spreadsheet borders are handled when working with list and pivot spreadsheet features. It should make spreadsheet behavior more consistent and easier to maintain, with minimal direct impact on day-to-day users.
Audit report PDFs now avoid adding page titles for template sections that do not contain meaningful printable content. This reduces unnecessary blank or cluttered pages and makes exported audit reports easier to read.
Original PR description
Previously, the algorithm that generated the audit report PDF would create a page title for empty articles using the article name. This often resulted in unnecessary pages, since many template articles are considered empty (because they contain elements that should not be printed). To reduce page clutter, we are revising the algorithm and introducing a new heuristic: a page title will be generated only if the article contains a single heading (h1, h2, or h3) and no other text elements. In such cases, the heading itself will be used as the page title. Task-5079472 Forward-Port-Of: odoo/enterprise#94327
Knowledge articles linked to audit reports now keep the standard Download PDF option visible. The separate audit report export action is renamed to Download Annual Report, making it clearer which document users are downloading.
Original PR description
Previously, when an article was linked to an audit report, the "Download PDF" button was hidden and replaced with a button to generate the audit report PDF. This commit restores the default "Download PDF" button and renames the button for generating the audit report PDF to "Download Annual Report", improving the clarity of the interface. Task-5079472 Forward-Port-Of: odoo/enterprise#94328
The barcode app's demo sheet now includes the new "OBTWREV" barcode command. This helps users and testers access the latest barcode action from the standard reference sheet, making demonstrations and training more complete.
Original PR description
This commit adds the newly created barcode command "OBTWREV" introduced in #88614 to the barcode demo sheet. Forward-Port-Of: odoo/enterprise#94324
The pull request adjusts internal performance test expectations for the Knowledge app after a change in how HTML content is cached when records are created. This helps keep automated performance checks accurate without changing day-to-day user workflows.
Original PR description
Adapting query count, due to not putting html fields in cache upon creation. task-4962646 Forward-Port-Of: odoo/enterprise#93741 Forward-Port-Of: odoo/enterprise#93171
Studio no longer includes the outdated date delay setting when configuring calendar views. This reduces confusion and helps keep calendar setup aligned with the current behavior of Odoo views.
Original PR description
This commit removes the attribute "date_delay" from calendar view arch. task-4609678
Gantt views now keep the cursor consistent while users drag, drop, or create multiple items. This makes scheduling interactions feel clearer and less distracting because the cursor no longer changes unexpectedly when hovering over different elements.
Original PR description
In multi create mode, the cursor on a cell will now be cell. We also make the cursor be more consistent. Before this commit, start an interaction (i.e. a drag & drop) and hover various elements during that interaction would change the cursor according to the type of hovered elements. Now the cursor is constant through the duration of the interaction and related to the type of interaction. Task ID: 5076037
Spreadsheet border handling was reworked to make list and pivot spreadsheet behavior more consistent and easier to maintain. This should support a more reliable editing experience without introducing major user-facing changes.
Resolved issues and error corrections
Archived quality points are now excluded from the product Quality Points smart button. This keeps the displayed count and list accurate, reducing confusion for users reviewing quality controls.
Original PR description
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all…
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all products*. 3. Open any product form. * Verify that the *Quality Points* smart button shows the created point and the correct count. 4. Archive the Quality Point. 5. Reopen the same product form and check the *Quality Points* smart button again. **Observed behavior:** - The archived Quality Point is still counted and shown in the smart button. **Root cause:** - During the refactor from raw SQL (`get_sql` + `cr.execute`) to the ORM query builder (`query.add_where(SQL(...))`), one outer bracket was dropped. [ref](https://github.com/odoo/enterprise/pull/66290/commits/a6362bc07eac7640f68d145a0f6a14a81f499913#diff-2ffdc2ffc25417076b580b772447514c7e9d8b3e2d2fff2d3100721eb5ccbaf4L542-R561) - This changed the operator precedence, causing the `active = true` condition to no longer properly apply when combined with the OR block. - As a result, archived Quality Points bypass the filter and are still counted. **Solution:** - Fix the missing bracket in the `query.add_where` SQL expression so that the `active` condition is always enforced before evaluating the OR block. opw-5046289 Forward-Port-Of: odoo/enterprise#94173
This fixes an issue in the Belgian CodaBox integration where processing multiple companies could trigger an error. The correction helps ensure company-specific CodaBox actions run reliably without disrupting users.
Original PR description
We incorrectly used the recordset `self` instead of the record `company` This commit fixes this opw-5036698 Forward-Port-Of: odoo/enterprise#94289
Downloading documents from the Send & Print wizard no longer fails when a Uruguayan electronic invoice file is present. The system now skips that specific electronic tax document in the wizard download, while users can still access it from the CFE document screen.
Original PR description
When downloading attachment via the send & print wizard, we get an error from the server. This is because we raise an assertion error if any attachment is not from 'account.move' model. But the CFE file is from 'l10n_uy_edi.document' model. With this commit, we extend the `_action_download` method to filter the CFE file from the attachments. It is not blocking for client as he can still download it from the form view of the CFE document. Steps: - Create an invoice - Set a 0% tax on the invoice line - In 'Other infos' tab, fill the 'Incoterm', 'Sales Modality' and 'Transportation Rules' fields - Confirm - Open S&P wizard, select 'Create CFE' and confirm - Reopen S&P wizard, select 'Download' and confirm (can be done along the previous step too) -> Error opw-5043902 Forward-Port-Of: odoo/enterprise#93830
Scanning package type barcodes with GS1 barcode settings now works without triggering server errors. This prevents interruptions in warehouse barcode workflows and keeps package handling smoother for users.
Original PR description
Steps to Reproduce: - Set the barcode nomenclature to GS1 - Scan a package type barcode - Server logs an AttributeError(in Odoo 18) or KeyError(in Odoo 16 and 17) Issue: - The model class "stock.package.type" is missing an attribute "_barcode_field" Solution: - Add the attribute "_barcode_field" to the model class "stock.package.type" Task: [4888064](https://www.odoo.com/odoo/49/tasks/4888064) Forward-Port-Of: odoo/enterprise#94347 Forward-Port-Of: odoo/enterprise#93116
The Count Entire Locations button now appears correctly during normal stock operations such as deliveries and receipts. It remains restricted only on the physical inventory page, helping warehouse users access the right action in the right workflow.
Original PR description
This commit fixes showing "Count Entire Locations" button in normal operations (delivery, receipt, etc.) and only restricts it in physical inventory page. Forward-Port-Of: odoo/enterprise#94194
Voice recording now shows a clearer notification when it cannot start because of a backend setup issue, such as a missing API key. This helps users understand what went wrong and reduces confusion when transcription is unavailable.
Original PR description
This PR adds a more explicit toast message for the recording when an error occurs on the backend (i.e. UserError). This applies to cases such as not having the API key set and trying to start the recording
Several spreadsheet dashboards have been corrected so charts line up properly and are easier to read. The Helpdesk and Operation Analysis dashboards also receive visual improvements, helping teams interpret key metrics with less confusion.
Original PR description
Forward-Port-Of: odoo/enterprise#94387
The Belgian salary configurator now prevents employees from combining a reimbursed private bike option with fuel card benefits. When private bike reimbursement is active, fuel card values are cleared and the related fields are disabled to keep salary choices consistent with policy.
Original PR description
The Belgian salary configurator allows employees to declare a private bike cost. When the "Private Bike" option is checked and its reimbursement value is greater than zero, the fuel card inputs must be reset to 0 and disabled. task-5062963 Forward-Port-Of: odoo/enterprise#94063 Forward-Port-Of: odoo/enterprise#93884
This fix prevents products using nightly rental pricing from being combined with other rental period types. It helps avoid incorrect rental configurations and pricing issues after recent changes.
Original PR description
with other rental periods. Fixes from regression testing post merge. Forward-Port-Of: odoo/enterprise#93715
This update corrects an issue in the SEPA Direct Debit payment form behavior. It helps ensure the payment flow works as intended for customers using SEPA direct debit, reducing the risk of failed or confusing checkout experiences.
Original PR description
Forward-Port-Of: odoo/enterprise#94462
This update corrects the product name from “Urban Piper” to “UrbanPiper” across point-of-sale restaurant-related screens, settings, translations, and tests. It helps keep branding consistent and avoids confusion for users configuring or using the integration.
Original PR description
Description of the issue/feature this PR addresses: Correct the spelling Current behavior before PR: Urban Piper was in 2 words. No space needed Desired behavior after PR is merged: UrbanPiper in one word
The accounting import screen now correctly passes the intended target to each import button. This prevents confusion or failed imports when the same page offers multiple import options.
Original PR description
Since [1], the import action will infer the model from the current action. In this case, the action is a client action with multiple import buttons. This commit, adapts the extends of the import action to accept the model as as a parameter. Forward-Port-Of: odoo/enterprise#94388
This fixes an error in the Salary Calculator that occurred when removing an employee's working schedule. Payroll users can now adjust salary simulation details without being interrupted by a system crash.
Original PR description
#### Steps to Reproduce In Payroll → Employees → Salary Calculator: 1. Select an employee with a working schedule. 2. The working schedule is auto-filled in the modal. 3. Remove the working schedule. #### Issue A traceback occurs (`Expected singleton: resource.calendar()`) because `salary_simulation` was not correctly set in the context, causing the flow to recompute work entries with an empty calendar. #### Fix In order to avoid work entry recomputations during simulation, always attach `salary_simulation=True` in the base `_get_version()` and propagate the context when creating a new version for the simulation employee. task-5063150
This fix ensures temporary concurrency conflicts during website generation are handled in a way that allows the process to retry instead of failing prematurely. It improves reliability when multiple operations happen at the same time.
Original PR description
When a concurrency error occurs, we need to let it retry. To do this, we must catch the Serialization Failure and raise it. Forward-Port-Of: odoo/enterprise#93851
The wording in the bank synchronization duplicate finder was corrected to remove an instruction users could not actually follow. This avoids confusion by no longer suggesting that customers select a journal when that option is unavailable.
Original PR description
The aim of this commit is removing a small part of sentence in the find duplicate tool in bank synchronization. Indeed, this sentence is proposing the customer to select the journal where it's not possible to do it. no task id Forward-Port-Of: odoo/enterprise#94386
Code cleanup and technical improvements
This update cleans up internal tests for subscription optional products to make them easier to maintain. It does not change customer-facing subscription features, but helps keep future updates more reliable.
Original PR description
See Also: - https://github.com/odoo/odoo/pull/226052 Forward-Port-Of: odoo/enterprise#94276
This update renames an internal editor asset bundle so it better fits its use beyond website editing, including email composition. The change improves consistency with the shared HTML builder and should not alter day-to-day user workflows.
Original PR description
The new html_builder is used by both website and mass_mailing. While the old name `[html_builder|website].assets_edit_frontend` makes sense in the context of the website builder, where the iframe is indeed used to "edit the frontend", it is not the case in mass_mailing, where the email being composed is not a "frontend". A more generic name is more appropriate. This commit is linked to the community PR that updates the bundle name everywhere. Forward-Port-Of: odoo/enterprise#94435
Several search screens were simplified by removing redundant grouping settings and separators that behaved the same way. This keeps the interface configuration cleaner without changing expected business workflows.
Original PR description
- Remove all attributes from group element in search view. - Remove the tags separator before a group tag (separator and group do the same thing) Community PR : https://github.com/odoo/odoo/pull/226862 task-5005075
30 changes
Enhancements to existing features
The HTML editor toolbar now stays hidden when a user selects content that is not clearly visible, such as only a line break. This avoids confusing pop-ups and makes editing behavior feel more predictable.
Original PR description
Prevent the toolbar to open if the selection is not clearly visible to the user. for example, line break only selection. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The invoice form now shows a helpful placeholder in the Incoterm field based on the company’s configured default Incoterm. If no default is set, users still see generic guidance, making data entry clearer and more consistent.
Original PR description
This commit adds a dynamic placeholder to incoterm field form view in `account.move`. The placeholder is dynamically set as the default incoterm value in setting. If no default is chosen, a default text is shown. task-4788236 Current behavior before PR: No placeholder is set to incoterm field in account move form view. Desired behavior after PR is merged: Dynamic placeholder set to incoterm field in account move form view with default incoterm value chosen in setting. If no default incoterm is chosen, a default text placeholder is shown. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225905
The Peppol demo bill data was cleaned up to use safer, clearer example details. This reduces confusion in demonstrations by avoiding real-looking banking data, using reserved example domains, and making vendor details distinct from the Belgian company demo data.
Original PR description
Minor improvements to the demo bill such as usage of VAT number different from belgian company in demo data, removal of IBAN account number, usage of a different address for vendor company and usage of example.com instead of beexample.com, which is not IANA reserved domain name. XML used: [INV_2025_00017_ubl_bis3.xml](https://github.com/user-attachments/files/22254686/INV_2025_00017_ubl_bis3.xml) no-task Forward-Port-Of: odoo/odoo#226305
The mail composer now correctly detects when users enter or leave the HTML editor, so messages can be marked as read as expected. The composer border styling was also refined to make the active editing state clearer.
Original PR description
This commit binding the focusin and focusout handlers to the HTML composer, making the mark as read feature working as expected. Also, this commit improves the border styling of the composer with focus state. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Articles linked to audit reports now keep the standard Download PDF button visible. The separate action for creating the audit report PDF is renamed to Download Annual Report, making the choices clearer for users.
Original PR description
Previously, when an article was linked to an audit report, the "Download PDF" button was hidden and replaced with a button to generate the audit report PDF. This commit restores the default "Download PDF" button and renames the button for generating the audit report PDF to "Download Annual Report", improving the clarity of the interface. Task-5079472
The barcode demo sheet now includes the newly available OBTWREV barcode command. This helps users and evaluators test or learn the latest stock barcode workflow from the provided demo materials.
Original PR description
This commit adds the newly created barcode command "OBTWREV" introduced in #88614 to the barcode demo sheet.
Resolved issues and error corrections
Live chat agents now see recent website visit times in their own timezone instead of UTC. This makes the visitor history banner easier to understand and helps agents interpret customer activity accurately during conversations.
Original PR description
Before this PR, when browsing a website livechat in the discuss app, the banner containing the 3 last pages browsed by the user showed the utc time instead of the time in the timezone of the agent. Now, the livechat agent is seeing the visit timings in his timezone. To achieve this, we now construct the visit string in the frontend and receive the page and datetime (utc) info from the backend task-4937769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225761 Forward-Port-Of: odoo/odoo#219113
Product pictures in the sales catalog now display without being stretched when they are not square. This improves the visual quality of quotations and helps users recognize products more easily.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have products with non-square images available for sale; 2. open a quotation; 3. open the product catalog. Issue ----- The product images appear stretched. Cause ----- Commit e8836b42200e3 replaced the `div.kanban_image` element with a `field` element using the `image` widget. It maintained the same size limit of 55x55 via the widget's options, but without additional input, this causes the widget to stretch the images to fill the area. Solution -------- Add the `object-fit-contain` as `img_class` to the options. This class contains the image to the area instead of stretching it. opw-5007629 Forward-Port-Of: odoo/odoo#225112
This fixes a small issue in the Mercado Pago payment form customization. It helps ensure the payment option behaves as intended during checkout, reducing the chance of customer payment friction.
This fix keeps spreadsheets in the light theme because the spreadsheet interface does not support dark mode yet. It prevents mixed dark and light styling, making the spreadsheet screen look consistent and easier to use.
Original PR description
Spreadsheet doesn't support dark theme. This fixes some style where dark and light themes are mixed. Task: 5082593 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
A stock app test now sets up a default route so it can run correctly when only the Stock module is installed. This prevents automated validation from failing due to a missing button, improving confidence in Stock module quality checks.
Original PR description
Issue Before This Commit: ============================ The test_stock_route_diagram_report tour fails when only the stock module is installed. The tour breaks because the element `.btn[id="stock.view_diagram_button"]` is not found. Steps to Reproduce: ============================ - Install only the `stock` module. - Run the `test_stock_route_diagram_report` test. - The tour breaks because the element `.btn[id="stock.view_diagram_button"]` is not found. Cause of the Issue: =========================== The tour breaks due to a recent [PR](https://github.com/odoo/odoo/pull/223685) that hides the `view_diagram_button` when no routes are available for the product. With This Commit: ============================ Ensure the tour runs successfully by activating a default MTO route in the test setup, so the required element is present. runbot-232573
The chat window message composer now uses more consistent spacing at the bottom and sides. This small layout fix makes the chat area feel cleaner and allows slightly more conversation history to remain visible on screen.
Original PR description
This makes consistent spacing of bottom and horizontal, and also has the benefit to show more message list in viewport. Before <img width="1169" height="644" alt="Screenshot 2025-09-11 at 11 52 03" src="https://github.com/user-attachments/assets/7863dc04-d572-4c37-b182-6d519956a041" /> After <img width="1167" height="647" alt="Screenshot 2025-09-11 at 11 48 21" src="https://github.com/user-attachments/assets/8980a2a2-93fc-4016-8e76-5b5b3fa6899a" />
This fixes a visual issue where thumbnail images in website product snippets could repeat in the background. Product displays now look cleaner and more consistent for shoppers browsing the website.
Original PR description
This PR fixes a issue where the thumbnail image on the 'products' snippets would repeat itself. task-5076717 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Embedded live chat users can now open meeting chats from the chat window as intended. This fixes a missing permission in the embedded experience, making meeting-related conversations accessible without changing broader live chat behavior.
Original PR description
The embed live chat has a subset of allowed thread actions. The meeting chat action was added but not added to the allowed thread actions. In the future, we will allow most of the thread actions, at least the ones allowed for guests. Environment should not impact feature availability. However for now, let's just enable the missing action.
Indian localization reports now calculate return statuses using the latest shared Odoo logic. This keeps these reports consistent with the rest of the system and helps avoid incorrect return states in Indian reporting workflows.
Original PR description
## Before this commit The state was computed using the `__get_state_field()` method. After the reference commit, the state computation logic was improved, but this updated logic was not applied in `l10n_in_reports`. Ref commit: https://github.com/odoo/enterprise/commit/a3083e9db2534d649bfc2d02dac79582ebb6397a ## After this commit: The computation of state in `l10n_in_reports` now follows the latest logic, keeping it consistent with the generic code.
Fixed an error that could prevent users from opening the rental availability view from a rental order. This helps rental teams check product availability reliably without being interrupted by a system traceback.
Original PR description
**Steps to reproduce:** 1. Go to Rental > Create a rental product and enable Sales. 2. Create a rental order with a customer and created product. 3. Click the availability icon and open the view rental. **Issue:** A traceback occurs: `Caused by: InvalidDomainError: Invalid domain representation: product_id,=` **Cause:** The rental availability check crashed due to improper domain construction: <img width="453" height="89" alt="image" src="https://github.com/user-attachments/assets/fd3ff556-fdab-40ab-9c1b-a539e5b164e8" /> **Solution:** Now the `product_id` is correctly retrieved from the record’s `id` property before building the domain, preventing crashes when opening the rental gantt view. opw - 5066061 Forward-Port-Of: odoo/enterprise#94288
Deleting all items from a grouped list no longer causes an error screen. This keeps list views stable when users remove the last records in a group.
Original PR description
After this commit [1], deleting all entries of a grouped list may trigger the following traceback: ``` TypeError: value[currencyField].forEach is not a function ``` This happens because the `currency_id` of an empty group becomes `0`, so `forEach` is called on a non-iterable value. This fix ensures that `currency_id` is correctly handled to prevent such error. [1] odoo@98f7462
Fixed an issue where downloading files from the Send & Print wizard could fail for Uruguayan electronic invoices. The wizard now skips the CFE attachment that belongs to the e-invoicing document, while users can still access that file from the CFE document itself.
Original PR description
When downloading attachment via the send & print wizard, we get an error from the server. This is because we raise an assertion error if any attachment is not from 'account.move' model. But the CFE file is from 'l10n_uy_edi.document' model. With this commit, we extend the `_action_download` method to filter the CFE file from the attachments. It is not blocking for client as he can still download it from the form view of the CFE document. Steps: - Create an invoice - Set a 0% tax on the invoice line - In 'Other infos' tab, fill the 'Incoterm', 'Sales Modality' and 'Transportation Rules' fields - Confirm - Open S&P wizard, select 'Create CFE' and confirm - Reopen S&P wizard, select 'Download' and confirm (can be done along the previous step too) -> Error opw-5043902 Forward-Port-Of: odoo/enterprise#93830
This change fixes an issue in the SEPA Direct Debit payment form customization. It helps ensure the payment form behaves as expected when customers use SEPA Direct Debit, reducing the risk of checkout or payment setup problems.
The PAN entity list in the Indian localization no longer shows the same Type column twice. This removes visual clutter and makes the list easier for users to read without changing any underlying data or workflow.
Original PR description
Before: - The list view in `l10n_in_pan_entity_view_tree` included `type` field twice, causing redundancy. After: - The duplicate field has been removed
The Website Builder mobile preview button now uses green to better match the product's visual theme. This is a small visual consistency fix with low business impact.
Original PR description
- The mobile preview button color is changed to green to align with the overall theme. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where image descriptions could be accidentally erased after reopening and saving the website SEO dialog without making changes. It helps preserve accessibility and SEO metadata reliably for website content.
Original PR description
Steps to reproduce: 1. Open Optimize SEO. 2. Mark an image as decorative. 3. Give a description(ALT) to that image from editor. 4. Open Optimize SEO again and save without doing anything. Issue: The description(ALT) on the image being set is lost. Cause: When reopening the `Optimize SEO` dialog, `seoContext.updatedAlts` still contained entries from previous edits. As a result, saving without making any further change triggered an call to `/website/update_alt_images` which reset the `alt` attribute to empty, effectively discarding the description. This PR ensures `seoContext.updatedAlts` is reset when opening the dialog.
Odoo now ignores accounting localization templates from modules that are not currently installable. This prevents unnecessary error logs when a custom localization module is present but not yet ready to be installed.
Original PR description
* Problem: if having a custom module that add extra tax to current localization module, ex: l10n_x inherit l10n_vn module, but the l10n_x module is not installable because it hasn't upgraded yet, the _get_chart_template_mapping include it as well, there for will log error in https://github.com/odoo/odoo/blob/18.0/addons/account/models/chart_template.py#L1219 * Solution: only get available template code for module that installable Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225821
The account reports return screen now shows only the relevant reset button, reducing confusion for users handling tax or EC sales list returns. This fixes a display issue caused by the system checking return type details in the wrong place.
Original PR description
Multiple reset buttons were visible on returns, which was confusing. This happened because `is_tax_return_type` and `is_ec_sales_list_return_type` were referenced via `type_id` in invisible, which does not work correctly. To fix this, two related fields (`is_tax_return_type` and `is_ec_sales_list_return_type`) were added directly on `account_return`, and these are now used in invisible. ref - https://github.com/odoo/enterprise/commit/a3083e9db2534d649bfc2d02dac79582ebb6397a
This fixes a checkout issue where the browser could incorrectly restore the billing-address checkbox state after a customer used the back button. The billing address section now stays consistent with the customer’s actual choice, reducing checkout confusion.
Original PR description
Steps to reproduce: 1) Add a product and go to checkout 2) Uncheck use_delivery_as_billing 3) Click to edit the main address for example 4) Return to the previous page via the browser button 'back' See that use_delivery_as_billing is unchecked but the billing address row is hidden, it happens due to the browser's autocomplete.
Features or functions removed from Odoo
This update removes an internal function that was recently added but never used. It keeps the web and website-building code cleaner without changing what users see or how they work.
Original PR description
A function has been recently added to the action service API, but it turns out that it wasn't useful (no even used by the PR adding it). This commit removes it. 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
Code cleanup and technical improvements
The technical asset bundle used by the website and email builders was renamed to better reflect that it now supports more than website editing. This is an internal cleanup that makes the platform easier to maintain without changing business workflows.
Original PR description
*: mass_mailing, portal, website, website_mail, website_mail_group, website_mass_mailing, website_payment, website_profile, website_sale The new html_builder is used by both website and mass_mailing. While the old name `[html_builder|website].assets_edit_frontend` makes sense in the context of the website builder, where the iframe is indeed used to "edit the frontend", it is not the case in mass_mailing, where the email being composed is not a "frontend". A more generic name is more appropriate.
The web tour testing tools now load a supporting component only when a tour starts, instead of including it upfront. This reduces the size of the web tour assets, helping limit unnecessary load for users and improving overall efficiency.
This update renames an internal asset bundle used by the AI website live chat feature so it better fits shared use beyond website editing. The change supports broader reuse with the newer builder tools while keeping business impact minimal.
Original PR description
The new html_builder is used by both website and mass_mailing. While the old name `[html_builder|website].assets_edit_frontend` makes sense in the context of the website builder, where the iframe is indeed used to "edit the frontend", it is not the case in mass_mailing, where the email being composed is not a "frontend". A more generic name is more appropriate. This commit is linked to the community PR that updates the bundle name everywhere.
This update registers supporting tour helper files for the Manufacturing Work Orders and Barcode apps. It is an internal maintenance change that helps automated guided flows and tests load the right resources, with no expected direct impact on day-to-day users.
Original PR description
In this commit, we add tour_helpers file in manifest.
10 changes
Resolved issues and error corrections
Fixed how Uruguayan electronic invoices read document numbers that begin with multiple letters. This helps ensure affected credit and debit notes are generated and validated with the correct numbering format.
Original PR description
If UY EDI document has latam document number with more than one letter at the beggining, it is needed to take in consideration all the letters and not only the first one. Task Latam side: 1352 Task Adhoc side: 53173
The journal report test was updated so it no longer depends on a payment reference staying empty in every localization setup. This prevents build failures when Czech accounting localization is installed, improving release stability without changing user-facing functionality.
Original PR description
test_document_data_basic was failing in builds with l10n_cz installed because - we set move_sales_2.payment_reference = '' in setUpClass and without l10n_cz it stays empty - but with l10n_cz installed it gets recomputed because of precompute=True on taxable_supply_date (which a stored computed field that triggers an extra write on account.move when the company is in CZ, and that write causes the compute graph to run again, and _compute_payment_reference fills the value back in) this commit solves this issue by not making assumptions about the payment_reference value and would use it as is in the generated data validation build_error-231479
Planning calendar exports now use the correct timezone when a shift has no assigned employee. This prevents exported shift times from being shifted incorrectly, improving calendar reliability for users working with unassigned planning slots.
Original PR description
The test `test_planning_ics_file_without_assigned_employee` failed when running without demo data because the slot timezone was `Europe/Brussels` while the employee timezone was `UTC`.
The previous code in the method `ics_datetime()` converted to the slot timezone and then relabeled it as the employee timezone with `.replace(tzinfo=...)`, which shifted the actual instant.
This change ensures that ICS datetimes are always converted using astimezone to a single target tz:
- employee tz if the slot is assigned,
- otherwise the current user tz or `UTC` as fallback.
The test was also updated to assert the correct fallback `UTC` values:
`DTSTART:20230602T080000Z`
`DTEND:20230602T170000Z`
[runbot-231213](https://runbot.odoo.com/odoo/error/231213)This fix prevents a closed connection from being misread as a different internal error during test and core connection handling. It helps keep error reporting accurate, making issues easier to diagnose and reducing misleading failures.
Original PR description
Followup to 16.0-closed-in-stop-xmo: the condition in `stop` is a `hasattr`, so we need to delete `self.ws` not set it to `None`. Setting it to `None` means the condition passes then blows up as soon as we try to use it, which means we "just" converted all the old `WebSocketConnectionClosedException` to an `AttributeError`. https://runbot.odoo.com/odoo/error/231446 Forward-Port-Of: odoo/odoo#226267
The spreadsheet interface now consistently uses the light theme because dark theme is not supported there. This prevents mixed light and dark styling, giving users a clearer and more consistent experience.
Original PR description
Spreadsheet doesn't support dark theme. This fixes some style where dark and light themes are mixed. Task: 5082593 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The automation rule trigger dropdown now uses the correct background color when dark mode is enabled. This keeps the interface visually consistent and easier to read 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#226116
The journal report test was updated so it no longer depends on a payment reference staying blank in all local accounting setups. This prevents false build failures when Czech localization is installed, improving release reliability without changing customer-facing behavior.
Original PR description
test_document_data_basic was failing in builds with l10n_cz installed because - we set move_sales_2.payment_reference = '' in setUpClass and without l10n_cz it stays empty - but with l10n_cz installed it gets recomputed because of precompute=True on taxable_supply_date (which a stored computed field that triggers an extra write on account.move when the company is in CZ, and that write causes the compute graph to run again, and _compute_payment_reference fills the value back in) this commit solves this issue by not making assumptions about the payment_reference value and would use it as is in the generated data validation build_error-231479
The attendance Gantt popup now lets users enter a checkout time for an open attendance directly in the popup. This removes a frustrating blocker for correcting attendance records without leaving the Gantt view.
Original PR description
The Gantt popup form explicitly set `check_out` invisible when it was empty, which prevented users from manually entering a checkout for an open attendance. This commit removes the overriding xpath so that the form simply inherits the standard `hr_attendance_view_form` behavior, where the `check_out` field is always visible and editable. Users can now set a manual checkout directly from the Gantt modal. task-5026978
Stripe card payment fields now use the language selected on the website instead of defaulting to the shopper's browser language. This makes checkout more consistent for multilingual websites and reduces confusion during payment.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable Stripe; 2. enable a second language on the website; 3. use second language on website; 3. go to checkout; 4. open card payment method. Issue ----- The card field values are displayed using the current browser's locale instead of the website's language. Cause ----- The `locale` parameter isn't included when connecting to the Stripe API. Solution -------- Include the lang from the `html` element via `_prepareStripeOptions`. If not present, let it fall back on the browser's locale. opw-5024805 Forward-Port-Of: odoo/odoo#226045
Fixed an issue where users with Shop Floor set as their default start page could see an error after logging in. The app now handles reloads more safely, so manufacturing users can access the Shop Floor without interruption.
Original PR description
**PROBLEM** In debug mode, we can change the default home action of a user (the action he sees when logging in). When the action `action_mrp_display` is set as the home action, there is a traceback…
**PROBLEM** In debug mode, we can change the default home action of a user (the action he sees when logging in). When the action `action_mrp_display` is set as the home action, there is a traceback after logging in. **STEP TO REPRODUCE** 1. Go in debug mode 2. Change the home action of a user to the 'Shop Floor' action (in the user form, in the preference tab). 3. log out, and log in with this user. 4. a js traceback should appear. **CAUSE** In mrp_workcenter_dialog.js, the Shop Floor action uses the `menu` service to get the name of the current app. `setCurrentMenu()` which set the current app in the `menu` service is not called before the `appName` getter is called. https://github.com/odoo/odoo/blob/5c1234085b1c1e227846b24bde55a0392779069b/addons/web/static/src/webclient/menus/menu_service.js#L29-L36 This lead to a traceback because this.menu.getCurrentApp() is `undefined`. **FIX** Workaround if the current app is undefined. We already check what is returned by `getCurrentApp()` where it is used. opw-4926317
3 changes
Resolved issues and error corrections
This update adds the missing SZJ product code required by Hungary's official NAV electronic invoicing specification. It helps ensure Hungarian invoice data can be classified correctly and stay aligned with regulatory documentation.
Original PR description
Description of the issue/feature this PR addresses: In the official NAV XML 3.0 documentation (available at: https://onlineszamla.nav.gov.hu/dokumentaciok page 123), according to the list of possible product codes, there is an 'SZJ' code that is missing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
DIN5008 invoice reports no longer show the customer phone number in the address block, and customer VAT details are moved out of that address section. This keeps the report layout cleaner and better aligned with the intended DIN5008 presentation.
Original PR description
This commit removes the phone number from the DIN5008 report layout. The customer's VAT is also no longer displayed in the customer's address section. The VAT is moved to another section. Description of the issue/feature this PR addresses: Current behavior before PR: The customer's phone number and VAT are displayed in the customer's address in the DIN5008 report layout. Desired behavior after PR is merged: The customer's phone number is no longer displayed and VAT moved to another section in the DIN5008 report layout. opw-5049074 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product margin calculation now uses net invoice amounts when calculating average sales prices. This prevents tax-included and tax-excluded invoice lines from being mixed together, giving businesses more reliable margin reporting.
Original PR description
The price_unit of a account.move.line can be with or without tax. The sale_avg_price should be either incl. or excl. tax. To ensure the avg price is always excl. tax the price_subtotal can be used. Forward-Port-Of: odoo/odoo#199209