Daily updates from Odoo
Navigate
Branch
Friday, January 9, 2026
228 changes
34 changes
Resolved issues and error corrections
This update fixes an issue where the recurring price table wasn't displaying correctly when users chose a one-time purchase option. The fix ensures the pricing table is shown accurately for both service and goods products, improving the user experience and ensuring accurate pricing information is presented.
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 Forward-Port-Of: odoo/enterprise#102427
This update fixes a labeling issue on the contact form for Brazilian companies, ensuring that VAT-related fields (like IE, IM, and SUFRAMA) are clearly identified. The change resolves a technical problem related to how Odoo prioritizes module views, preventing labels from disappearing. This improves usability for users working with Brazilian company data.
Original PR description
Currently, fields added using XPath expressions before or after the `VAT` field (such as `IE`, `IM`, and `SUFRAMA` from `l10n_br`) lose their labels and helpers in the Contacts form, making them hard…
Currently, fields added using XPath expressions before or after the `VAT` field (such as `IE`, `IM`, and `SUFRAMA` from `l10n_br`) lose their labels and helpers in the Contacts form, making them hard to identify. **Steps to reproduce:** - Install the `l10n_br` module and switch to a `BR company`. - Go to Contacts and open a contact form. - Observe the Brazilian identification number fields (`IE`, `IM`, `SUFRAMA`). **Obeservation:** Missing labels and helpers for fields added around the `VAT` field in the `res.partner` form. **Root Cause:** After commit [1], `account.view_partner_property_form` inherits from `product.view_partner_property_form` at [2], whose default priority (16) causes it to be applied after `base_vat.view_partner_base_vat_form`, which has priority (15) at [3]. As a result, the `base_vat` module moves the `VAT` field into the `vat_vies_container` div. Consequently, any subsequent XPath expressions targeting the `vat` field with position `before` or `after`, when the view is inherited from `account.view_partner_property_form`, are applied inside this container instead of the original form layout. The issue is not limited to the Brazilian localization, it impacts any module that inherits from the `account.view_partner_property_form` views and relies on XPath expressions positioned around the `VAT` field. **Fix:** This commit ensures that fields added before or after the VAT field remain properly labeled and identifiable across all modules by assigning a higher priority to `product.view_partner_property_form` than to `base_vat.view_partner_base_vat_form`. **Before:** <img width="1908" height="616" alt="5443833_before" src="https://github.com/user-attachments/assets/f7d0819d-38bd-4fe8-8a22-5e22b342cd32" /> **After:** <img width="1909" height="703" alt="5443833_after" src="https://github.com/user-attachments/assets/b205cb87-64ba-49fd-91c4-c20908d21429" /> [1]: https://github.com/odoo/odoo/commit/4bff48d8233a9c1338252725f92ffcf580bd2b9d [2]: https://github.com/odoo/odoo/blob/229c2737edee601552ccceeed8602ec0e4686596/addons/account/views/partner_view.xml#L191 [3]: https://github.com/odoo/odoo/blob/229c2737edee601552ccceeed8602ec0e4686596/addons/base_vat/views/res_partner_views.xml#L4-L26 opw-5443833
This update resolves an issue where setting an invalid video link in course slides would cause a system error. The fix ensures that the system gracefully handles incorrect links, preventing disruptions to the user experience when adding or editing slide content. This improves the reliability of the course presentation feature.
Original PR description
When a user sets an invalid video link for a slide, a traceback occurs. Steps to reproduce the error: - Install ``website_slides`` module with demo data - Go to Website > Courses > Open Taking care…
When a user sets an invalid video link for a slide, a traceback occurs. Steps to reproduce the error: - Install ``website_slides`` module with demo data - Go to Website > Courses > Open Taking care of Trees course - Add Content > Video > Add valid video link (ex. https://www.youtube.com/shorts/SXHMnicI6Pg) > Save and Publish > Delete - Repeat above step - Add content > Video > Add any text in video link > Save and Publish Traceback: ```py AssertionError: Could not find all values of slide.slide(12,) to flush them ``` https://github.com/odoo/odoo/blob/7bbfb207f8699973f8580ea18821f82b1a83e149/addons/website_slides/controllers/main.py#L1363-L1372 New record is created using ``new()`` to fetch external metadata for the slide. This record only exists in memory and is not stored in the database. When the video link is invalid, ``video_source_type`` is False, and the code attempts to ``unlink()`` the slide. Unlinking the record triggers field recomputations, and it will lead to the above error when flushing the new record. ref: https://github.com/odoo/odoo/commit/71233fa2cb8984b65f8e7ac55405fdbc054756a0 sentry-6964031088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235099
This update fixes an issue where typing 'B)' automatically converted to a 😎 emoji, potentially altering user input. The change disables this automatic conversion, ensuring users can type characters without unintended emoji replacements. This improves the user experience and data integrity.
Original PR description
Before this PR, typing `B)` was automatically converted into a 😎 emoji, which could unintentionally alter user input. This PR disables that conversion. task-[5221032](https://www.odoo.com/odoo/project/1519/tasks/5221032) Forward-Port-Of: odoo/odoo#242831
A recent issue causing slow loading of the Team website page was resolved. The update replaced outdated image files with optimized `.webp` versions, ensuring images load correctly and improving website performance. This change maintains compatibility with older versions.
Original PR description
Commit [1] replaced demo image records with `.webp` versions, but the actual files remained in `.jpg` format. This mismatch caused broken image links which failed to load and it resulted in page load issues for the website page templates dialog. This commit updates those images to `.webp` format and restores consistency by pointing to correct files so the images load correctly. [1] https://github.com/odoo/odoo/commit/b25ae74 Forward-Port-Of: odoo/odoo#227464
This update fixes an issue with Brazil tax names that were causing errors when setting up a new company in Odoo. The changes rename and translate tax names to ensure accurate accounting and prevent setup failures, improving the overall user experience for Brazilian businesses.
Original PR description
In 17.0, some taxes have had their incorrect name for the cashback taxes. This renames the invoice_label and name fields of such taxes to better represent what they are as well as add portuguese translations where necessary. task-5470453 Forward-Port-Of: odoo/odoo#242974 Forward-Port-Of: odoo/odoo#242446
This update fixes a persistent visual issue where the 'pulse' effect repeatedly appeared during calls, even after the user switched to fullscreen mode. Now, the effect only displays until the user actively engages with fullscreen or picture-in-picture, creating a smoother and less intrusive call experience. This change improves user satisfaction and reduces distractions.
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 Forward-Port-Of: odoo/odoo#240690
This update resolves a bug where quickly typing in the Helpdesk Forum tour input field would erase the entered text. The fix ensures the popover is displayed before allowing input, preventing this issue and improving the user experience.
Original PR description
if you write too fast, the opening of the popover erases the text in the input. In this commit, we add a step to ensure the popover is shown before writing in the input Forward-Port-Of: odoo/enterprise#103495
This update fixes an issue where purchase order discounts weren't being accurately reflected in product standard prices when using the AVCO costing method. The change ensures that discounts applied on purchase orders are correctly calculated and applied to the standard price, aligning with expected values. This improves the accuracy of inventory valuation.
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 Forward-Port-Of: odoo/odoo#241273
This update resolves a technical problem where the equity dashboard incorrectly loaded sample data after all equity transactions were deleted. The issue stemmed from an error in how the dashboard identified company data, leading to a JavaScript error. This fix ensures the dashboard functions correctly regardless of transaction data.
Original PR description
**PROBLEM** If you delete all the equity transactions, the equity dashboard will try to load the sample data. Depending on the id of the current company, there is a js traceback. **STEP TO REPRODUCE** - On runbot, go to the equity app and delete all transactions. - Select a company. - Goes to the dashboard, there should be a js traceback (if not, try with another company). **ISSUE** The sample data create a partner data for the current company, but it assumes its id is 1. If the current company id is not present in the partner_data ids we will try to get the display_name of an undefined object, leading to a traceback. opw-5364100 Forward-Port-Of: odoo/enterprise#102207
This update resolves an error that occurred when signing documents with non-mandatory selection fields. Previously, the system would fail to validate documents if a selection field was left blank. This fix ensures the system correctly handles these fields, preventing validation errors and allowing users to complete the signing process smoothly.
Original PR description
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to…
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to a document template and define at least one option. Make sure the field is not mandatory. 3. Click **"Sign Now"**, then **"Validate & Send Completed Document"** without modifying the selection field. **Error:** `ValueError - invalid literal for int() with base 10: 'Selection125340'` Cause: After this commit [1], `textareaApplyLineBreak()` is executed for all item types. For selection type, this updates the item value from `undefined` to a generated string (e.g. **Selection132**), which later causes an invalid integer conversion during validation. **Fix:** This commit ensures `textareaApplyLineBreak` is only applied to textarea items and not to other field types. [1]: https://github.com/odoo/enterprise/commit/c1bfc84505ca8053a073c23b6a7b569021e9ca0c sentry-7089120038 opw-5402249 Forward-Port-Of: odoo/enterprise#102124
This update fixes an issue where adding the same product multiple times to a Point of Sale order would create duplicate orderlines. The change ensures prices with decimal precision are correctly merged, leading to more accurate order totals and a better customer experience. This resolves a rounding error that could have impacted order calculations.
Original PR description
Before this commit, when a product had a price with more decimals than the currency, adding it multiple times to the order would create multiple orderlines instead of merging them. This was due to rounding issue when comparing the prices of the orderlines. opw-5341735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241489 Forward-Port-Of: odoo/odoo#238639
This update fixes a minor issue where users couldn't easily switch between tabs displaying information about Odoo modules. Now, the navigation tabs work correctly, providing a smoother and more intuitive experience when viewing module details. This enhancement ensures consistent functionality across the Odoo platform.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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#236064 Forward-Port-Of: odoo/odoo#186568
This update corrects outdated paths used in Odoo's IoT driver upgrade scripts, ensuring compatibility with the latest SaaS version (19.1). It also removes a legacy upgrade process from version 16, streamlining the installation and maintenance of the IoT drivers.
Original PR description
The PR https://github.com/odoo/odoo/pull/242110 used paths with "hw_drivers" which don't exist anymore in saas-18.4. This PR adapts the paths and moves the upgrade scripts to the correct modules accordingly It also removes the deprecated v16 upgrade Forward-Port-Of: odoo/odoo#242595 Forward-Port-Of: odoo/odoo#242507
A recent update introduced an error in the return label generation process, causing it to behave differently than previous versions. This fix restores the original, correct logic, ensuring consistent and accurate return label functionality as seen in prior releases. This resolves a discrepancy identified during the software update process.
Original PR description
## Current behaviour: The logic in 19.1 is applied wrongly due to a previous merge error, causing the feature to behave differently than in previous versions. ## Expected behaviour: The logic should match the behavior present in 18.0 through 19.0, as defined in the original feature implementation. ## Cause of the issue: During the forward-port process of the original feature (PR #103480) from 19.0 to 19.1, a merge conflict occurred. The manual resolution of this conflict was incorrect. ## Fix: Restore the correct logic as intended in the original PR. Original PR: https://github.com/odoo/enterprise/pull/103480
This update fixes a technical issue that was causing tracebacks when generating reports. The underlying code was incorrectly referencing an outdated parameter, leading to errors. Removing this parameter resolves the problem and ensures reports generate correctly.
Original PR description
The method still declared a progress parameter even after it was removed from the underlying call, resulting in a traceback when unfolding the report line. The parameter is now removed. ref commit: https://github.com/odoo/enterprise/commit/ff2895144ecfc66d2b23bb872b39f5b446ae0da6 task-5476442
This update refactors internal code to improve how Odoo's pivot tables handle relationships between data. Specifically, it extracts a key function to fetch field definitions, resolving an issue that previously caused errors when adding dimensions to pivot tables. This 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 Forward-Port-Of: odoo/odoo#240210
This update resolves an issue where newly added dimensions in Odoo's pivot reports were incorrectly marked as invalid and displayed with their technical names instead of user-friendly labels. This ensures pivot reports show dimensions with the correct, easily understandable names for users.
Original PR description
Steps to reproduce:
- Insert an Odoo pivot
- Click on "defer update"
- Add a dimension with a relation ("country_id.name") => The dimension is added but marked as invalid and the display name is incorrect ("country_id.name" instead of "Country > Name")
Task: 5411336
Forward-Port-Of: odoo/enterprise#102237This update ensures that product titles displayed on alternate product listings accurately reflect the product template name, regardless of whether 'Show Variants' is enabled. Previously, variant names were shown, which created a confusing user experience. This fix corrects a technical issue within the website sale module.
Original PR description
Currently when the user adds an alternate product with a variant, the product title shows the variant name instead of the template name, even when `Show Variants` is disabled. **Steps to produce:** *…
Currently when the user adds an alternate product with a variant, the product title shows the variant name instead of the template name, even when `Show Variants` is disabled. **Steps to produce:** * Install `website_sale` * products > Select any product > sales * Add any product with variant to alternate products * Go to that product's website page and scroll to alternate products section. **Observed Behavior:** * Product variant names are shown instead of product template names, even though `Show Variants` is disabled. **Root cause:** * This happens because loading the alternative product snippet calls `_get_products` [1], which then calls`_filter_records_to_values`. That function calls `_get_combination_info` [2],causing the display names to be updated to the combination display name. **Solution:** Show the product template name instead of the combination name when `Show Variants` is disabled, by using only product templates and updating the product template display name computation to account for `display_default_code`, to ensure the internal reference remains hidden when it is set to `False`. **Before:** <img width="1847" height="932" alt="image" src="https://github.com/user-attachments/assets/81ffaf94-d63d-4e2c-9b46-dd369d34bc7b" /> **After:** <img width="1847" height="932" alt="image" src="https://github.com/user-attachments/assets/4a6d3fa6-541d-4091-9691-e8b10f542833" /> [1]: https://github.com/odoo/odoo/blob/c4448d2e16e6f4b0b5ea99f6e883cb69d226cfba/addons/website_sale/models/website_snippet_filter.py#L173-L190 [2]: https://github.com/odoo/odoo/blob/c4448d2e16e6f4b0b5ea99f6e883cb69d226cfba/addons/website_sale/models/website_snippet_filter.py#L132 opw-5365320 Forward-Port-Of: odoo/odoo#240325
This update resolves a technical issue that caused a traceback when invoices timed out during sending. The fix corrects an error related to accessing the 'message' attribute of a UserError object, ensuring invoices are sent reliably. This improves the stability of the Danish retail (l10n_dk_nemhandel) module.
Original PR description
In case of timeout when sending an invoice there is a traceback due to the following error. ``` AttributeError: 'UserError' object has no attribute 'message' ``` It is fixed in this commit. task-None Forward-Port-Of: odoo/odoo#242811
This update fixes a discrepancy in account balance calculations for companies within Odoo's branch hierarchy. Previously, balances only included the parent company, excluding transactions from child branches. Now, the system correctly aggregates balances across the entire company hierarchy, providing a more accurate 'Global' view of account balances.
Original PR description
Description of the issue/feature this PR addresses: This PR updates the company filtering logic in account balance computations to support Odoo's branch hierarchy. In multi-branch environments, a…
Description of the issue/feature this PR addresses:
This PR updates the company filtering logic in account balance computations to support Odoo's branch hierarchy. In multi-branch environments, a parent company should be able to see the aggregated balances of its child branches. Currently, the strict equality operator prevents this consolidation, creating a discrepancy between the expected "Global" view and the displayed balance.
Current behavior before PR:
The _compute_current_balance method in account_account.py uses the = operator for the company_id domain: domain=[('account_id', 'in', self.ids), ..., ('company_id', '=', self.env.company.id)]
This restricts the balance calculation exclusively to the current active company, excluding any transactions made in its branches (child companies), even when the user is positioned at the parent level.
Desired behavior after PR is merged:
The operator is changed to child_of. When a user is in a parent company/branch, the current_balance of the account will include the sum of all journal entries from that company and all its descendants in the hierarchy. This ensures consistency with how other parts of Odoo (like https://github.com/odoo/enterprise/blob/e29aadef1a81c662d9a4d33879b440dbe4390c0b/account_followup/models/res_partner.py#L230) handle company-related domains.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242576This update fixes an issue where the invoice value wasn't correctly being applied to purchase orders. Previously, the system was incorrectly using the PO value instead of the actual invoice amount. This change ensures that the correct invoice value is captured, improving the accuracy of purchase order accounting.
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 Forward-Port-Of: odoo/odoo#242062
This update removes outdated configuration settings from tests related to account and HR EDI reports. These settings were no longer needed and were causing unnecessary complexity in the testing process. This cleanup improves test efficiency and maintainability.
Original PR description
The configuration parameter `account_edi_ubl_cii.use_new_dict_to_xml_helpers` was removed in saas-18.4. However, this parameter was still being set in various tests across `account_edi_ubl_cii`, `l10n_account_edi_ubl_cii_tests`, `l10n_hr_edi`, and `l10n_co_dian`. This commit removes these unnecessary configuration lines to clean up the tests. Related PR : https://github.com/odoo/enterprise/pull/103766 Forward-Port-Of: odoo/odoo#242749
This update removes outdated configuration settings from test environments related to tax reporting (l10n_co_dian). These settings were no longer needed and were causing unnecessary complexity in the testing process. This cleanup improves test efficiency and stability.
Original PR description
The configuration parameter `account_edi_ubl_cii.use_new_dict_to_xml_helpers` was removed in saas-18.4. However, this parameter was still being set in various tests across `account_edi_ubl_cii`, `l10n_account_edi_ubl_cii_tests`, `l10n_hr_edi`, and `l10n_co_dian`. This commit removes these unnecessary configuration lines to clean up the tests. Related PR : https://github.com/odoo/odoo/pull/242749 Forward-Port-Of: odoo/enterprise#103766
This update fixes an issue where combo prices were incorrectly recalculated after changing the order's delivery preset (e.g., from 'eat-in' to 'delivery'). The fix ensures that extra products included in the combo are accurately priced, preventing the price from reverting to the base combo price. This improves the accuracy of order totals and enhances the user experience.
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#241689 Forward-Port-Of: odoo/odoo#217082
This update resolves an issue where images with transparent backgrounds in email marketing campaigns were appearing with a black background after processing. The fix changes the default image type handled during processing to PNG, ensuring transparency is preserved and images look as intended across popular email clients like Outlook and Gmail.
Original PR description
Problem: When adding an image with a transparent background in email marketing, the image ends up with a black background once processed. Cause: During image processing, a default `defaultImageMimetype` is applied. If the original image is a PNG and the default mimetype is set to `image/jpeg`, the transparency information is lost, resulting in a black background. Solution: Use `image/png` instead of `image/jpeg` as the `defaultImageMimetype` to preserve transparency. This was tested successfully in both Outlook and Gmail. Steps to reproduce: - Go to Email Marketing and add an image block. - Add an image with a transparent background (usually a PNG). - Observe that once added to the email, the image loses its transparency. opw-5422685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241977
This update resolves issues related to accurately managing packages within the Barcode app, specifically during internal transfers and packing operations. The changes ensure that packages are correctly assigned and tracked, 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) Forward-Port-Of: odoo/enterprise#94805
This update resolves an issue where unnecessary tax authority partners were pre-loaded in new Odoo databases, causing discomfort for users in sectors like restaurants. The change now archives these partners and activates them only when the first return requiring them is created, streamlining the process and improving user experience.
Original PR description
New DBs are preloaded with tax authority partners, it makes users uncomfortable in some sectors(e.g restaurants). Archive these partners and activate them on the first return requiring them is created. task-5391773 Forward-Port-Of: odoo/enterprise#102701
This update fixes an issue in the Italian VAT monthly tax report where negative values were incorrectly displayed for debit columns. Restoring the correct threshold of €100.00 for VP7 ensures accurate VAT payable calculations and a proper visual representation of the report. This improves the reliability of the Italian tax reporting process.
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 Forward-Port-Of: odoo/odoo#240705
This update fixes a discrepancy in the tax report carryover tests to align with recent changes in the VP14 VAT payable computation. Ensuring these tests accurately reflect the latest community-side logic improves the reliability of our tax reporting processes. This is a routine maintenance update.
Original PR description
Update the tax report carryover tests to reflect the recent changes in the VP14 VAT payable computation. These adjustments ensure the test suite remains consistent with the updated community-side logic. Forward-Port-Of: odoo/enterprise#103656
This update resolves an issue where move raw materials weren't properly removed when a product's bill of materials (BOM) was updated. The fix ensures that move raw materials are correctly deleted or cancelled during BOM changes, preventing data inconsistencies. This improves the accuracy of inventory management.
Original PR description
### Steps to reproduce: - Create a bom for a product with 2 component lines: - 1 x COMP1 - 1 x COMP2 - Create an MO for your product (do not confirm it) - Delete the second bom line of the bom - On…
### Steps to reproduce:
- Create a bom for a product with 2 component lines:
- 1 x COMP1
- 1 x COMP2
- Create an MO for your product (do not confirm it)
- Delete the second bom line of the bom
- On the draft MO, click on `update bom`
#### > This automatically modifies the `move_raws` of the MO but the un-linked move raws were neither deleted nor cancelled as shown by the move analysis
### Cause of the issue:
Clicking on `update bom` will launch a call of the `action_update_bom` which will itself call the `_link_bom` to update the record: https://github.com/odoo/enterprise/blob/ac3f333d97eda5c86a0813490ac6204d4ec5721f/mrp_plm/models/mrp_production.py#L73-L80 https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L2406-L2418 Now the issue is that the `bom_id` is set to `False` before the value of the `move_raw_ids` and `workorder_ids` are stored to be unlinked in the `moves_to_unlink` and `workorders_to_unlink` variable. Now, the issue is that the `bom_id` is a dependency of both compute methods: https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L745-L746 https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/mrp/models/mrp_production.py#L563-L564 in particular, `moves_to_unlink` will always be an empty record set and the value of the `workorders_to_unlink` might be unreliable.
opw-5243203
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242132
Forward-Port-Of: odoo/odoo#239654This update removes a confusing caret symbol from the icon creator within the web studio module. Previously, clicking the caret had no effect. This change simplifies the user interface and improves the overall usability of the web studio tool.
Original PR description
Before this commit: the caret is rendered outside the button and clicking it had no effect. After this commit: the caret is removed from the icon creator. task-5470025 Forward-Port-Of: odoo/enterprise#103664
This update fixes a bug in the product forecasting system that previously didn't account for products nearing expiration. Now, the forecast considers quantities that will expire *before* the specified forecast date, leading to more accurate inventory projections for products with limited shelf lives. This ensures better stock management and reduces the risk of overstocking or 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 Forward-Port-Of: odoo/odoo#228543
Features or functions removed from Odoo
This update removes a feature that automatically generated vendors from Stripe Issuing, specifically for French vendors. The system was incorrectly attempting to use SIREN numbers instead of VAT numbers, leading to validation errors. Removing this feature simplifies the process and corrects the underlying issue.
Original PR description
In the original Stripe Issuing implementation, it was believed that in the specific case where a vendor is located in France, the `tax_id` received from Stripe in the authorizations and transactions would be the VAT number. In reality, the number received is the SIREN which fail VIES validation. As we only try to create a vendor in that very specific case, and there is no field for the SIREN (`company_registry` is the SIRET), we simply remove the feature altogether. NOTE: Remove method in master Forward-Port-Of: odoo/enterprise#103221
1 change
Features or functions removed from Odoo
This update removes outdated configuration settings from tests related to the CO Dian localization module. These settings were no longer needed after the saas-18.4 release and were causing unnecessary complexity in the test suite. This cleanup improves test efficiency and maintainability.
Original PR description
The configuration parameter `account_edi_ubl_cii.use_new_dict_to_xml_helpers` was removed in saas-18.4. However, this parameter was still being set in various tests across `account_edi_ubl_cii`, `l10n_account_edi_ubl_cii_tests`, `l10n_hr_edi`, and `l10n_co_dian`. This commit removes these unnecessary configuration lines to clean up the tests. Related PR : https://github.com/odoo/odoo/pull/242749
12 changes
Enhancements to existing features
This update adjusts the Vietnamese accounting chart of accounts to align with new regulations (Circular 99/2025) issued in January 2026. This change ensures compliance with current Vietnamese accounting standards and is a necessary update for accurate financial reporting in Vietnam.
Original PR description
Update the COA for the vietnamese localization, which is based on the circular 200/2014 by the new one based on the circular 99/2025. This new COA applies starting in Jan. 2026 task-5357470 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242907 Forward-Port-Of: odoo/odoo#238983
This update adjusts the chart of accounts for Odoo's Vietnamese localization to align with recent accounting regulations (Circular 99/2025). This change is necessary to ensure compliance with Vietnamese financial reporting standards, taking effect starting January 2026. It impacts financial reporting within the Vietnamese Odoo version.
Original PR description
Update the COA for the vietnamese localization, which is based on the circular 200/2014 by the new one based on the circular 99/2025. This new COA applies starting in Jan. 2026 task-5357470 Forward-Port-Of: odoo/enterprise#103738 Forward-Port-Of: odoo/enterprise#102843
Resolved issues and error corrections
This update fixes an issue where the 'Out of Contract' duration was incorrectly calculated, leading to inaccurate reporting. The change ensures that contract overlap dates are limited to the payslip period, providing more reliable payroll data. This improves the accuracy of employee time and cost tracking.
Original PR description
Steps to Reproduce: 1. Create a contract ending early in the year (e.g., February). 2. Compute a payslip for a much later period (e.g., November). 3. The "Out of Contract" line shows an excessive number of days (counting from Feb to Nov). Reason: - If a contract ends before the payslip period, it adds all days from the end of the contract until the end of the payslip period as "Out of Contract", ignoring the payslip start date. - If a contract starts after the payslip period, it adds all days from the payslip start date until the contract start date, ignoring the payslip end date. Solution: Constrain the calculated "Out of Contract" dates using `max()` and `min()` to ensure they never exceed the payslip's `date_from` and `date_to`. Task: 5350519 Forward-Port-Of: odoo/enterprise#103500 Forward-Port-Of: odoo/enterprise#100700
This update resolves a technical issue that caused a traceback when users accessed the bank reconciliation popover feature in debug mode, specifically when reconciling statements with invoices in different currencies. The fix ensures the popover component functions correctly, preventing errors and improving user experience.
Original PR description
In Bank reconciliation widget, when reconciling a statement with a move in different currency, users may display a popover to access some reconciliation info. Currently, accessing this component in debug mode may raise a traceback. Steps to reproduce: - Have a Bank statement in company currency - Reconcile with an invoice in foreign currency - Go in debug mode - From the reconciliation widget, locate the reconciled bank statement - Click on the reconciled bank statement popover button Issue: Traceback is shown `OwlError: Invalid props for component 'BankRecLineInfoPopOver': 'exchangeMove' is not a object` It occurs because props validation of the Owl component will fail BankRecLineInfoPopOver opw-5355964
This update ensures that all MOA (Monthly Accounting) values within the French accounting module are positive integers. The changes involve rounding and adding a check to prevent negative values and removing unnecessary calculations. This improves the accuracy and reliability of financial reports generated for French businesses using Odoo.
Original PR description
All MOA fields should be positive integer. task-5380637 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239587
This update fixes a visual issue in the email composer where long email content would overflow the message bubble, disrupting the user experience. The change makes email content scrollable within the bubble, ensuring a cleaner and more readable display for longer messages. This improves usability for sending and receiving emails.
Original PR description
Current behavior before PR: When the email template (message_type = `comment`) has content that is longer (in width), the content tends to overflow out of the bubble which breaks the UI. Desired behavior after PR is merged: This commit fixes the issue by making the content scrollable inside the bubble. Task-5363388 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237878
This update corrects a minor issue where typing 'B)' was automatically replaced with a 😎 emoji. This change ensures user input remains unaltered, improving the overall user experience and preventing unintended modifications to messages.
Original PR description
Before this PR, typing `B)` was automatically converted into a 😎 emoji, which could unintentionally alter user input. This PR disables that conversion. task-[5221032](https://www.odoo.com/odoo/project/1519/tasks/5221032) Forward-Port-Of: odoo/odoo#242831
This update ensures the Helpdesk dashboard's styling aligns with other Odoo dashboards, specifically addressing a formatting issue where the Top Customers pivot wasn't correctly highlighting the last row. This improves the overall visual consistency and user experience of the Helpdesk dashboard.
Original PR description
## Description - The Top Customers pivot shows 10 rows, but the conditional format covered only 9. Extend the CF range so the last row is formatted. - Adjust border ranges so the helpdesk dashboard matches the styling used in other dashboards. Task: [5448434](https://www.odoo.com/odoo/project/2328/tasks/5448434) Forward-Port-Of: odoo/enterprise#103019
This update resolves an issue where canceled orders and their items were incorrectly displayed in new orders, particularly with online payments. The fix ensures that canceled orders and line items are fully removed from the system's data storage, guaranteeing accurate order displays and calculations.
Original PR description
`point_of_sale`, `pos_self_order` ### step to reproduce: - Configure self order with online payment. - Open POS Self Order. - Add some products to the cart. - Cancel the order. - Create a new order and pay it via an "online payment" method. - Click on "Order Now". ### issue: - Previously cancelled products reappear as selected in the new order. ### reason: - Cancelled orders and orderlines were not removed from IndexedDB. - With Pay after Meal, a second order on the same table reused the existing one, causing the product card, order widget, and cart to show quantity and total from the old order instead of the new changes. ### fix: - Ensure both the order and its orderlines are removed from indexeddb when cancelling an order. - Product/cart page must show changed quantity and amount. task: 5005174
This update resolves an issue where invoices couldn't be sent correctly due to a technical error (a 'timeout' situation). The fix corrects a problem with how error messages were handled, ensuring invoices are now sent reliably. This improves the overall stability of the Danish Nemhandel integration.
Original PR description
In case of timeout when sending an invoice there is a traceback due to the following error. ``` AttributeError: 'UserError' object has no attribute 'message' ``` It is fixed in this commit. task-None Forward-Port-Of: odoo/odoo#242811
This update fixes an issue where account balances weren't correctly reflecting transactions across a company's branch hierarchy. By changing the filtering logic to include 'child_of', the balance calculations now accurately aggregate balances from all companies, including child branches, providing a more complete and consistent view of financial data.
Original PR description
Description of the issue/feature this PR addresses: This PR updates the company filtering logic in account balance computations to support Odoo's branch hierarchy. In multi-branch environments, a…
Description of the issue/feature this PR addresses:
This PR updates the company filtering logic in account balance computations to support Odoo's branch hierarchy. In multi-branch environments, a parent company should be able to see the aggregated balances of its child branches. Currently, the strict equality operator prevents this consolidation, creating a discrepancy between the expected "Global" view and the displayed balance.
Current behavior before PR:
The _compute_current_balance method in account_account.py uses the = operator for the company_id domain: domain=[('account_id', 'in', self.ids), ..., ('company_id', '=', self.env.company.id)]
This restricts the balance calculation exclusively to the current active company, excluding any transactions made in its branches (child companies), even when the user is positioned at the parent level.
Desired behavior after PR is merged:
The operator is changed to child_of. When a user is in a parent company/branch, the current_balance of the account will include the sum of all journal entries from that company and all its descendants in the hierarchy. This ensures consistency with how other parts of Odoo (like https://github.com/odoo/enterprise/blob/e29aadef1a81c662d9a4d33879b440dbe4390c0b/account_followup/models/res_partner.py#L230) handle company-related domains.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242576This update fixes an issue where combo lines in the Point of Sale (PoS) system weren't accurately reflecting the selected product variants. The fix ensures that variant information is displayed on both the order confirmation and receipt screens, improving the user experience. The underlying issue was a misinterpretation of how combo configurations were being handled.
Original PR description
**Steps to reproduce:** - Create a combo including products with different variants - The variants should be set to "Instantly" - Go to PoS and click on that combo - When confirming, the lines do not…
**Steps to reproduce:** - Create a combo including products with different variants - The variants should be set to "Instantly" - Go to PoS and click on that combo - When confirming, the lines do not show the selected variant - The ticket on the receipt screen does not show it either **Why the fix:** We were trying to map the combo lines using the line's configuration, but the configuration did not always contain the needed information, in this case the attribute_value_ids. This happens because when clicking on a combo, we are setting the configuration as the configuration popup is displaying, meaning we do not know which variants are going to be chosen. Instead, we now access the correct variants using the current combo line directly if the configuration is not set. An existing test had to be changed because before this fix, as we did not care for variants in certain cases, we did not add the price_extra from the variant to the combo's price, which seems to be the behavior we want. opw-5392530
2 changes
Enhancements to existing features
This update adjusts the Vietnamese localization's chart of accounts to comply with new accounting regulations (Circular 99/2025) issued in January 2026. This change ensures our system accurately reflects current Vietnamese accounting standards and is a necessary update for compliance.
Original PR description
Update the COA for the vietnamese localization, which is based on the circular 200/2014 by the new one based on the circular 99/2025. This new COA applies starting in Jan. 2026 task-5357470 Forward-Port-Of: odoo/enterprise#102843
Features or functions removed from Odoo
This update removes unnecessary debugging code from the Point of Sale (POS) module, specifically within the Urban Piper integration. This cleanup improves the stability and performance of the POS system by eliminating extraneous logging that could potentially impact speed or cause errors. The change is a routine maintenance task to ensure optimal system performance.
Original PR description
Following this commit: - remove t-debug="" task-5407001
1 change
Resolved issues and error corrections
This update corrects a bug that prevented users from setting deadline dates on tasks. The issue stemmed from a missing calendar configuration, specifically when assigning tasks to users without a linked calendar. The fix ensures tasks can be created with deadlines regardless of the user's calendar setup.
Original PR description
Currently, an error occurs when adding a deadline interval date to a task. Step to produce: - Install the `industry_fsm` module and turn on the debugger. - Go to Settings / Technical / Resource /…
Currently, an error occurs when adding a deadline interval date to a task.
Step to produce:
- Install the `industry_fsm` module and turn on the debugger.
- Go to Settings / Technical / Resource / Resources, open record name 'Mitchell admin' and remove the value of 'Working Time'.
- Go to Project / Tasks / My tasks, Create a task with Deadline intervals, Make sure Assignees is a 'Mitchell admin' as we removed the value of 'Working Time' from it
Traceback On Sentry:
```
ValueError: not enough values to unpack (expected 1, got 0)
File "odoo/models.py", line 5851, in ensure_one
_id, = self._ids
ValueError: Expected singleton: resource.calendar()
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/web/models/models.py", line 71, in web_save
self.write(vals)
File "home/odoo/src/enterprise/saas-17.2/helpdesk_fsm/models/project_task.py", line 45, in write
res = super().write(vals)
File "home/odoo/src/enterprise/saas-17.2/industry_fsm/models/project_task.py", line 193, in write
return super(Task, self_fsm).write(vals)
File "addons/project_sms/models/project_task.py", line 25, in write
res = super().write(vals)
File "home/odoo/src/enterprise/saas-17.2/project_enterprise/models/project_task.py", line 472, in write
work_intervals = calendar._work_intervals_batch(start, stop, resources=resource)
File "addons/resource/models/resource_calendar.py", line 434, in _work_intervals_batch
attendance_intervals = self._attendance_intervals_batch(start_dt, end_dt, resources, tz=tz or self.env.context.get("employee_timezone"))
File "addons/resource/models/resource_calendar.py", line 273, in _attendance_intervals_batch
self.ensure_one()
File "odoo/models.py", line 5854, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
An error occurs when the system tries to access the method name '_work_intervals_batch' without a resource calendar record at [1].
link [1]: https://github.com/odoo/enterprise/blob/4a09f71c13f26dd538603c1fdbb34da7bc0d2a97/project_enterprise/models/project_task.py#L470-L472
To resolve this issue, Add a condition that checks if the resource calendar_id is not available, then try to plan tasks for a user that has no calendar.
sentry - 55345682812 changes
Resolved issues and error corrections
Payment attempts through Adyen with invalid connection details no longer create alarming error logs. The issue is now treated as a warning, reducing noise for support and operations teams while preserving visibility into the failed payment setup.
Original PR description
Currently, The traceback message is occurring when making a payment with an invalid API. This error message occurs during the make a payment request with an invalid API key, we need to change the…
Currently, The traceback message is occurring when making a payment with an invalid API.
This error message occurs during the make a payment request with an invalid API key, we need to change the logger error message to a logger warning message at [1] to prevent an error log in a terminal.
Traceback on sentry:
```
gaierror: [Errno -2] Name or service not known
File "urllib3/connection.py", line 169, in _new_conn
conn = connection.create_connection(
File "urllib3/util/connection.py", line 73, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "socket.py", line 955, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f608ee1e1a0>: Failed to establish a new connection: [Errno -2] Name or service not known
File "urllib3/connectionpool.py", line 700, in urlopen
httplib_response = self._make_request(
File "urllib3/connectionpool.py", line 383, in _make_request
self._validate_conn(conn)
File "urllib3/connectionpool.py", line 1017, in _validate_conn
conn.connect()
File "urllib3/connection.py", line 353, in connect
conn = self._new_conn()
File "urllib3/connection.py", line 181, in _new_conn
raise NewConnectionError(
MaxRetryError: HTTPSConnectionPool(host='yourneed-checkout-live.adyenpayments.com', port=443): Max retries exceeded with url: /checkout/V70/paymentMethods (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f608ee1e1a0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
File "requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "urllib3/connectionpool.py", line 756, in urlopen
retries = retries.increment(
File "urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
ConnectionError: HTTPSConnectionPool(host='yourneed-checkout-live.adyenpayments.com', port=443): Max retries exceeded with url: /checkout/V70/paymentMethods (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f608ee1e1a0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
File "addons/payment_adyen/models/payment_provider.py", line 121, in _adyen_make_request
response = requests.request(method, url, json=payload, headers=headers, timeout=60)
File "requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "requests/sessions.py", line 544, in request
resp = self.send(prep, **send_kwargs)
File "requests/sessions.py", line 657, in send
r = adapter.send(request, **kwargs)
File "requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
```
link[1]: https://github.com/odoo/odoo/blob/e3ee1f8bd85f3ea7287ab6b78847798190246b5d/addons/payment_adyen/models/payment_provider.py#L124-L127
sentry-4955120723
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes a technical error that could prevent certain account reports from generating correctly. The issue stemmed from a missing value within the report formatting process, which caused an error. This change ensures that reports continue to generate accurately, maintaining data integrity.
Original PR description
An error occurs when the system tries to retrieve the value of 'blank_if_zero' from 'column_dict', but it is not available at [1]. To handle this issue, we can use the .get() method to obtain the…
An error occurs when the system tries to retrieve the value of 'blank_if_zero' from 'column_dict', but it is not available at [1]. To handle this issue, we can use the .get() method to obtain the value.
link [1]: https://github.com/odoo/enterprise/blob/adbf9375a07980c8b9b4f621dfaba5ffc99c4162/account_reports/models/account_report.py#L2237
Traceback On Sentry:
```
KeyError: 'blank_if_zero'
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 2223, in format_column_values
self._format_column_values(options, lines, force_format=True)
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 2237, in _format_column_values
elif column_dict['blank_if_zero'] and column_dict['is_zero']:
```
sentry - 556469326316 changes
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, the system now transmits 'name', 'businessName', 'federalTaxId', and 'type' information, ensuring accurate tax reporting and compliance with new regulations. This change is vital for businesses operating in Brazil to meet updated reporting requirements.
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#103626 Forward-Port-Of: odoo/enterprise#103438
This update modernizes the way our French reporting module interacts with IAP (Invoice Automation Platform). The previous SOAP-based API has been replaced with IAP's new REST API, streamlining data exchange. This change improves the efficiency and reliability of generating French VAT reports.
Original PR description
As ASPone changed his api from SOAP to REST and that iap handles it, the api calls were modified to call v2 endpoints of iap and then adapt how the responses are handled. task-5387160
This pull request enhances the user experience for payroll reporting in the Be payroll module. It includes improvements to the list view, such as displaying eligible employee counts and adding filters, as well as refinements to the form view for better consistency and usability. The changes also improve the functionality of generating payroll files.
Original PR description
Changes list view: - corrected display of Year (before it was formatted as a number) - added display of # eligible employee and its logic in the backend - added optional display of both the xml and…
Changes list view: - corrected display of Year (before it was formatted as a number) - added display of # eligible employee and its logic in the backend - added optional display of both the xml and xls file Changes form view: - removed list of eligible employee from the form view, moved in its own line list view (later described) - refactor of files and payment sections, now consistent with the rest of the UX - changing dates (either year or month) reset generated files and associated fields, for ux consistency in buttons, file and payment sections Changes form view header buttons: - switched logic from static xml to js due to need of handling many different conditions over them, would have otherwise needed to define dozen of static instances for just 3 buttons - buttons now appear disabled when for the selected dates there is no eligible employee - buttons now appear as primary if the associated file type still has to be generated, secondary otherwise - buttons are ordered such that primary ones are displayed first - button Post Journal Entries removed (along with its related logic) Changes line list view: - shown on clicking the smart button in the form view - added filters for Doctors, Masters, Bachelors certificate levels Task ID: 5035358
Resolved issues and error corrections
This update resolves an issue where the progress bar in financial reports was not displaying correctly. The change updates the underlying template structure to ensure the progress bar is rendered accurately. This ensures consistent and reliable reporting for users.
Original PR description
This PR fixes a broken QWeb inheritance caused by a change in the `ProgressBarField` template structure. The inherited view was still targeting the old template layout, which caused element lookup failures at render time. The inheritance has been updated to target the new `ProgressBarField.valueBlock` template, restoring the expected behavior. TaskID-5164148
This update fixes a bug that occurred when the 'Default 48 hours/week' working schedule was deleted. The 'Payroll: Update data' cron job now handles this scenario gracefully, preventing an error and ensuring payroll data updates continue to function 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 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, and imported records are displayed with relevant details like bank account, statement, and notes, improving the bank reconciliation process.
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#103512 Forward-Port-Of: odoo/enterprise#98843
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, users can correct data in Starshipit and retry validation, ensuring orders are preserved and streamlining the delivery process.
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#103480 Forward-Port-Of: odoo/enterprise#101174
This update resolves a bug where quickly typing in the helpdesk forum tour input field would erase the entered text. The fix ensures the popover is displayed before text input, preventing this issue and improving the user experience. This change ensures a smoother and more reliable experience for users interacting with the helpdesk forum.
Original PR description
if you write too fast, the opening of the popover erases the text in the input. In this commit, we add a step to ensure the popover is shown before writing in the input Forward-Port-Of: odoo/enterprise#103495
This update resolves a technical issue where deleting equity transactions triggered a JavaScript error in the dashboard. The problem stemmed from the sample data incorrectly assuming a company ID of '1', leading to errors when that ID wasn't found. This fix ensures the dashboard functions correctly after clearing transaction data.
Original PR description
**PROBLEM** If you delete all the equity transactions, the equity dashboard will try to load the sample data. Depending on the id of the current company, there is a js traceback. **STEP TO REPRODUCE** - On runbot, go to the equity app and delete all transactions. - Select a company. - Goes to the dashboard, there should be a js traceback (if not, try with another company). **ISSUE** The sample data create a partner data for the current company, but it assumes its id is 1. If the current company id is not present in the partner_data ids we will try to get the display_name of an undefined object, leading to a traceback. opw-5364100 Forward-Port-Of: odoo/enterprise#102207
This update resolves an issue where signing documents with non-mandatory selection fields would trigger an error. The fix ensures that a specific function isn't incorrectly applied to selection fields, preventing invalid data conversions during validation. This ensures documents can be signed without interruption.
Original PR description
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to…
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to a document template and define at least one option. Make sure the field is not mandatory. 3. Click **"Sign Now"**, then **"Validate & Send Completed Document"** without modifying the selection field. **Error:** `ValueError - invalid literal for int() with base 10: 'Selection125340'` Cause: After this commit [1], `textareaApplyLineBreak()` is executed for all item types. For selection type, this updates the item value from `undefined` to a generated string (e.g. **Selection132**), which later causes an invalid integer conversion during validation. **Fix:** This commit ensures `textareaApplyLineBreak` is only applied to textarea items and not to other field types. [1]: https://github.com/odoo/enterprise/commit/c1bfc84505ca8053a073c23b6a7b569021e9ca0c sentry-7089120038 opw-5402249 Forward-Port-Of: odoo/enterprise#102124
This update corrects inconsistencies in the documentation for several Odoo modules. The changes ensure that all public documentation aligns with recent code updates, improving clarity and maintainability. This enhances the overall user experience and supports easier understanding of the system.
Original PR description
Forward-Port-Of: odoo/enterprise#103569 Forward-Port-Of: odoo/enterprise#101655
This update fixes an issue where the recurring price table wasn't displaying correctly when the 'one-time purchase' option was selected. The fix ensures the pricing table is shown accurately for both service and goods products, improving the user experience and ensuring accurate product pricing.
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 Forward-Port-Of: odoo/enterprise#103663 Forward-Port-Of: odoo/enterprise#102427
This update ensures our tax reporting tests accurately reflect the latest changes in how VAT payable is calculated (VP14). These adjustments maintain consistency between the test suite and the core Odoo system, guaranteeing reliable tax reporting results. This is a routine maintenance fix.
Original PR description
Update the tax report carryover tests to reflect the recent changes in the VP14 VAT payable computation. These adjustments ensure the test suite remains consistent with the updated community-side logic. Forward-Port-Of: odoo/enterprise#103656
This update removes a misleading caret symbol from the icon creator within the web_studio module. Previously, clicking the caret had no effect. This change simplifies the user interface and ensures a more intuitive experience for creating icons.
Original PR description
Before this commit: the caret is rendered outside the button and clicking it had no effect. After this commit: the caret is removed from the icon creator. task-5470025 Forward-Port-Of: odoo/enterprise#103664
Features or functions removed from Odoo
This update removes a feature that incorrectly attempted to generate vendors based on Stripe data. The original implementation mistakenly assumed Stripe tax IDs were VAT numbers, leading to validation errors. Since a dedicated field for vendor information exists, this unnecessary step has been removed for improved efficiency.
Original PR description
In the original Stripe Issuing implementation, it was believed that in the specific case where a vendor is located in France, the `tax_id` received from Stripe in the authorizations and transactions would be the VAT number. In reality, the number received is the SIREN which fail VIES validation. As we only try to create a vendor in that very specific case, and there is no field for the SIREN (`company_registry` is the SIRET), we simply remove the feature altogether. NOTE: Remove method in master Forward-Port-Of: odoo/enterprise#103221
Code cleanup and technical improvements
This update simplifies how templates use dynamic data, making them more efficient and easier to maintain. The change updates the 't-call' syntax to pass variables directly as attributes, eliminating a previous, more complex method. This improves the overall performance and stability of Odoo's templates.
Original PR description
The `t-call` syntax is updated to use the new semantic, which passes values *as attributes/parameters* on the `<t>` (with `t-call`) tag itself, instead of relying on nested `t-set` directive. - Old (Deprecated): Used nested `<t t-set="var_name" t-value="x"/>` tags inside the calling element to define variables. - New: Variables are passed as attributes directly on the element where the `t-call` is located (e.g., `<t t-call="module.template" var_name="x"/>`). A warning is added to alert developers when using the old deprecated syntax. see: https://github.com/odoo/odoo/pull/197296 The script to automate the process has been added to: https://github.com/odoo/odoo/pull/235469
7 changes
Enhancements to existing features
This update simplifies the display of buttons within the bank reconciliation widget. Previously, buttons were presented on separate lines, which has now been consolidated to align with the last displayed button for a cleaner and more intuitive user experience. This change enhances usability and visual clarity.
Original PR description
This commit aims to: Avoid having the dropdown toggle on a separate line, it should always stick to the last displayed button. task-5382731
Resolved issues and error corrections
This update fixes a discrepancy in how tax information is reported for Brazilian invoices impacted by a recent fiscal reform. Previously, tax details were optional, but now all required tax information must be included for XML reporting, ensuring compliance. This change impacts the l10n_br_edi_fiscal_reform module.
Original PR description
Before the fiscal reform, we deliberately avoid sending back informative taxes for service invoices because they may change depending on how and when the invoice is paid and they only need to appear on the XML optionally. New informative taxes specific to the fiscal reform are required to appear on the XML and therefore we must always send them. task-5450142 Forward-Port-Of: odoo/enterprise#103599
This update fixes an issue where users wouldn't see signed documents after a request was completed. The change ensures that both the requester and signer automatically receive 'view' access rights to the signed document, resolving the visibility problem. This improves the user experience and ensures proper document access.
Original PR description
To reproduce: ============= - as a User U with Admin rights on Documents (not Sys Admin) - create a folder at the root of the company - create a Sign Request template using this folder as signed document folder - send the Sign Request to another user O and sign it with that user O - go to Documents app with user U and check the folder where the signed document should be - the signed document is not there Problem: ======== when creating signed documents, the access rights for the requester are not set, causing the requester to not see the signed document Solution: ========= give `view` access right on signed documents to both the requester and the signer if they don't already have `edit` access right on it or ownership opw-[5087233](https://www.odoo.com/web#id=5087233&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#103406 Forward-Port-Of: odoo/enterprise#97132
This update fixes a discrepancy in the website product barcode lookup test. It aligns the test with a recent community change that prevents products created via the website from automatically publishing if a category isn't selected. This ensures consistent behavior and avoids potential issues with product visibility.
Original PR description
Align barcodelookup website test with community change where products created from the website are not auto-published when no category is selected. opw:5408903 SEE ALSO: Community PR:https://github.com/odoo/odoo/pull/242779
This update fixes a bug in the Italian VAT reporting tests that was causing incorrect carryover calculations. The fix ensures sales tax is applied to customer invoices and purchase tax to vendor invoices, resolving a previous error that led to miscalculated credits and debits. This ensures accurate financial reporting for Italian businesses.
Original PR description
The carryover tests were failing because they incorrectly used sales tax (tag 4v for output VAT) on vendor invoices (in_invoice type). Sales tax should only be used on customer invoices (out_invoice type). This caused VP14 to calculate as a credit instead of a debit, making the carryover go to VP8 (previous period credit) instead of VP7 (previous period debt), which caused test failures. The fix adds an invoice_type parameter to the test helper method and uses: - 'out_invoice' for sales tax (4v) tests → VP14 debit carryover to VP7 - 'in_invoice' for purchase tax (4a) tests → VP8 credit carryover Also updated test docstrings to clarify the 100.00 EUR carryover threshold. opw-5357719
This update improves the speed of the sales reconciliation feature in Odoo Enterprise. Previously, the system fetched all sales orders for a partner each time the reconciliation was opened. Now, it efficiently retrieves order counts initially, reducing unnecessary database operations and significantly speeding up the process for users.
Original PR description
Before this commit: We fetch all the sale orders for a partner every time we open unfold lines. This commit aims to reduce orm operations by fetching the sale orders counts one time upon loading the bank reconciliation for the first time or changing the pager. task-5241035
This update resolves a bug where the timesheet timer incorrectly behaved when using sample data. The fix adds a hidden column to the timesheet grid view, preventing the timer from being affected by the state of sample records. This ensures the timer functions correctly for all users.
Original PR description
Steps to reproduce: - Open Timesheets app, - Click on search(magnifying lens) to open on cell with no records. - Let sample record be loaded. Issue: - Timer is already started. If you switch back to grid view and stop the time it throws traceback as it has data of sample records. Reason: - The sample records can have record states that are running because timer_pause field is not present in list view thus not active field thus not generated. Fix: - Add field as invisible column in list view, thus makes the `TimesheetDisplayTimer` component not have runningTimer as truthy value always in sample records mode. task-5267303
13 changes
Resolved issues and error corrections
This update ensures that all MOA (Minimum Operating Amount) values within the French accounting module are positive integers. The changes involved rounding and adding a check to prevent negative values and removing unnecessary calculations. This corrects a potential issue impacting financial reporting accuracy.
Original PR description
All MOA fields should be positive integer. task-5380637 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239587
This update fixes an issue where time off requests on flexible calendars incorrectly displayed leave durations. The change ensures that public holidays are accurately accounted for when calculating work intervals, resulting in the correct leave duration being shown. This improves the accuracy of time off tracking.
Original PR description
Steps to reproduce: ------------------- 1. Install hr_holidays 2. Create a public holiday on 9th jan 3. Set an employee's working schedule to a flexible 40h/week calendar 4. Create a time off request…
Steps to reproduce: ------------------- 1. Install hr_holidays 2. Create a public holiday on 9th jan 3. Set an employee's working schedule to a flexible 40h/week calendar 4. Create a time off request from Jan 4th → Jan 10th 5. Observe the displayed duration Issue: ------ The leave duration is displayed as 5 days instead of 4. This happens because public holidays are not correctly accounted for within the work intervals. Cause: ------ Work intervals for flexible calendars are allocated on a weekly basis. Currently, the required weekly hours (40h) are distributed across the first five days of the week without verifying if any of those days are public holidays. Consequently, if a holiday falls on the 6th or 7th day of the week, it is ignored by the allocation logic, leading to an incorrect duration calculation. reference: [attendance_intervals_batch](https://github.com/odoo/odoo/blob/403866e4b426107d2e869c052cd1a7f16f9a3173/addons/resource/models/resource_calendar.py#L393-L447) Solution: --------- Modify the allocation logic to identify public holidays within the week before distributing hours. Prioritize generating attendance intervals for these holidays to ensure they are subtracted correctly from the leave duration, regardless of their position in the week. opw-5387651
This update resolves an issue where Turkish invoice documents were defaulting to the wrong journal type, potentially leading to accounting errors. The default journal type has been corrected to 'purchase' to ensure accurate record-keeping and prevent misuse. This change improves the reliability of invoice processing within the Odoo system.
Original PR description
…hing The default value of the journal type parameter was incorrectly set to a move type (`in_invoice`). Although all current callers explicitly pass the correct journal type, the default value has been corrected to `purchase` to avoid potential misuse. no task-id
This update prevents Odoo from automatically converting the character 'B)' into the 😎 emoji. Previously, this unintended conversion could alter user input and cause confusion. This fix ensures consistent and accurate user input within the application.
Original PR description
Before this PR, typing `B)` was automatically converted into a 😎 emoji, which could unintentionally alter user input. This PR disables that conversion. task-[5221032](https://www.odoo.com/odoo/project/1519/tasks/5221032) Forward-Port-Of: odoo/odoo#242831
This update fixes a potential issue in the HTML editor's testing process. Previously, test actions could be executed multiple times due to overlapping selection updates. This change ensures that test actions are performed correctly and reliably, preventing duplicate selections and improving test accuracy.
Original PR description
The `simulateArrowKeyPress` method used in hoot tests performs both an actual `press` and modifies the selection. However, in some cases, the `press` already updates the selection because of our own listeners, which leads to a selection similar to performing the action twice. This commit avoids this by making sure the default `press` did not get prevented by our own custom listeners before modifying the selection. task-5438683
This update fixes an issue where components added to manufacturing orders through the product catalog weren't correctly transferred to the pre-production warehouse. The fix adds a warehouse ID to the moves created by the catalog, ensuring proper procurement transfers within multi-step manufacturing processes. This resolves a discrepancy in component movement, improving the accuracy of production tracking.
Original PR description
Issue
-----
In multi step manufacturing, components added to MO through the catalog don't get transfered to the pre-prod location.
Steps to reproduce
-----
- 2 step manufacturing
- Create 2 products
- Create a MO for the first product
- Open the product catalog
- Add some qty of the second product
- Go back to the MO & confirm it
> No procurement transfer for the second product from stock to pre-prod
Cause
-----
The move created by the catalog has no `warehouse_id` so in `adjust_procure_method` we don't find any rule which means it gets set to MTS
https://github.com/odoo/odoo/blob/6ecd271ff34313d900a0ad14b1c20679808ba9b8/addons/stock/models/stock_move.py#L2366-L2368
-----
Ticket:
opw-5221418This update ensures that employee leave dates are automatically recalculated when their working schedule (calendar) changes. Previously, changes to an employee's calendar didn't update their leave entitlements, leading to potential inaccuracies. This fix maintains accurate leave balances by dynamically reflecting schedule adjustments.
Original PR description
purpose: Accepted leaves should be recomputed upon working schedule change. - made the `resource_calendar_id` change on the leave when it's changed on the corresponding employee/contract, then forced recomputation of its dates from the new resource calendar task-id: 5424312 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241284
This update corrects a technical issue where the `TaxBase` element was missing from FAIA XML reports generated for Luxembourg companies with multiple product taxes. This ensures compliance with Luxembourg tax reporting requirements and prevents potential errors when submitting reports to tax authorities. The fix was triggered by a specific test case.
Original PR description
### Issue: The `TaxBase` element was missing in the generated FAIA XML, although it is required when a product line has multiple taxes ### Steps to reproduce: - Use a l10n_lu company - Create an invoice with a product line that has two taxes - Download the General Ledger → FAIA XML report - Observe that `TaxBase` is not included before the TaxBaseDescription element ### Specs & reference: FAIA v2.01 (full) XSD files: https://pfi.public.lu/dam-assets/backup/FAIA/FAIA/XSD_Files.zip opw-5360519 Forward-Port-Of: odoo/enterprise#101178
This update fixes a bug where multiple attempts to grant portal access to a previously archived user were blocked. The fix ensures that access is only blocked when the user is currently active, and a new toggle has been added to the user interface to reflect this change. This improves the portal user experience and prevents unnecessary restrictions.
Original PR description
**Steps to reproduce:** - Go to the Contact app - Go to the record of a partner - Go to the actions dropdown menu of the record - Grant portal access - Remove the access - Grant the access again - Second grant is blocked **Issue:** Active check is needed when granting access to a previous portal user which was archived. **Fix:** Only block when the user is an active portal user. Also need to add `is_active` field to toggle the buttons in the xml as we can't directly access `user_id.active` in the view. related: https://github.com/odoo/odoo/commit/d49d91ffd463a68cb6ccc881aa14ac58bd2cf65b opw-4760550
This update corrects a bug where the portal system incorrectly marked a page as viewed every time a link was sent via chatter (message or log note). Now, the system verifies if the view originated from a web browser, ensuring accurate tracking of customer portal activity. This improves data reliability for customer insights.
Original PR description
When a link to the portal is sent from the chatter via message or log note, the preview of the link triggers that the page was viewed by customer. As a solution, now we will check if it was viewed from browser with request.is_frontend opw-5237785 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a problem with Odoo invoices generated by the l10n_dk module, specifically related to the schemeID value used for EndpointIDs. The issue prevented invoices from passing validation checks. By updating the codelist used, the invoices now correctly conform to OIOUBL standards and can be processed successfully.
Original PR description
**PROBLEM** Generated OIOUBL files don't pass schematrons validations. **STEP TO REPRODUCE** 1. Install the l10n_dk module. 2. Create a dk partner with an adress, and VAT number (DK12345674 for example, don't forget to add a street number for the DK Company address). 3. Create an invoice for the DK partner, and download the xml. 4. Use this validator https://oioubl.nemhandel.dk/validation (Odoo Peppol IAP validator tests oioubl version 3.0 which is not the version we want to test). **CAUSE** We used [wrong codelist](https://oioubl-demo.nemhandel.dk/oioubl/kodelister/ElectronicAddressSchemeCode-3.0.html) (oiubl3.0) for schemeID instead of the [one we should use](https://oioubl21.oioubl.dk/Codelists/en/urn_oioubl_scheme_endpointid-1.1.html) (oioubl2.1). opw-5379474
This update fixes a visual issue where long product names in the combo configurator popup caused misalignment of product cards. The change ensures all product cards remain consistently aligned and sized, regardless of product name length, improving the user experience and visual consistency of the configurator.
Original PR description
Before this commit: ================= Product cards with long names caused a slight vertical misalignment in the combo configurator popup, resulting in inconsistent card sizes within the grid. After this commit: ================== Ensure all product cards remain uniformly aligned and maintain consistent dimensions in the combo configurator popup, even when product names are long. Task:5447320
This update automatically calculates and transmits the required 2050 retirement savings contributions for Swiss businesses using Odoo. The change ensures accurate compliance with Swiss tax regulations, streamlining the payroll process and reducing the risk of errors related to this specific calculation.
Original PR description
task-5166226 Forward-Port-Of: odoo/enterprise#103453
12 changes
Resolved issues and error corrections
This update resolves a potential issue where payment processing with Stripe would fail due to timeouts when API requests took longer than 60 seconds. The code now logs a warning if a timeout occurs, preventing failed payments and improving the reliability of the payment provider.
Original PR description
When the user connect with Stripe in the payment provider and an API request takes longer than 60 seconds then a ReadTimeout error will occur. Line 1:…
When the user connect with Stripe in the payment provider and an API request takes longer than 60 seconds then a ReadTimeout error will occur.
Line 1: https://github.com/odoo/odoo/blob/29a40a30f3bf7a4a3a205e54fb84e569691d961f/addons/payment_stripe/models/payment_provider.py#L413-L418
Traceback on sentry:
```
TimeoutError: The read operation timed out
File "urllib3/connectionpool.py", line 445, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
# Permission is hereby granted, free of charge, to any person obtaining a copy
File "urllib3/connectionpool.py", line 440, in _make_request
httplib_response = conn.getresponse()
File "http/client.py", line 1375, in getresponse
response.begin()
File "http/client.py", line 318, in begin
version, status, reason = self._read_status()
File "http/client.py", line 279, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "socket.py", line 705, in readinto
return self._sock.recv_into(b)
File "ssl.py", line 1274, in recv_into
return self.read(nbytes, buffer)
File "ssl.py", line 1130, in read
return self._sslobj.read(len, buffer)
ReadTimeoutError: HTTPSConnectionPool(host='stripe.api.odoo.com', port=443): Read timed out. (read timeout=60)
File "requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "urllib3/util/retry.py", line 532, in increment
raise six.reraise(type(error), error, _stacktrace)
File "six.py", line 719, in reraise
raise value
File "urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "urllib3/connectionpool.py", line 447, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "urllib3/connectionpool.py", line 336, in _raise_timeout
raise ReadTimeoutError(
ReadTimeout: HTTPSConnectionPool(host='stripe.api.odoo.com', port=443): Read timed out. (read timeout=60)
File "odoo/http.py", line 2134, in __call__
response = request._serve_db()
File "odoo/http.py", line 1710, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 133, in retrying
result = func()
File "odoo/http.py", line 1737, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1938, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 191, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 717, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 34, in call_button
action = self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 26, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "addons/sale/wizard/payment_provider_onboarding_wizard.py", line 31, in add_payment_methods
return super().add_payment_methods()
File "addons/payment/wizards/payment_onboarding_wizard.py", line 141, in add_payment_methods
return self._start_stripe_onboarding()
File "addons/sale/wizard/payment_provider_onboarding_wizard.py", line 36, in _start_stripe_onboarding
return self.env.company._run_payment_onboarding_step(menu_id)
File "addons/payment/models/res_company.py", line 51, in _run_payment_onboarding_step
return stripe_provider.action_stripe_connect_account(menu_id=menu_id)
File "home/odoo/src/custom/trial/saas_payment_stripe/models/payment_provider.py", line 87, in action_stripe_connect_account
return super().action_stripe_connect_account(menu_id)
File "addons/payment_stripe/models/payment_provider.py", line 152, in action_stripe_connect_account
connected_account = self._stripe_fetch_or_create_connected_account()
File "home/odoo/src/custom/trial/saas_payment_stripe/models/payment_provider.py", line 184, in _stripe_fetch_or_create_connected_account
connected_account = super()._stripe_fetch_or_create_connected_account()
File "addons/payment_stripe/models/payment_provider.py", line 326, in _stripe_fetch_or_create_connected_account
return self._stripe_make_proxy_request(
File "addons/payment_stripe/models/payment_provider.py", line 414, in _stripe_make_proxy_request
response = requests.post(url=url, json=proxy_payload, timeout=60)
File "requests/api.py", line 119, in post
return request('post', url, data=data, json=json, **kwargs)
File "requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "requests/sessions.py", line 544, in request
resp = self.send(prep, **send_kwargs)
File "requests/sessions.py", line 657, in send
r = adapter.send(request, **kwargs)
File "requests/adapters.py", line 529, in send
raise ReadTimeout(e, request=request)
```
To handle this situation, the code has been updated to ensure that if the system takes more than 60 seconds to connect with Stripe then raises a logger warning.
sentry-4506249274
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes a technical issue where expired payment sessions caused errors in the Odoo system. Instead of throwing an error, the system now validates the session, preventing disruptions to the payment process. This ensures smoother and more reliable payment transactions for our users.
Original PR description
Currently, an exception occurs when a payment session has expired at [1], To handle this issue, raise a validation error instead of raise an exception. link [1]:…
Currently, an exception occurs when a payment session has expired at [1], To handle this issue, raise a validation error instead of raise an exception.
link [1]: https://github.com/odoo/odoo/blob/677f7d0c6085dba4ab9c27a53b4c3fd2d88b190e/addons/payment/controllers/post_processing.py#L48
Traceback On Sentry:
```
Exception: tx_not_found
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/payment/controllers/post_processing.py", line 48, in poll_status
raise Exception('tx_not_found')
```
sentry-4992700034
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue that prevented users from successfully editing reports within the Studio mode. The system was incorrectly splitting report keys, leading to an error message. The fix ensures the system correctly handles report copying by limiting the number of values unpacked, allowing for seamless report editing.
Original PR description
Currently, raise an error message in the report editor when trying to edit any reports in the studio mode. error message: too many values to unpack (expected 2)) When we modify a report, the system…
Currently, raise an error message in the report editor when trying to edit any reports in the studio mode. error message: too many values to unpack (expected 2)) When we modify a report, the system tries to make a copy of it. To make this copy, the system needs to provide certain details like the name, mode key etc . At that time system tries to assign multiple values instead of two at this point [1] because the 'key' passed to do a copy of the report is [2] split by '.' as we see in [1] which leads to multiple values instead of two. link [1]: https://github.com/odoo/odoo/blob/1648ee1abff1ae12b3933baa85a2e048fa2eb557/odoo/addons/base/models/ir_ui_view.py#L102 link [2]: https://github.com/odoo/enterprise/blob/34a042bb196273c34cd163f4c43bbd858664b7dc/web_studio/controllers/report.py#L337 To resolve the issue, Add limiting into split, To ensure that there are only two elements in the resulting list, which can unpacked into two (first is module, second is view_id) variables to prevent error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that caused errors when users modified existing reports through the Web Studio interface. By adding error handling, the system now gracefully displays a user-friendly message instead of crashing, improving the report editing experience.
Original PR description
Currently, the error is generated when the client is trying to modify the view of an existing report through Web Studio. Steps to reproduce: - Install the 'web_studio' module and any other module…
Currently, the error is generated when the client is trying to modify the view of an existing report through Web Studio. Steps to reproduce: - Install the 'web_studio' module and any other module that has report options available for example here we are using the 'account' module. - Open 'Studio' in Invoicing and (Turn on the debugger mode) - Then go to 'Reports' and open any existing report. - Click on 'More' option and then click on the '</>Qweb Views' button. - Open the view and remove everything except the first and the last line, Save it now and go back to the report you modified the error will be generated. ```IndexError: list index out of range``` To resolve the issue, we will add a try-except block at [1] to handle errors. This will ensure that if an error occurs when accessing an edited report, it will raise a user error message and this error message will be seen in the report editor. link [1]: https://github.com/odoo/enterprise/blob/6c538b5ba63be936120f38c90445dfbb2e65a625/web_studio/controllers/report.py#L583-L584 sentry-4650493111
This update fixes a bug that prevented users from successfully editing reports within Web Studio due to invalid syntax in the Qweb architecture. By adding a safety check, the system now validates report templates, preventing errors and ensuring a smoother editing experience. This improves the reliability of the reporting feature.
Original PR description
An error is generated when editing reports with an incorrect value or syntax. Steps to reproduce: (Edit a report of the 'sale' module to generate an error as an example): - Install an 'sale_management' and 'web_studio' module. - Navigate to Settings / Technical / User Interface / Views. - Open 'report_saleorder_document', Edit in 'Qweb Architecture' with an incorrect syntax of like <t t-call='handelux_A4_leaflet_base_template'/>. - Open a Sales, open a studio mode, and click on 'Reports'. - Try to open any report. ```ValueError: Invalid template id: 'handelux_A4_leaflet_base_template'``` To resolve the issue, we will add a try-except block at [1] to handle errors. This will ensure that if an error occurs, it will raise a validation error. link [1]: https://github.com/odoo/enterprise/blob/3de380edfe66f65c220f1d83edbac8009793ef0b/web_studio/controllers/report.py#L592 sentry-5636723770
This update fixes an error that occurred when trying to access the Profit & Loss report. The issue was caused by a missing external ID, which previously resulted in a system error. This change ensures the report can be opened smoothly, even if the external ID is not present.
Original PR description
An error occurs when the system tries to retrieve an external ID of the report 'account_reports.profit_and_loss' at [1], but it is unavailable. link [1]: https://github.com/odoo/enterprise/blob/67461493831b0f561daf9e499dd4fcb49a053d21/account_reports/models/account_report.py#L5399 Steps to reproduce: - Install the 'industry_fsm' module and. - Go to Settings / Technical / Sequences & Identifiers / External Identifiers, And delete 'account_reports.profit_and_loss'. - Go to Accounting / Configuration / Management / Accounting Reports and try to open any report. ```ValueError: External ID not found in the system: account_reports.profit_and_loss``` To handle this issue, add 'raise_if_not_found=False' so that if the external view id of the report 'account_reports.profit_and_loss' is not found, then it will get a None value instead of raising an error. Sentry-5645614328
This update resolves an error that occurred when users accessed task reports from the portal view. The issue stemmed from attempting to use a feature not available in the task object, preventing users from viewing reports. This change ensures the reporting functionality works correctly within the portal.
Original PR description
Currently, The error is occurs whenever user open a 'task' in portal view. Steps to reproduce - Install an 'industry_fsm' module. - Open a portal view. - Click on 'Tasks' and open an any record form…
Currently, The error is occurs whenever user open a 'task' in portal view.
Steps to reproduce
- Install an 'industry_fsm' module.
- Open a portal view.
- Click on 'Tasks' and open an any record form it.
Traceback on sentry:
```
AttributeError: 'project.task' object has no attribute 'display_sign_report_primary'
File "<2406>", line 1650, in template_2406
File "<2406>", line 1632, in template_2406_content
File "<2406>", line 555, in template_2406_t_call_0
File "<2406>", line 473, in template_2406_t_call_3
File "<2406>", line 73, in template_2406_t_set_12
QWebException: Error while render the template
AttributeError: 'project.task' object has no attribute 'display_sign_report_primary'
Template: ir.ui.view(2406,)
Path: /t/t/body/div[1]/div/t/t[2]/div/div[2]
Node: <div t-if="task.is_fsm and (task.display_sign_report_primary or task.display_sign_report_secondary)" class="d-grid flex-grow-1 align-items-center mb-2"/>
File "odoo/http.py", line 2157, in __call__
response = request._serve_db()
File "odoo/http.py", line 1732, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 133, in retrying
result = func()
File "odoo/http.py", line 1759, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1873, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "addons/website/models/ir_http.py", line 235, in _dispatch
response = super()._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 209, in _dispatch
result.flatten()
File "odoo/http.py", line 1248, in flatten
self.response.append(self.render())
File "odoo/http.py", line 1240, in render
return request.env["ir.ui.view"]._render_template(self.template, self.qcontext)
File "addons/website/models/ir_ui_view.py", line 443, in _render_template
return super()._render_template(template, values=values)
File "odoo/addons/base/models/ir_ui_view.py", line 2044, in _render_template
return self.env['ir.qweb']._render(template, values)
File "odoo/tools/profiler.py", line 292, in _tracked_method_render
return method_render(self, template, values, **options)
File "odoo/addons/base/models/ir_qweb.py", line 593, in _render
result = ''.join(rendering)
File "<2406>", line 1656, in template_2406
```
When the user open a 'task' in portal view. There's an issue where the system attempts to access an attribute 'display_sign_report_primary' from 'project.task' object [1] and the 'project.task' object has no attribute 'display_sign_report_primary' at that specific point.
Line[1]:https://github.com/odoo/enterprise/blob/ce9122ab0fa8c393e4c37280fcef52377d6fb16f/industry_fsm/views/project_portal_templates.xml#L39
This commit solves this issue by accessing an attribute 'display_sign_report_primary' in the 'industry_fsm_report' module instead of 'industry_fsm' module. This adjustment is necessary as the 'display_sign_report_primary' attribute is not present in the 'industry_fsm'
module.
sentry-4673429933This update resolves an error that occurred when uploading incorrect CFDI XML files to generate invoices. The system was attempting to retrieve data not present in the file, causing a 'KeyError'. The fix ensures the system gracefully handles missing data by returning a 'None' value, preventing the error and allowing invoice generation to proceed.
Original PR description
Currently, an error occurs when uploading a CFDI XML file to generate an invoice. Step to produce: - Install the 'l10n_mx_edi' module. - Navigate to Accounting > Customers > Invoices. - Upload the incorrect CFDI XML file.(use this [1] XML file to reproduce a issue ) Link[1]: https://drive.google.com/file/d/1nljsTCNsNjHyacikZx0rApk5YQcAQPm-/view?usp=drive_link ```KeyError: 'usage'``` An error occurs when attempting to generate CFDI values in an invoice by uploading an incorrect XML file and the system tries to retrieve a 'usage' from the 'cfdi_vals' at [2] which is not available because the XML file is not correct. Link [2]: https://github.com/odoo/enterprise/blob/641dcfe7a74b3e9a987779493ed2c3612a3202b1/l10n_mx_edi/models/account_move.py#L2566 To resolve the issue return a None value if cfdi values are not available in XML file. Sentry-5658142430
This update resolves an issue where adding to a product's on-hand quantity would trigger a system error. The fix ensures the system handles zero quantity updates correctly, preventing the 'float division by zero' error and allowing users to accurately manage stock levels. This improves the stability and reliability of the stock management process.
Original PR description
Currently, an error occurs when adding an on-hand quantity to a product. Step to produce: - Install the 'l10n_ke_edi_oscu_stock' module. - Create a product, add 'Packaging Unit', 'Package Quantity', 'Origin Country', 'eTIMS Product Type', and 'UNSPsc Category' in the accounting section. - Set a tracking as 'No Tracking' - Click an updated Quantity and change it. ```ZeroDivisionError: float division by zero``` An error occurs when the system tries to divide a float number by zero at [1]. Link [1]: https://github.com/odoo/enterprise/blob/29e8e61ded0e5417dc05f98a87d364bbb0f15661/l10n_ke_edi_oscu_stock/models/stock_move.py#L135 To handle this issue, Add a condition to ensure that if 'quantity_product_uom' is zero, assign a price as a zero. Sentry-5878214789
A previous error prevented users from opening the Profit and Loss report when certain column settings were used. This update corrects a formatting issue that caused the error, ensuring the report can now be accessed without interruption. This resolves a technical problem impacting report generation.
Original PR description
Currently, An error is generated when trying to open the 'Profit and Loss' report. Steps to reproduce: - Install an 'account_reports' module. - Navigate to Accounting / Configuration / Management /…
Currently, An error is generated when trying to open the 'Profit and Loss' report.
Steps to reproduce:
- Install an 'account_reports' module.
- Navigate to Accounting / Configuration / Management / Accounting Reports, Open 'Profit and Loss', Click on the 'Column' page, and change the value of 'Figure Type' to 'Datetime'
- Open reports Accounting / Reporting / Statement Reports / Profit and Loss.
Stack Trace:
```
AssertionError: null
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 4441, in get_report_information
'lines': self._get_lines(options, all_column_groups_expression_totals=all_column_groups_expression_totals, warnings=warnings),
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 2141, in _get_lines
line_dict = self._get_static_line_dict(options, line, all_column_groups_expression_totals, parent_id=parent_generic_id)
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 2356, in _get_static_line_dict
{'formula': expression.formula, 'subformula': expression.subformula, 'value': self.format_value(options, column_group_totals[expression]['value'], figure_type)}
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 4834, in format_value
return self._format_value(options=options, value=value, figure_type=figure_type, format_params=format_params)
File "home/odoo/src/enterprise/saas-17.2/account_reports/models/account_report.py", line 4870, in _format_value
return format_date(self.env, value)
File "odoo/tools/misc.py", line 1327, in format_date
return babel.dates.format_date(value, format=date_format, locale=locale)
File "babel/dates.py", line 700, in format_date
return pattern.apply(date, locale)
File "babel/dates.py", line 1232, in apply
return self % DateTimeFormat(datetime, locale)
File "babel/dates.py", line 1238, in __init__
assert isinstance(value, (date, datetime, time))
```
The issue occurs when the system tries to format a value into a date at [1] that is not a string.
link [1]: https://github.com/odoo/enterprise/blob/d31f359e543a9413623d4a15aebba54e8d76d023/account_reports/models/account_report.py#L4797
To resolve this issue, Add a try-except block to handle errors that occur during date formatting
Sentry-5646185230This update corrects a security vulnerability where bank statements were unintentionally accessed with elevated privileges. The change removes the unnecessary sudo access granted to returned bank records, improving security and streamlining operations. This ensures data access aligns with the principle of least privilege.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242771
This update corrects a bug in Odoo's automation engine that caused delays in tasks being created when timesheets exceeded allocated time. The fix ensures that dependent computed fields are correctly recomputed after a pre-filter condition is applied, preventing inconsistent behavior and improving task creation reliability.
Original PR description
This PR is a cherry-pick of: https://github.com/odoo/odoo/pull/236323 When a pre-filter condition of an automation flushes fields, we must ensure that their recomputation is still scheduled…
This PR is a cherry-pick of: https://github.com/odoo/odoo/pull/236323
When a pre-filter condition of an automation flushes fields, we must ensure that their recomputation is still scheduled afterwards For example, if a rule pre-filters on field B (which depends on A), computing A should not clear the compute flag of B
### Issue:
In some automation rules, computed fields must be processed in a specific order (e.g., `effective_hours` -> `remaining_hours`)
However, if `remaining_hours` is referenced in the automation `Before Update Domain`, its compute flag may be incorrectly cleared, preventing the proper recomputation chain
This results in inconsistent behavior, such as delays in activities being created when timesheets exceed allocated time
### Cause:
The automation engine flushes fields referenced in the `Before Update Domain`, but does not restore their compute flags afterward Thus dependent fields are not recomputed as expected
### Steps to reproduce:
1. Enable Debug Mode
2. Create an Automation Rule
-- Name: Time Exceeded
-- Model: Task
-- Trigger: On Save
-- Before Update Domain: [("remaining_hours", ">=", 0)]
-- Apply on: [("remaining_hours", "<", 0)]
4. Create a Project with Timesheets
5. Create a Task inside the Project
6. Set Allocated Time to 10h
7. Use the Start button to record 11h (No activity appears in chatter)
8. Do the same again (Activity appears only after the second exceed) Before the fix, there is always a delay because the recomputation chain is broken
### Tickets:
18.0: opw-4409744
17.0: opw-5237430