Daily updates from Odoo
Thursday, January 8, 2026
78 changes · saas-19.1
Resolved issues and error corrections
This update resolves a critical issue where tests for the cash basis accounting module were previously skipped, leading to undetected errors. By ensuring tests run automatically before code is merged, this fix prevents future regressions and maintains the accuracy of financial reports. This improves the reliability of our accounting processes.
Original PR description
The account_reports_cash_basis module was previously blacklisted on Runbot, causing its test suite to be bypassed during CI. Consequently, several regressions remained undetected (notably Runbot error 234873). This commit adds the `post_install_l10n` tag to ensure tests are executed prior to merging, preventing future regressions in this module. -------------------------------------------------------------- A previous change (see https://github.com/odoo/enterprise/commit/eba96e1f976b953fb8056249ea494e8f06e3c668) modified the reporting logic for Unaffected Earnings. Some cash basis test scenarios were not updated in the initial PR, leading to assertion failures. This commit updates the expected test values to match the current reporting format. runbot-234873 Forward-Port-Of: odoo/enterprise#103462
This update resolves an issue where credit notes with allowances issued more than 6 days after the original invoice would fail to process through ECpay. The fix removes the outdated 'AllowanceDate' parameter and ensures 'InvoiceRemark' is only populated when a customer reference is provided, preventing incorrect data display on e-invoices. This ensures smooth and accurate ECpay integration.
Original PR description
**AllowanceDate**: l10n_tw_edi_ecpay has an issue on Credit Notes (Allowances). When we `_l10n_tw_edi_generate_issue_allowance_json()`, we send the `l10n_tw_edi_invoice_create_date` which is was set…
**AllowanceDate**:
l10n_tw_edi_ecpay has an issue on Credit Notes (Allowances).
When we `_l10n_tw_edi_generate_issue_allowance_json()`, we send the
`l10n_tw_edi_invoice_create_date` which is was set to the associated
invoices creation date, and not the Allowance's creation date.
This creates a potential issue where allowances issued more than 6 days
after the original invoice would bounce back from ECpay with errors.
To be consistent with invoices send to ECPay, we do not send the
`AllowanceDate` parameter at all
Manual Testing/Verification:
1. Create an invoice that has a `l10n_tw_edi_invoice_create_date`,
visible in the Invoice's ECPay tab more than 6 days ago. (Requires
sending to ECPay via the custom wizard via the "Send" button)
2. Create a credit note from the invoice and send to ECPay.
3a. Before this, see that an error would appear.
3b. Now, there would be no error
*InvoiceRemark*:
When Customer Reference `ref` is not set, the code sets the parameter
value as `False`, displaying it's string on the e-invoice and official
printout. We only set the parameter if there exists the `ref` now,
eliminating the issue.
Tests:
1. (both cases) undo the `account_move.py` changes and run the tests.
task-[5455847](https://www.odoo.com/odoo/project/967/tasks/5455847)
---
# New test failed output
<img width="1458" height="353" alt="image" src="https://github.com/user-attachments/assets/77df8e51-5005-4d99-985c-71757c0f62a6" />
```bash
07:47:53,055 ERROR l10n_tw_edi_ecpay-demo-vy2vd3s0 odoo.addons.l10n_tw_edi_ecpay.tests.test_edi: FAIL: L10nTWITestEdi.test_01_can_generate_file
Traceback (most recent call last):
File "/home/odoo/odev/worktrees/18.0-l10n_tw_edi_ecpay-fix-allowance-date-erle/odoo/addons/l10n_tw_edi_ecpay/tests/test_edi.py", line 61, in test_01_can_generate_file
self.assertIsInstance(json_data["InvoiceRemark"], str)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: False is not an instance of <class 'str'>
07:48:02,516 ERROR l10n_tw_edi_ecpay-demo-vy2vd3s0 odoo.addons.l10n_tw_edi_ecpay.tests.test_edi: FAIL: L10nTWITestEdi.test_13_b2b_refund_upload_deadline_restriction
Traceback (most recent call last):
File "/home/odoo/odev/virtualenvs/18.0/lib/python3.13/site-packages/freezegun/api.py", line 885, in wrapper
result = func(*args, **kwargs)
File "/home/odoo/odev/worktrees/18.0-l10n_tw_edi_ecpay-fix-allowance-date-erle/odoo/addons/l10n_tw_edi_ecpay/tests/test_edi.py", line 430, in test_13_b2b_refund_upload_deadline_restriction
self.assertNotIn("AllowanceDate", json_data,
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"B2B Allowances should not include AllowanceDate to avoid >6 day limit errors."
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: 'AllowanceDate' unexpectedly found in {'MerchantID': '1234', 'Details': [{'OriginalInvoiceNumber': 'AB11100099', 'OriginalInvoiceDate': '2025-01-06', 'OriginalSequenceNumber': 0, 'ItemName':
'product_a', 'ItemCount': 1.0, 'ItemPrice': 1000.0, 'ItemAmount': 1000.0}], 'TotalAmount': 1000.0, 'TaxAmount': 50.0, 'CustomerEmail': 'partner_b@tsointsoin', 'AllowanceDate': '2025-01-06 15:00:00'} : B2B
Allowances should not include AllowanceDate to avoid >6 day limit errors.
```
---
Things to think about:
- FWP
- [ ] 19.0
- [ ] master
Forward-Port-Of: odoo/odoo#241973This update corrects an issue where the item name sent to the SInvoice system was incomplete, missing descriptions or failing to include product details. The fix ensures that all line item information, including descriptions and default units, are accurately transmitted, improving data consistency with the SInvoice system. This resolves a potential data discrepancy impacting invoice processing.
Original PR description
Currently, the item name in the data sent to the SInvoice system is comprised only of the product name on the line. This brings a few issues that should be corrected: - Any description set on the line on top of the product won't be sent - If there is no product, the required item name will be set to False - If there is no product, the required unit name will be set to False too To fix these issues, we will: - Use the line name directly and not the product name and; - Default to 'Units' for the unit name in all cases where it wouldn't be set. task-5438691 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241503
This update resolves an issue where the pivot table export feature would fail when no data was provided. The system now correctly responds with an error message (422) indicating invalid data, preventing the export process from crashing. This ensures a smoother user experience when generating pivot reports.
Original PR description
Currently an exception is generated when controlled `/web/pivot/export_xlsx' tries to export xlsx with empty data. `KeyError: 'title'` This PR resolves the issue by raising an `UnprocessableEntity` exception when empty data is provided. The resulting 422 response indicates that the server understood the request and its syntax, but cannot process it because the data is invalid. sentry-6321555617 Forward-Port-Of: odoo/odoo#242511 Forward-Port-Of: odoo/odoo#241415
This update resolves an issue where users without administrator permissions encountered errors when opening duplicated reports within the Studio feature. The fix prevents a critical error by ensuring the system handles permission restrictions gracefully, improving the user experience for all users.
Original PR description
When a user opens a duplicated report in Studio after their administrator rights are removed, a traceback is raised. Steps to reproduce the error: - Install ``account`` and ``web_studio`` - Login as…
When a user opens a duplicated report in Studio after their administrator rights are removed, a traceback is raised. Steps to reproduce the error: - Install ``account`` and ``web_studio`` - Login as Mitchell Admin > grant Administrator and Invoicing Administrator rights to Mark Demo - Login as Mark Demo in incognito tab > Open invoices > Open studio > Reports > duplicate any report - Login as Mitchell Admin, remove administrator right of Marc Demo - In Mark Demo, Open the duplicated report Traceback: ```py UnboundLocalError: cannot access local variable 'studio_view' where it is not associated with a value ``` https://github.com/odoo/enterprise/blob/58dc97cb5a7185dc2acd801bb3af0e6c35add0b6/web_studio/controllers/report.py#L379 The bug occurs because ``_get_and_write_studio_view()`` method performs a search on ``ir.ui.view`` before returning ``studio_view``. For users without the required permissions, this ``search()`` raises an AccessError. https://github.com/odoo/enterprise/blob/58dc97cb5a7185dc2acd801bb3af0e6c35add0b6/web_studio/controllers/report.py#L393-L400 Since this exception is raised before the assignment completes, the local variable ``studio_view`` is never bound. However, the finally block of ``deactivate_studio_view`` is always executed and attempts to access ``studio_view.active``, resulting in an ``UnboundLocalError``. sentry-7149350379 Forward-Port-Of: odoo/enterprise#103017
This update resolves a bug that prevented users from assigning statements to multiple bank lines within the Bank Reconciliation widget. The fix ensures the system handles multiple selections correctly, preventing a technical error that occurred during data assignment. This improves the usability of the Bank Reconciliation feature.
Original PR description
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank…
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank Reconciliation widget. 3) Switch to the List view. 4) Select multiple statement lines. 5) Click on the 'Statement' field to assign a statement to the selected lines. Error: `TypeError: Cannot read properties of undefined (reading 'root')` Root Cause: The `BankRecMany2OneMultiID` component attempts to access `active_ids` through `this.env.model.root` (see [1]). During re-rendering, the value of `this.env.model` becomes undefined, which leads to the error. Fix: Add a check for the existence of `this.env.model` in the getter to avoid accessing `root` on an undefined model. [1]- https://github.com/odoo/enterprise/blob/c194bee0e48db407288e3c402e71840af299568d/account_accountant/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.js#L14 opw-5403564 Forward-Port-Of: odoo/enterprise#103338 Forward-Port-Of: odoo/enterprise#101792
This update resolves a visual bug where long date ranges in Field Service tasks caused the kanban card layout to break. The fix ensures the date range widget stays within the card boundaries, maintaining a consistent and usable display. This improves the overall user experience when scheduling tasks with extended timelines.
Original PR description
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example:…
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example: Dec 16, 2024, 1:30 PM → Oct 13, 2026, 6:00 PM. 4. Go back to kanban view 5. Adjust display to around 360 px Observation: ---------------------------- The planned date daterange widget overflows and extends outside the kanban card, breaking the card layout and visual containment. Issue: ---------------------------- The daterange widget's parent container did not enforce a width, so the widget could grow beyond the kanban card boundary when a long date range was used. Solution: ---------------------------- Add the w-100 class to the daterange container div to enforce full-width layout within the kanban card. Before: <img width="584" height="529" alt="before_css" src="https://github.com/user-attachments/assets/e89302b0-975c-47eb-91ec-89dbfe813493" /> After: <img width="561" height="528" alt="after_css" src="https://github.com/user-attachments/assets/48b60a78-18da-4504-98ef-a9c4013b107b" /> opw-5219941 Forward-Port-Of: odoo/enterprise#102093
This update corrects a technical issue where duplicate template keys were generated for report views, potentially causing conflicts and incorrect customizations. By ensuring unique keys across all report templates, this fix prevents data inconsistencies and ensures accurate report generation.
Original PR description
Before this commit: ------------------------- The sequence used in the template key was computed based only on the last active template. If the next sequence number corresponded to an inactive…
Before this commit: ------------------------- The sequence used in the template key was computed based only on the last active template. If the next sequence number corresponded to an inactive template, the system could end up generating duplicate template keys — one for the inactive template and one for the newly created active template. After this commit: ----------------------- The sequence for the template key is now computed based on the last template, regardless of whether it is active or inactive. This ensures that template keys remain unique across all report templates. Why this commit: ----------------------- if a template is inactive, the report engine should raise an error. However, because duplicate template keys were being generated, the inactive template could silently fall back to the active template with the same key, preventing the expected exception and bringing customization of one report to another. Additionally, if the inactive template is later corrected and reactivated, both reports would still reference the same template (the one with the smaller ID) because they shared identical template keys. This fix prevents such conflicts by ensuring unique template key generation. Forward-Port-Of: odoo/enterprise#101894
This update resolves a validation error that occurred when creating new leave requests in the l10n_fr_hr_holidays module. The issue stemmed from incorrect default settings in the company's time off configuration, specifically a missing reference to a standard leave type. The fix ensures this field is correctly populated, preventing the validation error and allowing users to create leave requests without issue.
Original PR description
**Steps to reproduce:** - Install l10n_fr_hr_holidays module. - Go to Time Off > Configuration > Settings. - Company Paid Time Off field should blank. - Employee `resource_calendar_id` is not same as company's. - Create new leave > a validation error will occur. **Cause:** - The demo data for 'res.company' did not correctly set the `l10n_fr_reference_leave_type` field. - 'l10n_fr_reference_leave_type' field should be required. **Fix:** - Updated demo record to correctly assign `l10n_fr_reference_leave_type` field. - Set the `l10n_fr_reference_leave_type` field as required. Task - 5139488 Forward-Port-Of: odoo/odoo#242390 Forward-Port-Of: odoo/odoo#231385
This update resolves a technical issue preventing the correct installation of the Mauritius localization module for Odoo. The fix adds a necessary configuration setting to the module's manifest file, ensuring seamless integration and functionality after installation. This resolves a reported error preventing users from properly setting up the Mauritius fiscal localization.
Original PR description
Steps to reproduce: 1. Install 'accountant' 2. Create a new company without a country and switch to that company 3. Accounting > Configuration > Fiscal Localization 4. Select Mauritius and save Issue: It gives a traceback: KeyError: 'mu' Cause: 'auto_install' is not present in the manifest file. Solution: Add 'auto_install': ['account'] in the manifest as it is done in other localization modules. opw-5231064 Forward-Port-Of: odoo/odoo#240170 Forward-Port-Of: odoo/odoo#236207
This update fixes a cluttered appraisal form view issue that occurred when a large number of appraisal templates were used. The team removed a complex widget and switched to a simpler, searchable dropdown, resulting in a cleaner and more user-friendly experience for managing appraisals.
Original PR description
Steps to reproduce: - Install the hr_appraisal module. - Open the form view of an appraisal when more than 100 appraisal templates exist. Issue: When the appraisal form view is opened with a large number of templates, the view becomes cluttered because all templates are displayed at once. Fix: This PR removes the widget and reverts to a standard related field with a searchable dropdown, improving readability and usability. task-5438146 Forward-Port-Of: odoo/enterprise#102866
This update fixes an error that occurred when deleting the 'Default 48 hours/week' working schedule and running the payroll update cron job. The issue stemmed from a mismatch between the deleted schedule's reference and the payroll data, preventing accurate updates. This ensures payroll data is consistently updated correctly.
Original PR description
When the ``Default 48 hours/week`` working schedule is deleted and the ``Payroll: Update data`` cron runs, a traceback is raised. Steps to reproduce the error: - Install ``l10n_mx_hr_payroll`` module…
When the ``Default 48 hours/week`` working schedule is deleted and
the ``Payroll: Update data`` cron runs, a traceback is raised.
Steps to reproduce the error:
- Install ``l10n_mx_hr_payroll`` module with demo data
- Switch to ``INNOVACION VALOR Y DESARROLLO SA SA`` company
- Go to Employees > Configuration > Settings > Change Company Working Hours
- Go to Working Schedules > Delete ``Default 48 hours/week`` working schedule
- Run the ``Payroll: Update data`` cron
Traceback:
```py
ValueError: External ID not found in the system: l10n_mx_hr_payroll.resource_calendar_def_48h
ParseError: while parsing /home/odoo/src/enterprise/l10n_mx_hr_payroll/data/hr_payroll_structure_type_data.xml:3, somewhere inside <record id="l10n_mx_employee" model="hr.payroll.structure.type">
<field name="name">Mexico: Employee</field>
<field name="default_resource_calendar_id" ref="l10n_mx_hr_payroll.resource_calendar_def_48h"/>
<field name="country_id" ref="base.mx"/>
</record>
```
The ``Payroll: Update data`` cron updates payroll data that references the ``Default 48 hours/week`` working schedule.
If the user has deleted this working schedule, the external ID no longer exists, leading to the above traceback.
sentry-7166574553
Forward-Port-Of: odoo/enterprise#103323This update fixes a potential confusion in the sales details report by ensuring payment orders are consistently displayed. The report now sorts by payment method and session, making it easier for users to understand sales transactions and improve reporting accuracy. This change enhances the overall usability of the sales reporting feature.
Original PR description
Before this commit, payment order was not guaranteed and could confuse users reviewing sales details report, especially as the cash register lines are ordered before. This commit orders the results by payment method and session to make the output more readable. opw-5240864 Forward-Port-Of: odoo/odoo#242387 Forward-Port-Of: odoo/odoo#237040
This update resolves an issue where images weren't appearing in email marketing campaigns. The fix ensures images are fully loaded before their dimensions are determined, preventing them from being rendered as invisible. This improves the visual quality of emails sent through the Email Marketing module.
Original PR description
Problem: When sending an email marketing, some images are not visible in the received email. Cause: After 354b8f60dbabcfac690d90bf657592e1347e4f86, we clone the `editable`, append it to…
Problem: When sending an email marketing, some images are not visible in the received email. Cause: After 354b8f60dbabcfac690d90bf657592e1347e4f86, we clone the `editable`, append it to `processingContainer`, and call `toInline` on it. During `toInline`, images with the `.card-img-top` class are queried and their size is fixed using `getComputedStyle`. Because the editable is freshly cloned, images may not be loaded yet. Calling `getComputedStyle` on an unloaded image returns a height of `0`, which results in images being rendered as invisible. Solution: After cloning the editable, wait for all images inside it to finish loading before running `toInline`. This ensures `getComputedStyle` returns the correct dimensions. Steps to reproduce: - Open Email Marketing. - Add a Columns snippet with images. - Send the email. - Observe that the received email is missing some images. opw-5215534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240530
This update resolves an issue where the HTML editor would crash if a link's metadata couldn't be retrieved (often due to website access restrictions). The fix ensures that errors during metadata fetching are handled gracefully, preventing editor instability and improving the user experience. This change focuses on internal and external metadata fetching.
Original PR description
Problem: When a fetch request fails (for example due to CORS restrictions), a traceback occurs in the editor. Solution: Backport 971d88121968c85a86c805458d5d9dbbb305995c and ensure the error handling check is applied for both internal and external metadata fetching. Steps to reproduce: - Create a tracked link. - Copy the tracked link. - Create a link in the editor and use the copied URL. - Apply. - Traceback occurs. task-5394908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242546 Forward-Port-Of: odoo/odoo#240712
This update resolves issues with inventory valuation in Point of Sale (POS) orders, specifically when multiple products are involved. Previously, valuation lines were missing for certain orders, now all orders with multiple products generate the correct inventory valuation entries. This ensures accurate stock tracking and reporting within the POS system.
Original PR description
*mrp_account, sale_mrp{,_margin}, point_of_sale ## Issue 1: Kit sale price ### Steps to reproduce: - Install sale_margin, sale_management, mrp - Create a kit product with an avco product category: -…
*mrp_account, sale_mrp{,_margin}, point_of_sale
## Issue 1: Kit sale price
### Steps to reproduce:
- Install sale_margin, sale_management, mrp
- Create a kit product with an avco product category:
- 1 x COMP1, cost 10
- 1 x COMP2, cost 20
- On the kit product update the cost accroding to the bom
- Create an SO for 1 unit of your kit
- Validate the associated receipt
#### > The cost (purchase_price) of the sol of the kit has been reset from 30 to 0.
### Cause of the issue:
Validating the receipt will trigger the dependence of the `purchase_price` compute method since the moves are now done: https://github.com/odoo/odoo/blob/18dc738c710f87d1f937b0d1fbb619c75f5ad952/addons/sale_margin/models/sale_order_line.py#L15-L18 However, the `_get_price_unit` will `return 0` since `sol` is linked to both component moves:
https://github.com/odoo/odoo/blob/18dc738c710f87d1f937b0d1fbb619c75f5ad952/addons/sale_stock_margin/models/sale_order_line.py#L10-L20
### Issue 2: POS with multiple products
Currently, when a pos order contains more than 1 product, inventory valuation lines are not generated when invoicing the order.
Steps to reproduce:
-------------------
* Using anglo-saxon accounting
* In the settings search for inventory valuation
* Set inventory valuation to Perpetual
* Choose standard cost method
* Set up valuation account and journal
* Create two different products
* Type -> Goods
* Track inventory by quantity
* Set a purchase cost
* Put some quantity on hand
* Add category
* In the settings of the category
* Set up Stock account
* Set up costing methog, standard
* Set inventory valuation to perpetual
* Open pos session
* Make 3 orders, invoice them
* Order 1, only product 1
* Order 2, only product 2
* Order 3, both products
> Observation: The invoces for orders 1 & 2 have entries regarding
inventory valuation while the invoice for order 3 does not have any.
### Cause of the issue:
Stock valuation entries are not created for order 3 because the price unit computed is 0.
https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/stock_account/models/account_move.py#L122-L126
The reason why the price unit is 0 is because in `_get_pos_anglo_saxon_price_unit` we have multiple records in `moves` related to multiple products.
https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/point_of_sale/models/pos_order.py#L276-L281
`_get_price_unit` was not designed to treat moves with different products https://github.com/odoo/odoo/blob/008e69e8215fecc1f3fe45a36189592577cdc593/addons/stock_account/models/stock_move.py#L225-L228
This leads to think we should filter moves in `_get_pos_anglo_saxon_price_unit` regarding the product.
The end result is now the same as when we make a SO with the two products in the Sales app and invoice it. This results in 2 valorisation lines (1 per product) but this does not change the valorisation when the pos order is not invoice and we close the session (still 1 valorisation line).
### Fix:
The filter on the product_id in the `_get_pos_anglo_saxon_price_unit` has been removed in https://github.com/odoo/odoo/commit/08b62a4bbcc6f9a391b2cc00a621ef4c76100229
Prior to that change the price unit were computed on moves sharing a common product:
https://github.com/odoo/odoo/blob/9cb6476e0f8d319dce4baf65904b8bd5d535c83c/addons/point_of_sale/models/pos_order.py#L271-L275
https://github.com/odoo/odoo/blob/9cb6476e0f8d319dce4baf65904b8bd5d535c83c/addons/stock_account/models/stock_move.py#L28-L29
We reintroduce this filter as it should not have been removed.
#### Issue 1: opw-5420977
#### Issue 2: opw-5328152
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242052This update resolves an issue where grouped Kanban cards were displaying incorrectly due to a change in the Kanban template design. The team removed a specific CSS class that was causing the misalignment, ensuring all Kanban cards are displayed at the correct height. This improves the visual consistency of the knowledge articles.
Original PR description
Since commit https://github.com/odoo/enterprise/pull/70460 and the reworking of the Kanban templates, the h-100 class was no longer correct. This PR fixes the issue by removing this class. task-5439265 Forward-Port-Of: odoo/enterprise#102801
This update prevents the loss of Starshipit delivery orders when label creation fails. Previously, a failed label attempt would delete the order, requiring users to restart. Now, Odoo can retry validation and reuse existing orders, streamlining the delivery process and reducing manual intervention.
Original PR description
## Current behaviour: When validating a delivery, Odoo sends data to Starshipit. If label creation fails, the module deletes the created order. ## Expected behaviour: If label creation fails, the…
## Current behaviour: When validating a delivery, Odoo sends data to Starshipit. If label creation fails, the module deletes the created order. ## Expected behaviour: If label creation fails, the Starshipit order should remain. Users should be able to fix data in Starshipit and retry validation in Odoo without losing the existing order. ## Steps to reproduce: 1. Validate a delivery order integrated with Starshipit. 2. Trigger a label generation failure (e.g., bad address). 3. Observe that the created Starshipit order is deleted. ## Cause of the issue: The integration treats label creation failure as a fatal step and cleans up the previously created Starshipit order. ## Fix: Do not delete the Starshipit order on label failure. When the user retries validation, first check Starshipit for an order matching the unique reference. If found, reuse it and continue with label creation and manifest. If not found, create a new Starshipit order as usual. ## Additional note: The _() wrapper in the error line was removed because the Starshipit service has no env or language context. Since translations cannot be resolved there, Odoo raised a warning. Removing _() avoids this warning and keeps the error clean. opw-5306979 Forward-Port-Of: odoo/enterprise#103354 Forward-Port-Of: odoo/enterprise#101174
This update resolves a technical glitch that prevented users from consistently selecting product variants during the subscription add-to-cart process. The fix utilizes a 'click' action instead of a 'check' action, ensuring all variant options are reliably available, improving the user experience.
Original PR description
In this commit we fix undeterministic error in tour sale_subscription_add_to_cart. We can see on https://runbot.odoo.com/odoo/error/234505 that variant white can not be always selected. For that we prefer use click action instead of check action. Forward-Port-Of: odoo/enterprise#103458
This update resolves an issue where email invitations in Discuss channels were incorrectly displayed with a 'removed' message. The fix ensures the message type is set to 'user_notification', preventing the misleading display and improving the user experience. This change ensures invitations are correctly presented within the Discuss channel.
Original PR description
Steps to reproduce: * Open a public Discuss channel. * Invite an external user by email. * Refresh the page. An email-related message is fetched and displayed as `this message has been removed`. This happens because the message is created with `message_type = 'email_outgoing'`, even though it is conceptually a user notification and not meant to be rendered as an email in Discuss channels. This commit fixes the issue by setting the correct `message_type` (`user_notification`) instead of `email_outgoing`, ensuring the message is not displayed in Discuss, avoiding a misleading removed message. Task-5438936 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241112
This update resolves an issue preventing customers in French territories like La Réunion from using Stripe Connect. The fix correctly maps company countries to Stripe, aligning with Stripe's availability policies, and ensures compatibility with the payment provider.
Original PR description
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings'…
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings' app, access your company's data: - Change your company's country for "Réunion". - Go to Payment Providers and open Stripe: - Try to enable Stripe via Stripe Connect; - A message tells you your country is not supported by Stripe. ## Cause Commit 94b37a3f51089621a2f12360c7a13f610b24ba3a introduced territories mapping by adding the method `_stripe_get_country()`, mapping the company country (`self.company_id.country_id.code`) to enable Stripe under the parent country as specified in their documentation (https://support.stripe.com/questions/stripe-availability-for-outlying-territories-of-supported-countries). This fix was first applied in 16.0 and forwarded but didn't check that commit de782a680de8e5a2d7c89b982c485ca29da34b3a, from saas-16.2, added another condition on (`self.env.company.country_id.code`) on the Stripe Connect flow. opw-5421185 Forward-Port-Of: odoo/odoo#242319 Forward-Port-Of: odoo/odoo#241269
This update fixes an issue where gray color selections in the website builder's color picker weren't updating correctly. Now, changes to gray hues and saturation are accurately reflected in the color picker, ensuring consistent branding and design across the website. This improves the visual consistency of customer-facing websites.
Original PR description
Steps to reproduce: - Open Website Builder. - Go to Theme > Advanced. - Change the grays hue or saturation. - Open a color picker and check the gray swatches. Before this commit, gray swatches kept using the default palette after changing the grays hue or saturation. After this commit, gray swatches reflect the customized grays. Forward-Port-Of: odoo/odoo#242562
This update resolves a potential crash in the mass mailing module that could occur when the ThemeSelectorIframe component was removed before its resources were fully loaded. The fix ensures the code can still access the iframe element, preventing unexpected errors and improving stability. This enhances the reliability of mass email campaigns.
Original PR description
Prior to this commit, if the `ThemeSelectorIframe` component was destroyed in the time it took to get its bundle and load its CSSSheets, there could be a crash because the iframe would not be in the dom anymore and it would not be possible to use the `iframeRef.el`.
This update fixes an issue where string values entered in the web_studio field editor were incorrectly formatted with extra quotes and slashes. Now, string values are correctly displayed and saved, ensuring accurate configuration of fields within the studio interface.
Original PR description
Have a field widget with an option of type "string" (supportedOption meta field of the widget) In studio, change the value for that option. Before this commit, the value appeared in the input as escaped: there were supplementary quotes and slashes After this commit, the string value is correctly displayed. Forward-Port-Of: odoo/enterprise#103476 Forward-Port-Of: odoo/enterprise#103364
This update optimizes how Odoo forms are loaded, particularly in the SaaS environment. By processing multiple form items in parallel instead of sequentially, the loading time has been significantly reduced. This change also ensures the necessary model information is available, improving compatibility with other views like Kanban and List, and simplifying integrations for business users.
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 Forward-Port-Of: odoo/odoo#242495
This update corrects a bug where placing items in a package from the SML view resulted in the package being incorrectly located. The fix addresses an issue with how the system defines the package's location, ensuring accurate tracking. This resolves a problem where packages couldn't be found after this action.
Original PR description
Putting in pack from the SML view leads to package incorrectly located To reproduce the issue: 1. In Settings, enable "Package" 2. Confirm a delivery with 2 available products 3. Open the SML thanks…
Putting in pack from the SML view leads to package incorrectly located To reproduce the issue: 1. In Settings, enable "Package" 2. Confirm a delivery with 2 available products 3. Open the SML thanks to the smart button 4. Tick a line > Put in pack 5. On the second line, in "Destination Package", look for the package Error: it is impossible to find it When opening the SML thanks to the smart button, we also load a lot of default values: https://github.com/odoo/odoo/blob/1492abd8c6bcfdbc48f730f6767b177aeff54bf7/addons/stock/models/stock_picking.py#L1203-L1221 Those are (obviously) SML specific. However, this context is used when putting in pack. This is a problem since `location_id` is also the field name of a package. As a result, the ORM defines the location of the new package with the default value, i.e. the source location of the SML. This is incorrect. One consequence of this bug is the step 5 of the above use case. When looking for a package, a domain checks its location: https://github.com/odoo/odoo/blob/35feed47622b279abf8e593d8190ea36b64d32fd/addons/stock/models/stock_move_line.py#L51-L55 It must be either `False` or equal to the dest loc, which is not the case with the created package. Now... About the solution. It's probably difficult to do something more hacky. However, it's not too invasive in the code and all user will take benefit from it once the commit is deployed. On master, we will discuss with both frameworks to negotiate/find something more elegant. OPW-5215243 Forward-Port-Of: odoo/odoo#242328
This update resolves an issue where duplicating an invoice from a sales order would incorrectly link both the original and duplicate invoices with the same source document. The fix prevents the automatic copying of the source document during the duplication process, ensuring each invoice has its own unique link to the original sales order.
Original PR description
### Issue: When opening an invoice from a Sale Order and duplicating it, the Source Document (invoice_origin) was also copied As a result, both the original and duplicated invoice showed the same…
### Issue: When opening an invoice from a Sale Order and duplicating it, the Source Document (invoice_origin) was also copied As a result, both the original and duplicated invoice showed the same Sale Order in the Source Document field ### Cause: The `action_view_invoice` method adds `default_invoice_origin` in the context, causing the `copy` function to set `invoice_origin` The field invoice_origin was already set with copy=False in this PR: https://github.com/odoo/odoo/pull/236656 The default context was introduced in PR: https://github.com/odoo/odoo/pull/34561 ### Steps to reproduce: - Create a sales order (SO) - Create and confirm an invoice from the SO - Click on the `Invoices` smart button to access the invoice (SO is visible at the top) - Duplicate and confirm the invoice (The SO is not linked) - Go to the invoices list view and make the `Source Document` visible - Observe that both invoices show the same SO as their `Source Document` opw-5360172 Forward-Port-Of: odoo/odoo#239676
This update fixes an issue where the wrong manager was sometimes assigned to approval requests. The change ensures that the correct manager, based on the request details, is always selected, preventing potential errors and ensuring approvals are processed accurately. This improves the reliability of the approval workflow.
Original PR description
The previous code added the manager by searching for the first employee that matches the request_owner_id. If there are multiple such employees, it's possible that an employee from a different company than the approval can be selected. Ticket: [5185449](https://www.odoo.com/odoo/project.task/5185449) Forward-Port-Of: odoo/enterprise#99978
This update fixes a bug where setting a Bill of Materials (BoM) in a manufacturing order would sometimes create duplicate work orders. The fix ensures that work orders are only created once during recomputation, preventing wasted effort and ensuring accurate production planning. This improves the reliability of our manufacturing processes.
Original PR description
Steps to reproduce:
- Create a storable product "P1"
- Create a BoM with one operation
- Create a manufacturing order for product "P1"
- Do not set any BoM
- Save
- In draft state:
- Set the BoM
- Without saving, update the quantity to produce
Problem:
The same operation is added twice, resulting in duplicate work orders.
Cause:
Work orders are recomputed multiple times when BoM and quantity are changed before saving, and existing (not yet saved) work orders linked to the same BoM are not properly filtered out.
Fix:
Ensure that work orders linked to the current BoM are only created once during recomputation.
opw-5404686
Forward-Port-Of: odoo/odoo#241475
Forward-Port-Of: odoo/odoo#240757This update resolves an issue where recruitment officers couldn't correctly update applicant stages, leading to errors when sending email notifications. The fix uses a temporary workaround to bypass access restrictions, ensuring that all applicant stage changes are processed without interruption.
Original PR description
Problem: Recruitment officers don't have the rights to create `appointment.type` nor `appointment.interview`, Hence when they move an applicant to the qualified stage an error is raised during the rendering the body of the qweb mail template. Fix: Override the controller to use sudo and pybass the access check. Task-5262936 Forward-Port-Of: odoo/enterprise#100648
This update fixes a potential issue where multiple employee versions could be archived or reassigned simultaneously, causing problems with reporting. The change ensures that updates only affect the current version of an employee, improving data accuracy and stability. This resolves a technical problem related to generating necessary reports.
Original PR description
Currently, it is possible to archive or reassign all versions of an employee if there exists more than 1. This leads to issues with generating the necessary SQL views for the `hr.employee.public` model. To rectify this issue, we check whether the versions of each employee is a subset of the records being written to. opw-5289226 Forward-Port-Of: odoo/odoo#241142 Forward-Port-Of: odoo/odoo#238358
This update corrects a bug that incorrectly flagged some bank statements as invalid. The issue stemmed from a flaw in how the system calculated statement validity based on previous balances. The fix ensures all valid bank statements are now correctly identified, improving the accuracy of bank reconciliation within the accounting module.
Original PR description
Some bank account statements are computed as not valid, although they are valid. Statement 1 and 3 appear, and statement 3 is shown as invalid, while both statements should be shown as valid. Statement validity is computed depending on previous statement end balance and current statement start balance. The SQL query uses a window function to retrieve the previous statement. However, the function is applied after the WHERE clause. Therefore, it uses the end_balance of the previously selected statement instead of the previous statement. #### Step to reproduce: - In the bank dashboard of the accounting app - Create journal entry 1 - Create statement 1 - Create journal entry 2 - Create statement 2 - Validate the journal entry 2 - Create journal entry 3 - Create statement 3 - filter statement per "Not Matched" Ticket [link](https://www.odoo.com/odoo/project.task/5341433) opw-5341433 Forward-Port-Of: odoo/odoo#238381
This update resolves an issue where copying and pasting content from the knowledge editor resulted in a loss of plain text formatting. The fix restores the ability to correctly copy and paste text into other applications, ensuring users can accurately transfer information. This improves the usability of the knowledge management feature.
Original PR description
Since [1] when `vnd.odoo.odoo-editor` was added to the `HtmlViewer` clipboard, the `text/plain` mimetype was lost. This commit restores the plain text version of the clipboard. Steps to reproduce: - In knowledge, lock a page - Select some content - Copy - Paste into a plain text editor => No content was pasted [1]: https://github.com/odoo/odoo/commit/62a7c50b434e3f47ad58e20e96970cbd90b979b6 task-5449435 Forward-Port-Of: odoo/odoo#241676 Forward-Port-Of: odoo/odoo#241642
This update fixes an issue where product documents, headers, or footers weren't being added to PDF quotes after they were confirmed. A new configuration setting allows users to ensure these documents are always included in the final PDF, regardless of whether the order is confirmed. This ensures consistent and complete quote documents.
Original PR description
Versions -------- - saas-18.2+ Steps ----- 1. Add product documents, headers or footers to a quotation; 2. confirm quotation; 3. print quotation. Issue ----- Extra documents aren't added to the PDF, even though they show up as selected in the quotation builder. Cause ----- As of commit b02f53d, any quotation documents linked to a sales order are simply ignored for confirmed orders. Solution -------- Add a `sale.always_include_selected_documents` config parameter, allowing users to keep including the selected documents on confirmed orders. opw-5242743 Forward-Port-Of: odoo/odoo#235778
This update corrects a visual issue where a duplicate dropdown menu appeared in social stream post management. The fix ensures consistency by correctly integrating the existing dropdown from the ‘social_crm’ module, improving the user experience. Additionally, the ‘is_author’ field has been re-introduced to manage button visibility for post editing and deletion.
Original PR description
Following https://github.com/odoo/enterprise/commit/c9ddf1c a new dropdown has been added to "social" to allow the edition and deletion of a social stream post. This new dropdown didn't take into account the one already existing in "social_crm" resulting in a duplicated dropdown menu. Fixing the issue by making sure the dropdown from "social_crm" is correctly extending the one from "social". As the "Create Lead" action is set above the "Edit" and "Delete" ones, making sure it's also the case for the stream post comments dropdown menu for consistency. Re-inserting the "is_author" field (removed here https://github.com/odoo/enterprise/pull/69650) in the kanban view to make sure the "Edit", "Delete" and "Create Lead" buttons visibility are correctly managed for your own posts. Task-5270180 Forward-Port-Of: odoo/enterprise#103409 Forward-Port-Of: odoo/enterprise#101679
This update fixes an issue where payments for payroll were incorrectly linked to the employee's bank account instead of the correct tax account. The change ensures that payments, particularly for taxes, are now routed to the appropriate bank account, preventing payment errors and improving financial accuracy. This resolves a previous bug impacting the accuracy of payroll payments.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Avoid payment wrong initialization when a default value has been set to initialize the `account.payment.register`. Indeed, the `account.payment` also has a `partner_bank_id` property, and so the method `_create_payment`of the `account.payment.register` can initialize payment with wrong `partner_bank_id`. [enterprise#99373](https://github.com/odoo/enterprise/pull/99373) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/odoo#242004 Forward-Port-Of: odoo/odoo#235475
This update fixes an issue where payroll payments were incorrectly linked to the employee's bank account instead of the correct vendor account (like the IRS). The change ensures payments are accurately assigned to the appropriate bank account, resolving a potential payment processing error. Automated tests have been added to verify this fix.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Modifying `account.payment.register` for fixing `hr.payslip` payments generation so that each payment is assigned the correct `partner_bank_id`. Also, fixing a SEPA payslip payment bug which says that the employee bank account is untrusted even if it isn't. ## Tests Adding `test_bank_account_partner_payment_payslip` test to check that the payment generated for Professional Tax is made to the correct bank account (before this fix, the selected account was always the employee bank account, whatever the vendor specified in the payment). Adding `test_sepa_payslip_partner_bank_id` test to check that the `partner_bank_id` is set after account_register_payment wizard has been initialized and that the action_create_payments (action launched when the user clicks on "Create Payments" button of the `account_register_payment` wizard) doesn't raise any error. This second test is not really specified in the specs, I just stumbled upon some stacktrace when coding this PR and decided to add a test to check the flow of sepa payment. [community#235475](https://github.com/odoo/odoo/pull/235475) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/enterprise#103220 Forward-Port-Of: odoo/enterprise#99373
This update resolves an issue where changing the quantity of a combo product didn't correctly update the quantities of its child lines in the Point of Sale system. Now, when a parent order line's quantity is adjusted, the corresponding combo lines are accurately updated, ensuring order accuracy and preventing inconsistencies.
Original PR description
Before this commit when a combo product was added to the the order, if a note was added and then the product was ordered. And after we change the quantity of this product and the note, the combo…
Before this commit when a combo product was added to the the order, if a note was added and then the product was ordered. And after we change the quantity of this product and the note, the combo children lines were not updated correctly. After this commit, the combo children lines quantities are correctly updated when the parent line quantity is changed. Step to reproduce : 1. Add a combo item to the order line in Point of Sale (Restaurant). 2. Add a Note to the main order line and place the order(Send to Kitchen). 3. Now increase the quantity of the main order line and update the note as well. 4. A popup appears to select the combo again make your selection. You'll notice that a new order line is added. 5. However, in the previous order line, the main product quantity is reverted back to the original quantity, but the combo item order line quantity is not reverted, resulting in an inconsistency. Task id : 5163287 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232069
This update resolves an issue where users without attendance access rights would encounter an error when attempting to use the 'Monthly Hours' smart button. The fix restricts access to sensitive data and ensures that only authorized personnel can view attendance records, improving data security and user experience.
Original PR description
Steps to reproduce: - Log in as a user without attendance access rights - Open the current user's employee record (public view) - Click the "Monthly Hours" smart button Issue: - Public users cannot access the `attendance_manager_id` field, which was used to group records by employee in the Gantt view. Fix: - Add a permission check before accessing `attendance_manager_id` - Restrict non-attendance officers to viewing only their own attendance task-5440612 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A technical bug was causing a traceback when using the AI button within the applicant refusal process. This update resolves the issue by modifying the widget's behavior to correctly identify applicant data, ensuring the AI refusal functionality works as intended. This improves the user experience for recruiters.
Original PR description
Step to reproduce: - Install hr_recruitment. - Open any applicant in any job position. - Click the Refuse button to open the refusal wizard. - Enable the send email toggle key. - Click on AI button Issue: traceback occurs Reason: - required field for using this widget is not defined. - so it tries to slice the res_ids field which is still not defined Solution: - In stable versions, we cannot add the missing required fields because this would cause upgrade issues. - Instead, we extend the widget and override its behavior to use active_model and active_id. task-5058510 Forward-Port-Of: odoo/enterprise#103384 Forward-Port-Of: odoo/enterprise#99498
This update ensures Odoo's internal crawler, 'Odoobot,' follows website guidelines (robots.txt) when fetching data. By respecting these rules, we prevent the crawler from accessing restricted areas and improve the reliability of our data collection process. This enhances our data integrity and avoids potential issues with website owners.
Original PR description
### Purpose Add `robots.txt` compliance to the `_fetch_url` helper. Before fetching any URL, we now check the site's `robots.txt` and ensure that our user agent (`Odoobot/1.0`) is allowed to access the requested path. ### Changes - Added `robots.txt` validation using `urllib.robotparser` - Respect disallow rules for the `Odoobot/1.0` user agent ### Why This ensures that our crawler behaves politely, avoids fetching disallowed resources, and provides more transparent failure reporting. --- **Task-ID:** 4779962 Forward-Port-Of: odoo/enterprise#96369
This update fixes a crash that occurred when deleting an employee hierarchy (parent-child relationships) within the Employees module. The issue was triggered when a default filter referencing this hierarchy was removed, leading to a 'Missing Record' error. This change ensures the system handles hierarchy deletions gracefully, preventing disruptions to employee data management.
Original PR description
Reproduce the crash: 1- Create departement in Employees. 2- Create a default filter with child_of or parent_of on the previously created departement. 3- Delete the departement. 4- Go back to Employees => Crash 'Missing Record' This commit adds a check for record exitence in `child_of_domain` and `parent_of_domain` in the case where `_parent_store` is True. This change prevents the `Missing Record` Error. task-5217722 Forward-Port-Of: odoo/odoo#242336 Forward-Port-Of: odoo/odoo#240013
This update fixes a technical issue where docstrings weren't correctly parsing return values, leading to incomplete documentation. The changes improve the accuracy of documentation across multiple Odoo modules, ensuring developers and users have clearer information about how to use the system. This enhances the overall quality and usability of Odoo.
Original PR description
Improve the docstring linter and fix yet another batch of docstrings. Forward-Port-Of: odoo/odoo#232673
This update corrects inconsistencies in the documentation for several Odoo modules. The changes ensure that all public documentation aligns with recent updates, improving clarity and maintainability. This enhances the overall user experience and supports future development efforts.
Original PR description
Forward-Port-Of: odoo/enterprise#101655
This update resolves a visual issue where a horizontal cursor appeared between cards in the website layout. This was caused by a plugin that incorrectly enabled cursor editing. The fix disables the plugin and prevents editing of image figures, ensuring a cleaner and more professional card layout experience.
Original PR description
Since [1] when the selection placeholder plugin was introduced, a horizontal cursor is displayed between cards in website, while that area is not supposed to be editable. This commit disables the `SelectionPlaceholderPlugin` inside the `html_builder`. It also makes the `<figure>` element around images non editable - in order to be able to write a test that does not enforce it to be wrong. Steps to reproduce: - Drop an `s_cards_grid`` block - Put the cursor in a card - Move the cursor with the arrow keys until you leave the card => The cursor was displayed between cards. [1]: https://github.com/odoo/odoo/commit/edf7f7bb0c62978640c181eccb4934855d5d872d task-5383957 Forward-Port-Of: odoo/odoo#240591
This update resolves a warning that appeared when searching for payment tokens, indicating an issue with how Odoo was trying to find the correct name. Adding a specific search field (`_rec_name_search`) ensures the system can reliably identify payment tokens, preventing the warning and maintaining data accuracy.
Original PR description
address this warning: `2026-01-07 04:53:23,985 3407309 WARNING v18c_... odoo.models: Cannot search on display_name, no _rec_name or _rec_names_search defined on payment.token` Forward-Port-Of: odoo/odoo#242477
This update fixes an issue where applying full amounts to invoice or payment lines was incorrectly triggering tax calculations. This ensures accurate financial reporting for invoices and payments, particularly when dealing with multi-currency transactions. The change improves the reliability of financial data.
Original PR description
Since this commit: https://github.com/odoo/enterprise/commit/5893005187fd67613baaae38e58e126dc9e28544 It could happens that on lines that come from an invoice or a payment (so lines with reconciled_lines_ids. Applying the full amount would trigger the edit_tax_line function which shouldn't be the case since those lines cannot have tax set on them. no task id Forward-Port-Of: odoo/enterprise#103334
This update fixes issues with button and link previews in the website editor, ensuring they accurately reflect the intended theme and styling. Specifically, it corrects how button previews are rendered after changing the button type to a link, and ensures link previews inherit theme colors correctly.
Original PR description
*: html_editor Issue: 1. Button previews displayed incorrectly after converting button type to link 2. Link preview displayed incorrect theme colors when parent and ancestor elements had different…
*: html_editor Issue: 1. Button previews displayed incorrectly after converting button type to link 2. Link preview displayed incorrect theme colors when parent and ancestor elements had different themes applied Steps to reproduce (Issue 1): 1. Add a button component 2. Set it to primary and modify its size/shape 3. Convert the button type to link 4. Re-open the button type dropdown 5. Observe incorrect button preview Steps to reproduce (Issue 2): 1. Add the `s_text_cover` snippet 2. Apply theme 1 (o_cc1) to Text Cover and theme 2 (o_cc2) to Column 3. Press Enter after the button 4. Start typing `/link` to create a link 5. Observe that the link preview in the powerbox dropdown shows incorrect theme colors After this commit: 1. Preview now correctly calculates based on previously configured button properties, even after type conversion 2. Link preview now correctly inherits theme styles from its direct parent element --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an error that occurred when users set a negative value for the Fiscal Year End Day in the Tax Returns view. The fix prevents invalid data from being saved, ensuring accurate fiscal year calculations and preventing the error from occurring.
Original PR description
Currently, an error occurs when user tries to open the Tax Return view. **Steps to Reproduce:** - Install the `Accounting` module. - Go to `Tax Returns` and set the `Fiscal Year End Day to negative…
Currently, an error occurs when user tries to open the Tax Return view. **Steps to Reproduce:** - Install the `Accounting` module. - Go to `Tax Returns` and set the `Fiscal Year End Day to negative value`, then click `Apply`. **Error:** `ValueError: day is out of range for month.` **Cause:** - The field is related to the `company's fiscalyear_last_day` [1]. - When the user enters a `negative value`, that invalid value is written directly to the `company's fiscal year last day`[2] . - When the user opens the `Tax Returns`, it going to compute the `fiscal year dates` [4]. Since the day value is negative, it raises error [5] because the day is out of range for the month. **Fix:** - This commit ensures that a validation error is raised when a user enters zero or negative fiscal year date. - In 18.3, setting the value to 0 falls back to the previously defined company value [2]. - In 19.0, however, the value 0 is incorrectly saved on the company [3], causing an error. - This fix restores the correct behavior and resolves the issue in 19.0 as well. [1]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/addons/account/wizard/setup_wizards.py#L17-L18 [2]: https://github.com/odoo/odoo/blob/45ca03fcb77febf4f373fe35f0242720e88cb85b/addons/account/wizard/setup_wizards.py#L49 [3]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/addons/account/wizard/setup_wizards.py#L54-L56 [4]: https://github.com/odoo/enterprise/blob/99642bdf62f8b1c653dfefdbdcd0e9258cc9e307/account_accountant/models/res_company.py#L174-L175 [5]: https://github.com/odoo/odoo/blob/27cd0a3fea1b47a85a4f3d397b052bbec08e182b/odoo/tools/date_utils.py#L242 sentry-7102968735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239814
This update resolves a bug that caused Facebook statistics refreshes to fail due to inconsistencies in how date and time information was handled across different versions of the Python datetime library. The fix ensures compatibility with older Python versions, preventing errors and improving the reliability of Facebook account statistics updates.
Original PR description
Bug
===
When refreshing the statistics of a Facebook account, an error can happen, depending on the datetime library version.
The following work in python 3.11, but not on python 3.10 and earlier, due to `+0000` instead of `+00:00`.
```py
import datetime
datetime.datetime.fromisoformat('2025-11-16T08:00:00+0000')
```
Task-5473117
Forward-Port-Of: odoo/enterprise#103456This update removes the Tailscale IP address from the IoT box status screen. This simplifies the display and ensures accurate reporting of network connections. The change improves the user experience by presenting only relevant network information.
Original PR description
This PR removes tailscale ip address from iot box status screen. ``` >>> netifaces.interfaces() ['lo', 'eth0', 'wlan0', 'tailscale0'] ``` The 'tailscale0' interface will now be ignored
This update automatically removes draft IoT Box records created during the connection process. This prevents unnecessary data storage and improves system performance, particularly for offline pairing scenarios where the app couldn't previously identify when to delete these records.
Original PR description
We now remove automatically draft IoT Box records every day. Draft records are the ones created when clicking "connect" in the IoT app, used to generate a token to identify boxes. If we use the pairing code or auto pairing process, this draft record isn't created until we actually find an IoT Box. But if the method is "offline pairing" and no request is later made by the IoT Box, then the IoT app can't know when to delete the record. The cron job fixes the issue.
This update enhances the speed and efficiency of dashboard loading within the Odoo SaaS platform. By implementing caching based on unique identifiers (ETags), the system now retrieves dashboard data more quickly, reducing loading times for users. This results in a smoother and more responsive user experience.
Original PR description
Ensure that the etag is used for caching dashboards. Task: 5441251 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 issue where spreadsheet caching wasn't correctly updating when a spreadsheet was renamed. Now, the system accurately reflects changes in spreadsheet names, ensuring users always access the latest version. This improves the overall user experience and data consistency.
Original PR description
Etag was computed from the spreadsheet content, but we forget to take spreadsheet metadata (like the name, ...) into account. So when user renames a spreadsheet, the browser still has the old version in cache and does not fetch the new name. This commit ensures that the ETag for spreadsheet data responses also takes into account the metadata of the spreadsheet. This commit also ensures that eTag for dashboards is computed. Task: 5441251
This update resolves an issue where the Salary Calculator view displayed blank fields when certain employee settings were applied. The fix ensures the correct calculation process is triggered, preventing data loss and providing accurate salary information. This improves the reliability of the Salary Calculator for all employees.
Original PR description
This commit fixes an issue in the Salary Calculator where all fields were displayed as empty when selecting an employee with a resource_calendar_id set. Steps to Reproduce : First Change to either…
This commit fixes an issue in the Salary Calculator where all fields were displayed as empty when selecting an employee with a resource_calendar_id set. Steps to Reproduce : First Change to either the default company (MyCompany) or Demo Belgian company Payroll -> Employee -> Salary Calculator -> choose an employee. Bug : All fields in the Salary Calculator view are empty (evaluated as False). Root Cause : Inside _compute_salary, the method _generate_salary_simulation_payslip writes on payslip.version_id using: payslip.version_id.write(new_payslip_vals) Because the is_simulation_offer key was missing from the context, this write triggered a full payslip computation, generating payslip lines. During this computation, compute_sheet() performs an unlink() on existing payslip lines. Since the Salary Calculator view fields are only cached at that point, the unlink causes the cached values to be lost, resulting in all fields being evaluated as False. Fix : Ensure that is_simulation_offer is present in the context when writing to payslip.version_id, preventing payslip line generation and avoiding the unintended unlink() during salary simulation. This PR references this one odoo/enterprise#102371 Task - 5387155
This update resolves an issue where the bank reconciliation process would fail when multiple reconciliation models were applied to a single bank statement line. The fix combines the names of all applied models, ensuring the system can correctly handle complex reconciliation scenarios. This enhances the reliability of bank statement matching.
Original PR description
Steps to reproduce: - Configure several reconciliation models matching the same statement line. - Reconcile the line and validate When reconciling a bank statement line, multiple reconciliation models can be applied (e.g. fees + write-off). The matching confirmation message assumed a single record and crashed when accessing `reconcile_model.name`. Fix by joining the names of the applied reconciliation models. OPW-5416031 Forward-Port-Of: odoo/enterprise#103069
This update improves how Odoo determines the file type (mimetype) of large documents like .docx files. Previously, the system incorrectly identified these files as 'application/zip' when using the python-magic library. Increasing the amount of data sent to the guesser function now ensures accurate identification, particularly for files over 40MB.
Original PR description
### Description of the issue/feature this PR addresses: The current number of bytes (1024) sent to the mimetype guesser function is not enough for a correct guess on big .docx files (maybe other open…
### Description of the issue/feature this PR addresses: The current number of bytes (1024) sent to the mimetype guesser function is not enough for a correct guess on big .docx files (maybe other open office files too) whenever `python-magic` is installed. If `python-magic` is not installed, it falls back to a [simpler implementation (by odoo)](https://github.com/odoo/odoo/pull/233266/files#diff-706296f6593337a9ff88c0e33e0e090eec75f63a22f9825dd31833ba17922840R145) that actually works correctly. But in odoo.SH it seems that `python-magic` is always installed and in that case, it returns the mimetype "application/zip" for big .docx files. The issue is not reproducible in runbot, so I'm assuming `python-magic` is not present in that environment. I've tested it with double the amount of bytes and it seems to work correctly. Please check the [following ticket](https://www.odoo.com/odoo/project.task/5125592) for more details. ### Current behavior before PR: <img width="1141" height="674" alt="image" src="https://github.com/user-attachments/assets/a3d28757-c55a-4b0f-9ee5-042777943635" /> ### Desired behavior after PR is merged: The uploaded file's mimetype is correctly identified for big (>40mb) open office files. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242281 Forward-Port-Of: odoo/odoo#233266
This update fixes a technical error that prevented the system from correctly updating SSL certificate status information. The issue stemmed from incorrect timezone handling during data conversion, which caused a system error. This change ensures certificate updates run smoothly without disruption.
Original PR description
Currently an error occurs when the `iot/box/update_certificate_status` controller tries to write `ssl_certificate_end_date` as `cert.not_valid_after_utc`. Error: `ValueError: unconverted data remains: +00:00` This is because when we convert `cert.not_valid_after_utc` to a string, it will convert the UTC date as ` "2026-03-08 13:06:39+00:00"` and while the system converts this string date with +00:00, it will throw an error. This commit fixes the issue by using a `timezone-naive` value derived from `cert.not_valid_after_utc`. Applying `replace(tzinfo=None)` removes the `+00:00` timezone information and converts the datetime to a `timezone-naive` object. sentry-7016111455 Forward-Port-Of: odoo/odoo#241631 Forward-Port-Of: odoo/odoo#241592
This update fixes an issue where project invoices weren't being correctly calculated when a project was linked to both an account and a department within the analytic distribution. The fix ensures the system properly handles commas in the distribution keys, allowing invoices to be accurately billed. This ensures accurate project cost tracking and billing.
Original PR description
### Steps to reproduce: - Create a billable Project - Create a Purchase order and set the created project and a department in analytic distribution - Create a Vendor Bill with the same analytic distribution and match with the PO - Confirm the Vendor Bill - Check the project dashboard - Notice the amount is under To Bill not Billed ### Cause: When checking the invoice lines we check if the AA in the distribution is the same as the one in the project. The problem comes when we have a Project and a Department set in the distribution as the keys in the JSON dict will be 'account_id,department_id' so the comma will trigger an incosistency so the invoice_line will be filtered out so we will consider this line as still waiting to be invoiced ### Fix: Make sure we cover the case of the comma presence in one of the JSON keys. opw-5350246 Forward-Port-Of: odoo/odoo#241571
This update resolves an issue where delivery validation would fail after splitting a stock move line within a delivery order. Now, the system correctly recognizes and validates deliveries even after splitting stock moves, ensuring accurate order processing. This prevents backorder warnings and improves the overall delivery workflow.
Original PR description
Scenario: * create a delivery with quantity 3 and mark as TODO * mark the stock move as picked * open the "Details" popup and split the stock move line into quantities 1 and 2, e.g. by adding a new…
Scenario: * create a delivery with quantity 3 and mark as TODO * mark the stock move as picked * open the "Details" popup and split the stock move line into quantities 1 and 2, e.g. by adding a new package or a new lot * exit the popup and try to validate the delivery Behavior before this commit: * the stock move in the delivery form remains picked * validation shows a backorder popup, warning of missing quantity Reason: the newly created stock move line is not picked, but this information is not displayed anywhere, so users are not aware of the cause of this issue After this commit: * the stock move is no longer picked after a new move line is added * users can click the "Picked" checkbox in the delivery form manually, which marks all stock move lines as picked as well * after this action, delivery validation proceeds without backorders opw-5345579 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#241790 Forward-Port-Of: odoo/odoo#239089
This update ensures that downpayment accounts are correctly applied when calculating taxes externally (like Avatax). Previously, invoices always used the default income account, even with a specified downpayment account. This change aligns with standard downpayment behavior and improves invoice accuracy.
Original PR description
**Problem:** When calculating taxes externally (such as Avatax) and a downpayment is made, the line on the invoice will always use the default income account, regardless of the downpayment account set as a company default. This is inconsistent with the standard behavior of downpayments, which will use the downpayment account set on the product's category instead of the income account (which themselves may come from company defaults). **Solution:** Check if there's a company default for downpayment account on product category and use this account for the downpayment line instead of the income account. opw-5171067 Forward-Port-Of: odoo/enterprise#101860 Forward-Port-Of: odoo/enterprise#101524
This update resolves a test failure that consistently occurred on January 1st. The fix adjusts the test's date reference to a more standard mid-year date, ensuring consistent test results and preventing disruptions. This improves the reliability of the l10n_mx_edi module's testing process.
Original PR description
Some tests are making "self.frozen_today - timedelta(days=1)". It means some tests are failing only the first of January. To avoid that, let's make "frozen_today" to be in the middle of the year. Forward-Port-Of: odoo/enterprise#102827 Forward-Port-Of: odoo/enterprise#102772
This update resolves an issue where dragging a CSV or Excel file to import bank statements resulted in an empty screen. Now, users can successfully import their bank statements, with details added to the chatter for imported records including account, statement, and reference information.
Original PR description
Before this commit: - If we drag and drop a CSV/Excel file to import a bank statement from the dashboard, we have an empty screen instead of imported records. After this commit: - Now we get all those newly imported records after dragging and dropping a CSV/Excel file of bank statement from the dashboard. - If the record is imported, then we add this information into the chatter: bank account, statement, reference, end-to-end_id, notes. task-5212807 Forward-Port-Of: odoo/enterprise#98843
This update simplifies how AI errors are handled in live chat. Previously, a technical error message was disguised with AI-generated text, but the underlying traceback remained visible. Now, errors are handled more directly, providing a cleaner experience for users and support teams.
Original PR description
Before this commit, whenever we called `/ai/generate_response` from the fron-end we were catching any potential exceptions and calling the `ai/post_error_message`. The `post_error_message` function…
Before this commit, whenever we called `/ai/generate_response` from the fron-end we were catching any potential exceptions and calling the `ai/post_error_message`. The `post_error_message` function called from that controller endpoint would take the exception message, and ask the AI to explain the error to the user without the use of technical terms. The problem with this approach is two-fold. Firstly, in the `post_error_message` method, we use the `generate_response` method in order for the AI to beauty-fy the error message. But, the `post_error_message` method is called when catching exceptions of the `generate_response` method. Thus, the exception is caught, a nice message is posted in the chat, but then a traceback is shown regardless. Secondly, beautifying the error messages makes it more difficult for end users to understand what could be going wrong and making it also more difficult for our support to help them out. In this commit, we removed the `post_error_message` flow. We move the try-except to the `_generate_response_for_channel` method and if the user is an internal user we let the exception bubble up. If not (for website users on livechat), a generic message will be posted on the chat. task-5177169 Forward-Port-Of: odoo/enterprise#97516
This update fixes an issue where displaying the correspondent's local timezone in the Discuss app caused the header height to be uneven. The changes subtly adjust the conversation name, line height, and font size to maintain a balanced and visually appealing header across all conversations, ensuring a consistent user experience.
Original PR description
Follow-up of https://github.com/odoo/odoo/issues/210094 PR above add a new feature to show the local timezone of correspondent of chat when it differs from current user. The conversation name, in addition to local timezone, increases the height of discuss header, which didn't look great. This commit fixes the issue by: - reducing the conversation name slightly when local timezone is shown - reduce line-height when local timezone is shown - reduce slightly font size of timezone These changes preserves the height of discuss header for all conversations, and makes text content more balanced between each item relative to header, including the avatar size. <img width="1164" height="490" alt="Screenshot 2026-01-07 at 20 39 07" src="https://github.com/user-attachments/assets/21a8dc59-c3c3-4fe4-9c54-f74f7156c00c" />
This update fixes an issue where dropdown menus appeared too small when positioned near the edges of the screen. The change decouples the shrinking logic, ensuring dropdowns adapt correctly to different screen sizes and positions, improving the user experience. This ensures consistent and functional dropdown display.
Original PR description
This commit resolves an issue where dropdowns shrank incorrectly when positioned close to the window's edges. Following changes in https://github.com/odoo/odoo/pull/239601, only one positioning variant is tested per direction, with the popper shifting to stay inside the container. However, the existing shrinking logic attempted to strictly adhere to that specific variant. This conflict led to unsatisfactory rendering when space was tight near the edges. The fix is to decouple the shrinking logic from the specific positioning variant. The shrinking computation now ignores the variant preference and only reduces the size when the popper physically exceeds the container dimensions. task-5462517
This update resolves a bug that prevented users from successfully canceling image uploads within the Salary Configurator. The fix ensures the system correctly handles image selection and cancellation, preventing errors and improving the user experience. This improves the reliability of the employee contract generation process.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Install the hr_contract_salary module. - Go to Employee contract and click the Generate Offer. - Click on 'Send By Email' button and open Salary Configurator. - Upload an employee photo the first time. then cancel the image selection the second time. **Issue:** - Error occurs when canceling the image selection on Salary Configurator page. **cause:** - The condition to check whether the file exists properly was missing. **solution:** - Added the missing condition to properly check that file exist. Task-5423390 Forward-Port-Of: odoo/enterprise#103421 Forward-Port-Of: odoo/enterprise#102410
This update fixes an issue where the appraisal plan start date wasn't being correctly calculated. The previous change removed a necessary logic block, and this PR reintroduces it to ensure accurate appraisal scheduling. This ensures appraisals are set up correctly for employees.
Original PR description
**Issuee:** A recent change (https://github.com/odoo/enterprise/pull/100599/changes) was made to remove duplicate mehtod, but we need to maintain the main logic of setting the `appraisal_plan_start_date` field. This PR reintroduces this logic. Task:5408846 Forward-Port-Of: odoo/enterprise#103385 Forward-Port-Of: odoo/enterprise#102022
This update fixes a visual issue on the shop page where product images didn't smoothly transition or replace when hovered over in list views. By adding a specific CSS class, the images now display a consistent animation and replacement effect, creating a better user experience for browsing products. This ensures a more polished and professional look for our customers.
Original PR description
Before this commit : --- when the none type hover effect selected on the shop page product hover is supported by default but in this hover transition images are stacked instead of replacing. https://github.com/user-attachments/assets/04801451-842d-4072-bfcf-249767962823 Why this commit : --- adding 'o_wsale_products_opt_img_hover_none' class to manage this image stacking issue The none type is default for all the list layout views hence the image stacking issue observed in all the list views where product image is uploaded in the png without background image. https://github.com/user-attachments/assets/8ad8832f-f2e8-486c-a638-32ea3595493a OPW: 5406434 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241698
This update optimizes how the POS system calculates product prices for paid orders. Previously, the system unnecessarily recomputed prices, leading to wasted processing time. This change improves the efficiency of the POS system and reduces unnecessary server load.
Original PR description
Before this commit, the POS system would recompute product prices even for orders that were already paid. This led to unnecessary calculations. opw-5263663 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238838
This update resolves a minor issue that caused a checkout error when selecting a delivery method for the first time. The fix adds a check to ensure the necessary webpage elements are fully loaded before attempting to modify them, preventing a JavaScript error. This ensures a smoother checkout experience for all users.
Original PR description
**Description:** - This error occurs when the code attempts to access the classList of a DOM element that has not yet been rendered. Specifically, amountDelivery.querySelector(...) returns null…
**Description:**
- This error occurs when the code attempts to access the classList of a DOM element that has not yet been rendered. Specifically, amountDelivery.querySelector(...) returns null during the first selection of the delivery method, and calling .classList on this null value triggers the traceback.
- The issue is observed only on the first interaction when selecting the delivery method. After refreshing the page, the required DOM element is available, and the checkout flow works as expected.
- To resolve this issue, a conditional check was added to ensure that the DOM element exists before accessing its classList.
- [Reference](https://github.com/odoo/odoo/pull/204358/files#diff-ecbd12f8bbcc7e08a87d7edba111301bb0ca5197137d193323d156809651fcb6R353)
**Steps to reproduce:**
1) Create a fresh database on version saas-18.4.
2) Install the website_sale module.
3) Create a product and add it to the cart.
4) Proceed to the checkout page.
5) Add two delivery addresses for the customer.
6) Configure a delivery method for only one of the delivery addresses.
7) During checkout, select the delivery address that has a delivery method configured.
8) When selecting the delivery method for the first time, a traceback occurs.
- Video [video.webm](https://github.com/user-attachments/assets/b9146fef-cef8-4d16-8556-bbeac9ef6119)
**Traceback:**
```.py
Odoo Client Error
UncaughtPromiseError > TypeError
Uncaught Promise > Cannot read properties of null (reading 'classList')
Occured on 51.test.upgrade.odoo.com on 2026-01-07 12:09:06 GMT
TypeError: Cannot read properties of null (reading 'classList')
at Class._updateCartSummary (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11024:437)
at https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11025:355
at NodeList.forEach (<anonymous>)
at Class._updateCartSummaries (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11025:337)
at Class._updateDeliveryMethod (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11022:2353)
at async Class._selectDeliveryMethod (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11022:54)
```
- opw-5427215
- upg-3715707
Forward-Port-Of: odoo/odoo#242578This update resolves an issue where the product comparison bar was obscured by banner categories on the website. The fix removed unnecessary z-index settings, allowing the comparison bar to consistently appear above other content and ensuring a better user experience. This improves usability for customers.
Original PR description
Description of the issue: The banner categories snippet (s_banner_categories) had hardcoded z-index values (1, 2, 3, 4) on its grid items. This caused a stacking context issue where grid items with z-index 3 and 4 would overlap the product comparison bottom bar, which uses z-index 3 (default) and 4 (when expanded). Solution in the PR: The z-index values on the grid items were unnecessary since they are positioned using CSS Grid and don't overlap with each other. Removing these inline z-index declarations allow the comparison bar to properly display above all snippet content. After this PR: The comparison bar now consistently appears on top, ensuring users can interact with it without visual interference from page snippets. opw-5426163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242751
This update resolves issues preventing the accurate generation of stock reports for Peru (PLE). The fix corrects several errors related to how Odoo accesses product data, ensuring reports now display correct information for Peruvian businesses. This improves the reliability of financial reporting.
Original PR description
## Summary Fix multiple `AttributeError` exceptions when generating PLE 12.1 and 13.1 stock reports: - Use `unspsc_code_id` instead of `unspsc_code` (correct field name defined in `product_unspsc`) - Use `with_context(lang=)` instead of `with_lang()` (correct Odoo API) - Use `categ_id` instead of `category_id` (correct field name on `product.template` and `product.product`) Forward-Port-Of: odoo/enterprise#103004
This update resolves an issue where the Gantt view would freeze when users scrolled excessively during selections. The fix ensures selections work smoothly, even with extensive scrolling, by adjusting how the system detects selection targets and triggering necessary cleanup processes.
Original PR description
Previously, scrolling too far during a selection or multi-selection in the Gantt view caused the interface to appear "frozen". This was caused by 2 problems: - virtualization made the initial "dragged" cell (i.e. the cell on which the selection starts, which is the recognized drag target) disappear when scrolling too far, causing the drag sequence to be interrupted; - interrputing the selection drag sequences did not call the proper cleanup functions, leaving both selection "ghost" cells and badges visible. This commit fixes both of these issues: - drag target for selection is now the cell container (not affected by virtualization), and not the cells themselves; - cleanup functions related to selection and multi-selection are now called on "dragend" instead of the "drop" handler, allowing them to be applied everytime they're needed. Forward-Port-Of: odoo/enterprise#103499
This update fixes an issue where invoice names weren't correctly linked to Avalara transactions. The team reverted to a previous method of recreating transactions after posting to ensure Avalara receives the necessary invoice information. This ensures accurate tracking of transactions with Avalara, improving data consistency.
Original PR description
In the external tax refactor [1] I wanted to use the commit endpoint to commit transactions in Avalara after posting. It works, but now transactions on Avalara's side are missing the Odoo invoice name references. It's still possible to cross-reference transactions using avatax_unique_code, but it's less convenient. The reason is that we create transactions for draft invoices. They don't have a name yet. Avalara doesn't have a way to update just the code so we revert back to the pre-refactor approach of recreating the entire transaction right after posting with `'commit': True`. `account_external_tax` calculates the taxes right before `_post()`, so we're reasonably sure they should remain the same. In master we can remove all the commit-specific methods and code. [1] https://github.com/odoo/enterprise/pull/82623 opw-5382268 Forward-Port-Of: odoo/enterprise#103570
This update fixes a minor issue where the "Move to trash" option was displayed unnecessarily when documents were already in the trash view. This change simplifies the user interface and prevents confusion, ensuring a smoother workflow for users managing archived documents. It's a small improvement focused on usability.
Original PR description
### Description Do not show the "File > Move to trash” menu entry when the document is already archived (in trash). Task: [5253608](https://www.odoo.com/odoo/project/2328/tasks/5253608) Forward-Port-Of: odoo/enterprise#102773
This update resolves an issue where precommit hooks in Odoo needed manual flushing, potentially causing system instability. By allowing the ORM to handle flushing automatically, this change enhances database reliability and prevents potential infinite loops. This improvement ensures data consistency and a smoother user experience.
Original PR description
In the existing implementation sometimes precommit hooks need to flush manually because they are ran after the flush is executed in the cursor. A precommit that triggers ORM changes may be not flushed unless it is done explicitly, however an explicit call may turn into an infinite loop. This removes the need to flush in precommit hooks and let the ORM handle it safely. Flushing of the environment was already done in #220379. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242815 Forward-Port-Of: odoo/odoo#242248
This update resolves an issue where spreadsheets with certain data validations were causing unexpected animations during printing. The fix ensures the system waits for all animations to complete before initiating the print process, resulting in a smoother and more reliable printing experience for users.
Original PR description
The hook preparing the spreadsheet for printing did not account for cell animations. Unfortunately, this can affect spreadsheets that contain a datavalidation as the spreadsheet is forced to dashboard mode to print (current technical limitation) and since the datavalidations do not have the same aspect between spreadsheet and dashboard modes, an animation is triggered. This revision ensures that we wait for all animations to be done before triggering the browser printing. Task: 5461856 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#242260