Daily updates from Odoo
Thursday, January 8, 2026
27 changes · 19.0
Enhancements to existing features
This update adds crucial data attributes to Odoo's tax calculations and NFS-e submissions when the Brazilian fiscal reform is active. Specifically, it includes 'name,' 'businessName,' 'federalTaxId,' and 'type' fields, ensuring accurate tax reporting and compliance with new regulations. This change supports the ongoing requirements of the Brazilian tax system.
Original PR description
Purpose: Additional attributes are required to be sent in the rendered node for tax calculation and NFS-e submission when the fiscal reform is enabled. The additional required attributes are: - name - businessName - federalTaxId - type task-5450129 Forward-Port-Of: odoo/enterprise#103438
Resolved issues and error corrections
This update corrects a technical issue preventing credit notes with allowances issued more than 6 days after the original invoice from being processed by ECpay. The fix removes the outdated AllowanceDate parameter and ensures consistent data transmission, resolving errors and improving compliance with ECpay requirements. This change improves the reliability of e-invoicing to ECpay.
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 prevents the loss of Starshipit delivery orders when label creation fails. Previously, a failed label attempt would delete the order, disrupting the validation process. Now, users can retry validation without losing existing orders, streamlining the delivery workflow.
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 corrects an issue where invoice data sent to the SInvoice system was missing descriptions or unit information. The fix ensures that line descriptions and default unit names ('Units') are always included, improving data accuracy and compatibility with the SInvoice system. This resolves a potential disruption in 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 fixes an issue where the purchase order valuation didn't accurately reflect invoices. Previously, the move value remained at the original purchase price. Now, after invoicing, the move value will correctly update to the invoice amount, ensuring accurate accounting records. This improves the reliability of purchase order valuation.
Original PR description
**Problem:** move value does not take invoice into account **Steps to reproduce:** - storable product - buy 1 at 10 and validate transfer - invoice at 12 **Current behavior:** move value is still at 10 **Expected behavior:** it should be 12 **Cause of the issue:** when other_candidates_qty is computed the quantity from self is taken into account https://github.com/odoo/odoo/blob/3832793e3ce61aff0c7cf4673de84645a3469b3a/addons/purchase_stock/models/stock_move.py#L179-L187 so in our case it will be 1 and the product_uom.compare will return 0. https://github.com/odoo/odoo/blob/3832793e3ce61aff0c7cf4673de84645a3469b3a/addons/purchase_stock/models/stock_move.py#L189-L190 So we will return valuation_data before changing its 'value' and 'quantity' from 0 to the correct values. **fix** we should not take self into accound when computing other_candiates_qty opw-5261825
This update resolves an issue where the HTML editor would crash when 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 fixes an issue where the recurring price table wasn't displaying correctly when the 'one-time purchase' option was selected for products. The fix ensures the pricing table is shown accurately for both service and goods types, improving the user experience and ensuring consistent pricing presentation.
Original PR description
Currently, the recurring price table displays incorrectly when the user enables the one-time purchase option for a product. **Steps to produce:** * Install `website_sale_subscription` with demo data…
Currently, the recurring price table displays incorrectly when the user enables the one-time purchase option for a product. **Steps to produce:** * Install `website_sale_subscription` with demo data * Products > Car Leasing > Recurring prices > Enable Accept One-time * Go to that product's website page **Observed behavior:** The pricing table template [1] is appended inside the input radio button instead of replacing the entire pricing table. **Root cause:** * Initially, when the `sale_subscription_product_price` template is used, function [2] replaces the table inside `div` [3], which has the `plan_select` class. * But When one-time purchase is enabled, the template `subscription_one_time_sale` is used instead of `sale_subscription_product_price`. * In that template, `div` [4] does not have the `plan_select` class. * Because of this, the query selector [5] finds the first `plan_select` element inside `input` [6]. * As a result, function [2] renders the table inside that `input` element instead of the intended `div`. **Solution:** This commit ensures that: * One time purchase price is changed dynamically based on variants. * The pricing table is displayed correctly for both service and goods type products. * The radio button selection works correctly by adding classes to the template and modifying its interaction accordingly. | Before 'Service' type product page | After 'Service' type product page| |--------|--------| | <img width="1855" height="928" alt="image" src="https://github.com/user-attachments/assets/d662fbf5-cfce-45c5-b14c-043e982c63a6" /> | <img width="1851" height="933" alt="image" src="https://github.com/user-attachments/assets/8e510b27-6917-43bc-ac5d-b01ff1b187ad" />| | Before 'Goods' type product page | After 'Goods' type product page | |--------|--------| | <img width="1852" height="931" alt="image" src="https://github.com/user-attachments/assets/b9aa68e7-beef-413c-b99e-a71937e35e10" />| <img width="1851" height="932" alt="image" src="https://github.com/user-attachments/assets/d768edd9-2169-4d43-ac59-9893b55d5bcd" /> | [1]: https://github.com/odoo/enterprise/blob/ae2f3a8062a0509db565e7bab2376a001fa047ae/website_sale_subscription/static/src/xml/pricing_view.xml#L21-L63 [2]: https://github.com/odoo/enterprise/blob/ae2f3a8062a0509db565e7bab2376a001fa047ae/website_sale_subscription/static/src/js/variant_mixin.js#L32-L36 [3]: https://github.com/odoo/enterprise/blob/77423e62d5b74d73cad86bf81fdfee2bea3ef2d1/website_sale_subscription/views/templates.xml#L61 [4]: https://github.com/odoo/enterprise/blob/ae2f3a8062a0509db565e7bab2376a001fa047ae/website_sale_subscription/views/templates.xml#L130 [5]: https://github.com/odoo/enterprise/blob/7837a4497759dc9dd75aeac30083266798c5ce59/website_sale_subscription/static/src/js/variant_mixin.js#L18-L20 [6]: https://github.com/odoo/enterprise/blob/ae2f3a8062a0509db565e7bab2376a001fa047ae/website_sale_subscription/views/templates.xml#L138 opw-5380240
This update fixes an issue where the invoice value wasn't correctly applied to purchase orders. Previously, the system was incorrectly counting invoiced quantities, leading to inaccurate PO values. Now, the system will accurately take the invoice value, ensuring correct reporting and accounting for purchase orders.
Original PR description
It's due to commit 47345b1fc8b805e232a4287cc6d5c54b2f5886cb It will consider it's onw as another candidate and will count himself as quantity already invoiced. It will then take the PO value instead of the bill. 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 corrects a bug where putting items into a package from the SML view resulted in the package being incorrectly located. The fix addresses an issue within the Odoo stock management system, ensuring packages are accurately assigned to their intended destination after this action. This resolves a problem where packages were not appearing in the system.
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 delivery validation would fail after splitting a stock move line within a delivery order. Now, when a stock move is marked as picked and then split, the delivery can be validated without errors. This ensures accurate stock tracking and prevents disruptions in the order fulfillment process.
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#241655 Forward-Port-Of: odoo/odoo#239089
This update corrects a bug that incorrectly flagged some bank statements as invalid, even when they were accurate. The fix adjusts how statement validity is calculated, ensuring that all statements are properly recognized as valid based on their balances. This improves the reliability 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 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
This update corrects a problem with importing WinBooks tax files. Previously, the import process incorrectly included tax tags with signs, leading to inaccurate tax reporting. This change removes the sign from tax tags during import, ensuring correct tax calculations and reporting.
Original PR description
Import a WinBooks file on a fresh database (a sample can be found in the test files of test_winbooks_import). In the imported taxes, we can see that the tax_tags contain signs. However, since https://github.com/odoo/odoo/pull/225252 , tax tags should no longer store a sign. This causes issues with imported entries in the tax reports: they are not included. This commit adapts the import for WinBooks tax_tags to remove their sign before importing them. opw-5345933
This update refactors internal code to improve how Odoo's spreadsheet pivot tables handle data relationships. Specifically, it fixes an issue that previously caused errors when adding dimensions to pivot tables. This change ensures pivot tables function correctly and reliably.
Original PR description
This commit extracts the logic to fetch relational field definitions into a separate utility function `getRelationalFieldDefinition`. This function will be used in the enterprise commit to fix an issue with invalid dimension addition in pivot tables. Task: 5411336 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 resolves an issue where setting the Tax Return fiscal year end day to a negative value caused an error. The fix ensures that the system prevents this invalid input, ensuring data integrity and preventing the error from occurring in version 19.0.
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 an issue where scrolling in the Gantt view would cause the interface to freeze. The fix ensures selections work smoothly, even with extensive scrolling, by adjusting how the selection target is identified and by triggering necessary cleanup processes more reliably. This improves the user experience when managing tasks in the Gantt view.
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.
This update resolves issues with accurately managing packages within the Barcode app, specifically during 'pack in pack' operations. It ensures that the correct package content is scanned and added to new pallets, improving the overall efficiency of inventory management.
Original PR description
This PR fixes some issues with the packages in the Barcode app. See commit message for more details. [task-5116602](https://www.odoo.com/odoo/966/tasks/5116602)
This update significantly speeds up the generation of budget reports by optimizing how data is filtered. Previously, a slow process involved building a large table and filtering it afterward. Now, the filtering is applied directly within the underlying queries, dramatically reducing processing time and improving report loading speed.
Original PR description
Previously, generating the budget.report table was necessary to trigger _compute_all for budget.line fields. This table was built using three separate queries with a UNION operator. Because of the…
Previously, generating the budget.report table was necessary to trigger _compute_all for budget.line fields. This table was built using three separate queries with a UNION operator. Because of the UNION, any filtering (like on specific budget_line_ids) happened after the full, unfiltered table was generated. This post-filtering caused slowness, especially in nested loop joins with large tables like account.analytic.line. This commit optimizes performance by pushing the filter condition (using specific budget_line_ids) directly down into the three underlying queries. This reduces the number of budget.line records processed, speeding up joins and overall computation. The benchmark below is done on a database that has **66396** `budget.line` records and **928567** `account.analytic.line` records. Opening a budget report for a specific year, only applied the filter with **40** `budget.line` records. | Scenario | Execution Time | | :--- | :--- | | **Before this Commit** | **60.00 seconds** | **After this Commit** | **1.84 seconds** opw-5150569 Forward-Port-Of: odoo/enterprise#102771 Forward-Port-Of: odoo/enterprise#99096
This update resolves a problem where videos embedded within eLearning courses weren't displaying correctly. The issue stemmed from a forgotten step in the video plugin's setup, preventing proper rendering of video elements. This ensures videos play seamlessly within the website's eLearning module.
Original PR description
*: website_sale Steps to Reproduce the issue: - Go to eLearning module and select any course, if exist, or create a new one. - In the description tab, add a video link. - Click on "Go to Website" - Traceback occurs, and the video is not visible. When the video tab was added to the Media Dialog, and EmbeddedVideoPlugin was introduced in [1], it was forgotten to override the classes added by the video plugin to embedded videos. The issue happens because the video plugin adds a class to the video element, and MediaVideo Interaction generates a video iframe, but we already have a separate interaction for embedded components. [1]: https://github.com//odoo/odoo/commit/a78ec7ab03973db54917e69d3d13b59f7410a3c7 task-5442928 opw-5224050 opw-5454714
This update resolves a crash issue that occurred when upgrading Odoo Enterprise with a large number of payslips. The fix optimizes a key function to reduce memory usage during payslip recalculations, preventing database errors and ensuring smoother system performance.
Original PR description
Upgrading databases with large amount of payslips crashed with a `MemoryError` when recomputing payslip issues, this because `_get_similar_payslips()` do load (prefetch) to many records at a time. This commit improve both memory consumption and speed for the `_get_similar_payslips()`.
This update resolves an issue where changing display settings on Image Walls (galleries) in the website caused errors in Chrome due to a browser limitation. The fix replaces a rapid error-checking method with one that handles potential decoding failures gracefully, ensuring the display mode options work correctly.
Original PR description
Steps to reproduce: ==================== - Go to the website in chrome - Create a Image Wall (gallery) - Add a lot of images. See attachments for a .zip file in task to test it. - Try to change the…
Steps to reproduce: ==================== - Go to the website in chrome - Create a Image Wall (gallery) - Add a lot of images. See attachments for a .zip file in task to test it. - Try to change the display mode or number of column -> An error will appear when the cursor get on the dropdown options. Cause: ====== In Google Chrome, calling img.decode() on a large set of images simultaneously (e.g., in an image wall) can result in `EncodingError: The source image cannot be decoded for some images`. This is a known Chromium issue (See [1]) where the browser's image decoder gets overwhelmed or hits a concurrency limit, causing it to reject valid images. The current implementation uses Promise.all(imgLoaded), which utilizes a "fail-fast" mechanism. Consequently, if a single image fails to decode due to this browser limitation, the entire promise rejects immediately. This unhandled rejection interrupts the execution flow, preventing the display mode or column options from functioning correctly when the user interacts with them. Solution: ======== Replace `Promise.all(imgLoaded)` with `Promise.allSettled(imgLoaded)`. Unlike `Promise.all`, `Promise.allSettled` waits for all promises to finish regardless of whether they succeeded or failed. [1]: https://issues.chromium.org/issues/40261318 opw-5249130 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the promotional 'pulse' effect repeatedly appeared during calls, causing a distracting experience. Now, the effect only shows until the user explicitly engages with fullscreen or picture-in-picture, ensuring a smoother and less intrusive call session. This change improves user satisfaction and call usability.
Original PR description
**Current behavior before PR:** The pulse effect could reappear during a call, even after the user had already interacted with fullscreen or picture-in-picture. This resulted in a repetitive and overly insistent visual cue. **Desired behavior after PR is merged:** This PR refines the promotion logic so the pulse effect is shown only until the user explicitly interacts with fullscreen or pip mode. Once the user does so, the promotion is permanently discarded for the duration of the current call session and cannot be reactivated by subsequent camera or UI state changes. task-[5468368](https://www.odoo.com/odoo/project/1519/tasks/5468368) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the 'Add to Cart' button on product pages was causing the shopping cart modal to refresh instead of adding the item. The fix changes the button's type to 'button' to prevent the page from reloading, ensuring the modal pop-up functions as intended.
Original PR description
[Issue] Customer embedded the "Add to Cart" button id="s_add_to_cart" to the [form](https://github.com/odoo/odoo/blob/edaa02dc0e67d6ccd17cc3be9a98d94276bcd403/addons/website_sale/views/templates.xml#L2066) inside the product webpage. By default, buttons inside forms use the type="submit" attribute, which causes the form to refresh after the button is clicked. Therefore, the modal pop-up is essentially rendered useless because it just refreshes the page. [Solution] added type="button" to the button inside "s_add_to_cart" to make it a normal button without the "submit" functionality opw-5417500 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where discounts applied to purchase orders weren't correctly reflected in the product's standard price. With the new inventory system, the standard price was incorrectly calculated without considering the discount. This change ensures the standard price accurately reflects the actual cost of the product based on purchase order discounts.
Original PR description
**Steps to reproduce:** * Install the *purchase_stock* module * Create new Product category. * In the category, set the **Costing Method** to *Average (AVCO)*. * Create a new product and assign a…
**Steps to reproduce:** * Install the *purchase_stock* module * Create new Product category. * In the category, set the **Costing Method** to *Average (AVCO)*. * Create a new product and assign a created product category. * Create a new Purchase Order. * Add a Purchase Order Line with the created product. * Set **Quantity** to 10. * Set **Unit Price** to 100. * Set **Discount** to 10%. * Confirm the Purchase Order. * Validate the generated receipt. * Open the product form and check the *standard_price*(Cost) field. **Observed behavior:** The product standard price is updated to **100**, calculated from the undiscounted unit price (1000 / 10), ignoring the discount applied on the purchase order line. The expected value is *90* (900/10). **Cause:** With the new inventory valuation logic in v19.0, the standard price is updated via *_update_standard_price*, which calls *_run_avco* which uses the stock move *value* field set by *_get_value_from_quotation*: https://github.com/odoo/odoo/blob/71195624008f8c1ba8b10e1b04433e34e08fb540/addons/stock_account/models/product.py#L340 However, the *_get_value_from_quotation* relies on *_get_stock_move_price_unit*, which returns the unit price **without considering the discount**, leading to an incorrect move value for AVCO computation. **Note:** Prior to 19.0, the `price_unit` of the move was calculated in the `_get_price` unit using the `_get_gross_price_unit` using the discounted value of the line: https://github.com/odoo/odoo/blob/24db73743d8bb4d678af7efb4d78a019e0953395/addons/purchase_stock/models/stock_move.py#L152-L154 https://github.com/odoo/odoo/blob/24db73743d8bb4d678af7efb4d78a019e0953395/addons/purchase/models/purchase_order_line.py#L383-L387 It should still be the case here as there is no discounted_unit_price on the move and, since we do not rely on the `_get_gross_price_unit` anymore, we should adapt the relative call: https://github.com/odoo/odoo/blob/090c5a4d55e3fcd1b2840bc8afaed49efc8745d4/addons/purchase_stock/models/stock_move.py#L214-L218 https://github.com/odoo/odoo/blob/090c5a4d55e3fcd1b2840bc8afaed49efc8745d4/addons/purchase_stock/models/purchase_order_line.py#L238-L243 --- opw-5409226 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the VAT payable threshold in the monthly tax report for Italian businesses (l10n_it) was incorrectly set. The threshold has been restored to the correct 100.00€ value, ensuring accurate reporting and calculations for VAT payable. This corrects a previous error that caused inconsistent report totals.
Original PR description
Commit 04155a0 correctly increased the threshold for the VP7 line of the monthly tax report from 25.82€ to 100.00€. However, a subsequent commit…
Commit 04155a0 correctly increased the threshold for the VP7 line of the monthly tax report from 25.82€ to 100.00€. However, a subsequent commit (https://github.com/odoo/odoo/commit/51a72ab42d118d6fb0eb3e3545a09e10019b9140) accidentally reverted this change to the outdated value. This commit restores the threshold to the expected value of 100.00€. --- The previous fix in https://github.com/odoo/odoo/commit/4e831999ed06e0e3c2f380414c5949db645f2f19 attempted to correct VP6 (VAT due/deductible) but relied on an incorrect assumption regarding debit signs. In the Italian tax report, values should remain positive regardless of whether they are debits or credits. Displaying debits as negative caused: 1. Incorrect visual representation in the report columns. 2. Inconsistent totals for VP14 (VAT payable). This commit ensures all debit column values are displayed as positive and restores the correct calculation logic for the report totals. opw-5357719 opw-5411706 opw-5421779 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a forecasting issue in the inventory management system. Previously, forecasts didn't account for products nearing expiration, leading to inaccurate stock predictions. Now, forecasts correctly consider quantities that will expire before the specified date, improving inventory planning and reducing potential stockouts.
Original PR description
When computing the forecasted quantity of a product with expiration for a specific date in the forecast widget. We should take into account the quants that will be expired before that date. Not only the ones that are already expired. Task: 5077677 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures combo prices accurately reflect added products when switching between order presets (e.g., dine-in to delivery). Previously, changing the preset would reset the price without accounting for extra items. The fix separates free and extra products within combos, correctly calculating the total price.
Original PR description
**Problem:** When ordering a combo product, you can order more products than the combo requires, which will the add *base_price* to the combo price. The problem is that when changing the preset, like…
**Problem:** When ordering a combo product, you can order more products than the combo requires, which will the add *base_price* to the combo price. The problem is that when changing the preset, like going from eat in to delivery, the pricelist is reconfigured, and it does not take the extra products from the combo into account. This means that the price will go back to the combo's price without the extra products. **Steps to reproduce:** - Have a combo that can take on multiple free products and has a limit above this free product number - Order more than the free quantity - Change the preset (from eat in to delivery) - The price is recomputed without taking the extra products into account **Why the fix:** The extra articles were not accounted for when changing the pricelist, meaning they would end up free and the price would change. We now make a separation between the free products (that are from the combo) and the extra products. The extra products cost the *base_price* of said combo. To do that, we need to get the extra lines from the combo, which are the products that are not free in the case where there are more products selected in the combo than free products defined in the definition of the combo. To make that happen, we add the non free lines to the extra lines list once we have at least as many free products as defined in the combo definition. In the case where the quantity of a product is greater than the number of free items, the lines are automatically split. Meaning if we have a combo with 2 free items but we order 3, we will have a line with a quantity of 2 and another line with a quantity of 1. In that case, the first line will be free, but the second line will be an extra. This logic is implemented here https://github.com/odoo/odoo/blob/0087cc96b2d2190ab107c3d50d3bdd48f7a687e9/addons/point_of_sale/static/src/app/components/popups/combo_configurator_popup/combo_configurator_popup.js#L88-L106 Which is then retrieved here to make the separation in the combo's price https://github.com/odoo/odoo/blob/0087cc96b2d2190ab107c3d50d3bdd48f7a687e9/addons/point_of_sale/static/src/app/services/pos_store.js#L879 opw-4885574 Forward-Port-Of: odoo/odoo#217082