Thursday, April 23, 2026
71 changes · saas-19.3
Resolved issues and error corrections
This update corrects a reporting setting that was left in an outdated format in several local tax reports. As a result, migrated reports for Spain, Italy, Luxembourg, and Uganda can open normally again without validation errors.
Original PR description
- This aggregation expression used to have 'cross_report' as subformula. Though, it was useless (since the aggregation only uses term from the same report), and the subformula was removed from the…
- This aggregation expression used to have 'cross_report' as subformula. Though, it was useless (since the aggregation only uses term from the same report), and the subformula was removed from the data file without explicitly resetting it to False. This became a problem in 18.3, because the cross_report syntax changes. Because of that, a migrated report failed to open, since it still was using the old syntax on that expression. We fix that by explicitly emptying the subformula. see https://github.com/odoo/odoo/pull/193106 ```python3 Opération invalide Dans le rapport "Section I (LU)", à la ligne "472 - Autres Ventes / Recettes", avec le libellé "balance", Le format de l'expression de rapport croisé est invalide. Format attendu : cross_report(<report_id>|<xml_id>) Exemple : cross_report(my_module.my_report) ou cross_report(123) ``` opw-6103170 upg-4166654(lu) upg-4163103(it) upg-4175631(ug) upg-4177165(es) 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#258826
A bug that could cause an error while editing salary adjustments has been fixed. The system now handles missing start dates safely, preventing a traceback during form updates and making the payroll workflow more reliable.
Original PR description
This task guard against falsy date_start in _compute_estimated_end to avoid adding a relativedelta to False, fixing a traceback appearing during onchange. task-6139538 Forward-Port-Of: odoo/enterprise#114332
This fix prevents an error when users click certain cells in the Trial Balance report, specifically for Undistributed Profits/Losses. It restores the expected report details so users can open the related information without interruption.
Original PR description
This error occurs when clicking on any cell for `Undistributed Profits/Losses` in the `Trial Balance` report. Steps to reproduce: - Install `Accounting` module - Create `Journal Entry` with past-year…
This error occurs when clicking on any cell for `Undistributed Profits/Losses` in the `Trial Balance` report. Steps to reproduce: - Install `Accounting` module - Create `Journal Entry` with past-year `Accounting Date` (eg: 31-12-2025) and include one `Journal Items` for `Undistributed Profits/Losses` - Open `Trail Balance` report and click on any cell for `Undistributed Profits/Losses` Traceback: `KeyError: 'report_line_id'` Before this [commit], we were returning fields with `null/None` values. After the commit, fields containing `null/None` [value] are removed, and only fields with valid values are returned. As a result, when the `dispatch_report_action` function is called, the `report_line_id` is missing in `params`. [commit]: https://github.com/odoo/enterprise/pull/102808/changes/b92dc397bef029472a40223f51b611cdf5b631dc [value]: https://github.com/odoo/enterprise/blob/626b8157bcea2e3843cd9d5d0c0036e302b8e5ce/account_reports/utils/report_data_objects.py#L42-L43 sentry-7372351871 opw-6119913 Forward-Port-Of: odoo/enterprise#113421
This change stops combo products from being selected directly in the mobile sales order line form. It prevents orders from ending up with an empty, zero-priced line and missing the required child items, improving order accuracy and reducing follow-up corrections.
Original PR description
Combo products bypasses the configurator in mobile view, resulting in a 0-price line with no child lines. Exclude them via domain on the field. opw-5999935 Forward-Port-Of: odoo/odoo#260056 Forward-Port-Of: odoo/odoo#256790
Downloading a receipt for kiosk self-orders now works correctly. This fixes an error that could stop users from viewing or saving the receipt for these orders.
Original PR description
Currently an error occurs when the user tries to `Download Receipt` of self-orders as the following steps: - Install the pos_self_order module - Create a new POS shop with `Self Ordering` as `Kiosk` - Add Online `Payment Methods` on the above POS shop - Make an order from kiosk mode - Go to Point of Sale > Orders > Orders - Open the recent order which was created from the kiosk. - Click `Download Receipt` > Error Error: `QWebError:Error while rendering the template: AttributeError: 'bool' obje...` This issue occurs because, while rendering pos_order_receipt_header`, the `preset` value is `False`. Attempting to call `.get()` on a falsy value leads to an error. This commit fixes the issue by accessing `preset` only when it is available, preventing errors during rendering. sentry-7402711985 Forward-Port-Of: odoo/odoo#259336
A rendering issue could turn a normal percent sign in website and template text into a doubled percent sign, such as displaying "400%%" instead of "400%". This fix ensures text is shown exactly as intended when no placeholder values are present.
Original PR description
`_compile_format` unconditionally escaped `%` to `%%` to protect against Python's `%`-formatting, but only appended the `% (values,)` formatting operation when `#{...}` placeholders were present. With no placeholders, the escape was never undone and `%%` leaked into the rendered output.
This went unnoticed until the introduction of paramteric t-call: https://github.com/odoo/odoo/commit/eb6e88a25050
And since we use `.translate` and `.f` directly in existing views this became apparent
Example:
```xml
<t t-call="website.s_wd_testimonial"
_testimonial_quote.translate="...by 400%."/>
```
will be rendered as `...by 400%%.` on the page.
To prevent this, we can simply check for the absence of values and simply return the repr as is if there isn't any.
Forward-Port-Of: odoo/odoo#260434This update prevents an error that could occur when opening account report information. It ensures the report uses the correct update method for its internal data, so reports load reliably again.
Original PR description
Currently, an error occurs when retrieving account report information. ``` File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1475, in _create_hierarchy…
Currently, an error occurs when retrieving account report information.
```
File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1475, in _create_hierarchy
render_lines(root_account_groups, current_level, root_line_id, skip_no_group=False)
File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1373, in render_lines
child_line.update
^^^^^^^^^^^^^^^^^
AttributeError: 'AccountReportLineData' object has no attribute 'update'
```
After the [recent commit], all lines, columns, format_params, and annotations are converted into custom objects (AccountReportLineData). However, the code still attempts to use the update() method on these objects, which raises an error [1] since AccountReportLineData does not have an update method.
This commit ensures that the update_value() method is used to update AccountReportLineData objects, as intended, like here [2].
[recent commit]: https://github.com/odoo/enterprise/commit/6608d5c21a7fb9d57786c2a7618b878e244bd420
[1]- https://github.com/odoo/enterprise/blob/cde4e05de82476655764f8c9fe8734416d4a35bf/account_reports/models/account_report.py#L1373-L1377
[2]- https://github.com/odoo/enterprise/blob/cde4e05de82476655764f8c9fe8734416d4a35bf/account_reports/models/account_report.py#L6565
sentry-7403925422
Forward-Port-Of: odoo/enterprise#113668This update removes the "17" tax tag from several French service tax rates where it did not belong. It helps ensure French tax reporting stays accurate by applying that tag only to goods, not services.
Original PR description
**Issue:** In French localization, a tax tag (i.e. "17") was wrongly added on several taxes for service by a fix: https://github.com/odoo/odoo/commit/f9237cfbb6a9ffbd0a392e4e77e097d5963a5fc3 This tax tag should only be applied on taxes for goods, not service. **Solution:** Remove the tax tag from the following taxes: - 20% EU S - 8.5% EU S - 10% EU S - 5.5% EU S - 2.1% EU S opw-5871998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260617
Imported XML files are now kept attached to the related record instead of being detached during import. This prevents access errors in certain invoice workflows, including Mexican electronic invoicing, when users open bills later.
Original PR description
When importing files (manually or from email alias), we unattach the xml files, it can lead to access error in some flows like with l10n_mx_edi Steps to reproduce the flow that triggered the bug: - Install l10n_mx_edi and select MX company - Create an email alias for purchase journal - Receive email with xml file - Create a user with 'group_user' role, 'Administrator' accounting access rights - Login with this user and open the created bill -> Access Error This is because we unattach xml attachmentss when importing them, by setting `res_id` to 0 and `res_model` to False. The mx edi flow adds the `l10n_mx_edi_cfdi_attachment_id` via `_get_mail_thread_data_attachments` which lead to an access error during the `fetch` method opw-5953578 closes odoo/odoo#260545 X-original-commit: 7023bb316ca266a18abccc7e8c13069deafc562b Signed-off-by: Laurent Smet (las) <las@odoo.com> Signed-off-by: Guillaume Vanleynseele (guva) <guva@odoo.com>
The website builder now applies the correct zoom level to snippets that use scroll-based background effects in the block chooser. This fixes cases where the zoom looked too weak when browsing custom snippets, so the preview matches what users expect.
Original PR description
Commit 468ddd4d244d0098e5c8b9726bc1c85c036a913d changed the viewport height of the iframe in the snippets preview dialog (from `333%` to `100%`). That height is used in the computation of the zoom effect of backgrounds. This computation was not adapted to the change of height, and thus the zoom was too weak. This commit adapts the computation for the zoom to compensate the viewport height change of that previous commit. Steps to reproduce: - Open website builder - Create a bunch of custom snippets (for scrolling in the dialog) - Create a custom snippet which has a background with "Scroll Effect" set to "Zoom In" (or "Zoom Out") - Create a bunch of custom snippets (for scrolling in the dialog) - Open the dialog to "Insert a block", choose the "Custom" category - Scroll - Bug: the custom snippets with zooming task-6088029
Configurable benefits will now appear even when there is no salary summary for the same structure type. This prevents an error when adding these benefits and keeps the employee benefit setup working smoothly.
Original PR description
Cause: After this task https://www.odoo.com/odoo/project/1251/tasks/5419466, the showing of benefits was restricted by mistake to only when there was a salary summary for the same structure type. This meant that adding a configurable benefit would result in a traceback, since the template was then used to get more info later on. Fix: Always show configurable benefits, even if there is no salary summary for the same structure type. task-6126621
Project chatter will no longer automatically record status updates from linked Sales Orders. This reduces unnecessary notifications and keeps project activity history focused on information that is directly relevant to the project.
Original PR description
Before this commit: - The chatter on the Project record tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `project.project`, `project.task` models. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/odoo#258549
Helpdesk tickets will no longer automatically log chatter messages when the linked Sales Order changes status. This reduces unnecessary noise in ticket discussions and keeps the conversation focused on the helpdesk issue itself.
Original PR description
Before this commit: - The chatter on Helpdesk Tickets tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `helpdesk.ticket`. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809 Forward-Port-Of: odoo/enterprise#114078
This update fixes the appearance of contract-related buttons on the employee form. It keeps the “New Contract” label on one line at narrow widths and makes the contract template button match the surrounding interface more consistently.
Original PR description
- Add `text-nowrap` to the "New Contract" button to prevent text from splitting at narrow viewport widths - Fix contract template button styling: remove incorrect classes and align font-size and border with the surrounding UI task-6068488 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#256017
The button for contract templates on the employee form now matches the surrounding interface more closely. This improves the visual consistency of the page and makes the form look more polished for users.
Original PR description
Fix contract template button styling: remove incorrect classes and align font-size and border with the surrounding UI task-6068488 Forward-Port-Of: odoo/enterprise#112113
This update improves how the editor handles text that is written inside inline code. It prevents formatting tools from appearing when they are not useful, and makes sure pasted content is turned into plain text so code stays clean and consistent.
Original PR description
### Purpose of this commit: - Prevent the powerbox and toolbar from opening when the selection is fully inside inline code. When the selection spans inline code and regular text, keep the toolbar visible but ensure formatting commands are applied only to the non-inline-code content. - Ensure that pasted external and editor HTML is converted to plain text when inserted inside inline code. task-5502939 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258781 Forward-Port-Of: odoo/odoo#250911
The calendar popover no longer shows a tooltip when hovering over a boolean field. This avoids displaying unhelpful HTML content and makes the calendar view cleaner and less confusing for users.
Original PR description
Before this commit, the tooltip of a boolean field in calendar popover shows html content when the user hovers the boolean field. This commit removes the tooltip of boolean field in calendar popover since the information inside that tooltip is not really useful for the user. Issue found during the development of task-5994205 Forward-Port-Of: odoo/odoo#260012 Forward-Port-Of: odoo/odoo#259011
Subscriptions that were closed manually by a salesperson will no longer reopen automatically when a payment is approved or an invoice is paid. This prevents unexpected reactivation and avoids follow-up issues for teams managing subscription cancellations.
Original PR description
Before this commit, when a subscription was closed manually by the salesperson, it could be reopened when a transaction was approved or an invoice paid. It could cause issue. In this case, we should not reopen automatically. task-5900481 Forward-Port-Of: odoo/enterprise#113026 Forward-Port-Of: odoo/enterprise#106487
This update resolves a critical issue preventing successful capture or voiding of Adyen payments. The fix ensures the necessary payment provider reference is included in transactions, allowing the payment gateway to process requests correctly. This improves payment processing reliability for Adyen users.
Original PR description
Issue 1: --- Capturing/voiding transaction is failing with the error: `The payment provider rejected the request. Original pspReference required for this operation` Steps to reproduce: 1- Setup Adyen…
Issue 1: --- Capturing/voiding transaction is failing with the error: `The payment provider rejected the request. Original pspReference required for this operation` Steps to reproduce: 1- Setup Adyen payment provider. 2- Enable `Capture amount manually`. 3- Create a SO and confirm. 4- Generate a payment link and pay. 5- In SO, capture the full amount. Cause: --- After https://github.com/odoo/odoo/commit/efc2788dfccd13ee6feb309430ff57e49664ff97, in the payment `_void()`/`_capture()`, a child tx is created. However the child tx is missing the `provider_reference` required to send the payment provider. Issue 2: --- The child tx created for capture/void is always remains in draft state. Cause: --- This is reproduced after https://github.com/odoo/odoo/commit/efc2788dfccd13ee6feb309430ff57e49664ff97 which we create a child tx in capture/void. But in `_search_by_reference` which is called by webhook to find the tx, we are returning the source tx. As a result only the state of the source tx is changed. opw-6120846 opw-6120071 Forward-Port-Of: odoo/odoo#259223
This update ensures that changes to salary information within the salary configurator correctly update related mobility budget calculations. Previously, changes outside this specific context could cause inconsistencies. This change improves the accuracy of mobility budget calculations by limiting updates to the relevant salary data.
Original PR description
For consistency purposes, we only trigger the inverse on the mobility budget computation if we are in the context of the salary configurator. Changing the wage in the back end or changing the employer cost should only touch the wage and not other benefits Forward-Port-Of: odoo/enterprise#112510 Forward-Port-Of: odoo/enterprise#111828
This update resolves an issue preventing developers from creating new Odoo development repositories. Previously, the system required an existing addons directory, now it accepts empty repositories, streamlining the process for building new Odoo modules. This change improves developer workflow and reduces friction for creating new development environments.
Original PR description
Initialize a new empty git repository where you are going to vide-code some new Odoo modules. Because the repository is empty (no addon yet) the CLI fails with an "option --addons-path: the path <path> is not a valid addons directory". This makes vide-coder sad, and bigrams want vide-coders to be happy, so drop the sanity-check and also accept empty addons. Forward-Port-Of: odoo/odoo#259007 Forward-Port-Of: odoo/odoo#256913
This update fixes an issue where scanning GS1 barcodes with leading zeros (like EAN-13 codes) would sometimes fail to correctly identify products. The change ensures that barcodes are accurately matched to their product variants, improving the reliability of the point-of-sale system. This prevents lost sales and ensures accurate product identification.
Original PR description
When scanning a GS1 barcode whose GTIN-14 has a leading zero (e.g. a product stored with EAN-13 "5400000002649" is encoded as GTIN-14 "05400000002649"), the product lookup in _getProductByBarcode failed because the exact string did not match the stored barcode. opw-6117948 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259199
This update fixes an issue where prices in multi-currency Point of Sale (PoS) transactions were incorrectly calculated. Now, prices are accurately converted from the product's native currency to the PoS configuration currency, ensuring accurate pricing across different currencies. This improves the reliability of PoS transactions in international settings.
Original PR description
Before this commit, in a multi-currency environment, the company currency was used to convert the prices, while it was a wrong assumption that the product prices were in the company currency. The products have a currency_id field, and the price should be converted from that currency to the PoS config currency. opw-6065969 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259407 Forward-Port-Of: odoo/odoo#257324
This update resolves an issue where the Point of Sale app on iOS/Safari would unexpectedly crash due to a lost connection to its database. The fix prevents crashes when the app goes to the background or when the operating system temporarily closes the database connection. This ensures a more reliable and stable Point of Sale experience for our iOS users.
Original PR description
On iOS/Safari, the WebKit IDB server process can be killed by the OS (e.g. due to memory pressure when the app is backgrounded), resulting in an UnknownError: "Connection to Indexed Database server lost". Additionally, returning from background can leave the connection in an InvalidStateError "closing" state while this.db remains non-null. opw-5121896 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259697 Forward-Port-Of: odoo/odoo#253943
This update fixes an issue where dropdown menus in the Odoo interface appeared cramped due to missing vertical spacing. The change restores natural spacing, ensuring items don't overlap when group headers are sticky, improving the overall user experience.
Original PR description
Recent structural changes added `p-0` to the menu class, removing the vertical padding from the dropdown. Rather than padding the scroll container directly (which would conflict with sticky group headers), apply `margin-top/bottom` on the first/last children of `.o_select_menu-choices` so the spacing scrolls naturally without creating a gap items could bleed through when a group header is stuck. task-6095912 Forward-Port-Of: odoo/odoo#258929
This update fixes an issue where the system wasn't correctly applying pension fund tax (TC08) during XML import when the tax rate was 0.00. The fix ensures accurate tax assignment, preventing missing tax associations and maintaining compliance with accounting rules. This improves the reliability of imported vendor bills.
Original PR description
### Issue before this commit: When importing vendor bills from XML files containing a pension fund (e.g., type TC08), the pension fund tax was not correctly applied to the invoice lines. As a result,…
### Issue before this commit: When importing vendor bills from XML files containing a pension fund (e.g., type TC08), the pension fund tax was not correctly applied to the invoice lines. As a result, the imported bills were missing the expected tax association. ### Steps to reproduce the issue: 1. Download Accounting and l10n_it 2. Set the pension fund type as TC08 (or another one is also fine) in the Advanced Tab of 4% F.Pens. tax 3. Try to upload an XML for vendor bills with a TC08 tax 4. The tax is not associated ### Cause of the issue: The issue was caused by the handling of the VAT rate (AliquotaIVA) when its value was 0.00. The code incorrectly treated this value as falsy, preventing the correct identification and assignment of the pension fund tax during the import process. ### Reason to introduce the fix: The fix ensures that a VAT rate of 0.00 is correctly interpreted as a valid value rather than being ignored. This allows the system to properly detect and apply the pension fund tax during XML import, ensuring accurate tax assignment and compliance with expected accounting behavior. opw-6093352 Forward-Port-Of: odoo/odoo#258341
This update resolves a visual issue where the 'to_review' badge on employee forms wasn't highlighting correctly. This was caused by a change in how tracking messages were stored after a previous update. The fix ensures the badge accurately indicates review tasks, improving the employee workflow.
Original PR description
After master-field-tracking-poc-ppr removed the mail.tracking.value model, tracking messages are now stored with message_type='tracking' instead of 'notification'. The thread_patch.js highlight filter was still matching on 'notification', causing no messages to be found when hovering the to_review badge on the employee form. task-6128747
This update resolves an issue where the 'Scan the QR code to pay' message on the kiosk online payment page was consistently displayed in English, regardless of the selected language. Now, the payment page will correctly translate the QR code instructions based on the user's chosen language setting, improving the user experience for international customers.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update fixes an issue where creating a physical inventory adjustment with a zero quantity difference generated unnecessary journal entries. The change ensures that account moves are only created when there's a valid stock movement, reducing accounting noise and improving data accuracy. This impacts the stock accounting module.
Original PR description
**Issue**: Applying a physical inventory adjustment with a 0 quantity difference creates an account move with 0 debit/credit, resulting in accounting noise. **Steps to reproduce**: - Configure a product with perpetual valuation - Go to Inventory > Configuration > Warehouse Management > Locations - Remove the internal filter and open the "Inventory adjustment" location - Set a Loss Account - Go to physical inventory - Create and apply for this product with counted quantity of 0 - Go to Journal Items -> An item is created **Cause**: While checking whether an `account.move` should be created: https://github.com/odoo/odoo/blob/9dfd673465e4a3326a6caa64c8d61fe7319cbc44/addons/stock_account/models/stock_move.py#L613-L620 The quantity of the `stock.move` is not taken into account. opw-5957406 Forward-Port-Of: odoo/odoo#257650 Forward-Port-Of: odoo/odoo#254331
This update resolves performance issues and crashes when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, significantly reducing server load and improving export times.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update resolves an issue where product category breadcrumbs displayed incorrectly on different Odoo websites. Specifically, when a product is linked to categories on multiple websites, the breadcrumb would sometimes lead to a 404 error on the incorrect website. The fix ensures the category selection is tied to the current website being viewed, improving the user experience and preventing broken links.
Original PR description
An issue is observed when two categories share the same name but are assigned to different websites, and a product is linked to both categories. Steps to Reproduce: ==================== 1. Create two…
An issue is observed when two categories share the same name but are assigned to different websites, and a product is linked to both categories. Steps to Reproduce: ==================== 1. Create two Ecommerce categories with the same name, one assigned to Website 1 and the other to Website 2. 2. Create a product and assign both categories to it. 3. On Website 1, navigate to the product page and click the category breadcrumb → works correctly 4. On Website 2, navigate to the same product page and click the category breadcrumb → **404 error** Cause: ====== In `_prepare_product_values`, when no category is passed in the URL, the fallback was: https://github.com/odoo/odoo/blob/a253cff9039fcf729a9922b119acad5ec7c7a0bd/addons/website_sale/controllers/main.py#L802 This blindly picks the **first** category from the product's public categories without checking which website it belongs to. If the first category (by ID order) belongs to Website 1, it gets used even when the user is browsing Website 2. The breadcrumb then generates a slug pointing to Website 1's category. When clicked on Website 2, `can_access_from_current_website()` fails for that category, resulting in a 404. Solution: ========= Filter `public_categ_ids` through `can_access_from_current_website()` before selecting the first one. opw-6070191 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260391 Forward-Port-Of: odoo/odoo#258336
This update resolves an issue where saving certain website templates (like order confirmation emails) would trigger an error due to how the system processed empty `t-foreach` loops. The fix ensures the template's HTML is valid, preventing the system from incorrectly modifying the template's structure and causing the error. This improves the stability and reliability of the website's email templates.
Original PR description
**Steps to reproduce:** - Install sale / website_sale - In debug mode, go to Settings app - Go to Technical > Email > Email Templates - Try to edit and save "Sales: Order Confirmation" or "Ecommerce:…
**Steps to reproduce:**
- Install sale / website_sale
- In debug mode, go to Settings app
- Go to Technical > Email > Email Templates
- Try to edit and save "Sales: Order Confirmation" or "Ecommerce: Cart Recovery"
- QWebError is raised: 'IndentationError: unexpected indent'
**Issue:**
Before a `mail.template` is rendered in the html editor it must be valid html (even if they contains qweb elements) to avoid the browser silently moving elements around to match its specifications (and breaking template logic). This is also what happens with `DOMParser.parseFromString` function.
e.g. the browser moves html elements out of the parent `<table>` if they are not the children of a `<tr>` `<td>`.
```xml
<table>
<t t-foreach=...>
<tr>
<td>1</td>
</tr>
</t>
</table>
```
Becomes:
```xml
<t t-foreach=...>
</t>
<table>
<tbody>
<tr>
<td>1</td>
</tr>
</tbody>
</table>
```
**Fix:**
The template is still working if not edited, but we need to ensure the template `body_html` is valid html to avoid the hierarchy modification.
related: https://github.com/odoo/odoo/commit/dbd8b879fd95f3e913e1c777cb8619c4e0673b03
similar issue: https://github.com/odoo/odoo/pull/259548
opw-6055026
Forward-Port-Of: odoo/odoo#256605This update fixes a bug in the HTML editor where email addresses weren't automatically converted into clickable links after a space. Now, typing an email address followed by a space will create a functional mailto link, making it easier to send emails directly from within the editor.
Original PR description
Before this commit: when typing an email address, it's not converted to a mailto link after spacing. After this commit: the mailto link is created after spacing. task- 6053993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258736 Forward-Port-Of: odoo/odoo#257497
This update fixes a display issue in grouped list views where the pager incorrectly showed a limited count instead of the total number of records. The system now accurately reflects the total record count when using a pager, improving the user experience and data accuracy. This ensures users always see the complete picture when navigating large lists.
Original PR description
When a pager is needed in a grouped list view and if the total number of record is greater than the `count_limit` (by default equal to 10000); opening the group or pressing the "Next" button will display the `count_limit` in the Pager.
This behavior can be optimized since the `web_read_group` call already computed the total count.
This commit allow the grouped list pager to display the total record count if it was already computed.
Steps to reproduce:
in a list view with 10 records, all in the same group for simplicity:
```xml
<list limit="2" count_limit="8">
<field name="foo"/>
</list>
```
- group the view by "foo" => The pager displays: `"1-2 / 10"`
- click on the 'next' button of the pager => The pager displays: `"3-4 / 8"`
8, the `count_limit` is shown instead of 10, the number of records in the group.
task-6053705
Forward-Port-Of: odoo/odoo#259858
Forward-Port-Of: odoo/odoo#259562This update resolves an issue where close buttons on views without names triggered unexpected behavior in the system. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of action callbacks.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves a compatibility issue between Odoo and Python 3.14, specifically related to how data sets are handled. The change ensures Odoo functions correctly on the Resolute environment, addressing a technical detail that improves stability. This update primarily impacts the core system.
Original PR description
Forward-Port-Of: odoo/odoo#259669 Forward-Port-Of: odoo/odoo#258568
This update ensures that signed documents attached to projects or tasks automatically save to the project's designated Documents folder, mirroring the behavior of regular attachments. Previously, signed documents defaulted to 'My Drive,' creating inconsistency. This change improves organization and simplifies document management within Odoo Enterprise.
Original PR description
Steps to Reproduce --- - Request a signature from a project task or project and complete the signing process. - In the chatter, click "Add to Documents" on the signed attachment. Issue --- Signed documents attached to projects or tasks default to "My Drive" when added to Documents, instead of using the project's configured Documents folder. Current Behaviour --- - Regular task/project attachments correctly preselect the project Documents folder. - Signed attachments fall back to "My Drive". Expected Behaviour --- Signed documents linked to projects or tasks should preselect the project's Documents folder, consistent with regular attachments. Fix --- Extend get_documents_operation_add_destination to handle sign.request attachments linked to project.task or project.project, resolving to the corresponding project Documents folder. task - 5226770 Forward-Port-Of: odoo/enterprise#105600
This update simplifies the setup of the Mollie payment method in POS. Previously, a frustrating error prevented users from saving their configuration; now, they can complete the initial setup once. The system will still flag missing API keys, ensuring payments continue to function correctly.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update streamlines the loading of data for the self-ordering point of sale module. By only retrieving the necessary information, the system now runs more efficiently, particularly when handling self-ordering transactions. This change improves the overall speed and responsiveness of the self-ordering experience.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259126 Forward-Port-Of: odoo/odoo#257865
This update optimizes the loading of data for the self-ordering point-of-sale system. By limiting the fields loaded, the system now runs more efficiently, particularly when handling self-ordering transactions. This results in faster response times and a smoother user experience for customers using self-ordering.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0 Forward-Port-Of: odoo/enterprise#113801 Forward-Port-Of: odoo/enterprise#113661
This update fixes an issue where Arabic text on invoices was incorrectly formatted in English reports. The change ensures parentheses and other characters are properly aligned with the Arabic text, improving readability for international customers. This resolves a display problem related to how Odoo generates PDF invoices.
Original PR description
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in…
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in the wrong position in the generated PDF. **Steps to reproduce:** 1. Create a product named: لوحة توزيع كهربائية 100 أمبير (شنايدر ) 2. Create an invoice with that product 3. Print the invoice PDF in English 4. Observe the brackets are misplaced in the description column **Current behavior:** Parentheses appear detached from the Arabic word they enclose, floating at the wrong end of the text. **Expected behavior:** Parentheses correctly wrap the enclosed Arabic text. **Cause of the issue:** Odoo's report CSS sets `direction: ltr` on elements that are ancestors of the line description span. When CSS `direction: ltr` targets the same element as `dir="auto"`, wkhtmltopdf's WebKit engine lets the CSS rule win, keeping the paragraph base direction as LTR. The Unicode BiDi algorithm then resolves parentheses (neutral characters) using LTR as the base direction, misplacing them. **Fix:** Placing `dir="auto"` directly on the `<span>` that renders the line description — rather than the parent `<td>` — avoids the CSS override. wkhtmltopdf then detects the first strong character (Arabic) and uses RTL as the base direction for that span, allowing the BiDi algorithm to correctly position the brackets. opw-5884712 Forward-Port-Of: odoo/odoo#259594 Forward-Port-Of: odoo/odoo#251190
This update resolves an issue where the Odoo subscription process could miss or unnecessarily replay notifications due to outdated starting points. By establishing a clear, server-provided starting point for each subscription, the system now efficiently delivers notifications and avoids performance problems related to outdated data. This enhances the overall reliability and responsiveness of the live chat feature.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an intermittent issue where the receipt logo and QR codes were sometimes missing from printed tickets. The change ensures images are fully loaded before printing, guaranteeing a complete and professional-looking receipt for customers. This improves the overall user experience and brand image.
Original PR description
The receipt logo (and other images like QR codes) was sometimes missing from the printed ticket. This happened intermittently because the receipt image was being generated (captured from an iframe) before the browser had finished decoding and rendering the logo image within that iframe. This commit updates PosTicketPrinterService to use the waitImages utility, ensuring that all images in the receipt's iframe are fully loaded and rendered before returning the iframe for further processing (printing or canvas capture). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258705
This update optimizes the process of searching for channel invitations, which was previously slow due to an expanded dataset. The fix removes unnecessary steps like case-insensitive sorting and duplicate counting, resulting in a faster and more efficient search experience. This improves the responsiveness of the system when inviting users to channels.
Original PR description
Since [1], the check in `search_for_channel_invite` that restricted the search to internal users was removed. As a result, the dataset to process has exploded and the query is very slow. Moreover,…
Since [1], the check in `search_for_channel_invite` that restricted the search to internal users was removed. As a result, the dataset to process has exploded and the query is very slow. Moreover, the method is ordering on `LOWER(name)` which is not indexed, and another query is done to count the total results, which slows down the process even more. This PR fixes those issues by: - Removing the `LOWER` ordering. Ordering in a case sensitive fashion is not that big of a deal anyway. - Removing the count query, fetching one more partner in the search is enough to know if there are more results, executing the same query twice is overkill. - Reducing the number of partner returned: currently 30, but there isn't enough space to display them anyway. task-4526176 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#259869
This update fixes a visual inconsistency on the subscription portal. Previously, the portal showed all products from a subscription order, regardless of whether they were invoiced, leading to incorrect tax totals. Now, the portal only displays invoiced product lines, ensuring accurate tax calculations and a consistent user experience.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088
This update fixes an issue where the timesheet and grid views were displaying incorrectly, with overlapping elements and inconsistent formatting. Specifically, column widths were adjusted to ensure the timesheet's magnifying glass and overtime data were properly displayed without overlap or spanning multiple lines, improving the overall user experience.
Original PR description
# [FIX] web_grid: column width with new time widget in month This commit increases the default width of the grid columns. Prior to this, the magnifying glass in Timesheets overlapped with the times in month scale, because the columns were too small. # [FIX] timesheet_grid: column overtime layout Without this commit, the overtimes were spanning two lines because the columns were too small. This commit changes the layout so that it spans one line to be consistent with the grid values. task-6121017 Forward-Port-Of: odoo/enterprise#114356
This update ensures vehicle license plate information is consistently included in XML export files for invoices, regardless of whether the 'account_accountant_fleet' module is installed. This improves data accuracy and consistency across all Odoo environments, particularly those using community databases. It addresses a previous issue where community databases were missing this critical vehicle data.
Original PR description
[FIX] account_fleet: vehicle sent in XML when an invoice line has a vehicle linked, the vehicle license plate will be in the export XML file only if the enterprise module `account_accountant_fleet` is installed. Any community db will then not have the ref included This commit moves the vehicle data in `account_fleet` to expose it to community dbs runbot-242562
This update ensures that vehicle information is correctly included in XML export files for community database versions of Odoo Enterprise. Previously, vehicle data was only included when the 'account_accountant_fleet' module was installed. This change expands the data available in community databases, improving reporting and data consistency.
Original PR description
[FIX] account_accountant_fleet: vehicle sent in XML when an invoice line has a vehicle linked, the vehicle license plate will be in the export XML file only if the enterprise module `account_accountant_fleet` is installed. Any community db will then not have the ref included This commit moves the vehicle data in `account_fleet` to expose it to community dbs runbot-242562
This update corrects a visual issue where the timesheet display overlapped records when scrolling on smaller screens. The changes expand the timesheet layout and adjust its height to prevent double-scrolling, ensuring a smoother and more user-friendly experience for timesheet management.
Original PR description
Before: The systray overlaps the records when scrolling on small screens Changes: - Expands the record list to avoid scrolling overlaps - Make the timesheet list expand before the checkout button to ensure no overlap - Restrict the height of the timesheet list to avoid the double-scrolling problem --- task: 6115674 Forward-Port-Of: odoo/enterprise#114093
This update adjusts how Odoo counts database queries when using its demo data. This optimization improves the speed and efficiency of the demo environment, making it faster to test and understand Odoo's features. The change ensures a smoother experience when working with the demo data.
Original PR description
Query counts were updated for demo data. runbot-242325 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260442 Forward-Port-Of: odoo/odoo#260297
This update fixes an issue where dropdown labels in the bottom sheet would sometimes overflow or overlap with the checkmark icon, particularly on smaller screens. The changes ensure labels wrap correctly and consistently reserve space for the checkmark, resulting in a cleaner and more user-friendly experience.
Original PR description
**Purpose of this PR:**
Before this commit, in the bottom sheet, dropdown labels could overflow their active container or overlap with the checkmark icon when selected.
This commit:
- Allows dropdown labels in bottom sheets to wrap on small screens.
- Reserves space for the checkmark icon in all bottom sheet dropdowns if any item is selected, ensuring consistent alignment.
<table>
<tr>
<td><b>Before</b></td>
<td><b>After</b></td>
</tr>
<tr>
<td><img src="https://github.com/user-attachments/assets/8f347abc-fe26-427a-95ec-97ace3a0c5a2" width="300"/></td>
<td><img src="https://github.com/user-attachments/assets/6d6104b5-46c3-404b-be09-1cfa55209a96" width="300"/></td>
</tr>
</table>
task-[6095602](https://www.odoo.com/odoo/project/1519/tasks/6095602)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#257572The progress bars should show the rate of reviewed and supervised balances/checks. Currently, the bars are too short, and the rate displays None. task-5246850
Original PR description
The progress bars should show the rate of reviewed and supervised balances/checks. Currently, the bars are too short, and the rate displays None. task-5246850
This update resolves an error that occurred when users removed the dismissal date from the 'End of Collaboration' form. The fix adds a check to ensure the dismissal date is valid before performing date comparisons, preventing a type error. This ensures the form functions correctly regardless of whether the dismissal date is set.
Original PR description
Currently, an error occurs when user removes dismissal date on `End of Collaboration` form. Steps to replicate: - Install `hr` with demo. - Open any employee (e.g.- Abigail Peterson) > Click on cog…
Currently, an error occurs when user removes dismissal date on `End of Collaboration` form.
Steps to replicate:
- Install `hr` with demo.
- Open any employee (e.g.- Abigail Peterson) > Click on cog button > End of Collaboration.
- Remove value from `Dismissal date` and click else where.
Error:
```
File "/home/odoo/odoo19/community/addons/hr/models/hr_employee_departure.py", line 56, in _compute_action_date
if departure.action_date and departure.action_date < departure.departure_date:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '<' not supported between instances of 'datetime.date' and 'bool'
```
Cause:
- As dismissal date is assigned from departure date [here] and the user removed the value from dismissal date so we receive it as false.
- So, we receive the error from [this] line, as `departure.departure_date` is received as False.
Solution:
- Added a conditional check for `departure_date` before the date comparison.
[here]: https://github.com/odoo/odoo/blob/a9d1b7ad18cfbc90fa415af6675518d687f072f9/addons/hr/models/hr_employee_departure.py#L51
[this]: https://github.com/odoo/odoo/blob/a9d1b7ad18cfbc90fa415af6675518d687f072f9/addons/hr/models/hr_employee_departure.py#L56
No ID
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update corrects a recent change that introduced extra whitespace into our translation files, causing problems with exporting and using existing translations. The fix restores the original process of removing whitespace, ensuring accurate and consistent translations across the Odoo platform. This prevents translation errors and maintains the quality of our software.
Original PR description
Due to the refactor in this commit[^1], we lost the stripping of whitespace from QWeb translations, which caused a lot of whitespace to be included in the exported POT files, invalidating existing translations. This commit restores the stripping of whitespace from QWeb translations. [^1]: https://github.com/odoo/odoo/commit/9eac755406028496375025c8c7fe4128c8740079
This update corrects a technical issue in the IoT setup process that was causing an error. The change ensures the correct default value is used, aligning with Odoo's standard practices and preventing the setup from failing. This improves the stability and reliability of the IoT functionality.
Original PR description
Due to the refactoring in odoo/enterprise#111457, the empty string was removed as an option from the IoT subtype selection. However, in the `/iot/setup` controller the empty string was explicitly used as the default value, which now causes an error due to it not being a valid option. This commit fixes the issue by instead using `False` as the default value, as is standard for Odoo fields.
This update adjusts how social media links are managed within Odoo Enterprise. Following a recent change, social media fields were removed from the website, and this update moves those links to the company record for consistency. This ensures all relevant company information, including social media presence, is accurately reflected.
Original PR description
Since https://github.com/odoo/odoo/pull/236918, there is no more social media fields on website so we move them to res company to comply with website.
This update resolves an issue where Odoo tests were unreliable due to fluctuating timezone settings. Specifically, the rental testing environment was previously dependent on demo data, causing inconsistent results. This change ensures a consistent UTC timezone for all tests, improving stability and reliability.
Original PR description
When demo data is installed, Robodoo's timezone is set to Europe/Brussels. Rental tests expect the environment timezone (`self.env.tz`) to be UTC. However, if Robodoo is the current user and no timezone is set in the context, the environment falls back to the user's timezone. Because Robodoo's timezone changes depending on whether demo data is installed, tests can become unstable. This commit updates the renting app's common test setup to ensure a stable timezone. runbot-242821
A test within the Indian payroll module (l10n_in_payroll) was failing due to a missing employee type ID. This update correctly assigned the necessary employee type ID, resolving the test failure and ensuring proper payroll calculations. This fix improves the stability of the payroll functionality.
Original PR description
[FIX] l10n_in_payroll: fix missing employee type id
Bug reproduction: Go to master and try to run test_in_hr_version_percentage_computation test by installing l10n_in_hr_payroll only. It fails and throws an error.
Bug cause: The employee has not employee_type_id and when with Form is used, employee_type_id is a required field and must be filled in.
Bug solution: I assigned the Indian employee type as a employee_type_id
Runbot Error:
Link 1: https://runbot.odoo.com/odoo/error/241955
Link 2: https://runbot.odoo.com/odoo/error/242490
task - 6117742This update resolves an issue preventing users from increasing the quantity of combo products with 'Sell when Out-of-Stock' disabled. The system now correctly limits the quantity to 1, ensuring accurate inventory tracking and preventing over-ordering. This change was triggered by a recent code update.
Original PR description
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce >…
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce > Products and create a new product "Combo" 3. Set the Product Type to Combo, create and edit a Combo Choice "test" with two options "test 1" and "test 2". Both have Track Inventory enabled, 5 Quantity On Hand and Sell when Out-of-Stock disabled 4. Publish product "Combo" to the website 5. Click on smart button "Go to Website" to open the shop page of product "Combo" 6. Try to increase the quantity 7. The quantity is limited to 1 Solution: Always set the quantity input's maximum when `has_max_combo_quantity` is true Issue: We only set the quantity input's maximum if `allow_out_of_stock_order` is false This error was introduced in https://github.com/odoo/odoo/commit/0247538efe788a9ff9a4d58f64470325348a4eaa opw-6050876 Forward-Port-Of: odoo/odoo#260523 Forward-Port-Of: odoo/odoo#257386
This update fixes a bug that prevented users from using keyboard shortcuts (like Tab and Enter) to select values within selection fields in list views. Previously, these shortcuts were blocked, limiting usability. Now, selection fields function correctly with standard keyboard navigation.
Original PR description
Steps: - Open any editable list view (for example sub-list view in sales) - Either it has a selection field or you add it via studio - With two values (for example "true" and "false") - Add a record to your list view - Try to edit the selection field - Popover is opened - You can select any value with a mouse click - You can navigate through values with arrows - You can't select values with `Enter` and `Tab` So list cell in edit mode has a function for all theses hotkeys: - `tab` - `shift+tab` - `enter` - `escape` Because `ListRenderer.onCellKeydown` is called before `hotkeyService.onKeyDown`, if any hotkeys is handled in cell edit mode it will be prevented and the hotkeyService will not propagate it to `select_menu`. That's why arrows are working, because there are not listed in cell edit mode keys. opw-6025476 Forward-Port-Of: odoo/odoo#259699 Forward-Port-Of: odoo/odoo#255029
This update fixes a minor usability issue where the button to add a photo to a contact was too small. The change moves the image upload logic to JavaScript, making it easier to maintain and ensuring a consistent user experience when adding images to contact records. This improves the overall user experience for contact management.
Original PR description
This PR aims to fix an issue where the click zone for `.o_image_uploader_container` doesn't take the appropriate space when adding a new photo to a contact. task-5100043 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228330
This update resolves an issue where opening salary adjustments on mobile devices caused a crash. The fix involved adding a basic kanban view and removing unnecessary overrides related to delete actions, ensuring the feature functions correctly across all device types.
Original PR description
Steps to reproduce ================== - Install hr_payroll - Use a mobile viewport - Go to Employees - Open a record - Switch to the Salary Adjustments notebook tab => TypeError: undefined is not an…
Steps to reproduce ================== - Install hr_payroll - Use a mobile viewport - Go to Employees - Open a record - Switch to the Salary Adjustments notebook tab => TypeError: undefined is not an object (evaluating 'props.activeActions.onDelete=this.onDelete.bind(this)' Cause of the issue ================== The SalaryAttachment2ManyField widget overrides the rendererProps to handle the delete action, but this isn't defined on mobile (because a kanban view is used) See https://github.com/odoo/odoo/blob/9f93f22ed5f6d5dbbafeb0a8c6fababdc2a65d45/addons/web/static/src/views/fields/x2many/x2many_field.js#L196-L212 Solution ======== Since there is no delete action on the kanban view, there is no need for an override. While we are at it, there was no kanban view defined. Thus a default view was used https://github.com/odoo/odoo/blob/138fad6d54a0b59885b1e5c712beb8f581c9555c/odoo/addons/base/models/ir_ui_view.py#L2835-L2846 It only contained the field description. Since that one is optional, records without a description were almost invisible.. Thus we also add a basic kanban view opw-6047295 Forward-Port-Of: odoo/enterprise#114464 Forward-Port-Of: odoo/enterprise#113317
A recent update resolved a bug that caused reports to crash when comparing data containing text. This issue occurred when the report included a string value, leading to an incorrect evaluation of comparison conditions. The fix ensures reports function correctly regardless of the data types within the report.
Original PR description
To reproduce: - Create a company in LU - Open the annual tax report for LU - Click on the comparison filter, compare with 1 period in the past ==> Traceback. This happens because that report contains a string value (an editable one, but it's not important here). Since there are only 2 comparison periods, we try creating the "%" column, comparing their amounts. The condition checking whether or not to display "N/A" was wrong, as it considered the values could only be int/float or None. Here, they are strings, so we don't enter that condition and crash when trying to evaluate float_is_zero on a string. Forward-Port-Of: odoo/enterprise#114296 Forward-Port-Of: odoo/enterprise#112619
This update resolves an issue where the 'Time Off Type' dropdown was empty when creating time off entries via the Gantt view. The fix prevents a technical glitch that was skipping field changes, ensuring computed values are correctly displayed and the dropdown functions as expected. This improves the user experience for time off management.
Original PR description
**Steps to Reproduce:** 1. Open Time Off App->Management->Time Off->Gantt View 2. Highlight multiple dates/cells to trigger the multi-create popover, then click "Set". 3. Open the "Time Off Type"…
**Steps to Reproduce:**
1. Open Time Off App->Management->Time Off->Gantt View
2. Highlight multiple dates/cells to trigger the multi-create popover, then click "Set".
3. Open the "Time Off Type" dropdown. The dropdown appears empty.
**Bug Cause:**
When forceFullDuration is true and request_duration is pre-populated in initial values, the form detects no field changes and skips triggering onchange. This prevents computed fields like allowed_work_entry_type_ids from being evaluated, resulting in an empty domain filter ('id', 'in', []).
**Solution:**
Remove the pre-population of request_duration in initial values when forceFullDuration is true. The context value force_full_duration is sufficient to filter the request_duration field to show only "full" option.
By not pre-setting the value, the form detects a field change and properly triggers onchange, allowing computed fields to evaluate and populate the Remove the pre-population of request_duration in initial values when forceFullDuration is true. The context value force_full_duration is sufficient to filter the request_duration field to show only "full" option. By not pre-setting the value, the form detects a field change and properly triggers onchange, allowing computed fields to evaluate and populate the allowed_work_entry_type_ids correctly.
**Task:** 6109569
Forward-Port-Of: odoo/enterprise#114050This update fixes an issue where invoices generated from KSeF bills weren't correctly processing gross unit prices. The system now properly handles both net and gross unit price options provided by vendors, ensuring accurate invoice generation and compliance with Polish tax regulations. This prevents incorrect invoices and potential tax discrepancies.
Original PR description
**PROBLEM** When receiving bills from KSeF, we don't handle gross unit price and default to a price_unit of 0.0. Leading to an incorrect invoice. When generating the bill, the vendor can choose to report the net unit price (P_9A) or gross unit price (P_9B). We need to handle both cases. opw-6066027 Forward-Port-Of: odoo/odoo#260314
This update prevents email notifications from being sent when generating test payslips. This change improves the testing process by reducing unnecessary email traffic and ensuring consistent test results. It addresses a potential issue where test emails could be generated during development.
Original PR description
In this commit, we prevented email sending during test print payslips. task-6147651 Forward-Port-Of: odoo/enterprise#114593
This update fixes an issue where complex emojis were being incorrectly split into individual characters in the Odoo Discuss messaging platform. The change improves emoji rendering, ensuring that emojis like ❤️🔥 are displayed correctly. This ensures a better user experience for all users sending and receiving messages.
Original PR description
Prior to this commit, emoji sequences were rendered incorrectly in Discuss. The existing regex failed to match multi-codepoint sequences, splitting complex emojis (like ❤️🔥) into separate individual emojis (❤️ and 🔥). Steps to reproduce: 1. Post a message in Discuss containing "🤷♂️" 2. Notice the message displays "🤷♂" instead This commit refines `EMOJI_REGEX` to match complete emoji sequences. [Task-6128638](https://www.odoo.com/odoo/project/1519/tasks/6128638) Forward-Port-Of: odoo/odoo#259829
This update resolves a bug in the overtime calculation process for employees with specific attendance settings. Previously, an empty intervals object caused errors when updating overtime records. This fix ensures intervals are properly populated, preventing crashes and ensuring accurate overtime calculations are performed.
Original PR description
**Context** - "Absence Management" is enabled in the database settings - Employee has an overtime ruleset selected in their employee settings - That overtime ruleset has a rule with a non-zero `expected_hours` - That employee has 1 or more attendance records that start or end at midnight in their timezone. **Before this commit** When updating overtime records, either via the "Regenerate overtimes" button on the overtime rule, or by simply creating a new attendance record, we'll end up passing around an intervals object that contains no intervals. Then, when we later assume this object will have at least one element, we crash. **After this commit** Guarantee that intervals objects are populated before assuming they are. Further, we remove the opportunity to create an empty intervals object that was exposing this bug. opw-6035270 Forward-Port-Of: odoo/odoo#260772 Forward-Port-Of: odoo/odoo#257986
This update ensures delivery carrier availability accurately reflects employee leave, including public holidays. Previously, the system only considered calendar availability. Now, it incorporates leave types for more precise scheduling, improving delivery planning.
Original PR description
before we used attendance_intervals_batch to consider available days but it only considered available days in the calendar, to also consider types of leaves like public holidays we need to use the _work_intervals_batch instead. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes an outdated requirement to specify a country for payment tokens used on subscription invoices. Previously, this caused issues with invoice processing, particularly with certain payment providers. This change simplifies the process and aligns with current payment provider requirements.
Original PR description
Before this commit, a country was mantadory on the payment token when it was used to pay invoices of subscriptions. This behavior was fetched back from internal code in 15.3. This issue was not visible until recently. Some token are fine without country, the provider allows it but the cron fails to process the sale order when the contract is processed. THis commit remove that old constraint. opw-5268156 task-5349998 Forward-Port-Of: odoo/enterprise#113715 Forward-Port-Of: odoo/enterprise#100166
This update resolves a recurring test failure (runbot error 242012) related to product imports. The fix ensures the tests no longer rely on demo data, making them more reliable and consistent. This improves the overall stability of the product import process.
Original PR description
runbot error: 242012 (lasted error in `Post install tests for pos_restaurant -> !sale`: resolved) Forward-Port-Of: odoo/odoo#255497