Friday, January 16, 2026
60 changes · saas-19.1
Resolved issues and error corrections
This update resolves a problem that prevented the tax module from loading correctly during database upgrades. The fix disables tracking computations during the module's loading process, preventing errors that were causing delays and failures. This ensures smoother database upgrades and avoids disruptions to the system.
Original PR description
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records. ```py…
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records.
```py
/home/odoo/src/odoo/19.0/addons/l10n_br/migrations/1.1/end-migrate-update_taxes.py(8)migrate()
-> env['account.chart.template'].try_loading('br', company)
/home/odoo/src/odoo/19.0/addons/account/models/chart_template.py(170)try_loading()
-> return self._load(template_code, company, install_demo, force_create)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(12)_load()
-> self._l10n_br_init_avatax_code(company)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(324)_l10n_br_init_avatax_code()
-> tax.l10n_br_avatax_code = tax_data['l10n_br_avatax_code']
```
Because tracking was not disabled, this write triggered `mail.thread` tracking computation during module loading, leading to failures while finalizing tracking messages.
```py
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 576, in _track_finalize
tracking = records.with_context(context)._message_track(fnames, initial_values)
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 697, in _message_track
record._message_log(
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 477, in _message_log
self._message_log_repartition_lines(tracked_value_id[2]['old_value_char'], tracked_value_id[2]['new_value_char'])
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in _message_log_repartition_lines
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in <listcomp>
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
KeyError: 'Porcentagem fatorial'
```
This occurs due to the interaction between:
- the `_load` override introduced in odoo/enterprise@eeaea338c1c6b9540a89be8003dadbe651de881e
- the new `try_loading` flow added in odoo/odoo@9d965abb992d558ea4235ef5f87a7654c6f1ceae
The resulting tracking computation crashes with a KeyError when processing repartition line diffs.
Fix: ensure `_load` runs with `tracking_disable=True`, as expected by the standard `_load` execution context, preventing tracking logic from running during module loading.
opw-5467986
upg-3753990
tbg-2380
Forward-Port-Of: odoo/enterprise#103931This update resolves an issue where applying a zero-amount discount in the sales order system would trigger an error. The fix ensures the system handles zero discounts gracefully, preventing disruptions to the sales process. This improves the reliability of discount application.
Original PR description
The system raises an error when the user tries to apply a fixed amount discount of 0.0. **Steps to produce:** - Install `Sales` module with demo data. - From the settings enable `discount`. - Make a sale order with product > click on Discount > click Fixed Amount and set amount as `0.0` > click on apply. **Error:** `ZeroDivisionError : float division by zero` **Cause:** - When the discount amount is set to 0.0, at [1] we attempt to compute the factor, which causes an error due to a division by zero. **Solution:** - Added a condition to check that current_base_amount_currency is not zero, and if it is, set the factor to 0.0. [1]: https://github.com/odoo/odoo/blob/10887c3081afbfd0734c6a3ac24301c94d14bc24/addons/account/models/account_tax.py#L3718-L3720 **sentry-6967181350** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233151
This update resolves an issue where users would encounter access errors when closing the 'Thank You' dialog after signing a document from a record they couldn't access. The system now verifies read access to the related record before redirecting, ensuring a smoother sign-off experience for all users.
Original PR description
Version: - 18.0 Steps to reproduce: - Send a signature request to an internal user from a record that the signer cannot access. - The user signs the document and then tries to close the Thank You dialog. Before: - When a user signs a document sent from a record they don’t have access to, closing the "Thank You" dialog triggers an access error. - This happens because the system tries to open the related record after signing, but the signer does not have permission to view that record. After: - Now the system first checks if the signer has read access to the related record before redirecting. Impact: - Users will not see an access error message after signing a document. task-5353126 Forward-Port-Of: odoo/enterprise#104161 Forward-Port-Of: odoo/enterprise#100961
This update fixes an issue where formatting applied to text using shortcuts didn't consistently transfer to newly typed content. Previously, the cursor would jump outside the formatting element after applying a shortcut. Now, formatting will correctly inherit when using shortcuts, ensuring a smoother and more reliable experience for users creating and editing formatted content within the HTML editor.
Original PR description
#### Description of the issue this PR addresses: - When using shortcuts (e.g. typing '1. ') after applying inline formatting, newly typed text did not inherit the formatting. - This occurred because extracting the shortcut text left the formatting element empty, causing the cursor to move outside it. #### Desired behavior after PR is merged: - Ensure the caret remains inside the formatting element by filling the closest element of `focusNode` when it becomes empty during shortcut handling. #### Steps to Reproduce: - Go to To-Do, Create a new record. - Type formatted text (e.g. Ctrl+[b|u|i]). - Press Enter. - Type '1. ' to create a list. - Type text inside the list item. => The text inside the list does not retain the formatting. task-5468358 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242209
This update resolves a bug where the HTML editor incorrectly inserted tab characters into content, even when selecting mixed block types. The fix now ensures that tabs are only applied to contenteditable paragraph blocks (like headings and paragraphs), preventing unwanted indentation and improving editor usability. This ensures consistent formatting within the editor.
Original PR description
#### Description of the issue this PR addresses: - Tab indentation was applied to non-paragraph and non-contenteditable blocks, leading to incorrect indentation behavior when a selection contained mixed block types. #### Desired behavior after PR is merged: - Filter selected blocks to indent only contenteditable paragraph-related elements (h1–h6, p, pre, blockquote, and div.o-paragraph), while excluding blocks marked as contenteditable="false". #### Steps to Reproduce: - Open a new to-do record. - Insert: Table, Table of Content, Banners, attachment, (18.2 - Toggle List) - Select all editor content using Ctrl + A. - Press the Tab key multiple times. => Multiple editor tab characters are inserted at unintended positions. task-5452410 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241806
This update fixes an issue where pressing the Backspace key in empty HTML editor banners or code blocks did nothing. Now, Backspace will correctly remove these elements, transforming them into a standard base container. This improves the editor's usability and ensures consistent behavior.
Original PR description
### Description of the issue/feature this PR addresses: - Pressing `Backspace` inside an empty banner or code block did nothing. ### Desired behavior after PR is merged: - Pressing `Backspace` in an empty banner or code block will transform them into a base container. task- 5384545 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238640
This update resolves two issues impacting the website editor. First, it fixes blurry countdown canvases and text when zooming, ensuring sharp visuals at any scale. Second, it prevents text overlap with icons, particularly when using the Unsplash photo option, improving the overall user interface.
Original PR description
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the…
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the countdown canvas and text appears blurry The countdown was rendered at a low resolution, which caused it to blur when zooming. This fix updates the canvas to draw at the proper resolution so the countdown remains sharp at any zoom level. ## [FIX] web_editor: prevent text overlap with icon [Commit 2] Steps to reproduce: - Go to Website -> Edit Mode - Add a Image snippet - Enter a long text in search bar: Issue: 1. Text overlaps with search icon. 2. Selecting the "Photos (via Unsplash)" option causes the text to overlap the dropdown icon. The fix adjusts the end padding to provide sufficient spacing between the text and the icons. task-[4771268](https://www.odoo.com/odoo/project/974/tasks/4771268) Forward-Port-Of: odoo/odoo#242814 Forward-Port-Of: odoo/odoo#213373
This update removes a redundant CSS class from the Point of Sale module. The class was previously used to limit button width but is no longer needed. This cleanup improves the codebase and reduces potential maintenance overhead.
Original PR description
The issue was to put the button css class at a max width of 200px. But it's not used anymore. So it can be deleted bug was created from this pr : https://github.com/odoo/odoo/pull/243770 task : 5493872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243831
This update resolves an error that occurred when users deleted the 'Balance' line in the General Ledger Report. The fix prevents the report from crashing when a balance isn't present, ensuring a smoother user experience. This improves the reliability of a core accounting function.
Original PR description
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting >…
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting > Configuration > Accounting (section) > Accounting Reports - Open the General Ledger report - Delete the balance line from the Column tab - Go to Reporting > General ledger >> Error occurs (If an error does not occur, try opening the detailed view of the journal in the report.) Error: `KeyError: 'balance'` This issue was generated because at code line [1] tries to access `balance` key from the `colname_to_idx[col_group_key]` but since the user deleted `balance` it will not fount there and we got an error. This commit fixes the issue by preventing the processing of `line_balance` when the balance key is not present in `colname_to_idx[col_group_key]`. [1]: https://github.com/odoo/enterprise/blob/340abdc1b00df4d3d6130b26650519ae8354d199/account_reports/models/account_general_ledger.py#L326 sentry-7105657812 Forward-Port-Of: odoo/enterprise#102113
This update fixes a visual glitch in Firefox where the page would jump after undoing actions involving tall snippets. The team adjusted how snippets are scrolled to the top, which is now the more intuitive behavior. This ensures a smoother user experience.
Original PR description
Steps to reproduce: - On Firefox, drop a snippet taller than the page height. - Remove it. - Undo. => The page shows a white gap until you scroll again. Same issue when showing a hidden tall snippet. After investigation, no real explanation was found for this bug in Firefox. We only observed that changing the "center" parameter to "start" in the "scrollIntoView" function fixes the issue. In the end, this is not a bad idea, since scrolling a snippet to its beginning arguably makes more sense than centering it, especially when the snippet’s height is larger than the viewport. task-5194559 Forward-Port-Of: odoo/odoo#241518
A customer modified their Gift Card and E-Wallet products to use stock, causing an inventory inconsistency. This fix prevents the system from reverting these products to their original service-type status, resolving a test case error. Given the recurring nature of this request, we're considering a more general solution.
Original PR description
The customer changed the service-type products “Gift Card” and “E-Wallet” to storable products and used them in stock. May be they could use as physical gift cards, and physical e-wallets for company. As a result, these products now have on-hand quantities, which creates an issue. After the upgrade, they will be converted back to service-type products, causing an on-hand quantity inconsistency in the test case. To avoid this error, we need to keep these products as storable. TO do that we have to mark them noupdate. This is a customer-specific change, but since we have received many similar requests, we should consider making a generic fix if possible. 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#242555 Forward-Port-Of: odoo/odoo#237517
This update removes unnecessary system notifications (like user joins/leaves) from appearing on leads. These notifications were distracting and irrelevant to users. This change improves the lead management experience by streamlining information.
Original PR description
Before this commit, system notifications such as "user join/leave the chat" would be displayed in the created lead/ticket. Those messages are not useful in anyway and should be excluded. task-5491212 enterprise: https://github.com/odoo/enterprise/pull/104336 Forward-Port-Of: odoo/odoo#243856
This update fixes formatting issues in live chat ticket descriptions created by the chatbot. Previously, system notifications were included, making tickets difficult to read. Now, only relevant chat messages are used, ensuring clearer and more organized ticket descriptions for support agents.
Original PR description
In [1], chat bot's create lead/ticket steps were improved to set the formatted discussion as the lead/ticket description. The same holds for lead/ticket commands. However, the /ticket command was not properly updated. As a result, the discussion is poorly formatted, making it difficult to read. Also, the description should only include relevant messages, not system notifications such as "agent joined the channel". This commit fixes both issues. task-5491212 community: https://github.com/odoo/odoo/pull/243856 Forward-Port-Of: odoo/enterprise#104336
This update fixes an issue where payment advice reports (PDF and XLSX) were incorrectly displaying only the first bank account when employees had multiple salary distributions. The fix ensures that all bank accounts with salary splits are accurately reflected in the payment advice, providing correct financial reporting.
Original PR description
Issue: When an employee had multiple bank accounts with salary distribution, the payment advice (PDF and XLSX) was displaying only the first bank account and assigning the full salary amount to that account. This resulted in incorrect payment information being generated. Fix: When multiple bank accounts are configured with salary distribution, the payment advice now displays the correct information in both PDF and XLSX reports. task-5390429 Forward-Port-Of: odoo/enterprise#101818
This update resolves an issue where overtime work entries were incorrectly generated, even when overtime rules were disabled. It also fixed a bug where regenerating work entries caused shifts in attendance hours across consecutive days. The fix ensures accurate overtime calculations and consistent results during payroll regeneration.
Original PR description
# Bug 1: ## Steps to reproduce: - Create an overtime ruleset and add rules. - Disable "Pay extra hours" on all rules in the ruleset. - Assign this ruleset to an employee. - Create an attendance that…
# Bug 1: ## Steps to reproduce: - Create an overtime ruleset and add rules. - Disable "Pay extra hours" on all rules in the ruleset. - Assign this ruleset to an employee. - Create an attendance that normally generates overtime. - Navigate to the work entries in payroll. - Overtime work entries are created! This fix will skip generating work entries when their will be no `paid` rules in a ruleset. # Bug 2: ## Steps to reproduce: - Create attendances with overtime for multiple consecutive days. - Navigate to Work Entries in Payroll. - Click on Reset->"Regenerate Work Entries” on the same period for bulk regeneration. - Observe that attendance and overtime hours are shifted between days. ### Fix: In `_get_overtime_intervals`, the overtime list was recreated inside the per-day loop, causing previously computed overtime intervals to be lost when multiple days were involved. Overtime intervals are now accumulated per resource across all days in the requested range before building the final Intervals. task - [5189151](https://www.odoo.com/odoo/project/1251/tasks/5189151) Forward-Port-Of: odoo/enterprise#103028
This update resolves an issue where the USB printer functionality would unexpectedly stop working when a printer lid was open. The fix ensures the system gracefully handles situations where printer data isn't immediately available, returning an empty byte string instead of a failure result. This maintains consistent printer operation.
Original PR description
When using the `python-escpos` library with a USB printer, we had to patch the read method to retry due to the result not always being immediately available. However, in the case where all the retries are exhausted, it currently returns `None`, whereas the library always expects a `bytes` result. This commit fixes the issue by returning `b""` when no result can be read. This prevents the `python-escpos` functionality from being disabled when the printer lid is open. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244043
This update ensures that survey spreadsheet exports consistently use the originally recorded date/datetime format for all answers, regardless of changes to the question type. Previously, modifying a question type after a response could cause formatting issues. This change guarantees data integrity and avoids errors when exporting historical survey results.
Original PR description
Current behavior before PR: - Survey spreadsheet export derived date and datetime formatting from the current question type. - Changing a question type after submission (date to datetime) could lead to incorrect formatting or export errors for existing answers. Desired behavior after PR is merged: - Spreadsheet export now derives value conversion and formatting from the stored answer type instead of the question definition. - Historical answers keep their original date or datetime format, even if the question type is modified later. Task: [5410758](https://www.odoo.com/odoo/project/2328/tasks/5410758) Forward-Port-Of: odoo/enterprise#102930
This update resolves a validation error that occurred when creating partial backorders within wave transfers. The issue stemmed from the system incorrectly processing ongoing batches, leading to validation failures. This change ensures that the system accurately handles backorder creation and prevents these errors.
Original PR description
## How to reproduce: - Enable Wave transfert in setting - Go to the Receipt Operation type: - Create Backorder: always - Automatic Batches: Enabled - Wave Grouping: Products - Create and confirm…
## How to reproduce:
- Enable Wave transfert in setting
- Go to the Receipt Operation type:
- Create Backorder: always
- Automatic Batches: Enabled
- Wave Grouping: Products
- Create and confirm (don't validate) 2 Receipts for 10 units of a storable product P
- The 2 receipt should have been added to a new wave transfer with 2 lines for P
- On the first line, set the quantity to 0
- On the second line, set the quantity to 1
- Try to validate the wave transfer ==>> UserError "The following transfers cannot be added to batch transfer WAVE/XXXX. Please check their states and operation types."
## Issue:
Backorders are generated before the current batch is marked 'done' (it waits for empty pickings to be detached). The auto-batch logic incorrectly identifies the current 'in_progress' batch as a candidate for the new backorders, attempting a merge that violates validation constraints.
## Solution:
Exclude the current wave/batch from the auto_wave search domain using a context variable passed during validation.
OPW-5413921
---
Test result before fix:
```
2026-01-13 10:37:26,541 27952 INFO oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: Starting TestAutoWaving.test_auto_wave_skip_current_batch ...
2026-01-13 10:37:26,820 27952 INFO oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: ======================================================================
2026-01-13 10:37:26,820 27952 ERROR oes_test_18.0 odoo.addons.stock_picking_batch.tests.test_auto_waving: ERROR: TestAutoWaving.test_auto_wave_skip_current_batch
Traceback (most recent call last):
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/tests/test_auto_waving.py", line 440, in test_auto_wave_skip_current_batch
wave.action_done()
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking_batch.py", line 264, in action_done
return pickings.with_context(**context).button_validate()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking.py", line 145, in button_validate
res = super().button_validate()
^^^^^^^^^^^^^^^^^^^^^^^^^
...
File "/home/odoo/Odoo/src/18.0/odoo/odoo/fields.py", line 1418, in __set__
records.write({self.name: write_value})
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking.py", line 112, in write
self.batch_id._sanity_check()
File "/home/odoo/Odoo/src/18.0/odoo/addons/stock_picking_batch/models/stock_picking_batch.py", line 323, in _sanity_check
raise UserError(_(
odoo.exceptions.UserError: The following transfers cannot be added to batch transfer WAVE/00012. Please check their states and operation types.
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#243873
Forward-Port-Of: odoo/odoo#243519This update fixes a technical error that could cause a failure when displaying complex web pages. The fix ensures that the system only attempts to unfold and read data when a specific specification is provided, preventing a 'NoneType' error. This improves overall stability and prevents unexpected disruptions to web page functionality.
Original PR description
An error occurs when `web_read_group` is called without an unfold specification. **Error:** `TypeError - 'NoneType' object is not iterable` **Cause:** Here the method `web_read_group` unconditionally calls `all_records.web_read(unfold_read_specification)` - [1] However, `web_read` requires a valid read specification. If `unfold_read_specification` is None [2], it fails when trying to iterate over it during record mapping. **Fix:** This commit only unfold and reads group records when `unfold_read_specification` is given. [1] - https://github.com/odoo/odoo/blob/e8a41b5b50ac71974d98c18fa9d47e37e0f7763f/addons/web/models/models.py#L449-L449 [2] - https://github.com/odoo/odoo/blob/e8a41b5b50ac71974d98c18fa9d47e37e0f7763f/addons/web/models/models.py#L317 sentry-7112641140 Forward-Port-Of: odoo/odoo#241754
This update fixes an issue where dynamic snippet templates weren't fully updating their container widths after a change. The fix ensures all container classes are cleared, preventing outdated styles from persisting and guaranteeing consistent layout updates for dynamic content. This improves the overall visual presentation of the website.
Original PR description
Steps to Reproduce: 1. Drop a dynamic snippet from debug block. 2. Set the fetched elements to 1. 3. Set the content width to Thin (o_container_small). 4. Change the template of the snippet. When changing a dynamic snippet's template, previously set container widths (e.g., "Thin") could persist even though the option resets. Issue: Only template defined containerClasses were removed, leaving manually set classes like "o_container_small" behind. Fix: All container classes are cleared before applying the new template's containerClasses or falling back to "container". Forward-Port-Of: odoo/odoo#241804
This update provides users with more detailed error messages when sending documents to HMRC, including the specific error code and message returned by the system. This change simplifies troubleshooting and reduces the need for support, leading to faster issue resolution.
Original PR description
Currently, when an error occurs while sending a document to HMRC, the user only receives a generic error message. This change enhances the error feedback by including the error code and message returned by HMRC, giving the user clearer insight into the cause of the failure. This helps users identify issues more easily and reduces unnecessary support requests. Forward-Port-Of: odoo/enterprise#104407
This update ensures that users who have set their status to 'do not disturb' are no longer receiving inbox messages. Previously, this functionality was inconsistent with push notifications, leading to unnecessary alerts. This change improves user experience and reduces potential distractions.
Original PR description
Users shouldn't be notified when they set their status as "do not disturb". It's already done for push notifications but inbox messages follow a different path. 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#244059
This update fixes a problem where inviter notifications were sent for all invited users, including portal users, leading to unnecessary alerts. Now, inviter notifications are only triggered when an internal user connects for the first time, streamlining the process and improving the user experience.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited…
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited user connected for the first time. This notification was triggered for **all user types**, including portal users. For portal users, this resulted in unnecessary toast notifications and chat window pop-ups. **Current behavior before PR:** --------------------------------- - The inviter is notified when any invited user connects for the first time. - This includes portal users. - Unnecessary notifications and chat pop-ups are shown for portal user connections. **Desired behavior after PR is merged:** ----------------------------------------- - The inviter is notified **only when an internal user** connects for the first time. - Portal users no longer trigger first-connection notifications. - The notification message is updated to: “[Username] just connected for the first time. Wish them luck!” **Task:** [4105780](https://www.odoo.com/odoo/project/1519/tasks/4105780) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242235
This update resolves a recurring test failure in the HTML Editor's toolbar. The issue stemmed from the toolbar being a popover, requiring a longer wait time for updates. By using a 'waitFor' mechanism, the test is now more reliable and consistent, ensuring smoother operation for users.
Original PR description
Waiting one animation frame for the toolbar to update is not enough because the toolbar is a popover and is therefore affected by [1]. Use `waitFor` to avoid non-deterministic test failures on runbot. runbot-237773 [1]: https://github.com/odoo/odoo/commit/54da715df84789f9a1acc0cfc91be41dcdbab140 Forward-Port-Of: odoo/odoo#243568
This update fixes a reporting issue in our Point of Sale (POS) system. Previously, sales statistics didn't fully account for completed transactions with 'done' statuses. Now, all invoiced orders in the 'done' state are included, providing a more accurate and complete picture of each POS session's sales performance.
Original PR description
When computing the sales statistics for a POS session, include invoiced orders (state 'done') along with paid orders (state 'paid'). This ensures that all completed transactions are accounted for in the session summary. opw-5475876 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242808
This update fixes a problem where users received unclear error messages when cash point closing with Fiskaly failed. The change now displays the full response from Fiskaly, providing more detailed information to help users quickly diagnose and resolve the issue. This improves the user experience and reduces troubleshooting time.
Original PR description
When a cash point closing fails with Fiskaly, the error message shown to the user was not very informative. This commit enhances the error message to include the actual response from Fiskaly, making it easier for users to understand what went wrong. opw-5461084 Forward-Port-Of: odoo/enterprise#103358
This update resolves a technical issue that caused a traceback error when removing a pay category selection for employees in the payroll section. The fix ensures the system handles data removal correctly, preventing unexpected errors and improving payroll stability.
Original PR description
Fixed a traceback bug that appears when removing unselecting the Pay Category in the Employee's form payroll tab Steps to reproduce: - Select a pay category for an employee - Delete your selection - Traceback appears Cause: _compute_display_be checks on the name of the structure_type_id without checking that this field is not null, producing a bug when its value is removed task-5453432
This update addresses a technical issue where clicks within editable lists were unintentionally triggering unwanted actions. A new feature was added to allow developers to 'ignore' clicks within specific list elements, ensuring proper list editing functionality. This resolves a bug impacting user experience.
Original PR description
Since commit 37d78a4, the global click listener sets `capture: true`, which prevents other components to stop the propagation of the click event in order to maintain the focus on the selected list element. This commit introduces a special data key that can be set on an element so that any click occurring within it will be ignored by the list renderer. task-none but necessary for https://github.com/odoo/enterprise/pull/103732
A recent update caused a crash when users clicked on boxes within X2many fields. This was due to a change in how click events were handled, leading to the system expecting the field to be in edit mode when it wasn't. This fix ensures stability and prevents the crash.
Original PR description
Since commit odoo/odoo@37d78a4, a crash would occur when clicking on a box while a field of a x2many field was focused.
The commit mentionned above changed the order in which the click event handlers are called because of the addition of `{ capture: true }` on the list renderer click listener.
Before, the propagation of the click event was stopped at the box layer level, preventing it to reach the global listener of the list renderer and thus keeping it in edit mode.
After, the click listener of the list renderer is executed first, which means we leave the edit mode before executing the click listener of the manual correction component. This causes a crash as the list renderer is expected to be in edit mode to be able to fill in the value.
task-noneThis update resolves a test failure within the 'test_discuss_full' module. The fix ensures the correct time zone is set for a test record, preventing an assertion error. This improves the reliability of our automated testing process.
Original PR description
This commit fixes a failing assert in `test_10_init_store_data`. The test fails since [1] due to asserting the value of the OdooBot time zone as False. This commit explicitely sets the time zone of the OdooBot partner record and asserts it. [1] https://github.com/odoo/odoo/pull/210094 runbot-237777
This update fixes a previous issue in the product configurator where prices weren't accurately reflecting selected options or the current order's details. Now, the configurator displays the correct price based on chosen attributes and the order's pricelist and fiscal position, reducing user confusion and ensuring accurate pricing.
Original PR description
Before this commit, product configurator popup did not consider selected attributes, and pricelist or fiscal position of the current order when displaying the price of the product being configured. This could lead to confusion for the user. opw-5472946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242533
This update corrects a reporting issue where live chat response times continued to track even after a customer closed the conversation. The fix ensures response times accurately reflect the actual chat duration by stopping the tracking when the chat is closed, preventing inflated reporting figures. This improves the accuracy of live chat performance data.
Original PR description
Before this commit, the response time for a live chat conversation did not stop until the operator leaves the conversation, even if the customer had already closed it. This leads to response times that are longer than the conversation duration. The reason for this behavior is that the response time is indiscriminately checking for the first agent message. If the live chat gets closed by the customer without answer, the first message will be "Agent left the channel", posted upon the agent leaving the conversation. Once the conversations is closed the response time should stop as it can be expected that an operator does not pay attention to already closed chats This commit fixes the issue by setting the `time_to_answer` to NULL if the first message is posted after the live chat is closed. task-5117556 Forward-Port-Of: odoo/odoo#242895
This update fixes an issue where loyalty points weren't being calculated correctly after discounts were applied in the point-of-sale system. The change ensures that loyalty rewards are accurately reflected in the customer's balance, regardless of discount usage. This improves the customer experience and data accuracy.
Original PR description
Step To Reproduce: - create a loyalty of type "loyalty card", that grants 1 point per $ spent - configure pos for global discounts - start pos, select a product (say price_with tax is 100) - select a…
Step To Reproduce: - create a loyalty of type "loyalty card", that grants 1 point per $ spent - configure pos for global discounts - start pos, select a product (say price_with tax is 100) - select a customer - apply a discount of 10%, price should be 90 refer image <img width="1367" height="687" alt="image" src="https://github.com/user-attachments/assets/37709299-b377-4eee-95af-e857b19c7671" /> Observation: - the loyalty gained stays 100, even after we applied discount, it should be 90 <img width="257" height="587" alt="pos loyalty issue" src="https://github.com/user-attachments/assets/772821c2-dc06-4dfc-8d4c-ab00de209ce8" /> Cause: - the recent commit [1], `applyDiscount` uses `addLineToOrder`, which bypasses `addLineToCurrentOrder`. - This skips `updateRewards` and other module-level extensions defined on `addLineToCurrentOrder` [1] https://github.com/odoo/odoo/commit/b63c7c28cfe6d59888982d58b8e9d99ea62281f4 https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/pos_loyalty/static/src/app/services/pos_store.js#L439-L448 Fix: - Replace `addLineToOrder` with `addLineToCurrentOrder` to ensure rewards and programs are properly updated opw-5437844 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242740
This update resolves an issue where refreshing AI embeddings triggered unnecessary cron jobs. It also includes error handling to prevent embedding failures from disrupting the entire process, ensuring smoother AI performance for users. This change improves reliability and efficiency of the AI embedding feature.
Original PR description
Avoid triggering multiple embedding cron jobs when the refresh button is clicked, since the cron is automatically triggered while new chunks still need to be processed. Also catch AttributeError exceptions when calling the embedding service and mark the affected chunk as failed instead of crashing the whole embedding flow. task-id-5498693 Forward-Port-Of: odoo/enterprise#104414
This update fixes an issue where appointment dates were displayed out of order in the online booking cart. The fix prevents dates from being split into multiple lines, which previously caused the reversal of date order when the data was processed. This ensures accurate date presentation for customers during the booking process.
Original PR description
**Steps to produce:** - Install `appointment,website_sale` modules. - Go to website > appointment > Online Cooking Lesson. - Book a slot > Proceed to payment. - Open the cart. **Issue:** - The…
**Steps to produce:** - Install `appointment,website_sale` modules. - Go to website > appointment > Online Cooking Lesson. - Book a slot > Proceed to payment. - Open the cart. **Issue:** - The appointment dates are displayed in an incorrect order in the cart. **Root cause:** - In the linked commit, the logic reverses the `self.name` lines to fix a display issue. - However, since appointment dates are split across multiple lines, reversing the list also unintentionally reverses the appointment date order. **Solution:** - Ensure that the appointment dates are formatted to appear on a single line, preventing them from being split into multiple list entries and incorrectly reordered when the lines are reversed. [commit]: https://github.com/odoo/odoo/pull/223433/changes/5b69176e64e6a4cc46966a8c41b675ed3d98dd0a Before: <img width="554" height="138" alt="image" src="https://github.com/user-attachments/assets/3e13a2a5-61d5-48c5-8e6a-85f313f7b6ca" /> After: <img width="566" height="120" alt="image" src="https://github.com/user-attachments/assets/f0b04592-7fd4-4104-b200-cf9b6f080962" /> opw-5420805 --- Forward-Port-Of: odoo/enterprise#104100
This update fixes an issue where the HTML editor would incorrectly display extra lines when multiple lines were selected. The change filters out empty text nodes to prevent unnecessary font wrappers, resulting in a cleaner and more accurate display of the editor's content. This ensures a better user experience when editing rich text.
Original PR description
**Current behavior before PR:** - When multiple lines were selected within a block, any empty text nodes between them would also receive a font wrapper when applying a color. - As a result, it appeared as though an extra line was being inserted when the color was applied. **Desired behavior after PR is merged:** - Empty text nodes that are not visible and are not zero-width space or line-break nodes are now filtered out before the font tag is created. - This prevents font wrappers from being created around those nodes. task-5344051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236824
This update ensures that internal users can still invite colleagues to closed live chat conversations, as previously the invite link was hidden by mistake. This change removes a restriction, allowing for seamless collaboration and ensuring users can easily extend access to chats when needed. It's part of a larger effort to improve chat functionality.
Original PR description
Invite link is hidden on closed live chat but it doesn't make sense. Internal users still want to invite collegues to the chat (e.g. inviting salesperson to the chat). Morever, the link is hidden but nothing prevents users to user it technically. This commit shows the invite panel, even on closed live chats. part of task-4873812
This update corrects a bug in how the system determines if a stock location is a child of another. The fix replaces a potentially misleading check with a more reliable method, ensuring accurate location relationships. This resolves a previous issue that could cause test failures and maintain data integrity.
Original PR description
Previously, in the `_isSublocation`, to check if a location was a children of another location, we did that: ```javascript return childLocation.parent_path.includes(parentLocation.parent_path); ```…
Previously, in the `_isSublocation`, to check if a location was a children of another location, we did that: ```javascript return childLocation.parent_path.includes(parentLocation.parent_path); ``` The issue with that is, if locations' id are aligned, they can match even if they are not related. For example, imagine tested child location has ID 127 and the parent location has ID 7, we then check their `parent_path` (for example, '4/127/' for the child location and '7/' for the parent location), it can happen the child parent path can include the parent's parent path (in our example, '4/127/' includes '7/'.) To fix that, this commit replaces `includes` with `indexOf`, the result of the `indexOf` should always be 0 if the child location is indeed a sublocation of the parent location. Because of this issue, the second run of the tour `test_put_in_pack_new_lines` could sometime fail when the locations IDs are aligned. runbot build error: [233292](https://runbot.odoo.com/odoo/runbot.build.error/233292) Forward-Port-Of: odoo/enterprise#104350
This update resolves an issue where our automated testing for online typing status was unreliable due to how the tests simulated time. The fix ensures the tests accurately reflect real-time typing behavior, preventing intermittent test failures and improving the stability of our system. This primarily impacts the reliability of our internal testing processes.
Original PR description
Backport of odoo/odoo#243138 Before this commit, the following discuss typing HOOT tests were failing non-deterministically: ``` [text composer] other member typing status "is typing" refreshes of…
Backport of odoo/odoo#243138
Before this commit, the following discuss typing HOOT tests were failing non-deterministically:
```
[text composer] other member typing status "is typing" refreshes of assuming no longer typing
other member typing status "is typing" refreshes of assuming no longer typing
```
This happens because these tests advance time for 10 to 60 seconds to assert presence of "Demo is typing..." text. The text relies on 2 asynchonous pieces of code:
1. a bus notification that the server returns `is_typing_dt` when someone explicitly notifies start or stop typing
2. a client-side internal timeout `typingTimeoutId` for long typing of more than 60 seconds (it expects receiving a is_typing: true in the mean time if the member is still actually typing)
The test had no control over these 2 asynchronous pieces of code. This is a problem because HOOT tests show extreme condition where bus notifications come much later than RPC returns, and also simulation of passing of time with `advanceTime()` acts as a jump to the future and consumes all registered timeouts.
The bus notification problem can mistakenly have it consumed way later than a long typing with simulated advanced time of test. This commit fixes the issue by awaiting the notification `notify_typing`.
`advanceTime()` that jumps to future and consumes timeout can mistakenly register and consume timeouts in the wrong order. We can't know for sure when the timeout is consumed so we cannot reliably provide a specific value to `advanceTime()`. This commit fixes it by patching a dedicated function that registers the timeout, so that the test can patch and asynchronously step when the long typing timeout is registered, also ensuring proper awaiting to simulate advance of time in a reliable way.
This commit also fixes an issue with recent PR [1] were `Demo is typing... { count: 0 }` were mistakenly turned into `Demo is typing...`. Diff in PR was big so some mistakes were expected!
Fixes runbot-error-237516
[1]: https://github.com/odoo/odoo/pull/238887This update speeds up product searches within Point of Sale by optimizing how products are filtered and sorted. Previously, the search process was slow due to redundant calculations. This change streamlines the search, resulting in a faster and more responsive user experience, especially when dealing with a large number of products.
Original PR description
Previously, the product search performed normalization inside the filter and sort loops. Because sort algorithms perform O(n log n) comparisons, the `normalize` function was called redundantly thousands of times for the same product, leading to UI lag when handling large products. This commit optimizes the search by: - Moving normalization to the model getters - Flattening the template search string to include all variants, removing the need for nested `.some()` loops during filtering. - Replacing `localeCompare` with primitive string comparison for faster sorting. opw-5448113 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241668
This update fixes a scheduling issue in the autovacuum cron job that was causing delays in database maintenance. The change ensures the cron job correctly reports partial progress, allowing for quicker rescheduling and preventing tasks from being delayed for an entire day. The code was also simplified for better readability.
Original PR description
**NOTE** the problem regarding the auto-vacuum was fixed in 18.3 and above (including master) at https://github.com/odoo/odoo/pull/216483, this PR now solely exists for branlette intellectuelle. Have…
**NOTE** the problem regarding the auto-vacuum was fixed in 18.3 and above (including master) at https://github.com/odoo/odoo/pull/216483, this PR now solely exists for branlette intellectuelle. Have a ir cron action with the following code: time.sleep(MIN_TIME_PER_JOB) self.env['ir.cron']._commit_progress(remaining=1) return The code looks stupid, but we tracked down a bug we had in the autovacuum cron in 18.3, and the minimum code to reproduce the problem is that above line of code. Since there are remaining stuff to do, the cron worker should report a `PARTIALLY_DONE` status, and reschedule to call the cron action asap. But the system currently determine a `FULLY_DONE` status and reschedule the cron action *later* (next day for a cron with an interval of 1 day). It is pretty bad for the autovacuum cron in 18.3 We used the opportunity to rework the `status` computation to one big match-case, for extra readability. 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#216116
This update resolves an issue preventing non-administrator users from archiving channels. By using `sudo`, users can now archive channels without needing specific permissions, improving channel management flexibility. This change enhances user experience and simplifies channel organization.
Original PR description
**Purpose of this PR:-** Allow users to archive channels using `sudo` so the action is not blocked by missing discuss role access error. task-5478832 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a minor issue within the Point of Sale (POS) testing process. Specifically, it ensures that a key step – verifying the existence of at least one paid order – is completed before the automated tour ends. This prevents potential errors and ensures the tour runs smoothly, providing a more reliable testing experience.
Original PR description
By adding a last step ( that check that there is at least one paid order), we ensure that the RPC is done before closing the tour. error-runbot-id~233511 error-runbot-id~232677 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#243815
This update resolves an issue where imported sales orders containing kit products (with tracked components) were incorrectly splitting the order into multiple lots during the POS process. This commit ensures that kits are no longer tracked by lots when sold, preventing errors and improving the reliability of POS sales transactions. This change was made to address a bug impacting order accuracy.
Original PR description
When a kit product with tracked components is sold, and if the kit is tracked by lots, the imported sale order lines were being split by lots causing issues in the POS session. Although kits are not supposed to be tracked by lots, this commit prevents the splitting of sale order lines by lots when the product is a kit. opw-5423833 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242785
This update resolves issues with the Knowledge editor, specifically preventing problems when copying and pasting headings and improving the responsiveness of the heading link button. The changes ensure consistent URL redirection and a smoother user experience when editing knowledge articles.
Original PR description
### [FIX] knowledge: prevent heading link id duplication on copy/paste Prior to this commit, copy/pasting a heading would preserve its `data-heading-link-id` resulting in mismatches for URL redirections. After this commit, such ids are always reset to guarantee unicity. ### [FIX] knowledge: throttle mousemove for heading link button Prior to this commit, every `mousemove` event could cause a layout trashing to reposition the heading link button. After this commit, the repositioning is debounced at a more reasonable rate. task-5384684 Forward-Port-Of: odoo/enterprise#104460 Forward-Port-Of: odoo/enterprise#101445
This update ensures that payment terminal responses sent via websocket include a necessary 'session_id' field. This resolves an issue that could have caused communication problems between the payment terminal and the Odoo system, improving the reliability of payment processing.
Original PR description
We provide the request data to the payment terminal response to ensure `session_id` exists in the response sent through websocket.
This update fixes an issue where numbers extracted from OCR boxes were incorrectly formatted due to language-specific decimal separator handling. The change simplifies the parsing process by consistently using a standard Javascript `Number` parser, ensuring accurate number representation regardless of the user's language settings. This improves data integrity for financial and reporting processes.
Original PR description
When using a language that doesn't use a dot as decimal separator, the number parsed from the box content was incorrect. For example, if the content of the box was "1234.56", the parsed value would have been "123456". This happened because the float parser available through the registry takes into account the language of the user and its configured thousands/decimal separators. Since the content of the boxes are always formatted as "1234.56", without thousands separator and with a dot as decimal separator, the regular `Number` parser of Javascript can be used to get consistent results. opw-[5427979](https://www.odoo.com/odoo/49/tasks/5427979) Forward-Port-Of: odoo/enterprise#104467
This update corrects a data inconsistency in Odoo. Previously, Bulgaria was linked to the Bulgarian currency (BGN). Now, it's correctly linked to the Euro (EUR) to reflect Bulgaria's adoption of the Euro as its official currency on January 1, 2026. This ensures accurate financial reporting and data for users operating in Bulgaria.
Original PR description
Description of the issue/feature this PR addresses: Bulgaria adopted the euro as official currency as of 2026-01-01. Update the base country data accordingly. Current behavior before PR: In `res_country_data.xml`, Bulgaria is linked to BGN. Desired behavior after PR is merged: Bulgaria is linked to EUR in `res_country_data.xml`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241957
This update fixes a usability issue in the Sign editor where the document dropdown didn't close correctly after selection. The fix adds a click listener to the PDF iframe to manage dropdown interactions, ensuring a smoother user experience. It also includes styling updates for consistency and clarity.
Original PR description
- Fix hover and pointer behavior on update document action - Apply consistent danger styling to delete action - Ensure dropdown closes correctly after interaction (PDF iframe has its own document so outside-click logic did not apply; add a click listener on the iframe document to close open dropdowns. ) task: 5384677 Forward-Port-Of: odoo/enterprise#102447
This update enhances the customer display popup in Point of Sale, making it easier to access customer information on both desktop and mobile devices. Previously, the popup opened in a separate window, which was difficult to use on a second device. Now, users will see a button to open the display on the same device or scan the QR code, streamlining the customer interaction process.
Original PR description
Changed to open the QR code popup on the desktop as well. Before it was opening directly in a new window and it was hard to open it on a separate device. The QR popup will: - on desktop: will show a button to open the customer display on the same device, or to scan the qr - on mobile: will show only the qr code to scan task-5129241 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243521 Forward-Port-Of: odoo/odoo#229478
This update fixes an issue where right-clicking on links within messages was obscured by extra message actions. Now, users will see the standard browser context menu options like 'Open Link' and 'Copy Link' when right-clicking on a link, providing a smoother and more intuitive experience.
Original PR description
Before this commit, when right-clicking on a link in a message body, this was showing the list of message actions in dropdown. This is a problem because right-click on link has features like "Open link" / "Copy link" and so on. They were over-shadowed by the right-click on message for showing of message actions. This commit prevent the showing of message actions in dropdown from right-click in links in message body, so that the browser context menu is open instead in that scenario, showing features like "Open link" and "Copy link".
This update fixes a technical issue that caused tracebacks when a member typed in group chats with multiple users. The fix restricts the display of typing indicators to direct messages (DMs) only, aligning with the expected behavior of group chats. This ensures a smoother user experience for all Odoo users.
Original PR description
Before this commit, when another member of a group chat with more than 2 members was typing it would result in a traceback. Steps to reproduce: 1. Have `hr_homeworking` and/or `hr_holidays` installed 2. Create group chat with 2 other users 3. Open said group chat 4. Have another member start typing -> traceback This happens because since [1] the condition to show the `ImStatus` component became `showImStatus`, which is true in group chats when another member is typing. However since group chats with more than 2 members have no correspondent, this leads to the `ImStatus` component having no `persona` attribute, which in turn causes a crashes in templates without a guard on `persona` access. This commit fixes the issue by making `showImStatus` only true in DMs, since it's not expected for group chats to have a correspondent and hence an IM status should not be shown. [1]: https://github.com/odoo/odoo/pull/234715
This update fixes a previous change that prevented automatic follower copying from parent sale orders to subscription renewals and upsells. This ensures that sales teams automatically receive notifications for related subscription activity, improving collaboration and communication. The change maintains the previous restriction for other Odoo record types.
Original PR description
[FIX] sale-subscription: Restore automatic follower copying from parent SO In Odoo 18.2 (Task 4655022), automatic follower addition was removed for all users and limited to internal users. However, for subscriptions, it is logical to automatically copy followers from the parent sale order to renewal and upsell orders. This commit restores that behavior for subscription renewals and upsells while keeping the restriction for other record types. task - 5002181 Forward-Port-Of: odoo/enterprise#101088
This update fixes an issue where sale warnings weren't showing when set on a company contact instead of an individual partner. The change ensures that all sale warnings, regardless of whether they're linked to a partner or their company, are now correctly displayed. This improves the accuracy of sales alerts and helps sales teams address potential issues proactively.
Original PR description
### Issue: Due to this issue, the sale warning message is only shown when the warning message is set on partner itself, not partner's company. #### Steps to reproduce (with demo data): 1- Enable `Sale warnings` from setting. 2- On `Contacts` app, open `Azure Interior`, and add a sale warning from `Notes` tab. 3- Create a SO with `Brandon Freeman` from `Azure Interior` as the customer. 4- No sale warning is shown. ### Cause: The IMP #192211 replaces warning popup with a message. However, it doesn't check for the warning from `partner_id.parent_id`, which was the case before that PR. This is the case with purchase as well. opw-5404983 Forward-Port-Of: odoo/odoo#242050
This update fixes a bug that prevented read-only accounting users from seeing the 'Customer Statement' button when viewing a customer record. The issue stemmed from a restriction in the system's access controls, which was unintentionally limiting access for read-only users. This change ensures all users with accounting rights can access this important feature.
Original PR description
Steps to reproduce: - Have a user with Accounting rights set to 'Read-only' - Login with the user - Open customer record - Button 'Customer Statement' won't be there Analysis: This occurs because we restrict the button visibility to 'Invoicing' users, even if all fields and views are accessible also for 'Read-only' users. opw-5357692 Forward-Port-Of: odoo/enterprise#103715 Forward-Port-Of: odoo/enterprise#102683
This update fixes an issue where invalid warehouse addresses caused continuous geolocation requests to OpenStreetMap. Now, when a location's coordinates cannot be determined, the system sets default coordinates, preventing further attempts and improving location accuracy for warehouse listings. This enhances the user experience and data reliability.
Original PR description
When a warehouse location had no coordinates, a request to geolocate the address was made to OpenStreetMap every time the location selector was open. However, when the address was invalid, the geolocation failed, and no coordinates were set, which caused further geolocation requests being continuously sent. This commit changes the geolocation behavior to set invalid coordinates for the address when the request fails, thus disabling future geolocation attempts for that address. Forward-Port-Of: odoo/odoo#243523
This update resolves a potential error in how accounting calculations handle specific scenarios, particularly when all factors are zero. The change ensures the system correctly distributes remaining amounts, preventing tracebacks and maintaining accurate financial reporting. This improves the stability and reliability of the accounting module.
Original PR description
In 614dcf23b89 `_distribute_delta_amount_smoothly` was changed to use a half-up round rather than a ceiling, and incorporate an additional step of distributing any remaining cents. However, the step that distributes any remaining cents relies on the assumption that there are less remaining cents than the number of factors. This assumption generally holds true because most cents are already allocated in the first step which uses the `round` function; except in one edge case, which is if all factors are zero. In that case, the `_normalize_target_factors` method will return an all-zero list of normalized factors, and so no cents will be allocated in the first step. The fix is to change `_normalize_target_factors` so that in this edge case, the list of normalized factors allows most cents to get allocated in the first step. See #240136 task-none Forward-Port-Of: odoo/odoo#240616
This update enhances the reliability of website generation by ensuring that customized images are correctly updated and by optimizing database operations. The changes address a previous issue where images weren't being replaced properly and reduce the number of database queries, leading to faster and more stable website updates.
Original PR description
Added commit_progress during website generation, this is now required due to the reduction of the timeout delay of crons as well as to ensure robustness. Fixed bug where the customized images where not replaced correctly. It happens because we were copying the original instead of fetching the modified one. Switch to record operations in batch to reduce number of queries.
This update fixes a potential issue where Odoo installations didn't consistently create foreign key relationships in the database. This resulted in 'Record missing' errors appearing later, often after weeks or months, due to inconsistencies. Merging this change will guarantee that Odoo installs with properly configured foreign keys, improving database stability and preventing these unexpected errors.
Original PR description
---- Description of the issue/feature this PR addresses: See related OPW Ticket [opw-5495025](https://www.odoo.com/my/tasks/5495025) Current behavior before PR: Odoo seems to install correctly, and works normally. However the database consistency is not ensured. Foreign Keys are not created. User receives `Record missing` errors after some time, when there was a Contact deleted, for example. Issue is dangerous, because it can be latent and be undetected for weeks or months. Desired behavior after PR is merged: Odoo installs *with* the Foreign Keys, and works normally. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr --- Ticket opw-5495025 Forward-Port-Of: odoo/odoo#243833
This update resolves a problem where Odoo invoices exported to the SII system (Chile) were being rejected due to incorrect decimal formatting. The fix ensures the `<TotClauVenta>` tag always uses a maximum of two decimal places, aligning with SII requirements and preventing validation errors. This ensures accurate export invoices and avoids potential disruptions to the export process.
Original PR description
Before this PR: Everything works fine, but if the user change the decimal precision for foreign currency (i.e. USD, usually needed for export invoices, for example to three decimals), the SII system…
Before this PR: Everything works fine, but if the user change the decimal precision for foreign currency (i.e. USD, usually needed for export invoices, for example to three decimals), the SII system rejects the invoice. The rejectment cause is cryptic, and difficult to undertand, since it says: That is expecting a `<Documento>` tag, while this tag is not used in Exports invoices (the correct tag is `<Exportaciones>`. The real cause of the error is that if the `<TotClauVenta>` tag has more than 2 decimals is ignored, and if it is ignored, the SII system assumes that the invoice is not an export invoice, and that's why an incorrect tag is expected by the validator. After this PR: We simply forced the decimals of the tag `<TotClauVenta>`to 2. This definitely solves the issue. Source: https://www.sii.cl/factura_electronica/formato_dte.pdf Capture of this portion of the normative: <img width="626" height="118" alt="Captura de pantalla 2026-01-07 a la(s) 18 21 06" src="https://github.com/user-attachments/assets/3b9ec8f0-d343-4819-8589-67afeeeba807" /> Forward-Port-Of: odoo/enterprise#103600