Monday, October 27, 2025
30 changes · 19.0
Enhancements to existing features
Reports now use a Slovenia-specific address format that omits state or region information. This keeps customer and company addresses accurate for Slovenia, where states are not used in postal addresses.
Original PR description
Update address formats on reports for Slovenia, Slovenia doesn't have states. task-5183237 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The bank reconciliation statement line no longer highlights the amount with a success-style text color. This creates a cleaner, less distracting view while reviewing statement lines.
Original PR description
This commit will remove the text success of the statement line amount. no task id Forward-Port-Of: odoo/enterprise#98044
Odoo's automated tests now report Chrome startup problems more clearly and clean up stalled browser processes. This helps maintain healthier test environments and makes failures easier to investigate without affecting end users.
Original PR description
If we can't find the devtools port file after 10 seconds we skip the test, however - this is an invisible error because the runbot does not surface skipped tests, so this specific variant should also…
If we can't find the devtools port file after 10 seconds we skip the test, however - this is an invisible error because the runbot does not surface skipped tests, so this specific variant should also have a warning (also the skip from not finding a chrome executable) - if chrome started but got stuck before it managed to create the port file we don't `stop` the chromebrowser as it never finished starting, however this means we leave a chrome running in the void a `user_data_dir` littering the machine / vm's tempdir So improve the handling of that bit. Also have chrome write its stderr to a file (in the `user_data_dir`) so we can log that out in case it contains useful information as to why chrome didn't finish booting. While at it backport the spawn changes from #206574 for consistency and simplicity: we don't need to test the platform for every single tour and the indirection makes updating the `Popen` parameters unnecessary complicated. Forward-Port-Of: odoo/odoo#232879 Forward-Port-Of: odoo/odoo#232612
This update adds test coverage to ensure Indian export invoices without a Letter of Undertaking and with tax-inclusive pricing calculate the taxable base correctly. It helps prevent invoice total mismatches in electronic invoicing scenarios.
Original PR description
Add test for export without LUT and price included tax, but base should be equal to invoice total. Forward-Port-Of: odoo/odoo#231943 Forward-Port-Of: odoo/odoo#231614
The Peppol integration now follows OpenPeppol’s preferred capitalization across user-facing labels. It also removes the Peppol status from the customer invoice list view, reducing visual clutter while keeping the underlying Peppol functionality available elsewhere.
Original PR description
1. Align naming PEPPOL -> Peppol. This is the directive from OpenPeppol for few years already in all their communications. 2. Remove the PEPPOL status from the `account.move` list view. task-none (FP feedback for point 2)
Resolved issues and error corrections
This fixes a crash that occurred when users expanded a Spanish VeriFactu document view. The unnecessary message panel was removed because this document type does not support it, making the view open reliably.
Original PR description
The system will crash with error when user clicks on expand button. **Error:** `AttributeError: 'l10n_es_edi_verifactu.document' object has no attribute '_get_thread_with_access'` **Cause:** - `l10n_es_edi_verifactu.document` does not inherits ['mail.thread', 'mail.activity.mixin'] and used chatter in it's form view. - In this PR, removed `<chatter/>` from view. Already fixed for master here: https://github.com/odoo/odoo/pull/231477 **sentry-6792833694** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231739 Forward-Port-Of: odoo/odoo#231601
Documentation and clarification updates
This pull request adds the signed individual Contributor License Agreement for the contributor jeevanism. It helps Odoo verify contribution rights and keep the project’s legal records complete.
Original PR description
this is to support and verify this PR [here ](https://github.com/odoo/odoo/pull/233145) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
There seems to be a bug in Weblate causing incorrect line wrapping of escaped characters, like `\"`. This bug results in a corrupt PO file because it escapes the `"` character that is supposed to end the string. We manually fix it here, while waiting for a fix in Weblate.
Original PR description
There seems to be a bug in Weblate causing incorrect line wrapping of escaped characters, like `\"`. This bug results in a corrupt PO file because it escapes the `"` character that is supposed to end the string. We manually fix it here, while waiting for a fix in Weblate.
This update fixes visual glitches in list rows used for sections, subsections, and product lines. Users will see clearer section separation, fewer duplicate borders during drag-and-drop, and more consistent pricing and hover styling in accounting and sales screens.
Original PR description
If we drag a row, there is a double border bottom under the `.o_list_record_remove`. This is due to the selector removing the border bottom being applied only on `.o_data_cell` since it's not a data-cell. This PR apply it on the td instead to be more generic. Sections and subsection's design was updated in https://github.com/odoo/odoo/commit/520bb2ff8eb165e4a9389db6300192f9b4a05dfd but the differentiation was too light. It also introduces issue: - Double border on subsection on drag - Empty tr having the main section border - Tax Incl. prices not receiving price styling - Combo lines were animated on hover but they are not draggable - Fix section hover not being applied in the quotation templates - Avoid long section name being cropped too early - Focus-within state applying wrong color on even sections task-5125867 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
French FEC imports now use a valid debit account when handling rounding differences. This prevents import issues caused by a recent chart of accounts change where the previously used account became an account group rather than a usable account.
Original PR description
This commit:https://github.com/odoo/odoo/commit/0ebf80b613d229ef5fb07ea97d406496f9df6254 change the COA of french localisation and the account 6850 was change to be an account group instead. This commit will change the debit account code used to put an existing one instead. no task-id Forward-Port-Of: odoo/enterprise#97283 Forward-Port-Of: odoo/enterprise#96972
The user preferences screen no longer shows an incorrect timezone mismatch warning when the computer and Odoo timezone match but use a half-hour or 45-minute offset. This prevents unnecessary confusion for users in regions with non-whole-hour timezones.
Original PR description
**Steps to reproduce** - Set your machine timezone to one ending in :30 or :45 - Open your user preferences and chose the same timezone Issue: the timezone mismatch icon is displayed. **Cause** `.toFixed(0)` rounds to the nearest integer. **Change** Always round down the hour part. opw-5123025 Forward-Port-Of: odoo/odoo#232813 Forward-Port-Of: odoo/odoo#230274
This fixes a migration problem that could occur when the Manufacturing Work Orders app had been removed. Quality checks now reference the correct quality control form, helping upgrades complete reliably without unnecessary module dependencies.
Original PR description
Before this commit: The view `quality_point_routing_view_form` from `mrp_workorder` was used as inherit_id in `quality_mrp`. When `mrp_workorder` was manually uninstalled, `quality_mrp` caused a…
Before this commit:
The view `quality_point_routing_view_form` from `mrp_workorder` was used as inherit_id in `quality_mrp`. When `mrp_workorder` was manually
uninstalled, `quality_mrp` caused a missing view reference while migration.
```python3
Traceback (most recent call last):
File "/home/odoo/src/odoo/19.0/odoo/tools/convert.py", line 559, in _tag_root
f(rec)
File "/home/odoo/src/odoo/19.0/odoo/tools/convert.py", line 423, in _tag_record
f_val = self.id_get(f_ref, raise_if_not_found=nodeattr2bool(rec, 'forcecreate', True))
File "/home/odoo/src/odoo/19.0/odoo/tools/convert.py", line 543, in id_get
return self.model_id_get(id_str, raise_if_not_found)[1]
File "/home/odoo/src/odoo/19.0/odoo/tools/convert.py", line 547, in model_id_get
return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found)
File "/home/odoo/src/odoo/19.0/odoo/addons/base/models/ir_model.py", line 2232, in _xmlid_to_res_model_res_id
return self._xmlid_lookup(xmlid)
File "/home/odoo/src/odoo/19.0/odoo/tools/cache.py", line 98, in lookup
return self.lookup(*args, **kwargs)
File "/home/odoo/src/odoo/19.0/odoo/tools/cache.py", line 155, in lookup
value = self.method(*args, **kwargs)
File "/home/odoo/src/odoo/19.0/odoo/addons/base/models/ir_model.py", line 2225, in _xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: mrp_workorder.quality_point_routing_view_form
```
After this commit:
The inherited view is changed to use `quality_control.quality_point_view_form_inherit_quality_control` to avoid dependency on `mrp_workorder`.
OPW: [5112724](https://www.odoo.com/odoo/project/70/tasks/5112724)
Traceback group: https://upgrade.odoo.com/odoo/tbg/2174This fixes a crash that could occur when viewing an invoice preview while Stripe payments are enabled. The preview now selects the correct invoice frame, so users can reliably view invoices without interruption.
Original PR description
Before this commit: - when stripe is enabled, the invoiceHTMLEl is set to the stripe iframe instead of the invoice one leading to a crash. after this commit: - the invoice iframe is correctly retrieved by using it's ID. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where inventory shipping settings could not be saved after SMS text confirmation was turned off. The system now only requires an SMS confirmation template when SMS text confirmation is actually enabled, preventing unnecessary save errors.
Original PR description
Due to this [commit](https://github.com/odoo/odoo/commit/889848aa65b474c3f495e65b75409068b6ef172a), The field ```stock_sms_confirmation_template_id``` is visible only when…
Due to this [commit](https://github.com/odoo/odoo/commit/889848aa65b474c3f495e65b75409068b6ef172a), The field ```stock_sms_confirmation_template_id``` is visible only when ```stock_confirmation_type``` is set to sms and ```stock_text_confirmation``` is set to True. However, the field ```stock_sms_confirmation_template_id``` is marked as required whenever ```stock_confirmation_type``` is set to sms, regardless of whether ```stock_text_confirmation``` is enabled. As a result, when saving the record with ```stock_text_confirmation``` unchecked, the required field ```stock_sms_confirmation_template_id``` remains invisible and unset — which causes a missing required field error during record save. Steps to reproduce: [Video](https://drive.google.com/file/d/1cpL6ie2zSDgW5mYGqOH5h-CpzxppXzFi/view) 1. go to settings - inventory - shipping 2. check Text Confirmation , set stock_confirmation_type = sms 3. uncheck Text confirmation 4. save the changes - To fix this issue, need to just add condition of ```stock_text_confirmation``` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures each payslip checks and uses its own available template instead of assuming one template applies to all payslips. This helps prevent payroll document generation issues when a template is unavailable or varies between payslips.
Original PR description
Since the function that will return the template can return None in some cases, we need to check for each payslip what is the template. Forward-Port-Of: odoo/enterprise#97639
The Barcode app now rounds the quantity shown on the fulfill button, avoiding confusing long decimal values when processing receipts with decimal quantities. This makes inventory scanning screens clearer and helps users trust the displayed quantities during warehouse operations.
Original PR description
**Issue** In the Barcode application, floating-point values may display excessive decimals. **Steps to reproduce** - Open the Inventory app. - Create a receipt with a decimal quantity (e.g. 10.54)…
**Issue** In the Barcode application, floating-point values may display excessive decimals. **Steps to reproduce** - Open the Inventory app. - Create a receipt with a decimal quantity (e.g. 10.54) and mark it as To Do. - Open the Barcode app, open the corresponding receipt, and click the Edit button. - Increment the number of scans several times until you notice too many decimal digits (if you choose 10.54, you can test with 3). **Cause** A floating-point precision error occurs in the getter [`quantityToFulfill`](https://github.com/odoo/enterprise/blob/4b08734124c3bc84f7d95d170b39e9909e20d66b/stock_barcode/static/src/widgets/digipad.js#L55C9-L55C50), which is rendered directly [in XML templates](https://github.com/odoo/enterprise/blob/e8063141b33a9a8aa51d1ce94a66af313b2c1c89/stock_barcode/static/src/widgets/digipad.xml#L20C25-L21C89) without rounding. **Solution** Round the displayed value in the `quantityToFulfill` getter in the same manner than in [barcode_model](https://github.com/odoo/enterprise/blob/d4e5b69c7ea87fba3f2a5204ed6939b97879e4a8/stock_barcode/static/src/models/barcode_model.js#L99-L103). opw-5039796 Forward-Port-Of: odoo/enterprise#97475
This fixes Odoo's web test tooling so custom mock server responses are returned exactly as intended instead of being repackaged. It helps keep automated tests more accurate and reduces false failures when teams test special response scenarios.
Original PR description
Before this commit, when an 'onRpc' handler would return a 'Response' object, it would still be wrapped in a JSON-RPC payload (under the 'result' key) if the "content-type" header specified that it was a JSON-RPC. However, if a 'Response' object is returned by the handler, it usually means that the response should be that object as-is, as it was created with the desired final parameters. This commit ensures that 'Response' values are returned as they are, instead of being wrapped in a JSON-RPC payload object. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232844 Forward-Port-Of: odoo/odoo#232614
A spelling mistake in the Web Studio field creation options was corrected from “Multine” to “Multiline.” This improves clarity for users configuring views and avoids confusion when selecting field types.
Original PR description
This commit fixes a typo in one of the newFields name: 'Multine' -> 'Multiline' Forward-Port-Of: odoo/enterprise#97771 Forward-Port-Of: odoo/enterprise#97713
This fixes a website shop test that could fail when multiple websites are configured with different domain settings. The change makes the test use the intended default website, improving reliability without changing customer-facing behavior.
Original PR description
Why? ==== -When a domain value is set, get_current_website may return a different website ID than the default one. In this case, the domain of the other website is False, causing a failure when trying to check if a boolean exists within a string. Fix === - Use directly the default website. runbot-233387 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The checkout test for Ecuador address flows now waits until the page interaction is ready before moving to billing details. This helps avoid false failures in automated checks, improving confidence in website sales quality without changing customer-facing behavior.
Original PR description
This commit add wait for intreaction to be ready before moving to billing step which render billing container conditionally depending on toggle from interaction. runbot-231718
This fixes an issue where the showcase email template could lose or misrender its separator after saving in Email Marketing. Recipients should now see the intended visual layout, helping marketing emails look consistent and professional.
Original PR description
Problem: When adding the `s_showcase` template in Email Marketing and saving, the separator is not properly rendered in the received email. Solution: Backport fix from `web_editor/convert_inline`: https://github.com/odoo/odoo/commit/7e3e6c1f42d97c2bb6830ed59dbec3a3b745d0c0 opw-5077992 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232565 Forward-Port-Of: odoo/odoo#230773
The accounting settings no longer show the "Enable Auto Transfers" option because it pointed to an old module name and did not work when users tried to save it. Users who need this capability can still install the Account Transfers app directly, avoiding a confusing setting that appeared to do nothing.
Original PR description
### Steps to reproduce: - Install "account_accountant" - Go in the settings - Search for "Enable Auto Transfers", tick the option - Save - The option is not ticked ### Cause: This option is supposed to install the module for Account Transfers. The option field is called `module_account_auto_transfer`. It's supposed to install the module `account_auto_transfer`. But this module was [refactored in 19.0](https://github.com/odoo/enterprise/commit/77c248981c9e1ccbb5d4c88a0915a231f040df84) and renamed `account_transfer`. So the settings can't find the module to install, nothing happen, and the option stays the same. ### Solution: Hide the option in 19.0. To respect the stable, we cannot rename a stored field. This is not a very important loss, the users can install the module `account_transfer` directly from the Apps application. Give the variable the correct name (`module_account_transfer`) in master. opw-5149342
The Point of Sale automated test was adjusted to skip an unreliable closing step that often failed when many add-ons were installed. This reduces false failures in validation runs and helps teams get faster, more dependable feedback.
Original PR description
fix runbot error on generic pos tour runbot-233183
Email buttons for published products now send internal users to the product record they can access, instead of always opening the public shop page. This prevents confusion for staff using product chatter emails while keeping public and portal users on the website shop experience.
Original PR description
### Issue: Mail action redirects only to shop page, even though the user has internal access to the product page. #### To reproduce: 1- Create a db with website_sale installed. 2- Create a product and publish it. 3- In the product page chatter, send a message to an internal user 4- In received email, click on `View Product` button 5- As you see the shop page opens This is reproduced after #202555 Inside `_get_access_action`, if the product is published, we are returning `website_url`. We can add a check to do that only if user is portal or public. opw-5155281 Forward-Port-Of: odoo/odoo#233030 Forward-Port-Of: odoo/odoo#231961
This update makes automated tests for two-factor authentication more stable by removing timing-sensitive steps and waiting for clearer success signals. It helps reduce false test failures under heavy load, improving confidence in release validation without changing the user-facing feature.
Original PR description
- Remove timing-sensitive check on modal closed, wait for the row to be deselected instead (this assumes the list view has been reloaded and can be interacted with again, whereas the security check modal is closed before we actually run the action) (?). - Replace odd and somewhat brittle `run()` functions by equivalent (or better) triggers, with or without ~~you~~ clicks. - Replace a few waits on modals closed by waits on the corresponding notification appearing, this is likely more reliable. Locally this looks to be making the totp tours a *lot* more reliable under load, hopefully this also works on runbot: this aims to solve a jumble of uncommon non-deterministic errors: - https://runbot.odoo.com/odoo/error/161302 - https://runbot.odoo.com/odoo/error/107908 - https://runbot.odoo.com/odoo/error/161302 - https://runbot.odoo.com/odoo/error/233265 - https://runbot.odoo.com/odoo/error/233513 Forward-Port-Of: odoo/odoo#232986 Forward-Port-Of: odoo/odoo#232958
When an employee adds more of a lunch item they already have in their cart, Odoo now updates only the pending "To order" entry. Previously, already ordered lunch lines for the same product could be increased by mistake, which could lead to incorrect lunch quantities.
Original PR description
**Issue**
When a user has two instances of the same product in their lunch cart, one with state "To order" and one with state "Ordered", and places a new order for that product, both the "To order" and "Ordered" records have their quantity incremented. Only the "To order" record should be updated.
**Steps to Reproduce**
- Add two lunch orders for the same product: one with state "To order" and one with state "Ordered".
- Place a new order for the same product.
- Observe that both records ("To order" and "Ordered") have their quantity incremented.
**Root Cause and Changes Made**
The _find_matching_lines method does not restrict the search to orders with state "new" ("To order"). As a result, it returns all matching records for the product, regardless of their state. When update_quantity is called, it updates the quantity for all these records.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#228712This fix prevents chat and live chat from failing when a channel member is missing profile details that are not needed for the current workflow. The system now safely falls back to an existing "unnamed" label, helping users continue conversations without interruptions.
Original PR description
Sometimes, channel members are received without their partner/guest because it's not important in the flow. However, some part of the JS code assume the persona is always set, resulting in errors. This PR guards access to persona when computing the member name, a fallback to "unnamed" is already in place. task-5184408 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#233134 Forward-Port-Of: odoo/odoo#233056
The complete contact address now includes the second street address line when it is filled in. This ensures email templates and other uses of the complete address show the full customer or partner address accurately.
Original PR description
Issue: If a user with `street2` wants to utilize the `contact_address_complete` field, the `street2` field is not included. Purpose of this PR: To include the `street2` field in the `contact_address_complete` Steps to reproduce on Runbot: install contact fill in a contact's `street2` create email template that uses the `contact_address_complete` `street2` is omitted from the complete address opw-5186218 Forward-Port-Of: odoo/enterprise#98103
The Discuss meeting view now uses larger action buttons that better match the spacious video/avatar layout. This makes call controls easier to see and use during meetings, improving the overall user experience.
Original PR description
Buttons has same size as other discuss actions, which are sized for dense UI like discuss app with message list and composer + panels. In meeting view, the UI is essentially streams / avatar cards. Buttons below need to be sized accordingly, i.e. bigger, which this commit does. Part of Task-5190261 Before <img width="1281" height="899" alt="before" src="https://github.com/user-attachments/assets/3a808149-02c1-41de-b7ef-d2c7681f06c3" /> After <img width="1279" height="902" alt="after" src="https://github.com/user-attachments/assets/3a8e6ff8-6ab2-4d50-a71d-e435e63e28d1" />
A contributor has added their signed Contributor License Agreement for the Odoo project. This records the required legal approval so maintainers can accept future contributions from this person.
Original PR description
Adding my individual Contributor License Agreement (CLA) signature required for contributing to the Odoo project. Current behavior before PR: - The CLA was not signed, which blocks merging of any contribution PRs. Desired behavior after PR is merged: - My CLA signature will be recorded, allowing Odoo maintainers to merge my future contributions. File added: `doc/cla/individual/apurvwajage.md` I confirm I have read and agree to the Odoo Contributor License Agreement (CLA).