Daily updates from Odoo
Thursday, January 16, 2025
33 changes · 18.0
Resolved issues and error corrections
Batch invoice sending now uses clearer wording when invoices are prepared manually, reducing confusion for users who expected downloads. Italian electronic invoicing users can again download all FatturaPA XML files in one batch, and related error messages now show understandable text instead of internal keys.
Original PR description
## Commit 1: ### [FIX] account: Batch invoice sending when partner on "Download" Context: In 18.0, all batch/multiple invoice sending are processed asynchronously, we never directly download the…
## Commit 1: ### [FIX] account: Batch invoice sending when partner on "Download" Context: In 18.0, all batch/multiple invoice sending are processed asynchronously, we never directly download the generated PDF/XML files. The sending method that is used depends on what is set on the partner. Problem: If you set your partner to "Download" by default, in the batch Send & Print, it will display "You are about to send: x invoice(s) Download". While it's actually not downloading, only generating. In 18.1 we changed this to "Manual" which is better but doesn't go well in a sentence. Solution: Let's align everything to "Manually" in batch sending to avoid confusion. Before:  After:  opw-4315079 ## Commit 2: ###[IMP] l10n_it_edi: Add possibility to download in batch XML FatturaPA Context: In 18.0, when sending invoices in batch, we never download a zip of all generated files (PDF, XML) since we always process invoices asynchronously with the partner's sending method set on the partner's form. Problem: It's no longer possible to retrieve all XML Fattura PA at once. Solution: Add a button under the "Print/Download" button to download them all. opw-4315079 ## Commit 3: ### [FIX] l10n_it_edi: Fix error message display in Print & Send The italian error dict does not comply to the default format expected by the generic Print & Send. It displays the key of the error instead of the message. Before:  After:  task-no
The POS session chatter now shows the expected opening amount based on the previous session's closing balance, rather than a manually edited value. This keeps cash opening records and displayed differences accurate for store staff and managers.
Original PR description
- Resolved issue where the "expected opening" amount in the POS session chatter incorrectly displayed the manually modified amount instead of the previous closing balance. - Adjusted the sequence of setting `cash_register_balance_start` to maintain consistent chatter messages with accurate deltas. task-id: 4471816 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
Users trying to process invoices with an invalid certificate private key will now see a clear error instead of a technical crash. The message identifies the problematic key, helping users or support teams resolve invoice signing issues faster.
Original PR description
When the private key has an issue if we attempt to sing an invoice we may get a traceback in the frontend. We can instead show an error and include the key that's failing. Example traceback if the…
When the private key has an issue if we attempt to sing an invoice we may get a traceback in the frontend. We can instead show an error and include the key that's failing.
Example traceback if the key is invalid:
```
File "/home/odoo/src/odoo/18.0/addons/certificate/models/key.py", line 206, in _sign_with_key
private_key = serialization.load_pem_private_key(base64.b64decode(pem_key), pwd)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/base64.py", line 83, in b64decode
s = _bytes_from_decode_data(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/base64.py", line 45, in _bytes_from_decode_data
raise TypeError("argument should be a bytes-like object or ASCII "
TypeError: argument should be a bytes-like object or ASCII string, not 'bool'
```
Steps to reproduce:
1. Install l10n_sa_edi
3. Alter the key in a way that makes it fail to load, e.g. upload a garbage text file as a key (note the error in the warning)
2. Make an invoice to ARAMCO partner
4. Click in the `Process now` link at the top of the invoice
We get the traceback.
This issue was seen during upgrades due to improper migration of SA keys (already solved). Still the UX here is suboptimal. This patch proposes to show an error that can help users understand the issue. We already show the error in the keys management interface, but the user working in invoices may be unaware of the issue with the key.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prUsers can now reverse certain payroll-related journal entries without encountering an error caused by missing currency information. When no specific currency is available, the system uses the company currency so the reversal process can continue reliably.
Original PR description
Currently, an error was occurring when a user tried to reverse a journal entry. Step to reproduce: --- - Enabled payroll entries in Payroll > Configuration > Settings. - Created a new employee and its corresponding contract in payroll. - Computed the payslip, generated draft journal entries, and created a payment. - In accounting check in payments by payslip, currency id will not get fetched. - Make a reverse entry. Traceback: --- ValueError: Expected singleton: res.currency(). This is because at [1] does not have ``currency_id`` in self so it does not link any currency with account payment register This commit will fix the above issue by providing default company currency when currency is not found in self. [1] - https://github.com/odoo/odoo/blob/0583db332efdc884975da1a074c91981d2865c9d/addons/account/wizard/account_payment_register.py#L972 sentry-6207053954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customer reports now correctly show only the serial-numbered products that were actually returned. This prevents non-returned items from being mislabeled, improving inventory traceability and customer service accuracy.
Original PR description
**Steps to reproduce:** In Inventory > Settings > Traceability, enable Lots & Serial Numbers - Create a product P1 tracked by unique serial number - Update on-hand quantities: 2 x P1 - Create a quotation with 2 units of P1 - Deliver products (assign the two serial numbers) - Return only 1 product - Go to the Customer view, click Lot/Serial Numbers, and remove all filters. **Issue:** When returning just one product from a delivery containing multiple products, all products in the picking appear as returned. **Expected:** Only the product that was actually returned should be marked as returned. **Cause:** The logic that sets `has_return` relies solely on the `return_id` field, incorrectly marking all items in the picking as returned if one item is returned. opw-4417716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users with limited sales permissions can now log timesheets on assigned billable tasks linked to a sales order without being blocked by an access error. This keeps timesheet entry working while preserving the existing sales permission setup.
Original PR description
### Steps to reproduce: - Create a project and make it billable - Create a task in this project and assign it to a user that has Own Documents access in Sales - Set a customer for this task and SO - Using the user that has been assigned to the task try to timesheet something - Notice an access error will be triggered ### Cause: This is happening because when timesheeting we are checking the so_line analytic distribution https://github.com/odoo/odoo/blob/18.0/addons/sale_timesheet/models/hr_timesheet.py#L216 and since the user doesn't have access for the so_line we are getting this access error. ### Fix: Use sudo() for this check to give the user access for this field opw-4338754
Fixes an issue where the Discuss call sidebar could fail when a participant session was missing expected membership information. This improves reliability for users viewing call participant cards and avoids disruptive error screens.
Original PR description
Since [1], the session getter for the sidebar cards assumes that channelMember is always defined on rtcSessions, this could cause tracebacks. [1]: https://github.com/odoo/odoo/pull/190050
Recruitment application creation now checks a candidate's company before linking records, preventing errors when similar candidates exist in another company. It also allows applications to link to candidates without a company, helping teams process incoming applications more reliably.
Original PR description
Before this commit, the creation of an applicant though `message_new`, It would check for existing candidates but not for the company; however, if the company is different, an error would be raised upon applicant creation and prevent it. This commit adds the company to the candidate check to avoid raising the constraint, and adjusts the said constraint so that it allows linking to candidates with no company set.
This fixes an issue where the “See all” link in dynamic website product blocks was reset to the default shop page after saving. Businesses can now customize that link and trust it will keep sending visitors to the intended page.
Original PR description
Steps to reproduce: - Install the e-commerce module. - Go to the homepage. - Enter edit mode. - Drag and drop a "Products" block onto the page. - Click on the "See all" link. - Edit the link (e.g.,…
Steps to reproduce: - Install the e-commerce module. - Go to the homepage. - Enter edit mode. - Drag and drop a "Products" block onto the page. - Click on the "See all" link. - Edit the link (e.g., change "/shop" to "/contactus"). - Save the page. - Click on the "See all" link. - Bug: You are redirected to the "/shop" page instead of the "/contactus" page as expected. The bug occurs since commit [1], where the "See all" link was added to "Dynamic" snippets. Each time a "Dynamic" snippet is rendered during a page load, the href of the "See all" link is reset to the main module page. While this behavior is useful when the snippet is first rendered after being dropped onto the page, it is problematic afterward. Once the user has edited the link with a different href, it should not be reset on every page load. [1]: https://github.com/odoo/odoo/commit/bbcff746075485be61807d08ad8232dbad347713 [opw-4418048](https://www.odoo.com/web#id=4418048&cids=1&menu_id=4720&action=333&active_id=1695&model=project.task&view_type=form)
The Point of Sale category display now adapts better to different screen sizes when there are many categories. This prevents the category area from blocking product visibility, helping cashiers continue browsing and selecting products smoothly.
Original PR description
Currently when users have too many categories in their pos, their are not able to see the products and cannot scroll. Steps to reproduce: ------------------- * Add categories to the pos `> 100` * Open pos shop > Observation: We cannot see all categories, cannot scroll through them, and cannot see/select products Why the fix: ------------ This issue is the same as the one in this commit: https://github.com/odoo/odoo/commit/dd14967a037a93346123265ed489a0b4ce5f8218 But this time we expend the scope of the fix because the issue can also appear on other size screens. The number of rows of category displayed depends of the size of the screen. opw-4457772
This fixes a problem where visitors using embedded live chat on external websites could not answer calls from an operator. The call feature now loads the required calling component from the correct Odoo address, restoring the expected live chat calling experience.
Original PR description
__Current behavior before commit:__ Since [`9592bd1`][1] when the livechat is integrated on a third-party website, a visitor can not answer the call of an operator. This is because the script `selfie_segmentation.js` is being fetched from the third-party website domain instead of the Odoo database domain; resulting in the following error: `AssetsLoadingError: The loading of /mail/static/lib/selfie_segmentation/selfie_segmentation.js failed` __Description of the fix:__ Use of the `url` function to prepend the correct domain name. opw-4417974 [1]: https://github.com/odoo/odoo/commit/9592bd1
Fixes an issue where repeatedly clicking the SEO notification button could open several optimization dialogs at once. The notification now closes properly after the button is clicked, keeping the website publishing flow clearer and less confusing.
Original PR description
Since [1], clicking the button while the SEO toaster was visible could repeatedly open the SEO optimization dialog, resulting in multiple instances of the dialog box being opened. This commit addresses this issue by: - Adding logic to ensure toasters close properly when a button is clicked. (i.e the SEO toaster when you publish a page with missing important SEO informations). [1]: https://github.com/odoo/odoo/commit/45ea6e4a4a5c8e314b110a45198fbe3d57bb996e task-4384773
This fixes an accounting setup issue by ensuring the system only tries to retrieve fields that belong to the company record. It helps prevent errors during configuration or template processing when unrelated fields could otherwise be requested.
Original PR description
We can only attempt to get fields from `res.company` model. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change corrects an automated test setup for restaurant self-order online payments so it works reliably in no-demo test environments. It helps keep release validation stable without changing customer-facing behavior.
Original PR description
The `test_01_online_payment_with_multi_table` fails in runbot when running in "no-demo" mode. This is because it's not using the correct setup for testing restaurant configs. We ensure, in this commit, that the test uses the correct setup for testing by inheriting from the pos_restaurant's TestFrontendCommon. The total amount in the tour is adjusted because the test product from the default setup has no tax. Runbot Error: [111171](https://runbot.odoo.com/odoo/runbot.build.error/111171)
Users who manage projects and timesheets can now record time on tasks linked to sales orders without needing Sales access. This removes an unnecessary access error while keeping sales order details restricted to authorized users.
Original PR description
This PR addresses the issue of users without Sales access not being able to record on time on timesheets that are linked to a sale order line. If a user with access to Projects and Timesheets, but…
This PR addresses the issue of users without Sales access not being able to record on time on timesheets that are linked to a sale order line. If a user with access to Projects and Timesheets, but not Sales, wants to record time on a timesheet linked to a sales order, they will get an access rights error. This is because we check to see if there is an analytic distribution associated with the sale order line associated with the project task. However, this check is done without `sudo()` access in its current state. This PR provides that access because the result is not propagated further than simply evaluating whether or not there is an analytic distribution at all. The result is that this workflow is no longer blocking for users who should be able to timesheet, but not necessarily view or edit the sale order. This can be tested on Runbot by following these steps: Configuration: - User A does not have any Sales access, but has full rights to Projects and Timesheets - Have a service product that creates a task in a project - Have a sale order made for this product by User B, who does have Sales access Now, 1) On User A, navigate to the associated project and task made by the sale order from earlier 2) Click on the Timesheets tab in the notebook part of the view 3) Attempt to record an hour of work by adding a line to the timesheet, then clicking the "save" button Prior to this PR, the user will get an access rights error. Once this is merged, that error will no longer appear. opw-4409571
This fix prevents newly created linked records from appearing twice during record creation in certain business flows. It helps avoid errors in features such as duplicating commission plans and keeps related data consistent during the same request.
Original PR description
### To reproduce: - Model A has an inverse X2many stored field pointing to model B. - Calling `A.create({'X2many': [Command.create({...})]})` returns `A(1)`. - `A(1).X2many` returns `B(1, <NewId…
### To reproduce:
- Model A has an inverse X2many stored field pointing to model B.
- Calling `A.create({'X2many': [Command.create({...})]})` returns `A(1)`.
- `A(1).X2many` returns `B(1, <NewId NoOrigin>)`. This breaks one of the implicit invariants of the ORM, we shouldn't have a mix of real and New ids in the same recordset. Also, it may break some computation done on this X2many later in the same request, since `A(1).X2many` contains two records instead of one.
This happens because `create()` calls `_update_cache()` with X2many values, but the value of that X2many is already in the cache with the record created from the command values. This causes the X2many values to be duplicated with the new record version of the command values.
### Real Issue in the standard code
In the case of the 'sale.commission.plan' model and due to the inversed `target_commission_ids` field, it breaks the duplicate feature (`copy()` method):
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/18.0/odoo/http.py", line 1960, in _transactioning
return service_model.retrying(func, env=self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/service/model.py", line 138, in retrying
result = func()
^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/http.py", line 1927, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/http.py", line 2174, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/addons/base/models/ir_http.py", line 329, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/http.py", line 729, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/api.py", line 517, in call_kw
result = getattr(recs, name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5921, in copy
old_record.copy_translations(new_record, excluded=default or ())
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5874, in copy_translations
new_lines = new[name].sorted(key='id')
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 6690, in sorted
ids = tuple(item.id for item in sorted(self, key=key, reverse=reverse))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '<' not supported between instances of 'NewId' and 'int'
```
Explanation of the traceback:
A `copy()` calls `create()` on 'sale.commission.plan', which returns a `commission` record that should contain the same `target_commission_ids` values. Instead of that, `commission.target_commission_ids` (after the create and before `copy_translations`) returns twice as many records and with a mix of New and real ids, causing `copy_translations()` to crash when sorting by id.
### Fix
To avoid this issue, we don't call `_update_cache()` for the stored fields because we are sure that the cache has already been set in `_create()` and not invalidated by `modified()`.Department employee totals now respect the companies currently active for the user. This prevents misleading counts in multi-company setups and adds test coverage to help keep the behavior reliable.
Original PR description
- edit the `_read_group` domain to include the current active companies Task: 4353391 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes Odoo's spreadsheet engine with fixes that make spreadsheets behave more reliably in everyday use. Users should see better Excel import/export handling, more accurate charts and pivots, improved collaboration behavior, and fewer display issues.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/94c45c7c3 [REL] 18.0.10 Task: 0 https://github.com/odoo/o-spreadsheet/commit/e1d850152 [REV] collaborative: always…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/94c45c7c3 [REL] 18.0.10 Task: 0 https://github.com/odoo/o-spreadsheet/commit/e1d850152 [REV] collaborative: always trigger collaborative event received Task: 0 https://github.com/odoo/o-spreadsheet/commit/0c5220e86 [REL] 18.0.9 Task: 0 https://github.com/odoo/o-spreadsheet/commit/883dc0ae4 [FIX] borders: fix border on column/row deletion Task: 4089281 https://github.com/odoo/o-spreadsheet/commit/57aa8a7c7 [IMP] functions: add VALUE function Task: 4373019 https://github.com/odoo/o-spreadsheet/commit/d71d23f97 [FIX] charts: Account for correct locale when filtering empty datasets Task: 4465324 https://github.com/odoo/o-spreadsheet/commit/de1268b08 [FIX] pivot: notify only with static formulas Task: 4453844 https://github.com/odoo/o-spreadsheet/commit/d926ab9e3 [FIX] spreadsheet: avoid parasitic renders Task: 4373054 https://github.com/odoo/o-spreadsheet/commit/4eb819fa8 [IMP] model: create snapshot when loading xlsx file Task: 4080514 https://github.com/odoo/o-spreadsheet/commit/fa35e56dc [FIX] Package: update owl to 2.5.1 Task: 0 https://github.com/odoo/o-spreadsheet/commit/5ae37ce00 [FIX] chart: fix trend line axis alignment Task: 0 https://github.com/odoo/o-spreadsheet/commit/bef5abccc [FIX] xlsx: ignore charts without data set Task: 4460515 https://github.com/odoo/o-spreadsheet/commit/226fa6ad5 [FIX] pivot: ensure correct format status in menu Task: 4373606 https://github.com/odoo/o-spreadsheet/commit/85aaab61d [FIX] pivot: mouse events do not work in pivot text input Task: 4350439 https://github.com/odoo/o-spreadsheet/commit/aebd38c9d [FIX] chart: fix misalignment with trend line axis Task: 4251695 https://github.com/odoo/o-spreadsheet/commit/93eb716fc [FIX] xlsx: preserve leading whitespace at export Task: 4044862 https://github.com/odoo/o-spreadsheet/commit/3d0c96bd3 [FIX] xlsx: import new lines in sharedStrings Task: 4044862 https://github.com/odoo/o-spreadsheet/commit/3627052ae [FIX] charts: translate gauge chart titles Task: 4421055 https://github.com/odoo/o-spreadsheet/commit/61d79cd1e [FIX] index: export isNumber/isDateTime helper Task: 0 https://github.com/odoo/o-spreadsheet/commit/707d19875 [FIX] pivot: prevent duplicating pivot in error Task: 4361353 https://github.com/odoo/o-spreadsheet/commit/2687f536a [FIX] bottom_bar: ensure active sheet is scrolled into view Task: 4377840 https://github.com/odoo/o-spreadsheet/commit/144842902 [FIX] package: 18.0 is no longer the latest version Task: 0 https://github.com/odoo/o-spreadsheet/commit/66f0c66f8 [FIX] chart: trend line tooltip for scatter/line charts Task: 4279972 https://github.com/odoo/o-spreadsheet/commit/a59494344 [FIX] custom currency: panel on very long currency code Task: 4402647 Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Employee profile images are now displayed correctly when using the Employees app on a mobile-sized screen. This fixes a visual issue that made employee records harder to recognize on phones or narrow displays.
Original PR description
Steps to Reproduce: • Install the Employee app. • Switch to mobile view. • Open the Employee app; employee images are not visible. Cause: CSS was not defined for screen sizes smaller than medium. Fix: Added CSS rules for screens smaller than medium to ensure employee images are displayed correctly in mobile view. task-4380126 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes a problem where some links from emails to Odoo records could fail instead of opening the intended page. Users clicking these email links are now redirected correctly to the cleaner record URL, improving reliability for everyday navigation from notifications.
Original PR description
Commit c63d14a0485a553b74a8457aee158384e9ae6d3f introduced new nicer urls to get to Odoo. Commit 5776b574b3aba190c54b2e4974ce514d9b0bec2a adapted the /mail/view controller for it, allowing people clicking on a link to a record in a mail to be redirected to a nice new URL. Although one case was missing: when the model doesn't contain dots, the string is considered an action's path. So, when opening a record from a mail, there was a crash in odoo because the action could not be found. After this commit, there is no crash, and the record is opened correctly with a nice url. see router.js: heuristics to discrimate a model name from an action path is the presence of dots, or the prefix m- for models opw-4475237 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
Users can now drag selected text from one field and drop it into another field in form views. This fixes a small but frustrating editing issue and makes data entry smoother.
Original PR description
Before this commit: It is not able to drag and drop text between fields in the form view. After this commit: It is possible to drag and drop text between fields in the form view. Task-4286285
This fix makes the full message composer start with the expected empty paragraph when default content is present. It prevents formatting actions like bullet lists from accidentally applying to the whole message, making message editing more predictable for users.
Original PR description
**Problem**: When a `default_body` is added, it contains only a `div` in the editable area. This causes issues with some editor features, such as bullet lists, which do not behave as expected. **Solution**: Ensure the content includes a `<p><br/></p>` by default, selected for proper functionality, aligning with the default behavior of the editor. **Steps to reproduce**: 1. Go to Sales > Send Message > Full Composer. 2. Write content spanning 2+ lines. 3. On a new line, apply a bullet list. 4. Observe that the bullet list is applied to the entire content instead of just the current line. opw-4419775 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents an error during checkout when a customer buys only services and changes their delivery address. The checkout now handles cases where no delivery option is needed, allowing customers to continue smoothly.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Go to eCommerce; 2. add only services to cart; 3. go to checkout; 4. on payment page, go back to Delivery page; 5. add a second address if needed; 6. change selected address. Issue ----- > Uncaught Promise > Cannot read properties of null Cause ----- The query selector in `_canEnabledMainButton` assumes a radio input is always present on this step, but this is only the case when deliverable products were added to the cart. Solution -------- Skip the remainder of the method if the delivery radio wasn't found. opw-4365246 opw-4422905
Opening the invoice report in the report editor could fail for Kenyan OSCU setups because the report used invalid page structure. The report layout has been corrected so users can open and edit it reliably.
Original PR description
- Install `web_studio` and `l10n_ke_edi_oscu`
- Open the report editor from anywhere
- Search for report_invoice
- Open it
- Traceback
This is caused by the div inside the table, this is incorrect in HTML
See https://html.spec.whatwg.org/multipage/tables.html#the-table-element
replace with a tr/td
opw-4369019This fixes the maximum mobility budget amount used in Belgian payroll calculations. It helps ensure payroll results follow the correct legal limit and reduces the risk of incorrect employee compensation calculations.
Fixed an issue where sharing one error dialog could also trigger sharing actions for other stacked error dialogs. This prevents duplicate link copies and notifications, making error sharing clearer and less confusing for users.
Original PR description
This commit fixes an issue with the sharing functionality of the error dialogs where if multiple of these were stacked onto each other, the share button would trigger the URL copy and notification for all errors instead of only the relevant one.
This fix makes India reporting more efficient by only loading the accounting information it actually needs. It helps prevent memory errors for customers with very large accounting databases, improving report reliability.
Original PR description
_compute_l10n_in_transaction_type fetches all columns of account_move but we need only few columns. And account_move table is usually large in client database which can lead to memory_error. The database in question has: ``` select COUNT(*) from account_move +---------+ | count | |---------| | 3447401 | +---------+ ```
This fixes an error that prevented payroll users from generating Mexican payslips when using a newly created salary structure. The change adds a safe fallback so payslip creation can continue instead of failing with a system error.
Original PR description
Using a newly created payslip structure for Mexico it is not possible to generate payslips Steps to reproduce: - With an MX Company setup - Go to Payroll > Configuration > Salary > Structures - Create new structure with the following attributes: - Type: "Mexico: employee" - Country: "Mexico" - Go to Payroll > Payslips > Batches, create a new batch - Click "Generate Payslips" - Select the freshly created salary structure in the wizard, then click "Generate" Issue: An error is raised while creating the payslip Error: float() argument must be a string or a real number, not 'NoneType' This occurs because we don't have a fallback in `_get_paid_amount` opw-4328900
Fixes Belgian payroll social balance sheet reporting so traineeships are handled correctly. It also restores the yearly summary, helping businesses produce complete and accurate statutory HR payroll reports.
This update prevents subscription sales orders from comparing empty date fields. It helps avoid unnecessary errors when start or next invoice dates have not yet been set.
Original PR description
The fields start_date and next_invoice_date of sale.order can be null. We only want to compare to dates. So its better to check that the dates are not null before comparing them.
This update prevents already signed signature fields from being dragged when reviewing or completing documents in Odoo Sign. It reduces accidental movement of signed content and makes the signing experience more reliable for users.
This change updates automated tests for the Documents Spreadsheet pivot side panel to match a recent spreadsheet interaction fix. It helps keep quality checks reliable so future updates do not accidentally reintroduce issues around focusing spreadsheet elements.
Original PR description
The hoot dom helpers rely on a single 'pointerdown' to focus its node which is precisely the behaviour that we act upon in https://github.com/odoo/o-spreadsheet/commit/85aaab61dd3fc4ea2a8c10f9e70b8e7fa650f170
The Belgian payroll calculation now separates the employment bonus into two sections, aligning payslips and related accounting validation with the expected structure. This helps payroll teams review and report the bonus more accurately while reducing the risk of incorrect payslip totals or categorization.