Friday, August 22, 2025
34 changes · saas-18.4
Enhancements to existing features
This update adds automated test coverage for key restaurant point-of-sale workflows, including floor management, bill splitting, tips, tables, courses, and orders. It helps reduce the risk of regressions in everyday restaurant operations without changing user-facing behavior.
Original PR description
This commit introduces HOOT test coverage for the POS Restaurant module: - Added tests for primary models: restaurant.table, restaurant.order.course, and patched pos.order - Added tests for patched pos_store.js. - Added component tests for SplitBillScreen, FloorScreen and TipScreen. task-4945629 Forward-Port-Of: odoo/odoo#220375
Automatic reconciliation rules now avoid overly long shared names when duplicate names are detected. Instead, the system keeps names usable by adding a number in parentheses, making bank reconciliation rules easier to identify and manage.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/e9ab2ae2876970c66c41fa56de70511af24471c1 we change the way the name of automatic reco model are made. But the solution we choose are a bit naive. If the common substring is huge then the reco model is unusable. Since we are stuck with the constraint, the solution we choose is to add a number in parentheses to avoid duplicate. task-5031337 Forward-Port-Of: odoo/enterprise#92888
Resolved issues and error corrections
Removing the last bank account from a contact or vendor no longer triggers an error. This helps accounting users update partner bank details smoothly without being blocked by a traceback.
Original PR description
On removal of bank_ids from res_partner, When there was only one bank_id is left, when removing the last bank_ids from res_partner, a traceback appeared. `None` being passed to `duplicate_bank_partner_ids` and no null check was executed. We now avoid passing `None` **Steps to recreate**: 1. Go to Vendor 2. Create a Contact 3. Go to Accounting Tab inside contact 4. Create bank account 5. Save contact 6. Remove the bank account from that contact Task [link](https://www.odoo.com/odoo/project/967/tasks/4976409) task-4976409
Code cleanup and technical improvements
This update improves automated guided tests by waiting until a signature image is actually present before continuing. It helps avoid false test failures where a signature appeared missing simply because it had not finished loading yet.
Original PR description
In this commit, we add a helper for tour to ensure the canvas selector contains pixel before continue the tour. This is quite useful to check that the signature has been loaded before continuing the tour, otherwise we get the "missing signature" error. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A flaky automated test for public chat channels was corrected so repeated runs target the right messages and avoid unnecessary reload steps. This helps keep quality checks stable and reduces false failures during release validation.
Original PR description
This tour had many race conditions in the past and keeps having them. Some of them are actually due to the fact the tour is ran twice, but the selectors completely ignore this fact, leading to unexpected results. The message body is now updated before the second run to avoid confusion and the selectors are adapted to always target the message of the current run. Also remove the reload for emojis as they are showing immediately after being added. Also remove the useless comments that makes the test twice as long to read and to understand. https://runbot.odoo.com/odoo/runbot.build.error/230901 Forward-Port-Of: odoo/odoo#223839 Forward-Port-Of: odoo/odoo#223807
This fixes how accounting entries are paired during reconciliation when multiple partners are involved. Debit and credit lines are now matched by partner first, reducing confusing hidden partial reconciliation amounts and improving accounting consistency.
Original PR description
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Accounting / Journals / Journal Entries" - Create the following MISC entries in this order: 1) | Account | Partner | Debit | Credit…
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Accounting / Journals / Journal Entries" - Create the following MISC entries in this order: 1) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner A | 1000 | 0 | | Account X | Partner A | 0 | 1000 | 2) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner B | 1001 | 0 | | Account X | Partner B | 0 | 1001 | 3) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner C | 1002 | 0 | | Account X | Partner C | 0 | 1002 | 4) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner C | 0 | 1002 | | Account X | Partner C | 1002 | 0 | 5) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner B | 0 | 1001 | | Account X | Partner B | 1001 | 0 | 6) | Account | Partner | Debit | Credit | | ------------------ | --------- | ----- | ------ | | Receivable Account | Partner A | 0 | 1000 | | Account X | Partner A | 1000 | 0 | - Go to "Accounting / Accounting / Journals / Journal Items" - Select the 6 created lines linked to the Receivable Account - Reconcile them **Issue:** The 6 lines are fully reconciled, but when checking the amounts of the partial reconcile records (not visible in the UI), the debit and credit amounts are matched by their actual order. So, the first debit line of 1000 is matched with the first credit line of 1002, which results in a residual credit of 2 that is then matched with the second debit line of 1001, which leads to a residual debit of 999 and so on. This generates weird amounts in the partial reconcile records. **Solution:** In the case there are several lines with different partners, the lines can be sorted by partner to try to match the lines with the same partner together. opw-449356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223815 Forward-Port-Of: odoo/odoo#223512
This update adjusts internal email-related tests so they pass consistently when an optional file-detection library is present. It helps keep Odoo's automated quality checks stable without changing business features or user workflows.
Original PR description
Those tests are failing when python-magic is installed. Since 26f9c82b99 Odoo > saas-18.4 has this lib as a requirement and comes with appropriate fixes. This commit adapts some test from 17.0 up to saas-18.4 to also work when the python-magic lib is installed. Forward-Port-Of: odoo/odoo#223780 Forward-Port-Of: odoo/odoo#223609
Fixes an issue in the website form builder where disabling a list option could remove its saved identifier. This prevents duplicate options from being added by mistake and keeps form configuration consistent.
Original PR description
Since [1] the id of list items is lost when clicking on the enable/disable value of builder list. This commit only updates the id when an actual value is modified. Steps to reproduce: - Install website_mass_mailing - Drop a form - Add a field for "Mass Mailing" - No new option can be added, as expected - Un-default the first value => That value could then be added again, and the option value that contained the record id was lost inside the form. [1]: https://github.com/odoo/odoo/commit/db8be44e1361898af659a28b488b2288ff5b66fc task-4367641
Employee presence tooltips now show the intended work location label, such as “Office”, instead of a more detailed internal location description. This helps HR users and managers quickly understand where an employee is working without confusing or misleading wording.
Original PR description
…icon_display task-4933881 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes an automated website popup test more reliable by allowing extra time for the popup to appear before it is closed. It helps reduce random test failures in the release process without changing customer-facing website behavior.
Original PR description
Before to this commit, the ‘closing s_popup with the X button updates the invisible elements' panel test failed sometimes on runbot. We think boostrap.js takes longer than normal to display the popup. Solution: We're going to increase the waiting timeout so that the crash doesn't recur. We've taken this decision because the problem is very specific and probably link to bootstrap.js. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Paymob payment module icon has been adjusted so it displays correctly without distortion. This is a small visual fix that improves the appearance of the module in Odoo apps and settings.
Original PR description
This commit adapts the module icon to prevent distortion and ensure correct display. task-5031863 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures custom readonly fields on invoice lines remain non-editable when users work with invoices. It prevents accidental changes and unnecessary dirty-state prompts caused by checkbox fields being toggled despite being marked readonly.
Original PR description
Steps to reproduce ================== - Go to invoices - Open studio - Click on the invoice lines - Edit the list view - Add a new field of type checkbox - Mark that field as readonly - Exit studio - Open an invoice - Click on the checkbox => The form is marked as dirty and the checkbox is toggled Cause of the issue ================== https://github.com/odoo/odoo/commit/291518a7e7708690d183b9d1ca53c84d0c56ad90 If the state is not in ["cancel", "done", "posted"], the fields are never in readonly Solution ======== Only do this for the "name" and "product_id" fields opw-4917471 Forward-Port-Of: odoo/odoo#222849 Forward-Port-Of: odoo/odoo#222595
This fix prevents automated test builds from failing when URL parameters reference tests or suites that are not installed. Missing excluded IDs are now ignored quietly, while relevant missing included IDs can still be logged for developers.
Original PR description
Before this commit, URL test/suite IDs were warned in the console if they didn't match any test/suite registered by the test runner. This is an issue for Runbot which runs sub-builds with the same URL parameters regardless of the installed addons, which repeatedly fails such builds. This commit changes the warning to a regular log, so that these builds stop failing, while still allowing a developer to get the information that an ID has been removed/ignored. runbot [230082](https://runbot.odoo.com/odoo/runbot.build.error/230082) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223242
Fixes an issue where changes to custom button colors or border width were not immediately reflected in the page preview. This helps users see their styling choices accurately before saving, reducing trial and error when editing website content.
Original PR description
When adjusting custom button colors or border width, the in-page preview is not updated. This commit updates the in-page preview upon color preview and border width modification. task-4367641
Updated the Point of Sale loyalty gift card test data so the customer name is unique and can be found reliably during automated checks. This helps prevent false test failures and supports more stable validation of loyalty flows.
Original PR description
This commit make sure that the partner name is unique and can be retrieved in the PoS opw-230992 Forward-Port-Of: odoo/odoo#223656 Forward-Port-Of: odoo/odoo#223387
The Italian localization now includes the required 0% EU service export tax with the correct legal note. This helps businesses issue compliant invoices for EU service exports without manually adjusting tax wording.
Original PR description
Description of the issue this commit addresses: The export tax for services is missing in the italian localization. It's required because it has a different legal note than the usual 0% EU tax. --- Desired behavior after this commit is merged: The italian localization has a 0% EU S for exported services in EU with the right legal note. --- task-4715771 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223620 Forward-Port-Of: odoo/odoo#205521
This fix ensures copied databases with the Greek EDI module cannot accidentally interact with live external tax or invoicing services. It helps support teams investigate issues safely without affecting production data or customers.
Original PR description
This commit adds the missing neutralization necessary for the l10n_gr_edi module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. [1] odoo#203428 Forward-Port-Of: odoo/odoo#223714 Forward-Port-Of: odoo/odoo#223536
Downloading the ADEME database in ESG now takes users directly to the emission factors page instead of leaving them on the database configuration page. This makes the workflow clearer after a successful download and adds logging to help monitor how long the ADEME data fetch takes.
Original PR description
Steps to reproduce: - go on configuration -> databases in ESG - download the ademe database What's happening: A success message is displayed, but the user stays on the database page. What's expected: The user is redirected towards the factor emissions page Additional fix: Small addition of an extra logger in the ADEME download process to allow checking the time needed to fetch the data from the ADEME website Task [link](https://www.odoo.com/odoo/project/967/tasks/4751902) task-4751902 Forward-Port-Of: odoo/enterprise#87058
The automated walkthrough for field service reports was adjusted so it follows the correct steps more reliably. This helps keep quality checks stable and reduces the chance of false failures during testing.
Original PR description
In this commit, we fix tour by splitting
{
isActive: ["auto"],
trigger: 'body:not(.modal-open) nav.o_main_navbar, button[name="action_generate_new_template"]',
run: "click",
},
in two distinct steps
For this, we use isActive key of a step that allow to activate the step with conditions.
We take advantages of this commit to add expectUnloadPage where it is required.This update fixes an automated test that could fail when run with Python 3.13 because sorting behavior produced a different order. It helps keep payment-related quality checks reliable across supported technology versions without changing business functionality.
Original PR description
**Issue:** "test_partner_account_batch_payments_with_journal_entry" is failing when executed in a Python 3.13 env. **Cause:** Sorting the account move lines on a tuple doesn't necessarily result in the same order between version 3.13 and previous ones. runbot-230794 Forward-Port-Of: odoo/enterprise#92357
This fix ensures Sendcloud shipping information is read correctly when filtering delivery options. It prevents an invalid index error, helping users manage Sendcloud-related delivery workflows without interruption.
Original PR description
Before this commit: `sendcloud_shipping_id` is of type `Object`. Trying to index the field was causing `invalid index error`. After this commit: Value is accessed correctly with the key `id`. opw-5011642
Bank transaction labels are now handled more safely when matching reconciliation rules. This prevents special characters such as plus signs, slashes, dots, or asterisks from disrupting the matching process, helping reduce missed or incorrect matches.
Original PR description
This commit will change the way we normalise the label. We now firstly check that the label is a structure reference and if so we don't escape the numbers. Otherwise, we do an escape of the label and the numbers. Escaping the label will allow to avoid case where we use character like * or . that would mess up the match regex. Example: '+++344/0660/16938+++' will be \\+\\+\\+344\\/0660\\/16938\\+\\+\\+ 'This is a test' will be 'This\\ is\\ a\\ test' task-5023114 Forward-Port-Of: odoo/enterprise#92616
FedEx delivery requests now send province or state codes in the shorter format FedEx expects, without the country prefix. This helps prevent shipping label or rate requests from failing for countries where standard province codes include the country code, such as Sweden.
Original PR description
Before this commit: The province code for some countries includes the country code too. FedEx expects a two letter code in the request. For example, the standard code for Stockholms lan is "SE-AB" and the code FedEx expects is "AB". After this commit: The country code is excluded from the province code. opw-4984662 Forward-Port-Of: odoo/enterprise#92650
Products that are neither sellable nor rentable are no longer shown when adding items to a standard sales order. This prevents sales teams from accidentally selecting unavailable products and adds test coverage to keep the behavior correct.
Original PR description
This PR adds a test for the explained case which was solved by: - PR https://github.com/odoo/enterprise/pull/91701 - Commit…
This PR adds a test for the explained case which was solved by: - PR https://github.com/odoo/enterprise/pull/91701 - Commit https://github.com/odoo/enterprise/commit/a2bbf33f5e787420389f1550d8e66b7b6995dc75 #### Issue: Not rentable product were displayed in sale order product dropdown list whether they were salable or not #### Step to reproduce: - install Sale, Rental, - create a product no Sales, no Rental - create a new sale order #### Current behavior: - your product appears in the dropdown list to add a product #### Expected behavior: - your product shouldn't appear in the dropdown list to add a product #### Cause: - From the commit [d5f72c2](https://github.com/odoo/enterprise/commit/d5f72c201bf0642f2f47315f06468528268251a3) domain for rental are computed on back end. - sale_renting module override the `_domain_product_id()` method. It add a OR to the domain on `'rent_ok' = order_is_rental`. Therefore, if one create a sale order outside of the rental app, every not rentable product is displayed. #### Solution: - This domain should apply only if `order_is_rental` is enabled. Therefore add a AND to check if `order_is_rental` is enabled. opw-4966082 Forward-Port-Of: odoo/enterprise#91210
A test was added to ensure spreadsheets containing an Odoo List can be frozen and shared from Documents without triggering a crash. This helps protect users from interruptions when sharing spreadsheet-based reports, while the functional fix is handled in the related community change.
Original PR description
Steps to reproduce: - Install documents_spreadsheet (enterprise) - Create a spreadsheet with an Odoo List - Open the document view - Select the spreadsheet - Click on "Freeze and Share" => Boom This commit contains only the test, the fix is done in the community PR. Task: 5025331
This fix prevents one country's Intrastat reporting rules from unintentionally affecting another country's export data. Businesses using multiple localizations can rely on more accurate country-specific Intrastat report outputs.
Original PR description
Previously, it was possible for the _get_exporting_dict_data from a localization to change the data of another localization. Forward-Port-Of: odoo/enterprise#92892 Forward-Port-Of: odoo/enterprise#92830
This update makes an automated test for embedded PDF handling work consistently whether an optional file-detection library is installed or not. It helps keep the Documents Accounting area stable across different deployment and testing environments without changing user-facing behavior.
Original PR description
The test `test_embedded_pdf` fails when the magic lib is installed. modified cherry-pick of 22cbdb477 Adapted to work with or without the lib as the lib is not required in version < 19.0. Forward-Port-Of: odoo/enterprise#92791 Forward-Port-Of: odoo/enterprise#92778
Users can now clear the partner field after setting an account on a bank statement line. This prevents incorrect partner information from being stuck on accounting entries and supports more accurate bank reconciliation.
Original PR description
Before this commit when doing a set account on a bank statement line, and then editing this line to remove the partner was not working. This commit will allow the user to remove the partner when editing the line. task-4984569 Forward-Port-Of: odoo/enterprise#91422
The Danish RSU module has been renamed to better match the naming used by other Denmark-related modules. This is a small consistency fix that should make the module easier to recognize and manage, with no expected change to business functionality.
Original PR description
This commit will edit the name of the module to be consistent with the other denmark modules no task id Forward-Port-Of: odoo/enterprise#92759
This update fixes an issue in the Belgian salary contract workflow. It helps ensure salary offers are processed correctly, reducing potential errors for HR teams using Belgian payroll features.
Original PR description
Forward-Port-Of: odoo/enterprise#88918
Booking updates sent through Google Reserve now keep all existing slot information while adding the party size. This ensures Google receives correctly formatted booking details, reducing the risk of failed or incorrect appointment updates.
Original PR description
The controller incorrectly modified the given "slot" to only contain the party size key. Instead, it should update the information to add this key next to the existing ones, and in turn return a properly formatted slot to Google. Task-3083812 Forward-Port-Of: odoo/enterprise#92839
A test setup was corrected by removing an unnecessary timesheet approval permission that was not required for the manufacturing work order accounting checks. This prevents failures when the app is tested on its own, improving reliability of the release process without changing user-facing behavior.
Original PR description
on the test `test_mrp_aa_employee_without_account_rights` the user was created with the group `hr_timesheet.group_hr_timesheet_approver` which is not needed and was causing the test to fail on Single app test as this module does not depend on hr_timesheet. This commit removes this group from the user creation. runbot-231137 Forward-Port-Of: odoo/enterprise#92747
This fixes an issue where tax report grouping could fail when expected tax group information was missing. The correction helps ensure accounting reports continue to show the right tax information without interruption.
Original PR description
The previous domain wasn't working as country is a recordset and not an id. Forward-Port-Of: odoo/enterprise#92829
This update removes leftover code from a previous e-invoicing refactor for Japan. It has no expected impact on users, but keeps the codebase cleaner and easier to maintain.
Original PR description
We left the function `_get_tax_totals_vals_list` in the UBL refactor, but it isn't called from anywhere. This commit cleans it up. task-none