Daily updates from Odoo
Wednesday, September 17, 2025
96 changes
16 changes
Resolved issues and error corrections
When the AI feature cannot read a webpage, the system now records it as a warning instead of an error. Users are already informed about the failed URL, so this change keeps monitoring cleaner without changing the user workflow.
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-6634525990
Forward-Port-Of: odoo/enterprise#94002This fixes a rare internal failure that could occur when Odoo tries to capture diagnostic information after a serious error. It helps preserve the original problem details, making troubleshooting more reliable without changing normal user workflows.
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#227469 Forward-Port-Of: odoo/odoo#227385
This fixes an error that could appear when a user’s default landing page was set to Shop Floor. Users can now log in directly to Shop Floor without seeing a crash, improving reliability for manufacturing floor workflows.
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#94655 Forward-Port-Of: odoo/enterprise#93043
This fix prevents an installation error when the withholding tax module is installed alongside Indian localization demo data. It makes setup more reliable by ignoring purchase taxes that do not include the expected tax distribution details.
Original PR description
Traceback when no `repartition_line_ids` found in tax data. Steps to reproduce:- - Install `l10n_in` module with demo data. - Install `l10n_account_withholding_tax` module. Error:- ``` File /data/build/odoo/addons/l10n_account_withholding_tax/__init__.py, line 27, in _make_demo_tax tax_repartition_lines = [line[2] for line in tax_data[purchase_taxes[0]]['repartition_line_ids'] if line[2]['repartition_type'] == 'tax'] KeyError: 'repartition_line_ids' ``` Root Cause: At [1], No `repartition_line_ids` found in `tax_data[purchase_taxes[0]]`. Solution: Select only purchase taxes having `repartition_line_ids`. [1]: https://github.com/odoo/odoo/blob/9805d09dff64de835de0c764da8c6e213d6b88aa/addons/l10n_account_withholding_tax/__init__.py#L27 Forward-Port-Of: odoo/odoo#227381
This update fixes Philippine tax setup data so the 0% Exempt tax is no longer incorrectly linked to both VAT Exempt and VAT Registered statuses. It also adjusts the VAT Exempt fiscal position setup, helping Filipino companies get more accurate tax behavior and reporting out of the box.
Original PR description
### Steps to reproduce: - Install "l10n_ph" and switch to a Filipino company - Check the tax "0% Exempt", it has both "VAT Exempt" and "VAT Registered" ### Cause: The CSV was badly generated because of the fiscal position tax mapping before 18.3. ### Solution: Fix the CSV. Also delete the country for the fiscal position "VAT Exempt". This is a [recommendation from AYH on discord](https://discord.com/channels/678381219515465750/687337689988726949/1410930795329097880). opw-5044305 Forward-Port-Of: odoo/odoo#227261
Fixes an issue where configuring website-related fields from the backend could fail because the system expected storefront pricing data to be available. Odoo now safely falls back to the company currency, helping users continue website setup without errors.
Original PR description
Prior to this commit, the website currency was computed using the request pricelist. However, this logic assumed that the compute method could only be called from a frontend request.
However, via `web_studio`, a user can add fields linked to a website, which triggers the computation in a backend request, causing the following traceback:
```
Traceback (most recent call last):
...
File "/data/build/odoo/addons/website_sale/models/website.py", line 282, in _compute_currency_id
request and request.pricelist.currency_id or website.company_id.sudo().currency_id
^^^^^^^^^^^^^^^^^
AttributeError: 'Request' object has no attribute 'pricelist'
```
This commit fixes the issue by first ensuring that the pricelist exists and falling back to the company currency if it does not.
opw-5068581
Forward-Port-Of: odoo/odoo#227450The Malaysian EDI fields now show identity card numbers without hyphens, matching how they are typically entered in ERP systems. This reduces user confusion and helps ensure company and contact details pass validation with IAP and MyInvois.
Original PR description
Hyphens are generally omitted in ERPs, and just shown on the Identity card. Putting hyphens in the placeholder is actually misleading for users, and prevents validation through the IAP server and MyInvois Ref: https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) Task [link](https://www.odoo.com/odoo/project/967/tasks/5054821) task-5054821 Forward-Port-Of: odoo/odoo#225094
When a payment memo is changed, the related journal entry reference is now updated as well. This keeps payment and accounting records aligned, reducing confusion during reconciliation and review.
Original PR description
Issue: In previous versions, the memo field of account payments and ref field of account move were related Now that payments do not required to have generated account move's when the memo is updated the ref remains unchanged. Purpose of this PR: To update the account move ref when the payment memo is updated. Steps to Reproduce on Runbot: install accounting go to bank account and assign outstanding accounts for manual payment methods create a payment -- a related account move should be created update the memo on the payment -- the ref on the related account move is unchanged. opw-4989260 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226168 Forward-Port-Of: odoo/odoo#223459
This fixes an issue where clicking empty areas in social media, share, and rating blocks while editing a website could accidentally select content and show an unwanted toolbar. The blocks now behave as intended, keeping normal title editing available while preventing confusing accidental selections.
Original PR description
This PR fixes undesired selections that might happen when clicking on empty spaces on the following snippets: - s_social_media - s_share - s_rating Such selections are undesired as: - these snippets are not meant to be editable via the Editor (except for their title, when present). - the uncollapsed selection results in the floating toolbar being displayed. This PR's strategy was: - to make sure these snippets are contenteditable=false at their root, in case that was not already the case in the snippet template. - to make the snippets' content non user-selectable. While this does not affect the contenteditable=true areas (.i.e. the title), it effectively prevents selecting the non editable areas. task-5066301
The website builder now handles invalid progress bar number entries safely instead of triggering an error. It also prevents confusing duplicate percent signs, making editing progress bars more reliable for users.
Original PR description
Before this commit, putting an invalid input in the progressbar value would lead to a traceback. Moreover, the input could display "0%%" (one being in the input, the other being the displayed unit). This commit solves this issue by defining a saveUnit for the input and using the defaultValue when an input is invalid.
The Discuss app no longer shows the compact chat hub button when chat hub conversations are not meant to appear there. This removes a redundant and confusing interface element, making the messaging experience cleaner for users.
Original PR description
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode of chat hub was solely relying on compact mode on/off, ignoring the overall condition for whether some conversations are shown in chat hub (note: conversations in compact are still considered as "shown"). This commit adds extra condition on showing compact button to take into account chat hub showing some conversations. If no conversations are shown, then the compact mode should not be shown at all. Discuss app prevents showing of conversations in chat hub (with exceptions), as this is redundant with discuss app itself. Backport of https://github.com/odoo/odoo/pull/227162 Forward-Port-Of: odoo/odoo#227190
A test for Swiss payroll contract templates was corrected by removing a reference to a field that is not supported in this context. This helps keep automated checks reliable and reduces the risk of false failures during future updates.
Original PR description
The CH contract template whitelist test referenced `overtime_from_attendance` when creating a Version. task-5095572
This update fixes issues that caused the Sign app guided tour to fail in different situations, including adding signature fields and handling users with saved signatures. It helps ensure the onboarding/testing tour runs consistently, reducing interruptions for users and testers.
Original PR description
Fix `sign_tour`. How to reproduce: 1. Go to tours in Odoo 2. Look up sign_tour 3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the…
Fix `sign_tour`.
How to reproduce:
1. Go to tours in Odoo
2. Look up sign_tour
3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the following screen displays )
<img width="780" height="591" alt="image" src="https://github.com/user-attachments/assets/b164c224-0e3e-4dce-97e6-89848263e59e" />
4. tour fails!
---
First commit
The `sign_tour` was failing after the conversion of the `sign.Template` client action to OWL. The standard `drag_and_drop` tour helper can no longer be used for automatic tour testing because the drop target is inside an iframe whose content is managed by PDF.js.
This commit fixes the tour by utilizing the custom helper function, `dragAndDropSignItemAtHeight`, to programmatically simulate the drag and drop action.
---
Second commit
The step "footer.modal-footer button.btn-primary:enabled" assumes that the Signature Dialog opened from its previous step ("Sign It" navigation button).
However, the "Sign It" navigation button does not always open the dialog.
If signing user (res.users) already has "sign_signature" data, the data will be automatically filled in to the Signature input.
Otherwise, the navigation button will open the Signature Dialog.
Luckily, we can see whether user has "sign_signature" data or not by checking if the <input data-item_type='signature'/> node has "data-auto_value" attribute or not.
We now skip the step if data-auto_value is set for signature.
---
Third commit
If `sign.template_sign_tour` has sign request, it means that the template might have a sign item because the `sign_tour` tour adds the Signature sign item to the template. (If user followed the tour)
When we're copying the sign template to trigger the template tour, we should not copy the sign item. User will be guided to add the sign item during the tour.
---
Note:
ci/security needs to be overriden as it was done for https://github.com/odoo/odoo/pull/134793#issuecomment-1711440188
---
opw-4752794
Forward-Port-Of: odoo/enterprise#93601
Forward-Port-Of: odoo/enterprise#91565Many-to-one selection fields now shorten long text correctly so the ellipsis is visible and fields stay aligned. This improves readability and layout consistency, including in the employee form's Private Information tab.
Original PR description
The text-truncate bootstrap class of the m2o field does not work properly as the ellipsis is not visible and create an alignment issue with the private_state_id field. This PR solves this issue which can be seen in the "Private information" tab of the employee form. Task-5078736 Forward-Port-Of: odoo/odoo#226214
The Hungarian electronic invoicing module now includes the missing SZJ product code required by official NAV XML 3.0 documentation. This helps businesses using Hungarian localization create compliant electronic invoice data without manual workarounds.
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 Forward-Port-Of: odoo/odoo#226213
10 changes
Resolved issues and error corrections
This fix prevents an installation error when the withholding tax module is installed with Indian localization demo data. It ensures the setup only uses purchase taxes that include the needed tax details, making module installation more reliable.
Original PR description
Traceback when no `repartition_line_ids` found in tax data. Steps to reproduce:- - Install `l10n_in` module with demo data. - Install `l10n_account_withholding_tax` module. Error:- ``` File /data/build/odoo/addons/l10n_account_withholding_tax/__init__.py, line 27, in _make_demo_tax tax_repartition_lines = [line[2] for line in tax_data[purchase_taxes[0]]['repartition_line_ids'] if line[2]['repartition_type'] == 'tax'] KeyError: 'repartition_line_ids' ``` Root Cause: At [1], No `repartition_line_ids` found in `tax_data[purchase_taxes[0]]`. Solution: Select only purchase taxes having `repartition_line_ids`. [1]: https://github.com/odoo/odoo/blob/9805d09dff64de835de0c764da8c6e213d6b88aa/addons/l10n_account_withholding_tax/__init__.py#L27 Forward-Port-Of: odoo/odoo#227381
This update fixes internal spreadsheet test tools so they can handle sorted data consistently. It helps Odoo's spreadsheet functionality be tested more accurately, reducing the risk of sorting-related issues reaching users.
Original PR description
Task: 4962837 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#223561 Forward-Port-Of: odoo/odoo#223011
Users can now open the spreadsheet list settings even when a saved sort uses a field that no longer exists after an upgrade. This lets them remove the outdated sorting rule instead of being blocked by an error.
Original PR description
If a list is sorted on an invalid field and you try to open the list side panel, it crashes. It should open to allow the user to remove the sorting. A list with an invalid sorting field if the spreadsheet was created in a given version, then upgrades to a version where that field has been removed or renamed. Task: 4962837 Forward-Port-Of: odoo/enterprise#92749 Forward-Port-Of: odoo/enterprise#92393
This fix prevents errors when website-related fields are configured from backend tools such as Studio. If no website price list is available in that context, Odoo now safely uses the company's currency instead, avoiding interruptions for users managing website settings.
Original PR description
Prior to this commit, the website currency was computed using the request pricelist. However, this logic assumed that the compute method could only be called from a frontend request.
However, via `web_studio`, a user can add fields linked to a website, which triggers the computation in a backend request, causing the following traceback:
```
Traceback (most recent call last):
...
File "/data/build/odoo/addons/website_sale/models/website.py", line 282, in _compute_currency_id
request and request.pricelist.currency_id or website.company_id.sudo().currency_id
^^^^^^^^^^^^^^^^^
AttributeError: 'Request' object has no attribute 'pricelist'
```
This commit fixes the issue by first ensuring that the pricelist exists and falling back to the company currency if it does not.
opw-5068581
Forward-Port-Of: odoo/odoo#227450This fixes an issue where dragging and dropping a Font Awesome icon in the HTML editor could trigger an error. Users can now move or place these icons without interruptions, improving content editing reliability.
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 Forward-Port-Of: odoo/odoo#215194
The website editor now hides the image quality slider for WebP images when the browser cannot apply WebP compression, such as Safari and iOS webviews. This prevents users from seeing a control that appears to change image quality or file size but has no effect, and keeps the option display consistent when switching image formats.
Original PR description
Scenario: - select a WebP image in the editor - change the quality with the slider Result: - the size and the image quality doesn't change Cause: Safari doesn't support HTMLCanvasElement.toDataURL() with WebP, so the image is exported in PNG instead which is lossless and doesn't support compression. Other issue: If we select in formats a WebP, then a PNG, we still see the quality option that are meant for the WebP, and inversely if we start with a PNG the quality option is hidden. Fix: Disable the quality for WebP images if this is not supported (in safari + iOS webview), and move the code to ImageTools._computeWidgetVisibility so it is updated when we change image type from/to WebP. opw-4979378 Forward-Port-Of: odoo/odoo#223707 Forward-Port-Of: odoo/odoo#223268
The automatic cleanup process now skips signed documents that are not allowed to be deleted. This prevents background errors while preserving the existing user-facing warning when someone tries to delete a protected signed document manually.
Original PR description
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment…
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment contracts to trash * Trash > Try to to delete employment contract you will see error in terminal. Similarly error will be produced by the Auto-Vacuum process when it attempts to delete it after the configured deletion delay. **Error:** `ForeignKeyViolation: update or delete on table 'ir_attachment' violates foreign key constraint 'sign_document_attachment_id_fkey' on table 'sign_document' DETAIL: Key (id)=(1164) is still referenced from table 'sign_document'.` **Root cause:** * At [1], the `sign.document` model was introduced, which prevents the deletion of sign documents. As a result, attempting to delete them due to [2] will cause an error. **Solution:** * Update the `_get_gc_clear_bin_domain` to ensure that the Auto-Vacuum process skips sign documents. * This will still throw an Validation and ForeignKey error as expected when the user tries to delete it from the GUI letting them know it cannot be deleted. [1]: https://github.com/odoo/enterprise/commit/4254542e8fb4ce3b2b9b46c624d86f7fcac8df7b#diff-deebbcccf829fd1804d145c5c7140b482801644bd948639f77caa310b18b8120 [2]: https://github.com/odoo/enterprise/blob/828d47f9ad1d5e396b074c404287799574a6d692/sign/models/sign_document.py#L44 sentry-6842360375
The Malaysian e-invoicing fields now show identity card numbers without hyphens, matching how they are typically entered in ERP systems. This avoids misleading users and helps ensure validation succeeds with the IAP server and MyInvois.
Original PR description
Hyphens are generally omitted in ERPs, and just shown on the Identity card. Putting hyphens in the placeholder is actually misleading for users, and prevents validation through the IAP server and MyInvois Ref: https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) Task [link](https://www.odoo.com/odoo/project/967/tasks/5054821) task-5054821 Forward-Port-Of: odoo/odoo#225094
Animated text and elements in website footers now display as expected when the footer uses the "Slide Over" setting. This prevents footer content from staying hidden during scrolling, improving the visual experience for site visitors.
Original PR description
Before this commit, using animation on text within the footer elements would not work if the footer was set on "slide over". The formula used to compute when to start the animation was incorrect. This commit fixes the formula. Steps to reproduce: - Set the Footer slideout to "Slide Over" - Set the Animation of an element to "On Appearance" - Save (when scrolling down, the animated element stay hidden)
This fix adds the missing SZJ product code option required by Hungary's official NAV XML 3.0 invoicing documentation. It helps companies using Hungarian electronic invoicing classify products correctly and avoid compliance or reporting issues.
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 Forward-Port-Of: odoo/odoo#226213
1 change
Resolved issues and error corrections
The Documents app now shows the Activities button in the chatter for every document, including files linked to other document-related models. This restores consistent access to activity scheduling and follow-up actions, avoiding confusion when users open certain documents such as signed PDFs.
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#93093
25 changes
Resolved issues and error corrections
Appointment booking confirmation emails will now go only to the intended followers, rather than also being sent to attendees. This avoids unnecessary or confusing notifications while keeping internal teams 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-4711415
Forward-Port-Of: odoo/enterprise#94646
Forward-Port-Of: odoo/enterprise#94456The Studio AI field setup now requires users to choose a related record type when creating Many2one or Tags fields. This prevents incomplete field configurations from being saved and avoids crashes during field creation.
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
Opening the duplicate transaction wizard directly no longer causes an error when no bank journal is linked. This prevents an avoidable interruption for accounting users and makes the view safer to access from administrative tools.
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
Mexican electronic invoice PDFs now use the same customer fiscal regime as the official XML file. This avoids confusing mismatches when invoicing a child contact whose parent company has a different fiscal regime.
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
When a new partner is created from bank reconciliation, the system now shows the correct receivable or payable button based on the statement amount rather than missing customer or supplier history. This prevents users from seeing the wrong payment action for newly created partners.
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
This fix stabilizes an automated test related to the WhatsApp command palette so clicks happen only after the interface is ready. It helps prevent false test failures, improving confidence in release validation without changing user-facing WhatsApp 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
The Barcode app now avoids showing a product description when it is identical to the product name. This reduces repeated information during receptions, making barcode operations clearer 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
Signed document emails now use each document's own name for attachments. This prevents duplicate-looking filenames and avoids adding an extra .pdf extension, making received documents clearer for customers and staff.
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
This fixes a problem that could prevent a payroll batch action from working correctly for Swiss payroll. The change restores expected payroll processing behavior by aligning the Swiss payroll customization with the standard action requirements.
Original PR description
Parameter was not added to the overriden method in switzerland Forward-Port-Of: odoo/enterprise#94461
The Documents app now consistently shows the Activities button in the chatter panel for every document, including files linked to other document types such as signing documents. This restores access to activity tracking and follow-up actions where the button was previously missing.
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#94514 Forward-Port-Of: odoo/enterprise#93093
Users without administrator rights can now open return checks without hitting an access error. This fixes a permissions issue in accounting reports so day-to-day return review works reliably for standard users.
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. Forward-Port-Of: odoo/enterprise#94759
Odoo Studio now uses an existing shared waiting utility instead of depending on a tour-only component. This avoids unnecessary loading behavior and helps keep Studio more reliable without changing the user experience.
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 Forward-Port-Of: odoo/enterprise#94786
The US check printing feature now requires the correct US accounting component. This helps ensure the feature is installed with the accounting setup it needs, reducing configuration issues for businesses using US localization.
Original PR description
It should depend on `l10n_us_account`, not just `l10n_us`. Forward-Port-Of: odoo/enterprise#94801
Fixed an issue where users editing properties on products without a category could see a blank notification instead of a helpful warning. This ensures the intended message appears, reducing confusion during product setup.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Create a new product without a category; 2. try to edit properties. Issue ----- An empty notification appears. Cause ----- The `_getPropertyEditWarning` override in `account_asset` introduced by PR odoo/enterprise#87807 doesn't return the value of the `super` call. This was introduced in a forward port as the logic to display the warning was changed in `web` in saas-18.3, and not requiring a return value in previous versions. Solution -------- Return the `super` call. opw-4980006 Forward-Port-Of: odoo/enterprise#94583
Renamed spreadsheets now keep their chosen name when users create a new spreadsheet and then return through the breadcrumb. This prevents confusion from previously renamed files appearing 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 Forward-Port-Of: odoo/enterprise#93163
This fixes a demo data setup issue when Italian Ri.Ba. payments are installed alongside Stripe expenses. The demo bank partner now handles the extra bank journal created by Stripe expenses, preventing installation errors during demos or testing.
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 Forward-Port-Of: odoo/enterprise#94437
The mobile template list in Sign now shows the template name as the main information instead of the creation date. This makes it easier for users to identify and choose the right template, while still keeping the creation date available as supporting detail.
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
This fix prevents an error when Shop Floor is set as a user’s default landing page. Users can now log in directly to the Shop Floor view without seeing a crash, improving reliability for manufacturing teams.
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#94655 Forward-Port-Of: odoo/enterprise#93043
Postpaid subscriptions now correctly set the next invoice date to the start of the billing period when the plan is configured to align periods, such as the first day of the month. This helps ensure customers are billed on the expected schedule and reduces manual corrections for subscription teams.
Original PR description
Before this commit, when a subscription whose lines were all postpaid and the subscription plan was meant to align periods to first day of the period (e.g. first of the month), there was an issue at confirmation. The next invoice date was not put at the first day of the period in that case. Forward-Port-Of: odoo/enterprise#94746
This fix removes a fragile test dependency in the website rental sales area that was causing automated runbot failures. It helps keep validation pipelines stable so future rental-related updates can be checked and delivered with less disruption.
Original PR description
runbot-error-232620 Forward-Port-Of: odoo/enterprise#94782
This fix updates automated tests so they match a newer rule for flexible employee scheduling. It helps keep planning, field service, project, and rental scheduling checks reliable without changing business features.
Original PR description
Several existing tests in `planning`, `project_enterprise`, `sale_renting_planning` and `industry_fsm` failed because the new constraint enforces that `work_entry_source`=`'calendar'` requires a `resource_calendar_id`. These tests are now adapted to use a different `work_entry_source` ('planning') for fully flexible employees.
task-5068798Accounting documents no longer show attachments from reconciled moves in the standard chatter by mistake. Those related attachments remain visible only in the bank reconciliation widget, keeping regular accounting records 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-####### Forward-Port-Of: odoo/enterprise#94661 Forward-Port-Of: odoo/enterprise#94442
Bookkeepers and other authorized users can now generate tax returns without needing permission to edit company records. The check now confirms they can view the company, preventing unnecessary blocks while still protecting company data from users without access.
Original PR description
Before:
When generating tax returns, the code checked for write access with `company.has_access('write')`. This could wrongly block users with Bookkeeper access right, who have the rights to generate returns but not to modify company records.
After:
The access check now uses `company.has_access('read')`, ensuring users with sufficient read access can generate returns while still preventing access for users without company visibility.
Forward-Port-Of: odoo/enterprise#94858
Forward-Port-Of: odoo/enterprise#94740This update fixes failing payroll localisation tests by ensuring an attendance-related overtime field is only included where the attendance module is available. This helps keep payroll localisation modules stable and reduces build failures without changing business functionality.
Original PR description
**Issue:**
The test_{xx}_contract_template_loading test fails across all localisations due to incorrect fields being passed.
**Cause:**
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution.
**Solution:**
Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module.
build_error-231680
Forward-Port-Of: odoo/enterprise#94004A display issue in subscription payment forms was corrected so the “Secured by …” label can use the intended vertical layout. This helps keep payment method information presented cleanly and consistently for customers.
Original PR description
This PR aims to fix an issue where an xpath attribute was preventing from adding `.flex-column` to the "Secured by …" label under the payment methods. task-5081875 Requires: - https://github.com/odoo/odoo/pull/226453 Forward-Port-Of: odoo/enterprise#94884
34 changes
Resolved issues and error corrections
This fixes an error in the stock forecast view when the first displayed rows contain merged cells. Business users can now review product availability forecasts for affected products without the page failing.
Original PR description
Ensure correct initialization of lastIndex and mergeLinesData to also cover the case where line 0 is part of a merge. Current behavior before PR: - `Caused by: TypeError: this.mergesLinesData[lastIndex] is undefined` - `TypeError: Cannot read properties of undefined (reading 'rowcount')` Desired behavior after PR is merged: lastIndex and mergesLinesData[lastIndex] are correctly initialized on first line too To reproduce: On a product with OnHand quantity, create multiple SO so that the first cell of the first lines are merged. <img width="1896" height="230" alt="image" src="https://github.com/user-attachments/assets/d8eb550a-e9c8-4dbf-ade7-046f83b370ae" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents Odoo from adding a log note when an internal validation error occurs before a request is sent to ZATCA. It keeps invoice chatter cleaner and avoids confusing users with response logs when no external submission actually happened.
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#226628 Forward-Port-Of: odoo/odoo#226036
This fixes an issue where fully postpaid subscriptions did not set the next invoice date to the first day of the billing period when the plan required period alignment. Businesses get more accurate billing schedules and fewer manual date corrections after confirming subscriptions.
Original PR description
Before this commit, when a subscription whose lines were all postpaid and the subscription plan was meant to align periods to first day of the period (e.g. first of the month), there was an issue at confirmation. The next invoice date was not put at the first day of the period in that case.
Rotting items in Kanban views now use the normal selected-item appearance when clicked. This makes it easier for users to see which item is selected and avoids confusion from the previous reddish background remaining visible.
Original PR description
The new Rotting feature displays rotting items with a light reddish background in Kanban view. However, they retain this color even as they are selected, which makes the selection unclear. This fix makes it so the rotting items look, once selected, the same as any other selected kanban item. task-5088907
The delivery form now shows the related sale order in the intended information area instead of beside the picking name. This prevents confusing form layout and makes sales information easier for users to find.
Original PR description
The picking form had two times the field `picking_type_code` in the arch. One next to the name, and the other in the Additionnal info tab. In 2713876dbc70d, the xpath in `sale_stock` adds `sale_id` after picking_type_code. It was placed right next the the picking name. This commit uses another field (unique this time) to place the sale_id at a more suitable place. Task: 5073894 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
POS receipts in Spain will no longer print a misleading QR code when the TicketBAI submission fails. This avoids confusing customers and helps ensure receipts only show valid compliance information.
Original PR description
Currently if the TicketBAI upload fails, a QR code is printed with the value `true`. Steps to reproduce ----- 1. Validate a POS order 2. Have a request exception occur during the TicketBAI post 3. Receipt is printed with an incorrect QR code Issue ----- `get_l10n_es_pos_tbai_qrurl()` returns None if the edi document is not accepted. This is then interpreted as `true` by the client and a QR code is printed. Solution ----- Explicitly return an empty string if the edi document is not accepted. Forward-Port-Of: odoo/odoo#227293
This fixes an issue in the website editor where background images in the banner categories section could not be replaced. The image is now applied in a way that lets users update it normally, making page customization work as expected.
Original PR description
We can't replace the image on the `grid_items` this commits applies the background image on the column to make it replaceable. task-5079842 Follow-up of task-4775259 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Payroll work entry validation no longer performs a multi-contract check that cannot apply in this version. This prevents unnecessary blocking or confusion during payroll processing while keeping the workflow aligned with supported contract rules.
Original PR description
The multi contract is not possible, so removed the check. task-5073952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225964
Fixed an issue that could cause an error when opening the options menu on an invoice section after adding product lines. This helps users continue editing invoices and related sales lines without interruption.
Original PR description
The prop doesn't exist.
Fixed an issue where users could see an empty notification when editing properties on a product without a category. The warning message now displays correctly, helping users understand what action or setup is needed.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Create a new product without a category; 2. try to edit properties. Issue ----- An empty notification appears. Cause ----- The `_getPropertyEditWarning` override in `account_asset` introduced by PR odoo/enterprise#87807 doesn't return the value of the `super` call. This was introduced in a forward port as the logic to display the warning was changed in `web` in saas-18.3, and not requiring a return value in previous versions. Solution -------- Return the `super` call. opw-4980006 Forward-Port-Of: odoo/enterprise#94583
This fix updates demo data so the Large Cabinet barcode is attached to the right product variant, ensuring product comparison examples work as expected. It also adjusts delivery demo settings so serial numbers can be created during delivery flows, keeping sample operations consistent.
Original PR description
Since variants are created for 'Large cabinet', we need to move the barcode to one of those variants. task 5089956 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a demo data installation issue when Italian Riba payments are installed after Stripe expenses. The change ensures the demo bank partner setup works even when an extra bank journal exists, making 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 Forward-Port-Of: odoo/enterprise#94437
This fix ensures Discuss actions are connected to the intended data store instead of sometimes attaching to the wrong one. It prevents unexpected errors in Discuss when actions are created from local components.
Original PR description
In Discuss, actions can be defined globally (registry) or locally (components). When defined from a component, the store must be explicitly provided. If not, the constructor falls back to the owner if it is a store, or to the `mail.store` service. The fallback condition was incorrectly grouped due to missing parentheses, so the owner was always used even when a store was given. This could result in actions being bound to the wrong store, causing unexpected errors. 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 timing issues in mail tests where message attachments could be overwritten if updates arrived before the message fully loaded. It improves the reliability of automated checks, helping reduce false failures in Odoo's validation process.
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#227032 Forward-Port-Of: odoo/odoo#226922
Renamed spreadsheets now keep their updated name when users create another spreadsheet and return through the breadcrumb navigation. This prevents confusion by ensuring the navigation label matches the saved spreadsheet name.
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 Forward-Port-Of: odoo/enterprise#93163
This fix adjusts how content is displayed inside bottom sheets so options and controls fit more reliably. It helps users interact with menus, color choices, tags, and form buttons without layout issues getting in the way.
Original PR description
This commit fixes several layout issues related to the content of the bottom sheet. task-5087158 Requires: - https://github.com/odoo/enterprise/pull/94783 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents testing tools from causing a second error when a browser connection is already unavailable after a serious failure. It helps preserve the original error details, making failures easier to diagnose and reducing confusion during automated checks.
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#227469 Forward-Port-Of: odoo/odoo#227385
Fixed an issue where users who had Shop Floor set as their default start page could see an error when logging in. The page now handles the missing app title during loading, improving reliability for manufacturing users without changing normal workflows.
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#94655 Forward-Port-Of: odoo/enterprise#93043
This update prevents an error when list views calculate totals that depend on currency information. It helps ensure grouped or summarized financial values display reliably instead of failing in some column configurations.
Original PR description
`getFieldCurrencies` is called in the `aggregates` getter, while iterating on `allColumns`, trying to find the argument found from `allColumns` in `columns`, which is a subset of it. It was leading to an undefined attribute error.
The GSTR reporting check now correctly respects when e-invoicing has been excluded. This prevents users from seeing unnecessary missing e-invoice warnings for documents that should not require them.
Original PR description
Before this commit: - missing e-invoice check was shown even when e-invoice was excluded After this commit: - check is now removed if e-invoice is excluded Ref: https://drive.google.com/file/d/1srdN9_3xcdtkA7rZ9e_F-yr9qmDOlApf/view
Tax return generation now checks whether users can view the company instead of requiring permission to edit company records. This prevents Bookkeeper users from being wrongly blocked while still keeping returns inaccessible to users who cannot see the company.
Original PR description
Before:
When generating tax returns, the code checked for write access with `company.has_access('write')`. This could wrongly block users with Bookkeeper access right, who have the rights to generate returns but not to modify company records.
After:
The access check now uses `company.has_access('read')`, ensuring users with sufficient read access can generate returns while still preventing access for users without company visibility.
Forward-Port-Of: odoo/enterprise#94740Fixed a display issue in subscriptions that could prevent the “Secured by …” label under payment methods from using the intended vertical layout. This keeps the checkout/payment experience visually consistent and avoids confusing label placement for customers.
Original PR description
This PR aims to fix an issue where an xpath attribute was preventing from adding `.flex-column` to the "Secured by …" label under the payment methods. task-5081875 Requires: - https://github.com/odoo/odoo/pull/226453
Mobile shoppers now see cleaner spacing and more consistent alignment when selecting addresses and payment methods during checkout. This reduces visual clutter and makes key checkout information easier to read on small screens.
Original PR description
*: portal, payment. This PR fixes some issues regarding the mobile design of the address selector & method payment, mainly by adapting the margins and paddings in and between the components. 1. The…
*: portal, payment. This PR fixes some issues regarding the mobile design of the address selector & method payment, mainly by adapting the margins and paddings in and between the components. 1. The 'edit' icon placement was changing if there was no badge on the card (address checkout & portal page). 2. Refine the spaces in the address & billing summary on the payment method page. 3. The label 'secured by […]' is now on its own line and centered horizontally on mobile. task-5081875 Requires: - https://github.com/odoo/enterprise/pull/94884 | | Before | After | |--------|--------|--------| | 1 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/33faf30b-3b6c-47ce-acef-12265b50df0d" /> | <img width="368" height="802" alt="image" src="https://github.com/user-attachments/assets/1432d00e-9d41-488d-b482-b64728319206" /> | | 2 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/195da2f4-9f0e-4cc8-bb4d-df55fc887216" /> | <img width="1095" height="2040" alt="image" src="https://github.com/user-attachments/assets/046f1353-df4b-4b4b-b14c-1fe4d7db85c1" /> | | 3 | <img width="704" height="538" alt="image" src="https://github.com/user-attachments/assets/e19388fe-eccd-403b-855f-2a0b2197c87a" /> | <img width="341" height="276" alt="image" src="https://github.com/user-attachments/assets/2f9b24a0-60ee-4cf2-8206-31abed565b90" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Discuss app no longer shows the compact chat hub control when there are no chat conversations meant to appear there. This removes a redundant interface element and makes the messaging experience cleaner for users.
Original PR description
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode of chat hub was solely relying on compact mode on/off, ignoring the overall condition for whether some conversations are shown in chat hub (note: conversations in compact are still considered as "shown"). This commit adds extra condition on showing compact button to take into account chat hub showing some conversations. If no conversations are shown, then the compact mode should not be shown at all. Discuss app prevents showing of conversations in chat hub (with exceptions), as this is redundant with discuss app itself. Backport of https://github.com/odoo/odoo/pull/227162 Forward-Port-Of: odoo/odoo#227190
Project template tasks now show the Project Roles field, hide the Timesheets tab, and suppress an irrelevant analytic account warning. This makes template setup clearer and prevents users from seeing options or alerts that do not apply to project templates.
Original PR description
**Steps to reproduce:** 1. Open a task in project template. **Issue:** 1) The 'Project Roles' field is missing in project template tasks. 2) The 'Timesheets' tab is still visible, even though…
**Steps to reproduce:**
1. Open a task in project template.
**Issue:**
1) The 'Project Roles' field is missing in project template tasks.
2) The 'Timesheets' tab is still visible, even though timesheets should not be
available on project templates. 3) A confusing warning about inactive analytic accounts is shown on project template tasks.
**Current behaviour:**
- role_ids field is hidden on templates.
- Timesheets tab is shown on templates.
- Warning message about inactive analytic account is shown on templates.
**Expected behaviour:**
- role_ids field should be visible on templates.
- Timesheets tab should be hidden on templates.
- Warning message about inactive analytic accounts should not be shown on templates.
**Fix:**
1) Updated the invisible condition to correctly show `role_ids` on project
templates.
2) Updated the invisible condition hide the 'Timesheets' tab for
project templates.
3) Updated the invisible condition to disabled the analytic account warning on
project templates.
**task-5079828**This fix prevents an installation error when Indian localization demo data is used together with the withholding tax module. The module now skips incomplete purchase tax data, allowing setup to complete reliably.
Original PR description
Traceback when no `repartition_line_ids` found in tax data. Steps to reproduce:- - Install `l10n_in` module with demo data. - Install `l10n_account_withholding_tax` module. Error:- ``` File /data/build/odoo/addons/l10n_account_withholding_tax/__init__.py, line 27, in _make_demo_tax tax_repartition_lines = [line[2] for line in tax_data[purchase_taxes[0]]['repartition_line_ids'] if line[2]['repartition_type'] == 'tax'] KeyError: 'repartition_line_ids' ``` Root Cause: At [1], No `repartition_line_ids` found in `tax_data[purchase_taxes[0]]`. Solution: Select only purchase taxes having `repartition_line_ids`. [1]: https://github.com/odoo/odoo/blob/9805d09dff64de835de0c764da8c6e213d6b88aa/addons/l10n_account_withholding_tax/__init__.py#L27 Forward-Port-Of: odoo/odoo#227381
This fix prevents errors when website-related fields are configured from backend tools such as Studio. If a website pricelist is not available in that context, Odoo now safely uses the company currency instead, keeping configuration workflows from crashing.
Original PR description
Prior to this commit, the website currency was computed using the request pricelist. However, this logic assumed that the compute method could only be called from a frontend request.
However, via `web_studio`, a user can add fields linked to a website, which triggers the computation in a backend request, causing the following traceback:
```
Traceback (most recent call last):
...
File "/data/build/odoo/addons/website_sale/models/website.py", line 282, in _compute_currency_id
request and request.pricelist.currency_id or website.company_id.sudo().currency_id
^^^^^^^^^^^^^^^^^
AttributeError: 'Request' object has no attribute 'pricelist'
```
This commit fixes the issue by first ensuring that the pricelist exists and falling back to the company currency if it does not.
opw-5068581
Forward-Port-Of: odoo/odoo#227450This update corrects where country-specific salary configurator steps are handled, so the standard salary flow no longer tries to use Belgian-only fields when that Belgian module is not installed. It also fixes an offer-signing issue by ensuring employee contract version changes are saved in the right order, preventing validation errors during final signature.
Original PR description
`l10n_be_hr_contract_salary` adds a bunch of fields to the salary configurator (by way of new hr.contract.salary.personal.info records). These fields can not be filled in `hr_contract_salary` as they are not present there, thus if the employee flow tour is run with just `hr_contract_salary` installed it fails as soon as it tries to fill one of these additional fields. Move the filling of the fields to `l10n_be_hr_contract_salary` extending the base tour (technically it might be possible to move just the lang and remove the rest since that's the only required field). https://runbot.odoo.com/odoo/error/232583 Forward-Port-Of: odoo/enterprise#94792
Product tiles in the online shop now show product names and prices with better visual balance. This makes catalog pages easier to scan and preserves a clearer hierarchy between the product title and price.
Original PR description
Despite "Title" and "Price" use exactly the same font-size, the latter was perceived as "bigger". Root causes: - Price is enforced bold, while Title defaults to regular (can be set bold via options,…
Despite "Title" and "Price" use exactly the same font-size, the latter was perceived as "bigger". Root causes: - Price is enforced bold, while Title defaults to regular (can be set bold via options, but that's not obvious). - They use different font families: the default title font 'InterTight' is more condensed than the font used for the Price, making the Title look smaller. This PR: - Slightly increased the Title font size. - Slightly decreased the Price font size. Combined, these changes create a ~16% size difference, ensuring hierarchy remains clear even when misleading conditions occur (custom fonts, bold titles...). Adjusting the Price alone was risky since reducing it by ~16% would have brought it uncomfortably close to the description font-size. task-5086427 --- 19.0 | Default | Bold Title | Other fonts - No bold title | |--------|--------|--------| | <img width="333" height="431" alt="image" src="https://github.com/user-attachments/assets/915ba7c0-6148-4fd9-9d00-b44c93f35e0e" /> | <img width="336" height="430" alt="image" src="https://github.com/user-attachments/assets/b509eccc-fc0c-4823-93d9-8e9fcce5b961" /> | <img width="332" height="426" alt="image" src="https://github.com/user-attachments/assets/41b680ca-b994-4b87-ad83-09640ca32699" /> | --- This PR | Default | Bold Title | Other fonts - No bold title | |--------|--------|--------| | <img width="332" height="419" alt="image" src="https://github.com/user-attachments/assets/caa1a040-93c2-41ff-95a7-c816d7ae26da" /> | <img width="327" height="418" alt="image" src="https://github.com/user-attachments/assets/afe78b8c-9045-446c-add8-1a11dfa738e4" /> | <img width="322" height="416" alt="image" src="https://github.com/user-attachments/assets/a6460b87-6af6-417c-83e8-51828c04deb5" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The color picker is now positioned correctly when used inside the project bottom sheet. This improves the mobile-style editing experience by preventing the picker from appearing in an awkward or unusable location.
Original PR description
This commit correctly repositions the color picker in the project bottom sheet. task-5087158 Requires: - https://github.com/odoo/enterprise/pull/95001 | Before | After | |--------|--------| | <img width="402" height="691" alt="Capture d’écran 2025-09-17 à 10 15 42" src="https://github.com/user-attachments/assets/1eb10eb1-68d5-4271-957a-647fcfc14910" /> | <img width="415" height="693" alt="Capture d’écran 2025-09-17 à 10 15 59" src="https://github.com/user-attachments/assets/0c52f84e-9873-4d6a-8317-79c46b043c84" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes the naming used for the bottom sheet’s dark mode styling so it is applied consistently. The change helps keep the enterprise interface visually correct in dark mode, with minimal user impact.
Original PR description
task-5087158 Requires: - https://github.com/odoo/odoo/pull/227628
This fixes a display issue in Odoo Discuss where messages containing only attachments could appear with an empty message bubble. Users will now see cleaner conversation threads without confusing blank message areas.
Original PR description
This commit fixes the issue where messages with HTML content were incorrectly considered empty. The problem is because the isBodyEmpty is not correctly computed in message model. In this case, there will be an empty message bubble shown in the thread. To reproduce the issue: 1. Go to Discuss app. 2. Send an attachment only message. 3. There should be a message bubble with empty body shown in the thread. task-5077500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mail icon in the top menu now uses the same hover behavior as the other menu items. This provides a more consistent and polished user experience without changing functionality.
Original PR description
This PR removes a custom `:hover` effect applied on the `mail` systray entry, which was not consistent with the items of the systray. task-4632971 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes toolbar popovers in the Website builder so they remain correctly positioned when the page is scrolled inside the editing frame. Users editing colors, highlights, or link text colors should now see the picker follow their work area reliably, reducing confusion during page design.
Original PR description
__Current behavior before commit:__ Some popovers that are toggled from the toolbar are not repositioned when the user scrolls in the website iframe. __Description of the fix:__ `this.__owl__.childEnv` is passed as `env` to `usePopover` such that the `POSITION_BUS` entry is included. Child env is used to avoid polluting the env of the parent component. __Steps to reproduce the issue on runbot:__ 1. Open the Website builder 2. Select some text 3. Click on the *Background Color* item (or *Highlight* or *Link* > *Custom* > *Text Color*) 4. Scroll the page The color picker popover doesn't follow the page scrolling. Forward-Port-Of: odoo/odoo#224090
7 changes
Resolved issues and error corrections
A date used in product margin testing was corrected to keep automated checks reliable. This helps prevent false test failures and supports smoother maintenance without changing user-facing product margin behavior.
Original PR description
runbot-230719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226089
The employee view group-by option now says "Today Work Location" instead of the broader "Work Location." This makes it clearer that the grouping reflects employees' current daily work location, reducing confusion for HR users.
Original PR description
Before Commit: In the employee views, the group-by filter was labeled 'Work Location', which was misleading. It suggested that the grouping was based on the `work_location_id` field, but in reality, it was grouping by today’s work location. After Commit: The group-by filter label has been updated to 'Today Work Location' to accurately reflect its actual functionality. opw-5073966 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The calendar year view now responds properly when the browser window is resized. This prevents layout issues and helps users keep a clear view of yearly calendar information across different screen sizes.
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 Forward-Port-Of: odoo/odoo#227458
The mailing creation flow now refreshes favorite templates when the selected target model changes. This helps users see the right reusable email templates for the mailing they are preparing, reducing confusion and manual work.
Original PR description
In mass_mailing, when creating a new mailing, the theme selector allows users to select base templates for their mailings. Users can also add their own model-specific templates by marking mailings as "Favorite"s, which will cause them to show up in model selectors if the template's target model matches the new mailing's target model. However, in some circumstances, changing the target model does not cause the available template mailings to update. This is due to the callback responsible for updating the templates not reading the model variable correctly, causing useRecordObserver to not being called every time it is updated. This commit fixes this issue, therefore causing favorite templates to be updated more reliably. task-5054968
This fixes inaccurate Spanish translations for Peru-specific tariff fraction entries and withholding code labels. It helps Spanish-speaking users see the correct wording in localization screens and reduces confusion when preparing compliant Peruvian electronic documents.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#92758
Survey invitation emails now correctly update their subject line when a different or edited email template is selected. This ensures users send survey invitations with the intended wording and avoids confusion from outdated subjects.
Original PR description
Description of the issue/feature this PR addresses: Fixed [previous commit] where the subject doesn't update when the template was updated. This was due to a filter in place preventing this from happening. Steps to reproduce on runbot: 1. Go to mail templates and search for Survey 2. Open the Survey: Invite template 3. Update the subject on this template 4. Open the Surveys app and select any survey 5. Click on Share and then enable send by email 6. Change the template being used 6. The subject will stay the same [previous commit]: https://github.com/odoo/odoo/commit/16a2c28c9aec307f7ce9dbed0a660b512db31f3a opw-4654411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221049
This fixes the Hungarian electronic invoicing setup by adding the missing SZJ product code required by official NAV XML 3.0 documentation. It helps ensure invoices can use the full set of recognized product code options and remain aligned with local compliance requirements.
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 Forward-Port-Of: odoo/odoo#226213
3 changes
Resolved issues and error corrections
This fixes incorrect Spanish translations for Peruvian electronic invoicing and stock-related tariff and withholding fields. Users working in Spanish will see clearer, more accurate labels, reducing confusion in local compliance workflows.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731
The Mail app no longer offers an unsupported company grouping option for alias domains. This prevents users from hitting an error when using the Group By menu, making the view more reliable.
Original PR description
Currently, an exception is generated when the user tries to group by copmany in Alias Domain. Error: `psycopg2.errors.UndefinedColumn: column mail_alias_domain.company_ids does not exist` This is because the search view of the `mail.alias.domain` model is used group by company_ids field, which is One2many. This commit will fix above issue by removing the company_ids from the group since we can't group by records with multiple record set fields. sentry-5774171054
Saving the Statement report in Studio no longer fails when there are no existing statement records to provide a currency. The system now uses the current company's currency as a fallback, helping users work with reports reliably in new databases.
Original PR description
Currently, an exception is generated when the user tries to save the "statement" report in Studio. Steps to produce an error: - Create DB without a demo and install 'web_studio' and 'account_reports' - Open Accounting and click on studio icon - Click Reports > Remove values from searchbar > Open "STATEMENT" report - edit anything > Click on save >>> Error generated This is because line [1] tries to get the display currency from the record (which is the "currency_id" field), but since without demo we do not have any record in account statement, it tries to get value from 'NewId' and no value is available in field 'currency_id'. This commit will fix the above issue by setting the current company currency as display currency if not currency available in record. [1] - https://github.com/odoo/odoo/blob/d1f20d6b71203e6bb4b428ae1bcbb0b76e739f51/odoo/addons/base/models/ir_qweb_fields.py#L512 sentry-5639835599