Daily updates from Odoo
Tuesday, September 16, 2025
127 changes
18 changes
Resolved issues and error corrections
Studio exports now work correctly for binary fields that are not stored as attachments. This prevents export failures and helps users retrieve their Studio-managed data reliably.
Original PR description
**Before:** Attempting to export non-attachment binary fields using the `Studio Export` would cause a traceback. **After:** Non-attachment binary fields can now be successfully exported from `Studio` without error. task-4888937 Forward-Port-Of: odoo/enterprise#94230 Forward-Port-Of: odoo/enterprise#93781
DIN5008 report layouts now stop showing the customer's phone number in the address block, and the customer's VAT number is moved out of that section. This keeps printed customer addresses cleaner and aligned with the intended DIN5008 layout.
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 Forward-Port-Of: odoo/odoo#226967 Forward-Port-Of: odoo/odoo#226630
PDF documents now display tiny negative amounts that round to zero as "0.00" instead of "-0.00". This avoids confusing or misleading totals on printed reports and customer-facing documents.
Original PR description
Previously, when an amount value that is passed to `value_to_html` is a really small negative number (e.g. -0.000000001), the rounded result will have the negative sign in front of it (e.g. "-0.00").
This commit fixes it so that they will be rendered without the negatives ("0.00").
opw-4685953
Forward-Port-Of: odoo/odoo#224292This fix prevents the Time Off app from showing an error when a user clears the end date while creating a leave request. The system now safely skips date comparison until valid dates are entered, keeping the form usable and relying on existing validation to guide the user.
Original PR description
Currently, an error occurs when user removes value from `request_date_to` field. **Steps to replicate:** - Install Time Off app and open it. - Click new and remove values from the `request_date_to` field (the second date field in the row) and click somewhere else. **Error:** `TypeError: '<=' not supported between instances of 'datetime.date' and 'bool'` **Cause:** - The field `leave.request_date_to` is received as `False` in the line [1] as the user deleted it. **Solution:** - Added a check for date values, if the date values are false, the further code execution is skipped because the validation is already present. [1]: https://github.com/odoo/odoo/blob/b6c4c190331a7dc826df1b2ef399c0f6be32f657/addons/hr_holidays/models/hr_leave.py#L363 sentry-6830356042 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Lists marked to appear without indentation now keep their intended spacing in the website editor. This prevents footer and other unstyled lists from looking incorrectly indented while editing pages.
Original PR description
Problem: The default Bootstrap padding is being forced on all lists inside the editor, including those with the `list-unstyled` class. This class is supposed to enforce `0px` padding, but the current rule overrides it. Solution: Remove the style as `2rem` is already the Bootstrap default list padding. Done here: https://github.com/odoo/odoo/commit/1593f25b0160a68d356dd5bba3887ff5a6298c60 Steps to reproduce: 1. Open website. 2. Open the editor. 3. Notice the footer list (with `list-unstyled`) is incorrectly indented. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227204
This fixes an internal test setup issue where the self-order payment route was generated before its access token was available. The change helps keep kiosk QR code and IoT payment-related testing reliable, reducing the risk of regressions reaching users.
Original PR description
A call to `_get_self_order_route` in the `test_online_payment_kiosk_qr_code` test was happening too early, resulting on getting the self order url missing the `access_token`. This resulted in making the test fail due to the override of the `iot_http` service in `pos_self_order_iot`, relying on this token to get the IoT WebSocket channel. Enterprise PR: odoo/enterprise#93895
Mobile users now see the template name as the main information when browsing signing templates, instead of seeing the creation date first. This makes it easier to choose the correct template and keeps the mobile view aligned with the desktop experience.
Original PR description
### Issue: - In mobile view, the template list was showing the creation date instead of the template name. - This made it hard to know which template you were selecting. --- ### Fix: - Changed the mobile view to show the template name as the main info. - The creation date is still shown, but as extra information. --- ### Impact: - Easier to find the right template on mobile. - Mobile and desktop views now look consistent. --- Task: 5038933 Forward-Port-Of: odoo/enterprise#93072
Mexican electronic invoice PDFs now use the same customer fiscal regime as the official XML file. This prevents mismatches between the human-readable invoice and the legally submitted CFDI document, reducing confusion for users and customers.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
Users can now open the duplicate transactions wizard even when no bank journal is linked. This avoids an unexpected error in Accounting and makes the view safer to access directly.
Original PR description
Currently, an error occurs when users try to open the view directly. Steps to reproduce: --- - Install `Accounting` module - Using Open View, Open `account.duplicate.transaction.wizard` view Traceback: --- `ValueError: Expected singleton: account.journal()` This error occurs because no account journal is linked to the wizard at [1], resulting in an empty `account.journal`. [1]- https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L32 sentry-6812500330 Forward-Port-Of: odoo/enterprise#94538
The portal signature form now checks whether a pop-up window is present before trying to use it. This prevents errors when the form is embedded directly on a page, making customer signature flows more reliable.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
When users create a new partner during bank reconciliation, the system now chooses the receivable or payable action based on the transaction amount instead of missing customer or supplier history. This prevents the wrong payment button from appearing for brand-new partners, reducing confusion during reconciliation.
Original PR description
When creating a new partner from the set partner button, the partner doesn't have any rank (supplier or customer), this lead to have the payable button to be displayed since the condition to have it is to have a partner and not (customer_rank > supplier_rank). Since supplier rank and customer rank are 0 it will be False which lead to the button to be displayed. no task id Forward-Port-Of: odoo/enterprise#90435
Website sitemaps now avoid listing the same page more than once when website controllers are customized. This helps search engines receive cleaner sitemap data without changing which pages are available on the site.
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
The website SEO dialog now clears old image status changes when it is opened. This prevents image alt descriptions added in the editor from being accidentally erased when users reopen and save the SEO dialog without making changes.
Original PR description
Steps to reproduce: 1. Open Optimize SEO. 2. Mark an image as decorative. 3. Save it. 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 change triggered an call to `update_alt_images` which reset the `alt` attribute to empty, eventually discarding the description. This PR ensures `seoContext.updatedAlts` is reset when opening the dialog. Forward-Port-Of: odoo/odoo#226913
Odoo Studio now requires users to choose a related record type when creating AI-powered Many2one or Tags fields. This prevents crashes caused by incomplete field setup and gives users a clear visual warning before they confirm.
Original PR description
When adding an AI field of type Many2one or Tags, the Relation field was optional. If left empty, it caused a crash. This commit enforces that a Relation must be selected before confirming the dialog: - Add a red highlight if Relation is missing - Prevent field creation by returning early Task-5055796 Forward-Port-Of: odoo/enterprise#93873
This fix prevents a demo data installation error when Italian Riba and Stripe expense features are used together. It ensures the sample company bank setup can handle the extra bank journal created by Stripe expenses, so demo environments install reliably.
Original PR description
Steps: 1. Install `hr_expense_stripe` and activate demo data 2. Install `l10n_it_riba` 3. `l10n_it_riba` demo data install fails with an error Since [this commit](https://github.com/odoo/enterprise/commit/752ffcbcd0c33e2886aa7bcec469e16d3704d7a9), an additional bank journal is created on every company by `hr_expense_stripe`, and `l10n_it_riba` demo data only expects one. task-none
Fixed an issue in Odoo Sign where completed signature emails could include multiple attachments with duplicate names and an extra .pdf extension. Recipients now receive clearly named signed documents, reducing confusion when downloading or filing multiple completed documents.
Original PR description
Steps to reproduce: 1. Install Sign. 2. Configure an outgoing email server. 3. Send a sign request for 2 or more documents to the admin (use your own email) 4. Open the email, sign and validate the documents. 5. You will receive an email. **Issue:** - You observe there are attachments in the email with same name and an extra `.pdf` as file extensions (e.g. `abc.pdf.pdf`). **Cause**: https://github.com/odoo/enterprise/blob/a1cd174c65fa181701cc3c5883fb5ab43b2803d8/sign/models/sign_request.py#L588-L594 - The code used `record` instead of the current `document` to determine the attachment name, causing the wrong generated name. **Solution:** - Use the `document` name when generating the attachment filename. opw-4965405 Forward-Port-Of: odoo/enterprise#92183
Product pages now make it easier for shoppers to see which image is currently selected in the image carousel. The active thumbnail has a stronger highlight, while inactive thumbnails are dimmed unless hovered, reducing confusion when browsing product photos.
Original PR description
Steps ----- 1. Have a published product with multiple images; 2. go to its website page; 3. open website editor; 4. set Images Ratio to Wide; 5. enable pop-up on click; 6. save; 7. browse through the images. Issue ----- - While there is a border around the active thumbnail in the bottom row, it is barely visible, making it difficult to see which image is currently being shown. Cause ----- - The border is only 1 pixel wide. Solution -------- - Increase the width of the border to 4 pixels, change the color to `$primary`, and hide the border for inactive images. - Set opacity of thumbnails that aren't selected or hovered over to 0.5. opw-4908881 Forward-Port-Of: odoo/odoo#224644
This fixes a race condition in Mail tests where message content and attachment updates could arrive in the wrong order, causing inconsistent test results. The change makes the test flow wait for messages and update attachments through the user interface, improving reliability without changing business functionality.
Original PR description
Before this commit, the test could experience a race condition where the load of the message and the update of the content of that message happen at the same time, if that happens and the update of the content is received by bus before the load of the message (which therefore does not contain any attachment), then the store was overriding the attachment. This commit should solve the problem in the test by waiting for the messages at the beginning of the test as well as updating the attachments in the ui and not by rpc directly. The race conditions should be fixed globally and are not only linked to this issue. fixes-runbot-66304 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226922
13 changes
Resolved issues and error corrections
Very small negative amounts that round to zero now appear as "0.00" instead of "-0.00" on printed PDFs. This prevents confusing or misleading totals on business documents while keeping the actual rounding behavior unchanged.
Original PR description
Previously, when an amount value that is passed to `value_to_html` is a really small negative number (e.g. -0.000000001), the rounded result will have the negative sign in front of it (e.g. "-0.00").
This commit fixes it so that they will be rendered without the negatives ("0.00").
opw-4685953
Forward-Port-Of: odoo/odoo#224292Mexican electronic invoice PDFs now show the same customer fiscal regime as the official CFDI XML when invoicing a child contact under a company. This prevents discrepancies between customer-facing invoice documents and legally reported tax data.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
The portal signature form now works correctly even when it is placed directly on a page instead of inside a pop-up window. This prevents an error that could block users from completing signature steps in some portal flows.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
Opening the duplicate transactions wizard directly no longer triggers an error when no accounting journal is linked. This improves reliability for users accessing accounting views and prevents an unexpected crash in this edge case.
Original PR description
Currently, an error occurs when users try to open the view directly. Steps to reproduce: --- - Install `Accounting` module - Using Open View, Open `account.duplicate.transaction.wizard` view Traceback: --- `ValueError: Expected singleton: account.journal()` This error occurs because no account journal is linked to the wizard at [1], resulting in an empty `account.journal`. [1]- https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L32 sentry-6812500330 Forward-Port-Of: odoo/enterprise#94538
Website sitemaps now avoid listing the same page more than once when website controllers are customized or extended. This helps keep sitemap data 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
A test was adjusted to avoid rare false failures caused by an internal database identifier containing a specific number sequence. This helps keep automated checks stable without changing any customer-facing behavior.
Original PR description
The database_id is an uuid. It can happen that it contains the substring "1337". The test only needs to check if the value is not in the "prompt" or "conversation_history" keys. Thus we can remove the "database_id" key runbot-198561
Saudi e-invoices for foreign customers now use the required alphanumeric Other Buyer ID format. This helps avoid acceptance warnings from ZATCA and improves compliance for invoices issued to non-Saudi customers.
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#226593
Italian split payment taxes now show the correct label in the Taxes column of PDF documents instead of appearing as standard taxes. This helps users and customers read tax information accurately on generated documents.
Original PR description
Split payment taxes were not labelled correctly in the PDF's "Taxes" column, they were labelled as standard taxes. <img width="1214" height="598" alt="image" src="https://github.com/user-attachments/assets/f1ea57bd-9a7f-460f-8c81-6a89585ba6d8" /> Forward-Port-Of: odoo/odoo#226588 Forward-Port-Of: odoo/odoo#226366
The AI module now treats unsuccessful website scraping as a warning instead of an error when the issue does not block the overall process. Users are still informed when a URL cannot be scraped, while monitoring systems receive fewer false error alerts.
Original PR description
Currently, an error can occur on unsuccessful scrapping of URL.
**Error:**
`Error scraping URL https://agenciavirtualpy.com: HTTPError('403 Client Error: Forbidden for url: https://agenciavirtualpy.com/')`
- Instead of logging an error, we log only warning during unsuccessful URL
scraping because it is not a blocking point in the code.
- On unsuccessful scraping, we log warnings [1] and raise a UserError [2] to
inform the user about the failed URL scraping. Therefore, we should log a
warning as the UserError is already present.
[1]: https://github.com/odoo/enterprise/blob/1930d045a5f40f33b0a391b90d5adaed0eb90083/ai/models/ai_agent.py#L258
[2]: https://github.com/odoo/enterprise/blob/1930d045a5f40f33b0a391b90d5adaed0eb90083/ai/models/ai_agent.py#L283-L285
sentry-6634525990Fixed an issue where users could see an error when Shop Floor was set as their default landing page. The page now handles reloads more reliably, reducing login disruption for manufacturing users.
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 Forward-Port-Of: odoo/enterprise#93043
The update gives the test user the needed Sales permissions so Mexican localization tests can create sales orders successfully. This prevents false test failures and improves release reliability without changing any business behavior.
Original PR description
The tests `test_global_discount` and `test_down_payment` in `l10n_mx_edi_sale` were failing with:
AccessError: You are not allowed to create 'Sales Order' (sale.order) records.
This happened because `mx_external_setup` runs with a user that does not belong to any Sales group. Both tests explicitly create Sale Orders and advance payment wizards, which require Sales ACLs.
This change ensures the test user has the `sales_team.group_sale_salesman` group in `setUpClass`, so Sales Orders can be created normally. No business logic is modified, only test stabilization for the MX localization.
[RB-232559](https://runbot.odoo.com/odoo/error/232559)This fix prevents a secondary failure when Odoo tries to capture screenshots or screencasts after a serious error. It helps ensure the original problem is retained and easier to diagnose, improving reliability of automated testing and error investigation.
Original PR description
Cf #226267 the "error condition" on the ws socket is that it's not present at all, not that it's `None`. So when used after a fatal error (e.g. in the context of trying to take a screenshot or take a screencast) these methods *can* in some cases trigger a compound failure and lose the original error because they fail on trying to access the ws to check if it's truthy. Forward-Port-Of: odoo/odoo#227385
The Philippine localization now assigns the 0% Exempt tax to the correct VAT fiscal position instead of conflicting categories. This helps Filipino companies avoid incorrect tax configuration and reduces accounting setup confusion.
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
2 changes
Resolved issues and error corrections
The fiscal regime shown on Mexican electronic invoice PDFs now follows the same contact hierarchy rules as the official CFDI XML. This avoids confusing mismatches between the customer-facing PDF and the legally relevant XML when invoicing child contacts of a company.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
Opening the duplicate transactions wizard directly no longer triggers an error when no bank journal is linked. This avoids a confusing crash and makes the Accounting workflow more reliable for users who access the view manually.
Original PR description
Currently, an error occurs when users try to open the view directly. Steps to reproduce: --- - Install `Accounting` module - Using Open View, Open `account.duplicate.transaction.wizard` view Traceback: --- `ValueError: Expected singleton: account.journal()` This error occurs because no account journal is linked to the wizard at [1], resulting in an empty `account.journal`. [1]- https://github.com/odoo/enterprise/blob/08564f3312c255f2f3ab95cef5a9bfc57727bd1f/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L32 sentry-6812500330 Forward-Port-Of: odoo/enterprise#94538
16 changes
Resolved issues and error corrections
This fixes an issue where automated check templates did not apply their configured action. Businesses using accounting reports can now rely on automated checks to behave as intended, reducing missed or incorrect follow-up steps.
Original PR description
Currently the check template will not set the action for an automated checks. This is due to a condition that test if there is already the key in the dict which is useless here. Forward-Port-Of: odoo/enterprise#94206
Uruguay electronic invoicing now correctly handles document numbers that start with multiple letters, instead of only recognizing the first letter. This helps ensure credit notes, debit notes, and vendor bill documents are generated with the correct references and reduces validation issues.
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 Forward-Port-Of: odoo/enterprise#90696
The appointment page loading indicator now uses a more appropriate color instead of incorrectly relying on the secondary theme color. This keeps the visual experience more consistent and polished for visitors while pages are loading.
Original PR description
*: website_helpdesk This commit revises the loading element that misuse the secondary color. task-5079680 Requires: - https://github.com/odoo/odoo/pull/226847 | Before | After | |--------|--------| | <img width="1920" height="1080" alt="Capture d’écran 2025-09-12 à 11 24 24 (3)" src="https://github.com/user-attachments/assets/b0d671e4-5538-4c63-9a3a-20bbe835b459" /> | <img width="1920" height="1080" alt="Capture d’écran 2025-09-12 à 13 22 59 (3)" src="https://github.com/user-attachments/assets/3b2d4452-84f2-446a-bb2b-bb4a8e0e9abc" /> | Forward-Port-Of: odoo/enterprise#94570
Fixed the Knowledge app so opening an activity from the activities menu now shows the related article instead of the full list of articles. This helps users quickly find the specific Knowledge article that needs their attention.
Original PR description
Currently, when the user tries to open any activity of the knowledge article, it opens all articles instead of the one which has an activity assigned to them. **Steps to reproduce this issue:** 1) Install the Knowledge module 2) Set up an activity for yourself on a Knowledge article 3) Open the activities from Activities (top left corner) **Issue:** You will end up in the all articles list, with no filters applied. **Cause:** When the user clicks on the activities, a default search filter is added in the context, which is then applied on the view. But in the knowledge article, we don't have any search filters for the activities. Therefore, it renders all knowledge article records. **Solution:** Add search filters for the knowledge articles. opw-4997201 Forward-Port-Of: odoo/enterprise#93609
The rental search page no longer starts a new search automatically when customers adjust the rental dates. This prevents unexpected page changes and makes the search experience clearer, while also updating the search button to better match the site’s primary styling.
Original PR description
Steps to reproduce: 1. Navigate to the rental search snippet on the website. 2. Modify the date range using the date picker. 3. Observe that the search is triggered automatically, which is not the desired behavior. After this commit: - Updated the search button style to use the primary color. - Made the search trigger only when the button is clicked, preventing automatic activation when the date range is modified. Forward-Port-Of: odoo/enterprise#94296
Calendar export times for planning slots now use the correct timezone when no employee is assigned. This prevents incorrect shift times in downloaded calendar files and keeps tests reliable when demo data is not installed.
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)
Forward-Port-Of: odoo/enterprise#93692This fix restores a missing dependency so the AI website live chat feature can be installed, uninstalled, and reinstalled reliably. It prevents setup errors caused by the module looking for website components that were no longer guaranteed to be present.
Original PR description
odoo/enterprise#93271 changed the dependencies from `ai_website, im_livechat` to `website, ai_livechat`, but this change is incorrect: in `snippets.xml` the module hooks onto `t[@id='ai_livechat_hook']` which is installed by `ai_website`. As a result trying to uninstall `ai_website` when `ai_website_livechat` is installed breaks reinstallation since the snippets view becomes invalid. Forward-Port-Of: odoo/enterprise#94543
This update standardizes how internal test helper tools are accessed in Studio-related tests. It helps keep the test suite easier to maintain and reduces the risk of future test breakages, without changing customer-facing features.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865 Forward-Port-Of: odoo/enterprise#94496 Forward-Port-Of: odoo/enterprise#94074
This change fixes an internal test by ensuring it uses vehicle data that is always available, rather than optional demo data. It helps keep validation runs stable across different database setups without changing customer-facing behavior.
Original PR description
In the [PR 91185](https://github.com/odoo/enterprise/pull/91185), the test was changed to comply with the new changes. In that test, a new vehicle was created using a model from the demo data. Since the demo data is not present in all databases, this caused a problem when the ID could not be found. To fix this, we now create a new model using a brand that exists in the data file and will therefore be present in all databases. See: https://runbot.odoo.com/odoo/runbot.build.error/231693?menu_id=405 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#94495
This update makes Philippine report export files generate lines in a consistent order. It helps prevent automated test failures and improves reliability without changing business functionality.
Original PR description
Fixes an issue with tests that would fail when the order of the lines in the file where not consistent. We will be a bit more precise in the order by of the export queries, and for SAWT/QAP we will also sort the lines after grouping per schedules to ensure that the order is consistent there too. See runbot error 232581 Forward-Port-Of: odoo/enterprise#94405
This update corrects internal definition files for the Knowledge app so they match recent product changes. It helps maintain reliability for future development and reduces the risk of technical inconsistencies, with no expected direct change for end users.
Original PR description
Recent changes did not update d.ts accordingly. https://github.com/odoo/odoo/pull/227182
This fix makes the rental checkout test wait for the cart page and pricing updates before checking totals. It helps prevent false build failures caused by timing issues rather than real customer-facing problems.
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#94519 Forward-Port-Of: odoo/enterprise#89274
This fixes a display issue where start and end date fields in Planning could shift out of alignment after a user clicked away. The Planning screens now remain visually consistent, making scheduling forms easier to read and use.
Original PR description
currently, `start_datetime` and `end_datetime` fields became misaligned when the date field lost focus, due to the datetime formatting changes introduced in PR https://github.com/odoo/odoo/pull/218387. This fix ensures the fields are properly aligned. task-5046364 Forward-Port-Of: odoo/enterprise#93371
Studio exports no longer fail when they include binary fields that are not stored as attachments. This makes data exports more reliable for users working with custom Studio fields.
Original PR description
**Before:** Attempting to export non-attachment binary fields using the `Studio Export` would cause a traceback. **After:** Non-attachment binary fields can now be successfully exported from `Studio` without error. task-4888937 Forward-Port-Of: odoo/enterprise#94230 Forward-Port-Of: odoo/enterprise#93781
The bank reconciliation screen no longer shows an extra line above action buttons. This restores visual clarity and makes the button area easier to read for accounting users.
Original PR description
During this commit: https://github.com/odoo/enterprise/commit/f9725d7b01cbd1235f022821a6861adb2955e49e we added a line above the buttons, but we lost some clarity, so this commit will remove it task-5082695 Forward-Port-Of: odoo/enterprise#94631
This fixes an issue in the manufacturing master production schedule where planning calculations could incorrectly use horizon days. The change helps keep production planning dates and quantities aligned with the intended schedule, reducing confusion for planners.
Original PR description
19.0 post-freeze bug pad
40 changes
Resolved issues and error corrections
This fixes a visual issue in sales orders where option controls could overflow on combo product lines after shortened text. The change keeps the order line layout tidy and prevents distracting or confusing on-screen display issues for users.
Original PR description
In odoo/odoo@520bb2ff8eb165e4a9389db6300192f9b4a05dfd the styling applied on the `.o_list_section_options` was removed for utility classes. However these utilities were not applied on the combos, rendering an overflow after the ellipsis. task-5089909 Issue: <img width="961" height="583" alt="image" src="https://github.com/user-attachments/assets/fe4f7cd9-da3e-4ca5-98f5-0101d3a95012" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update aligns internal developer reference files with recent changes across messaging, HR, live chat, portal, project, and website features. It helps reduce development errors and keeps future maintenance smoother, without changing day-to-day user behavior.
Original PR description
\* = hr, hr_holidays, im_livechat, portal, project, website_livechat, website_slides Many recent changes did not update d.ts files accordingly. https://github.com/odoo/enterprise/pull/94768
This fixes how sales down payment references are validated so they match the invoice's accounting date rather than the sales order creation date. It helps ensure down payment information stays consistent with invoicing records and avoids false test failures.
Original PR description
Because the test was asserting against the Sale Order creation date, while Odoo actually uses the invoice’s accounting date when updating the down-payment line. build_error-231505 Forward-Port-Of: odoo/odoo#224989
This fixes an internal mismatch in the Knowledge app after recent changes. It helps keep the app's supporting code aligned, reducing the risk of developer-facing errors without changing user workflows.
Original PR description
Recent changes did not update d.ts accordingly. https://github.com/odoo/odoo/pull/227183
Delivery operations now show the correct location label, using "From" because goods leave from the dock. This helps users read delivery details more accurately and reduces confusion during warehouse operations.
Original PR description
Deliveries send goods from the dock location. Therefore, If the operation type is a delivery it will show "From" instead of "To". Description of the issue/feature this PR addresses: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an internal test dependency in the online rental shop area so automated checks can run reliably. It helps prevent false build failures and keeps rental-related website changes moving through validation smoothly.
Original PR description
runbot-error-232620
This fix removes a fragile dependency from automated website tour tests, helping prevent avoidable test failures. It improves reliability for quality checks without changing the customer-facing website experience.
Original PR description
runbot-error-232620 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
The website payment support widget now only displays card brands and payment options that are actually active and usable. This prevents customers from seeing unavailable options such as Visa or Mastercard when the main card payment method has been disabled.
Original PR description
On the Support Payment Methods widget, we only wanna display the brands where the associated primary method is active, as those are the ones we can actually pay with. When deactivating the Card (primary) payment method, the related brands (Mastercard, VISA, ...) will be removed from display. <img width="555" height="272" alt="image" src="https://github.com/user-attachments/assets/473f816d-d709-4c71-bdc5-9c31789d31bc" /> opw-5083539
Users without administrator rights can now open return checks without encountering an access error. This prevents unnecessary interruptions for accounting staff and makes the return check workflow more reliable.
Original PR description
Before this fix, trying to open a return with a user not having the administration rights caused an access error. This was because the computation of that field tried to access the name of an ir.model record.
This change makes an existing web framework helper available for reuse by other parts of Odoo, such as Studio. It supports more consistent behavior when checking conditions over time without duplicating logic.
Original PR description
Because waitUntil maybe used in its own sake to periodically check a predicate (in studio) and because macro.js is a standard framework tool, we export its waitUntil function 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 unnecessary warning about listening on all network addresses when Odoo's web server is not enabled. It reduces misleading startup messages for administrators while keeping the warning in place when it is relevant.
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 update removes an unnecessary dependency used by Odoo Studio and switches to an existing shared function. It helps keep Studio lighter and avoids loading code that is only needed for guided tours, with no expected change for users.
Original PR description
HootDom is lazy loaded and necessary only in tours. Studio uses the waitUntil function, but it is also findable in macro.js in @web/core
This fix prevents Point of Sale users from seeing an incorrect warning that another user is closing their session. It helps avoid confusion during session closing by ensuring the system checks the session information correctly.
Original PR description
Issue: When closing session on a pos the warning: "The session is being closed by another user. The page will be reloaded." was shown. Fix: The condition in the closingSessionNotification was strictly comparing an int with a string. 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
US check printing now relies on the correct US accounting package instead of the broader US localization package. This helps ensure the feature has the accounting components it needs, reducing setup or installation issues for customers using printed checks.
Original PR description
It should depend on `l10n_us_account`, not just `l10n_us`.
Product snippets on the website now only show a crossed-out original price when a real discount applies. The fix also respects currency rounding, helping avoid misleading discount displays for shoppers.
Original PR description
Commit 43d5226b500d64c3902eb1528e5d8e461766982c removed the condition on when discount should be shown So it was always shown by default. Additionally, we use the currency compare amounts method to make sure rounding values are respected. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website shop editor now includes the missing Overlay option for the Showcase Product Design. This fixes an editing gap so business users can apply the intended visual styling to product tiles more easily.
Original PR description
This commit adds the missing Overlay option for the Showcase Product Design. task-5090301 <img width="1919" height="779" alt="Capture d’écran 2025-09-15 à 16 03 52" src="https://github.com/user-attachments/assets/badb1525-c9f8-4298-853a-1d89f6f8897c" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Studio exports now handle binary fields that are stored outside attachments without causing an error. This prevents export failures and helps users retrieve their Studio data more reliably.
Original PR description
**Before:** Attempting to export non-attachment binary fields using the `Studio Export` would cause a traceback. **After:** Non-attachment binary fields can now be successfully exported from `Studio` without error. task-4888937 Forward-Port-Of: odoo/enterprise#94230 Forward-Port-Of: odoo/enterprise#93781
DIN5008 report layouts no longer show the customer phone number in the address block, and the customer VAT number is moved out of that address section. This keeps German-style documents cleaner and places tax details in a more appropriate part of the report.
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 Forward-Port-Of: odoo/odoo#226967 Forward-Port-Of: odoo/odoo#226630
This fix makes point of sale test scenarios search for a customer before selecting them, ensuring the customer is available in the list. This reduces false test failures and helps keep POS-related quality checks stable without changing everyday user workflows.
Original PR description
### After this commit: - In test cases, before selecting a customer, perform a search to ensure the customer is loaded into the list if it is not already present. Runbot Err: 230518 task: 5068285
This fix ensures a setup-related warning only appears when it is relevant to starting the server/database. Business users and administrators will see fewer confusing messages when running unrelated commands, making system maintenance clearer.
Original PR description
The deprecation warning for `--http-interface` not being present in the config file was also shown for commands that don't start the database, while it's something directly related to it.
PDF documents will no longer show very small negative amounts as values like "-0.00" after rounding. This avoids confusing customers or users by displaying these amounts cleanly as "0.00".
Original PR description
Previously, when an amount value that is passed to `value_to_html` is a really small negative number (e.g. -0.000000001), the rounded result will have the negative sign in front of it (e.g. "-0.00").
This commit fixes it so that they will be rendered without the negatives ("0.00").
opw-4685953
Forward-Port-Of: odoo/odoo#224292Fixes an issue where opening the invoice line form view in Studio could trigger an error before a new invoice was saved. This improves reliability for users customizing invoice screens and prevents an unnecessary interruption during setup.
Original PR description
Currently an error occurs when user opens form view for invoice lines using studio. **Steps to replicate:** * Install `accountant` and `web_studio` * Create new invoice but don't save > Open studio…
Currently an error occurs when user opens form view for invoice lines using studio. **Steps to replicate:** * Install `accountant` and `web_studio` * Create new invoice but don't save > Open studio view * Select Invoice Lines > Edit Form View > Error should occur in terminal `ValueError: Expected singleton: account.move()` **Root cause:** * This error occurs because an empty `account.move()` record is passed as `self` to `_prepare_product_base_line_for_taxes_computation` at [1], which expects only a single record. Since the invoice has not yet been created, the recordset is empty. This issue happens only in version `18.4`, not in `18.3` or earlier. The reason is that in `18.4`, compute method [2] is called when opening the form view, whereas in `18.3` it is not. When [2] is called, it sets the `display_type` to `product`, allowing the code to bypass the condition at [3]. In contrast, in `18.3`,since [2] is not called, `display_type` remains `False` despite the code being the same. **Solution:** * To achieve similar behavior as in version `18.3` and skip that line, modify the condition to include a check for `move_id`. [1]: https://github.com/odoo/odoo/blob/0706aaef3894bbee6eea62679a2d89a3ee316f7b/addons/account/models/account_move_line.py#L880 [2]: https://github.com/odoo/odoo/blob/0706aaef3894bbee6eea62679a2d89a3ee316f7b/addons/account/models/account_move_line.py#L485 [3]: https://github.com/odoo/odoo/blob/0706aaef3894bbee6eea62679a2d89a3ee316f7b/addons/account/models/account_move_line.py#L875 **Sentry-6766906181** Forward-Port-Of: odoo/odoo#224397
A small spelling mistake was fixed in the website image shape definitions. This helps ensure image shape options are referenced consistently and reduces the chance of display or configuration issues.
Original PR description
Fix typo: change 'anmated' to 'animated' in image shape definitions. Forward-Port-Of: odoo/odoo#226865
Mexican electronic invoices now use the same customer fiscal regime in both the PDF and XML versions. This prevents confusion when invoices are issued to child contacts whose fiscal regime differs from the parent company, keeping customer-facing documents aligned with official CFDI data.
Original PR description
In l10n_mx: - Create a child contact under a company contact. - Set the fiscal regime of the child contact to one different from the company’s fiscal regime. - Create an invoice with the child contact and send it to the CFDI. In the XML, the fiscal regime used is the company’s, whereas in the PDF it is the child contact’s. This commit applies the same logic from _add_customer_cfdi_values to the PDF generation. After this change, the fiscal regime shown in the PDF will be the company’s, consistent with the XML. opw-4989605 Forward-Port-Of: odoo/enterprise#94259 Forward-Port-Of: odoo/enterprise#92482
Users can now turn the “include file store” option on or off by clicking its label, not just the checkbox. This makes the database management screen easier to use and reduces small usability frustrations.
Original PR description
before this commit, to select and unselect the newly added include file store option, user has to click on the checkbox after this commit, user can select or deselect the value even by clicking on the field label --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix allows the portal signature form to be used on regular pages, not only inside pop-up windows. It prevents an error that could block users from completing signature actions in custom portal flows.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
This fix ensures that when a user sets a custom delay for statutory report deadlines, that value is respected instead of being overridden by default rules. This helps businesses in Estonia, Ireland, and the UK rely on their configured reporting schedules for Intrastat and local tax reports.
Original PR description
deadline_days_delay should be used if a value is set by a user.
This fixes an error that appeared when opening the website editor while debug mode was enabled. Users and support teams can now use debug mode with the website editor without being blocked by a dependency issue.
Original PR description
Steps to reproduce: 1. Install the website module. 2. Enable debug mode and open edit mode. - A dependency error appears. Issue: A wrong import caused a dependency error when opening edit mode with debug enabled. Fix: Correct the import to resolve the dependency error.
The Barcode app now hides a product description when it simply repeats the product name. This keeps reception lines easier to read and avoids confusing duplicate information for warehouse users.
Original PR description
Steps to reproduce: - Create a product - Open the Barcode app - Create a new reception and add the product Issue: The description is displayed even though it's the same as the product name. Since in barcode we don't get the product's `display_name` with its code as they're treated separately, we need to reconstitute it to be sure it's not the same as the description in order to know if we want to display it or not. Task-4901289 Forward-Port-Of: odoo/enterprise#94623
Fixes an issue where opening the tours list could fail when no interactive tour was currently running. This keeps the tours list accessible and prevents an unnecessary error screen for users or administrators.
Original PR description
Before this commit, if you don't have a running tour and try to access to the tours list view, you got a traceback. Now, the traceback is fixed. The error was due to the new lazy load of the tours. The files that concerned the list view of the tours was in an asset that was loaded only when an interactive tour was running. Lazy load pr: https://github.com/odoo/odoo/pull/224571 TASK-ID: 5089053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Receipt descriptions now keep the product name when it is part of a longer instruction. This prevents important receiving instructions from being accidentally shortened or made unclear for warehouse users.
Original PR description
Steps to reproduce: - Create a product - Set a description for receipts that uses the product name somewhere in the text - Create a reception for that product Issue: The product name will be removed from the reception instructions. The intended behavior was to avoid displaying the same information if the description was the same as the product's display_name. So we only check that now, rahter than do a replace in the description. Task-4901289 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226925
The website product management view now displays product cards with better spacing, especially on smaller screens. This makes the product list easier to read and use by moving the toggle below the main product information instead of squeezing it beside the content.
Original PR description
This PR fixes an issue about the products kanban view being too condensed due to a toggle rendered next to the `<main>` tag. This was especially impacting the mobile due to the screen size and the width of the content. | 19.0 | This PR | |--------|--------| | <img width="357" height="383" alt="image" src="https://github.com/user-attachments/assets/d377a99a-b192-468a-8d74-7841cecd469e" /> | <img width="358" height="409" alt="image" src="https://github.com/user-attachments/assets/db1490bc-a84d-4f8c-a401-8b92f74f49e9" /> | With this PR, we tweak the flex layout to ensure a good visual result across breakpoints, mainly by rendering the toggle below the other elements of the record. task-5090547 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents connection-loss messages from being reported after an automated tour has already finished. It helps keep test results cleaner and avoids distracting teams with errors that do not affect real users.
Original PR description
Basically a second version of #209902, as #219267 intercepted "failed to fetch" and "load failed" errors to swap them for `ConnectionLostError`, meaning they don't match the old filter anymore. https://runbot.odoo.com/odoo/error/229949/
This fix stabilizes automated checks around the Discuss command palette so clicks are only tested when the interface is ready. It also corrects supporting test data, helping reduce false failures and keeping development validation more dependable.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. The commit also fixes the mock of `discuss/search` ( for https://github.com/odoo/enterprise/pull/94075 ) and a test that was incomplete and relied on the incorrect implementation https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/odoo#225951 Forward-Port-Of: odoo/odoo#225844
This fix makes automated checks for the WhatsApp command palette more reliable by waiting for the interface to be ready before interacting with it. It reduces false test failures, helping keep development and release validation stable without changing end-user behavior.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/enterprise#94075
This change prevents an internal automated test from failing because of an unlucky database identifier value. It helps keep quality checks stable without changing product behavior for users.
Original PR description
The database_id is an uuid. It can happen that it contains the substring "1337". The test only needs to check if the value is not in the "prompt" or "conversation_history" keys. Thus we can remove the "database_id" key runbot-198561 Forward-Port-Of: odoo/enterprise#94807
The Discuss call action buttons now have slightly softer corners so they visually fit better alongside the round join and leave buttons. This creates a more coherent and polished calling interface without changing how users interact with it.
Original PR description
Before this commit, all call actions but the special buttons "join" / "leave" were almost squared, whereas the "join" / "leave" buttons were circles. The circle design of the "join" / "leave" buttons…
Before this commit, all call actions but the special buttons "join" / "leave" were almost squared, whereas the "join" / "leave" buttons were circles. The circle design of the "join" / "leave" buttons is very much what we want, for recognizable shape and consistent in all Odoo such as with VoIP app. The other buttons are not circle because it looks best when inline and grouped. However, the square buttons with rounded circle look slightly off as if there's a clash of design. This commit remedies the problem by adding slight roundness to the square discuss actions that are not circle. This is almost unnoticeable when just looking at the square buttons, but when next to the circle button this looks like they fit together more than before. Before / After <img width="354" height="169" alt="Screenshot 2025-09-15 at 13 59 25" src="https://github.com/user-attachments/assets/f1505ae3-abfd-4b64-94bf-c554ed74e9c8" /> <img width="354" height="167" alt="Screenshot 2025-09-15 at 13 59 05" src="https://github.com/user-attachments/assets/b41100e0-b3bc-408f-8206-6dc2a77aa6c9" />
Mobile users now see the template name as the main detail when browsing Sign templates, instead of the creation date. This makes it easier to pick the correct template and keeps the mobile experience aligned with desktop.
Original PR description
### Issue: - In mobile view, the template list was showing the creation date instead of the template name. - This made it hard to know which template you were selecting. --- ### Fix: - Changed the mobile view to show the template name as the main info. - The creation date is still shown, but as extra information. --- ### Impact: - Easier to find the right template on mobile. - Mobile and desktop views now look consistent. --- Task: 5038933 Forward-Port-Of: odoo/enterprise#93072
The add snippet dialog now uses standard colors that work better in dark mode. This improves readability and contrast when users search for or select website building snippets.
Original PR description
The add snippet dialog is using custom colors on its `list-group` items which breaks the color-contrast when displayed in darkmode. This commit removes `list-group-item-light` to rely on default list-group colors, and uses bootstrap CSS variables to handle the custom active background color and color. Creates a `add_snippet_dialog.dark.scss` to handle the background of the searchbar. task-5075140 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product page image carousel now makes the selected thumbnail easier to identify. This improves the shopping experience by reducing confusion when customers browse products with multiple images.
Original PR description
Steps ----- 1. Have a published product with multiple images; 2. go to its website page; 3. open website editor; 4. set Images Ratio to Wide; 5. enable pop-up on click; 6. save; 7. browse through the images. Issue ----- - While there is a border around the active thumbnail in the bottom row, it is barely visible, making it difficult to see which image is currently being shown. Cause ----- - The border is only 1 pixel wide. Solution -------- - Increase the width of the border to 4 pixels, change the color to `$primary`, and hide the border for inactive images. - Set opacity of thumbnails that aren't selected or hovered over to 0.5. opw-4908881 Forward-Port-Of: odoo/odoo#224644
7 changes
Resolved issues and error corrections
The portal signature form now checks whether a pop-up window is present before trying to use it. This prevents an error when the form is placed directly on a page, allowing customers to complete signatures in more contexts.
Original PR description
Description of the issue/feature this PR addresses: Be able to use the portal signature form outside of a modal. Current behavior before PR: If the signature form (```<t t-call=“portal.signature_form”>```) is used outside of a modal, an error occurs: ```TypeError: Cannot read properties of null (reading 'addEventListener')``` Desired behavior after PR is merged: The signature form can be used outside of a modal. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224564
Renamed spreadsheets now keep their updated name when users create a new file and navigate back through the breadcrumb. This prevents confusion where a previously named spreadsheet appeared as untitled.
Original PR description
Steps to reproduce: - Create a spreadsheet - Rename it to "My awesome spreadsheet" - Click on File -> New - Go back to "My awesome spreadsheet" from the breadcrumb => The spreadsheet is untitled. This was caused by the fact that the name was not saved in the local state of the action. Task: 4942117
Performance tests were adjusted so they no longer fail when timing results vary unpredictably. This makes automated checks more reliable and avoids blocking work because of inconsistent test timing rather than real product issues.
Original PR description
These tests are non-deterministic, we should not fail when running them. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Saudi e-invoices for foreign customers now format the Other Buyer ID as an alphanumeric value required by ZATCA. This helps avoid acceptance warnings during invoice submission and improves compliance with Saudi e-invoicing rules.
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#226593
This fix prevents Odoo's internal test and diagnostic tools from failing again while handling an existing serious error. It helps preserve the original failure details, making troubleshooting more reliable when screenshots or screencasts are attempted after a crash.
Original PR description
Cf #226267 the "error condition" on the ws socket is that it's not present at all, not that it's `None`. So when used after a fatal error (e.g. in the context of trying to take a screenshot or take a screencast) these methods *can* in some cases trigger a compound failure and lose the original error because they fail on trying to access the ws to check if it's truthy. Forward-Port-Of: odoo/odoo#227385
Users can now drag and drop Font Awesome icons in the HTML editor without triggering an error. This improves editing reliability and prevents an interruption during content creation.
Original PR description
**Current behavior before PR:** Dragging and dropping a `fa` icon leads to traceback. This issue happens because in onDrop method, value of `htmlTransferItem` contains only a ZWS wrapped in a `<span>`. This span gets removed in `prepareClipboardData`, alongwith ZWS resulting in an empty fragment being passed to the `insert` method. The insertion of an empty fragment lead to the traceback. **Desired behavior after PR is merged:** Now, `fa` icon can be dragged and dropped without a traceback. task-4882121 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes automated checks for Saudi and GCC point-of-sale localization so they run reliably in single-app test environments. It helps maintain confidence that localized point-of-sale flows continue to work correctly without affecting day-to-day users.
Original PR description
Fix runbot error in single app runbot-231469 runbot-231471
4 changes
Resolved issues and error corrections
Survey invitation emails now correctly refresh their subject line when a different or updated email template is selected. This ensures survey recipients see the intended subject, reducing confusion and helping teams send accurate invitations.
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
This update ensures foreign customer invoices in Saudi e-invoicing use an accepted alphanumeric Other Buyer ID value. This helps avoid ZATCA acceptance warnings and supports smoother invoice compliance processing.
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#226593
The calendar year view now responds properly when the browser window is resized. This keeps the calendar layout usable and consistent for users without adding duplicate resize handling.
Original PR description
FullCalendar already applies a debounce on the `windowResize` handler. Thus, doing it again in our renderer is a duplicated effort. Also, in the Year calendar renderer, the debounced version of the handler is initialized after the FullCalendar instances (one for each month) are created... which prevents it from being run at all. This commit fixes and cleans this up by directly passing our handler to FullCalendar, letting him do the rest. task-4809668 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 prevents secondary failures when Odoo tries to take screenshots or screen recordings after a serious test error. It helps preserve the original error details, making failures easier to diagnose without changing business functionality.
Original PR description
Cf #226267 the "error condition" on the ws socket is that it's not present at all, not that it's `None`. So when used after a fatal error (e.g. in the context of trying to take a screenshot or take a screencast) these methods *can* in some cases trigger a compound failure and lose the original error because they fail on trying to access the ws to check if it's truthy. Forward-Port-Of: odoo/odoo#227385