Wednesday, July 23, 2025
25 changes · saas-18.4
Enhancements to existing features
The UAE localization now treats import VAT more accurately by setting the import tax to 5% excluded from price, excluding it from tax closing entries, and posting it to a dedicated accrued customs account. This helps businesses align accounting records with UAE VAT treatment for imports.
Original PR description
Adjust import tax to align with UAE VAT treatment of imports: configure original tax as 5% EX ONLY, disable tax closing entry, assign to new account 201021 Accrued Customs, and update description. task-4907671 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Custom color picker controls can now be adjusted with keyboard arrow keys, including hue, opacity, saturation, and brightness. This improves accessibility and makes color selection easier for users who rely on keyboard navigation or assistive technologies.
Original PR description
*: html_builder, html_editor To add keyboard support on colorpicker sliders as well as on the saturation / brightness area, this commit not only sets proper roles, focus, aria attributes, but also has to invert the order of the hue slider, so that pressing ArrowUp actually increases the value of the hue, and ArrowDown decreases it. Otherwise, the `aria-valuenow` is inconsistent with the key pressed. Note that there is no official aria role for multi-dimensional sliders such as the colorpicker area. I fell back on `role="application"` and explicit `aria-label`s and `aria-roledescription`. Finally, just like any other button would do, when you click on a slider pointer, it is not visually focused, but the next navigation key should be listened to by the pointer. i.e.: - click on the opacity slider, then press an arrow => it should update the opacity. - click on the hue slider, then press Tab => it should focus the opacity slider. task-4879833
The IoT connection flow no longer requires a database call to sign long-polling request payloads. This helps point of sale continue operating offline when connected to IoT hardware, reducing interruptions during network outages.
Original PR description
As it prevents the pos from working offline, we remove the call to the db to sign the payload of the request. Enterprise PR: odoo/enterprise#90624 Forward-Port-Of: odoo/odoo#219865
Website editors can now see file size information for regular images and background images directly in the website builder. This helps teams spot heavy visuals more easily and make better choices for page performance.
Original PR description
In the website builder, add the file size information on images and background images. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale no longer needs an extra database check to process IoT longpolling messages. This helps stores keep using connected IoT devices more reliably when internet or server connectivity is limited.
Original PR description
As it prevents the pos from working offline, we removed the call to the db to get a payload signature. Community PR: odoo/odoo#219865 Forward-Port-Of: odoo/enterprise#90624
Resolved issues and error corrections
Point of Sale no longer asks staff to choose a loyalty program every time they add a product linked to multiple standard loyalty offers. The prompt is now shown only when the choice is actually needed, such as for gift cards or eWallets, making checkout smoother and less repetitive.
Original PR description
When clicking on a product that is linked to multiple loyalty programs you are prompted to select one of them everytime you add one item via the ui. Steps to reproduce: ------------------- * Create 2 loyalty programs activated when buying a certain product * Open PoS and click on the product > Observation: You will get a prompt everytime you click on the product Why the fix: ------------ The variable `selected_program` is actually only usefull if the program selected is gift card or an eWallet program. So we filter it before and only prompt when the output will be usefull. opw-4187037 Forward-Port-Of: odoo/odoo#218170
The point of sale customer display now avoids errors when an IoT Box is unreachable by using an alternative connection method when needed. This helps cashiers keep checkout screens working smoothly and reduces interruptions during sales.
Original PR description
We fixed the customer display not opening and displaying a traceback when the Iot Box was not reachable, by calling the action via iot_http, fallbacking on websocket when needed. We also removed the "customer display with IoT Box" logic from the PoS to the module pos_iot. Enterprise PR: odoo/enterprise#90657
This update prevents users from creating duplicate Italian electronic invoicing document type codes. It avoids invoice confirmation failures caused by duplicate document type records, improving reliability for Italian localization workflows.
Original PR description
**Issue** : The computation of `l10n_it_document_type` fails when multiple `l10n_it.document.type` records share the same code. This can happen if a user duplicates an existing Document Type or…
**Issue** : The computation of `l10n_it_document_type` fails when multiple `l10n_it.document.type` records share the same code. This can happen if a user duplicates an existing Document Type or creates a new one with the same code, causing `get()` on the grouped recordset to return multiple results.
**Traceback :**
```python
File "/home/odoo/odoo/codebase/odoo/17.0/odoo/fields.py", line 3252, in convert_to_cache
raise ValueError("Wrong value for %s: %r" % (self, value))
ValueError: Wrong value for account.move.l10n_it_document_type: l10n_it.document.type(1, 23)
```
**Steps to Reproduce:**
1. Install the `l10n_it_edi_ndd` module.
2. Go to Customer Invoices and create a new invoice.
3. Set a Document Type, then confirm the invoice.
4. Open that Document Type and duplicate it.
5. Create another invoice without setting a Document Type, then confirm it.
observation: you will receive a traceback for wrong value error
**Solution :** This fix adds a check to ensure that the `code` field remains unique across all `l10n_it.document.type` records.
opw - 4902513
related upgrade pr : https://github.com/odoo/upgrade/pull/8032
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#218662
Forward-Port-Of: odoo/odoo#217155Resetting an invoice to draft no longer removes its existing payment reconciliation. This prevents invoices and bank statement lines from becoming unmatched and avoids extra manual reconciliation work, with related checks improved for cash-basis scenarios and access-rights consistency.
Original PR description
Since [^1], we allow reconciliation in draft. To allow that, a mechanism has been added to break the reconciliation when changing certain fields rather instead. However, resetting to draft was still…
Since [^1], we allow reconciliation in draft. To allow that, a mechanism has been added to break the reconciliation when changing certain fields rather instead. However, resetting to draft was still breaking the reconciliation, which is counter productive. Reproduce: * create an invoice * create a bank statement line with the same amount * reconcile both in the bank reco widget * reset the invoice to draft => The invoice is not marked as paid anymore, the statement line still has the amount on the receivable account, we need to reconcile manually both lines. This commit also fixes 2 related issues: * the test `test_caba_undo_reconciliation` was actually not generating a caba move. Now, it is checking that we unreconcile what we need, when we need, and that it was reconciled in the first place. * the function `_reconciled_by_number` was not using `sudo`, leading to lines potentially missing from the returned set. However, the logic using it needed to see the whole picture. Instead, we now do the search in `sudo`, while keeping the initial access rights for reading the field if necessary. task-4873072 [^1]: https://github.com/odoo/odoo/commit/404fbaeeeb16a65900c60f47967d6d79373c6213 Forward-Port-Of: odoo/odoo#214363
Cashiers with minimal permissions in Point of Sale can no longer access the refund controls from the order list. This helps businesses enforce employee access limits and reduces the risk of accidental or unauthorized refunds.
Original PR description
Employee with minimal rights should not be able to refund a ticket an order. Steps to reproduce: ------------------- * Install pos_hr module * In the PoS settings set any employee as a cashier with minimal rights * Open a PoS session with that employee * Create a new order and validate it * Go to the order list screen * Select the order you just validated > Observation: The numpad is displayed and you can refund the order Why the fix: ------------ We hide the numpad for employees with minimal rights, so they cannot refund an order. We also moved the condition to the right module in pos_hr instead of point_of_sale. opw-4778508 Forward-Port-Of: odoo/odoo#217160
This fixes an issue where changing text size in website editor snippets could be ignored when another size style was already present. Users can now reliably apply the intended font size, making content editing more predictable.
Original PR description
Description of the issue this PR addresses: - Snippet templates include structure like `<h2 class="h3-fs">Some Text</h2>`. - When trying to change the font size of selected text inside such elements, the editor falsely detected the correct size and skipped applying the new one. Current behavior before PR: - The editor only checked if any known font size class was present on the closest block element. - As a result, users could not apply a new font size if a different font size class already existed. Desired behavior after PR is merged: - The editor now checks whether the exact font size class being applied is already present. - This ensures that applying a new font size works as expected, even when other font size classes are present on ancestor elements. task-4855154 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Today filter in Timesheets and the Attendance report now correctly limits results to records from the current day. This prevents users from seeing unrelated entries when reviewing daily work or attendance data.
Original PR description
In this bug, the today filter in timesheet is not written correctly. To reproduce the bug: 1- Create a db with timehseet installed 2- In timesheet app, and add records with different dates 3- Add Today filter 4- The filtered records are not only from today 5- The bug is also reproducible in attendance report In the fix, the filters which are used both in timesheet and report, are fixed. opw-4936780 Forward-Port-Of: odoo/odoo#219692
FacturX e-invoices now include the expected XML information for external validation tools and use the correct payment code for SEPA direct debit. This helps businesses avoid validation errors when sending compliant electronic invoices to customers or authorities.
Original PR description
### Issue: There are several issues with the XML of FacturX. ### Steps to reproduce: - Create a partner with a direct debit mandate - In the Accounting tab of the partner select "FacturX" as eInvoice…
### Issue: There are several issues with the XML of FacturX. ### Steps to reproduce: - Create a partner with a direct debit mandate - In the Accounting tab of the partner select "FacturX" as eInvoice format - Create an invoice with this partner, pay with SDD, confirm - Send to FacturX - Verify the PDF with https://www.portinvoice.com/ 1 Missing namespaces 3. In the XML the code for the payment means does not adapt to the payment method: 42 (Payment to bank account) and not 59 (SDD) ### Cause: 1. The namespaces are not there ([doc](https://fnfe-mpe.org/factur-x/factur-x_en/)). 3. We always input "42" as payment mean ### Solution: 1. Added namespaces `xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"` and `xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"` 3. Added the code "59" for SDD, a lot of codes could be added but this commit only handles this one Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4907827) opw-4907827 Forward-Port-Of: odoo/odoo#219804 Forward-Port-Of: odoo/odoo#217763
This fix prevents users from seeing access errors when editing activity dates in a multi-company setup. It ensures the mail module checks whether linked users are internal without relying on cached user lists that may include users from other companies.
Original PR description
To reproduce: ============= - Install project, voip - Create a second company - Switch Company - Open "Project / Tasks / All Tasks" - For the first task with activity and assigned to admin, edit the…
To reproduce: ============= - Install project, voip - Create a second company - Switch Company - Open "Project / Tasks / All Tasks" - For the first task with activity and assigned to admin, edit the activity and change the date Problem : ========= problem in this line : https://github.com/odoo/odoo/blob/saas-18.2/addons/mail/models/res_partner.py#L259 it's returning users from other companies due to cache pollution. In the ORM, the first time you access an X2many (partner.user_ids), we read it with the access rights of the current user (env.user), depending on the sudo flag (env.su), and put the result in the cache. This cached value remains valid until the end of the transaction. When you access partner.user_ids a second time with a different user and/or sudo=False, the cached value is used, which may return records that you cannot access with the current user. This is an ORM inconsistency that rd-framework-py want to fix, but it is not a small change. This issue has existed since v13.0 Solution : =========== browse partner.user_ids in sudo mode PR test link : =========== https://github.com/odoo/enterprise/pull/88999 opw-4778418 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212769
Project To-Do activity counts now use each user's own timezone when deciding whether tasks are future, due today, or overdue. This prevents mismatched activity counts between the notification menu and the detailed activity page for users in timezones different from the database server.
Original PR description
User timezone was not being used for activity states and thus the future, today, and late activities would be inaccurate. They were being computed with CURRENT_DATE through SQL which is based on the timezone that the SQL server is in. This would lead to there being a period of some hours based on the user timezone where the actual activities page that you click into and the systray showing different counts of activity states. For example, on our Odoo production database, activities that SF office members create on projects that were for tomorrow would show today after 5pm and when clicking on the today activities there would be nothing until midnight. Using the user timezone in order to compute what today is for them, then using this in the SQL query fixes this issue. This is the same behavior as the compute_state for the state field in mail.activity. opw-4893182 Forward-Port-Of: odoo/odoo#219769 Forward-Port-Of: odoo/odoo#218713
Internal links now behave correctly whether or not the Website app is installed. This prevents links from opening a 404 page or incorrectly sending users to the website homepage, improving navigation reliability in apps like To-do and Project.
Original PR description
reproduction 1: 1. create a db without website installed 2. In todo, create a link with internal link 3. click on the link, the redirection is 404 not found reproduction 2: 1. create a db installed…
reproduction 1: 1. create a db without website installed 2. In todo, create a link with internal link 3. click on the link, the redirection is 404 not found reproduction 2: 1. create a db installed website and project 2. In todo, create a link with internal link pointing to a project task 3. click the link, it always redirects to the website homepage ref pr: https://github.com/odoo-dev/odoo/pull/4465 Before this commit: With the reference PR, we introduced `navbar_link_popover` for the website menu. When the website is in editing mode, if the URL points to a page created by the website, the URL is opened in edit mode (e.g., the website edit button is unfolded). However, this functionality should only be available when the website module is installed. Additionally, the redirection condition need to be refined to apply only to website pages. After this commit: The navbar-related link code has been moved to the website module, and the link popover is patched with the `onClickForceEditMode` method. This ensures that the functionality is only applicable when the website module is installed. Note that, in link_plugin, only the added code related to menu item and nav_bar is moved, the more generalized code is kept as it extends the link plugin to support other use cases outside of html_editor. task-4879511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale customer displays now open more reliably even when the IoT Box cannot be reached directly. The system uses an alternate connection method when needed, preventing error screens and keeping checkout operations smoother.
Original PR description
We fixed the customer display not opening and displaying a traceback when the Iot Box was not reachable, by calling the action via iot_http, fallbacking on websocket when needed. We also removed the "customer display with IoT Box" logic from the PoS to the module pos_iot. Community PR: odoo/odoo#219917
Fixes an issue where moving linked tasks in the project Gantt view could fail when a related task was missing a start date or deadline. Project teams can now reschedule dependent tasks more reliably without interruption.
Original PR description
Currently, an error occurs when rescheduling a task's date from the Gantt view. **Steps to Reproduce:** - Install the `project_enterprise` module. - Go to `Settings` and enable `Task Dependencies`. -…
Currently, an error occurs when rescheduling a task's date from the Gantt view. **Steps to Reproduce:** - Install the `project_enterprise` module. - Go to `Settings` and enable `Task Dependencies`. - Go to `Projects`, create a `project`, and add `two tasks` (Task 1 and Task 2) under that project. - Open `Task 2` > `Blocked By`, click `Add a line`, and select `Task 1`. - Return to the `project's tasks`, switch to `Gantt View`, and choose `Auto-Reschedule (Keep Buffer)` as the rescheduling method. - `Double-click` on any date in the unassigned block, select `Task 1`, and `drag it to next date`. `TypeError: '>' not supported between instances of 'bool' and 'datetime.datetime'` This error occurs when rescheduling a task to a forward date, and a dependent task has no start date. When the parent task is rescheduled, the system attempts to reschedule the dependent task as well, but since it has no start date, an error occurs [1] due to condition at [3]. The same error occurs when rescheduling a task to a backward date, and a depends on task has no deadline date. When the child task is rescheduled, the system attempts to reschedule the parent task as well, but since it has no deadline date, an error occurs [2] due to condition at [3]. **Steps to Reproduce for backward rescheduling:** - Follow the first 5 steps from the forward rescheduling steps. - Remove the Deadline from Task 1, if it has. - Double-click on any date in the unassigned block, select Task 2, and drag it to previous date. This commit ensures that the incorrect condition is removed from [3]. Now, it checks whether the record is a candidate for moving, and both forward and backward rescheduling are handled safely. [1]- https://github.com/odoo/enterprise/blob/aaad26c28fd4bc1e94e99717076ecbcf74f5f357/project_enterprise/models/project_task.py#L1209 [2]- https://github.com/odoo/enterprise/blob/8cc8443dc11c176b55f7eb3efa07db5edb7e6b0c/project_enterprise/models/project_task.py#L1221 [3]- https://github.com/odoo/enterprise/blob/302f1a5e82ffbf383d37f003820fe780654fae2f/project_enterprise/models/project_task.py#L1203 sentry-6738017612
Bank statement reconciliation has been optimized to run much faster on large accounting databases, reducing the risk of slow imports or timeouts. This improves reliability for finance teams processing high volumes of bank statement lines, with benchmarks showing CSV import reconciliation completing about 3.5 times faster.
Original PR description
[FIX] account_accountant: refactor and optimize _try_auto_reconcile_statement_lines() In big databases, this method called on large recordsets of statement lines would take too much time, or worse:…
[FIX] account_accountant: refactor and optimize _try_auto_reconcile_statement_lines() In big databases, this method called on large recordsets of statement lines would take too much time, or worse: timeout. This is mainly because the 2 SQL queries are doing too complex searches and hence are badly optimized by the query planner. To solve that, * We search for reconciliable accounts outside the queries to avoid a join * We add a trigram index on statement_line.payment_ref and only use ILIKE operations for reference matching so that it can be used * Instead of using complex and costly regexp_split, we search for matches by splitting account_move_line.ref on ' - ' * We move some logic in python, amount matching, rather than in sql * We don't try anymore to match on amounts found in the payment_ref Additionnally, * The algorithm now treats the statement lines with and without partner the same for reference matching, but lines without partner are just ignored for the amount matching, as it's way too dangerous * Bug of with_prefetch, pre-loading the ids of a wrong object, has been fixed * We revert the patch https://github.com/odoo-dev/enterprise/commit/da52bc70cd745f3e9f7a0539528c84aa47b98cc5 because it was only a temporary measure while the time was back to acceptable * The test_matching_rules_with_empty_aml_ref, irrelevant, was removed Benchmark --------- Importing a csv file of 200 statement lines, on a database of 21M account.move.line, and thus triggering the culprit function, takes (hot timings): | Before | After | Speed-up | |--------|-------|----------| | 185 s | 52 s | ~3.5x | see https://github.com/odoo/odoo/pull/218642 Forward-Port-Of: odoo/enterprise#90077
This fix restores the ability to import CSV bank statement files from the Accounting dashboard. Users can complete bank statement imports without encountering an error caused by missing import result information.
Original PR description
file.csv content: ```csv amount 1 2 ``` Steps: - Install `account_bank_statement_import_csv` - Open accounting/dashboard - Click on 3 dots on Bank - Import file - Choose file.csv (previously created) - Import - Traceback Since https://github.com/odoo/enterprise/pull/34249, a new class has been added to `ImportAction`: `BankStatementImportAction`. This class contains an override of the `exit` method that recalls `super.exit()` without including the potential arguments. This worked until recently, when https://github.com/odoo/odoo/pull/211187 finally included logic using this argument: `resIds` So now we received this domain which causes the crash ```js ["id", "in", undefined] ``` A solution would be to always call the super with arguments received. opw-4943902
Manufacturing orders created with Barcode now generate all expected stock transfers when three-step manufacturing is enabled, including component picking and finished product storage. This helps keep warehouse operations complete and consistent, and also ensures by-products are correctly linked to the manufacturing order.
Original PR description
Task: 4558792 If 3-step manufacturing is enabled, the creation of an MO should also create 2 stock transfers: "Pick Components" and "Store Finished Product". Currently, when an MO is created via Barcode, only SFP is created. The problem boils down to the newly created stock move not having a `warehouse_id` field set, which causes Odoo to miss the required stock rules. This PR fixes the issue by fetching the `warehouse_id` field in XML, from where it is later passed to JS and back to Python's `create` method. Additionally, by-product moves for MOs created via Barcode were not correctly associated with the MO. This issue was solved by passing the missing fields from XML to Python. Forward-Port-Of: odoo/enterprise#90451 Forward-Port-Of: odoo/enterprise#83895
Users with approved temporary lock date exceptions can now reset eligible tax closing entries without being blocked by the standard tax lock date. The change also respects stricter hard lock rules and parent company lock settings, reducing incorrect errors while preserving compliance controls.
Original PR description
Current behavior before commit: When resetting a closing entry from a tax-locked period, the system raises a lock date error, even if the user has a temporary lock date exception allowing them to…
Current behavior before commit: When resetting a closing entry from a tax-locked period, the system raises a lock date error, even if the user has a temporary lock date exception allowing them to bypass the restriction. Root Cause: The method only checks the company's permanent tax_lock_date, without considering temporary user-level exceptions. As a result, even if an exception is granted, the system still raises a lock error based on the permanent date. Additionally, the hard lock date (which overrides all other lock types and doesnt allow exceptions) and parent company lock date are ignored. Fix: Replaced the direct lock date check with _get_lock_date_violations(), which: - Correctly considers user-specific temporary lock date exceptions. - Returns violations based on effective lock rules (including hard lock). - Provides a more generic error message. Steps to reproduce: - Use a tax report with carryover values (e.g. Belgian VAT return, line 81). - Post a refund using a tax that maps to the carryover (e.g. 21% M). - Generate a closing entry. - Set the company’s tax_lock_date to a date covering the refund. - Grant a temporary lock date exception to the user, covering the same date. - Try to reset the closing entry → Lock date error is raised (incorrectly). opw-4715100 Forward-Port-Of: odoo/enterprise#87814 Forward-Port-Of: odoo/enterprise#85337
Referral refusal notifications are now sent only after the refusal is confirmed, preventing premature updates if HR closes the wizard. The notification is also attached to the correct referrer user records, avoiding unnecessary email processing slowdowns.
Original PR description
## [PERF] hr_referral: Send refusal notification to referrer's users Description ----------- Following https://github.com/odoo/enterprise/commit/764f9b6f513c90eb79935d9e8469989ea704b61b,…
## [PERF] hr_referral: Send refusal notification to referrer's users Description ----------- Following https://github.com/odoo/enterprise/commit/764f9b6f513c90eb79935d9e8469989ea704b61b, `_send_notification` will not attach the message on the `hr.applicant` itself, so a `model` was provided. But due to a missing `res_id`, `message_notify` will set both `model` & `res_id` to `False` since both are not specified. This leads to the creation of a `mail.message` with no `res_id` and no `model` (as `self` is an empty `mail.thread` recordset). This leads to a performance regression when mail references need to be computed to attach to the notification in `_notify_by_email_get_base_mail_values`, due to the missing `model` and `res_id` of the message. This commit attaches the notification to the referrer's users instead, providing its `model` and `res_id`. Reference --------- opw-4943488 --- ## [FIX] hr_referral: Do not send notif when opening the refuse wizard Description ----------- Currently, when opening the refusal wizard for an applicant, a call to `archive_applicant` is made. However, there is an override of it in `hr_referral` to send a notification for the applicant's refusal, and closing the `referral_state`, even though the applicant may have not been provided a reason for refusal, and the HR can simply close the wizard instead of confirming it. This commit removes the override of `archive_applicant` and moves its logic into `action_refuse_reason_apply` which is called when the wizard is confirmed. Reference --------- opw-4943488 Forward-Port-Of: odoo/enterprise#90563 Forward-Port-Of: odoo/enterprise#90309
Fixes how Mexican electronic invoices report cuota taxes, such as fuel-related charges, so amounts are based on quantity and the configured rate. This helps ensure invoices match tax authority expectations and reduces reporting errors; related tests were also reorganized to make future validation easier.
Original PR description
**[FIX] l10n_mx_edi: Fix wrong management of Cuota taxes** Cuota taxes are wrongly reported. For example, a GAZ cuota tax expressed as 4.6555 per quantity has to be reported as TasaOCuota=4.6555 Base=quantity Importe=TasaOCuota * Base Currently, it's reported as: TasaOCuota=abs(tax_amount_currency/base_amount_currency) Base=base_amount_currency Importe is recomputed as TasaOCuota * Base instead of tax_amount_currency task-id: 4761658 **[IMP] l10n_mx_edi: Make test suite a bit less messy** Having a single test testing all taxes combination, testing 100% discount on it + IEPS breakdown and global invoice makes the whole thing difficult to debug. Also, it forces the generation of files that are not always relevant. Forward-Port-Of: odoo/enterprise#89658 Forward-Port-Of: odoo/enterprise#88357
This update prevents errors that could block users from connecting or setting up bank accounts in online synchronization. It restores the expected connection flow so businesses can continue linking bank accounts for automated banking features.
Original PR description
After [this PR](https://github.com/odoo/enterprise/pull/81894) was merged, we are encountering below errors. **Issue 1:** An error occurs when attempting to connect a new bank account. **Step to…
After [this PR](https://github.com/odoo/enterprise/pull/81894) was merged, we are encountering below errors. **Issue 1:** An error occurs when attempting to connect a new bank account. **Step to produce:** - Install the `account_online_synchronization` module and open `invoicing`. - Go to: `Configuration > Banks > Add a Bank Account`. - `Add new bank > Enter Details > Connect`. **Error:** `TypeError: AccountOnlineLink.create_new_bank_account_action() takes 2 positional arguments but 3 were given` **Root cause:** It appears that removal of `@api.model` was missed in [this PR](https://github.com/odoo/enterprise/pull/89932) during the forward-port process, leading to this error. **Fix:** This commit removes `@api.model` so that the method behaves like a recordset method, as done in [this PR](https://github.com/odoo/enterprise/pull/81894). **Issue 2:** An error occurs when attempting to Setup Bank. At [1], when an exception occurs, the method returns an empty list, and this displays the `Setup Bank` button. Upon clicking the button, an error occurs. [1] https://github.com/odoo/enterprise/blob/443d7d303ecb3bfcba6ac865cf0185b5070b6b9d/account_online_synchronization/models/account_journal.py#L88-L97 **Error:** `ValueError: Expected singleton: account.online.link()` **Root Cause:** At [2], the JS method `fallbackConnectBank` was passing only one positional argument instead of two. However, the corresponding Python method at [3] requires two positional arguments. [2] https://github.com/odoo/enterprise/blob/443d7d303ecb3bfcba6ac865cf0185b5070b6b9d/account_online_synchronization/static/src/components/bank_configure/bank_configure.js#L67-L71 [3] https://github.com/odoo/enterprise/blob/443d7d303ecb3bfcba6ac865cf0185b5070b6b9d/account_online_synchronization/models/account_online.py#L418 This commit updates the JS method `fallbackConnectBank` to pass two positional arguments as required by the python method at [3]. sentry–6745764054,6388425767 Forward-Port-Of: odoo/enterprise#90225