Daily updates from Odoo
Navigate
Branch
Monday, February 16, 2026
165 changes
37 changes
New functionality added to Odoo
This update adds pre-built email snippets to the mass_mailing builder, making it faster and easier for users to create professional emails. Alongside this, UX improvements and bug fixes enhance the builder's usability and performance. These changes streamline the email creation process and improve the overall user experience.
Original PR description
## [IMP] mass_mailing: add new snippets This commit adds several ready-to-use snippets to the mail editor in `mass_mailing` to reduce the time and effort required to build emails. These snippets…
## [IMP] mass_mailing: add new snippets This commit adds several ready-to-use snippets to the mail editor in `mass_mailing` to reduce the time and effort required to build emails. These snippets provide immediate, usable building blocks and help users understand the editor's capabilities without needing to explore or fine-tune block options first. To further improve discoverability and relevance, the snippet categories are slightly reorganized and some existing snippets are revamped to better reflect common email use cases. Finally, this commit adds a new snippet tile in the main editor panel, allowing users to quickly drag and drop an icon into their email. ## [IMP] *: UX Fixes and improvements to mass_mailing builder This commit fixes some UX issues and improves upon the already in place options and snippets. These fixes allow for a better usage of the builder and user-friendlier options for some of the snippets. We reintroduced the PowerButtonsPlugin inside the mass_mailing builder which needed adjustments for the position computations and the calls to the position updates. The position computations didn't take into account that the editable can be inside an iframe. This means that the reference position between an editable in the proper document and an iframe's document could be different as the local overlay doesn't sit at the same position. In the case of the iframe, the local overlay sits right beside the iframe which means that we need to not take into account the buttons position when computing the style attribute. A compensation for the iframeElement's DOMRect was thus added to it when in this case. We also added the editable as permanent part of the scrollable elements inside the `PositionPlugin`. This enables the fullscreen mode to handle scrolling to update the position of the buttons. This commit also removes some usages of the d-flex class as the `display: flex` css property isn't well supported inside email client. Thus, we are starting the cleaning process so that the convert_inline can have an easier job converting the email to a client-friendly format. Task-5380615 Co-authored-by: Thomas Josse (THJO) <thjo@odoo.com> Co-authored-by: Julien Banken (JBN) <jbn@odoo.com> Forward-Port-Of: odoo/odoo#243331
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate a specific XML file (JPK KR PD) to meet legal accounting standards, avoiding potential penalties and ensuring continued software usability.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Enhancements to existing features
This update ensures Odoo complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate specific electronic reports, avoiding potential penalties and ensuring continued legal use of the software. This change is critical for Polish users to remain compliant with tax regulations.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238374
This update enhances the handling of Romanian tax invoices from the ANAF. Now, the system automatically downloads and attaches the official PDF version of the invoice, providing accountants with a visual document for comparison and compliance. This eliminates the previous reliance solely on XML data.
Original PR description
### Before For bills from the Romanian ANAF we only downloaded an XML and imported the data. There is no visual aid for the accountant to see and compare the received document. ### Now We use the ANAF service to get the official "PDF" version of the invoice. This is requested for any new bill we get through ANAF that doesn't already contain a pdf from the vendor and it is set as the main attachment. task-5877171 Forward-Port-Of: odoo/odoo#248373 Forward-Port-Of: odoo/odoo#247382
This update enhances the payroll dashboard for Swiss users by tailoring warnings to specific Swiss requirements. It now displays warnings related to missing or incorrect data within Swiss employee and company records, ensuring accurate payroll processing. This improves data integrity and compliance for our Swiss customers.
Original PR description
This PR improves the payroll dashboard for Switzerland by: 1- Disabling the generic warnings as they are currently irrelevant to Switzerland. 2- Add new warnings for the missing/invalidity of some needed fields in swiss employees and companies. Task: 5856084 Forward-Port-Of: odoo/enterprise#105148
Resolved issues and error corrections
This update ensures that pickings are automatically created when validating POS orders linked to sale orders. Previously, stock levels weren't updated correctly if pickings were scheduled for the end of a POS session. This fix provides more accurate stock management for point-of-sale transactions.
Original PR description
Before this commit, when validating a POS order linked to a sale order, if the Inventory Management was configured to create pickings at the end of the session, no picking was created for the order, and the sale order stock was not updated. This commit fixes this issue by ensuring that the picking is created for the imported sale orders in real time. opw-5423113 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248424 Forward-Port-Of: odoo/odoo#244739
This update fixes an issue where the record count wasn't correctly displayed alongside group labels in list views. Previously, the count was appearing in unrelated columns, creating a confusing user experience. This change ensures the grouped record count is now consistently shown next to the group label, improving clarity and usability.
Original PR description
Currently, when applying a `Group By` filter in `list views`, the record count is displayed far from the group label. **Steps to reproduce:** - Open `Apps` and switch to the list view. - Apply a…
Currently, when applying a `Group By` filter in `list views`, the record count is displayed far from the group label. **Steps to reproduce:** - Open `Apps` and switch to the list view. - Apply a `Group By` filter (e.g., Author). - Observe where the grouped record count is displayed. **Observation:** The total number of records is rendered under unrelated columns rather than being displayed next to the group label. **Root Cause:** After commit [1], the `ms-auto` class at [2] causes the `group count` to be moved away from the group label. **Fix:** This commit ensures that the grouped record count is displayed next to the group label, consistent with previous versions. **Before:** <img width="1909" height="466" alt="5438766_before" src="https://github.com/user-attachments/assets/3ac44b19-2dad-4f01-ab78-8f456405e4d5" /> **After:** <img width="1905" height="453" alt="5438766_after" src="https://github.com/user-attachments/assets/ce0143e5-feeb-49ee-8d42-5235add669e4" /> [1]: https://github.com/odoo/odoo/pull/235250/commits/963696f4839b3043226ac118bf6a4ae8e8e92823 [2]: https://github.com/odoo/odoo/blob/25c372b254cec8635bb73b04c7729530f8a08e72/addons/web/static/src/views/list/list_renderer.xml#L247 opw-5438766
This update resolves a minor issue that prevented the application from functioning correctly when using the Ukrainian language. The fix addresses a problem with how the system retrieves language patterns, ensuring a more reliable experience for users in Ukrainian. This change improves overall application stability.
Original PR description
**Steps to Reproduce:** 1. Install `stock_fleet` module (with demo data). 2. Set the **Ukrainian** language for the user. 3. Open Fleet > Vehicle > Click Category Error: `KeyError: '2'` **Cause:** Babel's CLDR list patterns for some locales (e.g., Ukrainian 'unit-short') do not include the two-item pattern key, so when babel's `format_list` attempts to access patterns, it will raise an error. **Fix:** This commit wraps the call in a try/except that handles KeyError and retries formatting with the 'standard' style to avoid the crash. Forward-Port-Of: odoo/odoo#248519 Forward-Port-Of: odoo/odoo#248228
This update fixes a potential crash in the Italian EDI invoicing process when invoices are created with zero amounts in a foreign currency (like USD). The issue stemmed from a division-by-zero error during currency conversion. The fix ensures the system handles zero amounts gracefully, preventing errors and ensuring invoices can be generated correctly.
Original PR description
**Steps to reproduce:** 1. Install the `l10n_it_edi` and switch to IT company 2. Go to Accounting → Invoice. 3. Create an invoice add partner and change the currency to USD 4. Add a product and apply tax and discount of 100% and confirm 3. Click on Send **Issue:** A ZeroDivisionError is raised during the Italian EDI XML generation. `ZeroDivisionError: float division by zero` **Cause:** The conversion rate is computed by dividing `amount_total` by `amount_total_signed` without handling the case where `amount_total_signed` is `0.0`. **Solution:** Skip the conversion rate computation when the signed total amount is zero, preventing the division by zero **opw-5481821** Forward-Port-Of: odoo/odoo#245087 Forward-Port-Of: odoo/odoo#244423
This update corrects a previous issue where taxes related to GST, TDS, and TCS registration remained active even after the registration settings were disabled. Now, when a user removes these registrations, the associated taxes are automatically deactivated, ensuring accurate tax calculations and compliance. This simplifies tax management for users.
Original PR description
Before this PR: - When enabling TDS, TCS, or GST registration from settings, related taxes are activated, but when disabling these settings, the taxes remain active. After this PR: - When disabling TDS, TCS, or GST registration, all related taxes are deactivated. task-5456351 Forward-Port-Of: odoo/odoo#242030
This update corrects a flaw in the forecasting system that previously didn't account for materials used in production. Now, daily demand calculations accurately reflect the consumption of components within manufacturing orders, leading to more reliable inventory predictions. This ensures better production planning and reduces potential stockouts.
Original PR description
The daily demand in forecasting does not take into consideration the product that are used for production. Steps to reproduce: ------------------- * Install stock and mrp * Create a tracked Product…
The daily demand in forecasting does not take into consideration the product that are used for production. Steps to reproduce: ------------------- * Install stock and mrp * Create a tracked Product "Component" with RR * Add some "on hand quantity" * Create Product "Product" with a BOM that use "Component" * Create a manufacturing order for "Product" and confirm it * Go back on the RR of "Component" and use "resplenishment information" button (small i) -> Daily demand does not reflect the "Component" used for manufacturing. Observation: ------------- When Opening the resplenishment information, the daily_demand is calculated: https://github.com/odoo/odoo/blob/c38346ccc3e44670b76bfb010795bdfa7004b532/addons/stock/wizard/stock_replenishment_info.py#L177 For that calculation quantity_out is used, obtained just before: https://github.com/odoo/odoo/blob/c38346ccc3e44670b76bfb010795bdfa7004b532/addons/stock/wizard/stock_replenishment_info.py#L164-L167 Since it only consider moves that goes directly to the client, it will not take into consideration products that are used for production. opw-5497584 Forward-Port-Of: odoo/odoo#246125
This update fixes an issue where the total amount for invoice sections was incorrectly positioned in the PDF reports for the l10n_in tax module in Russia. The change adds the necessary column to align with product HSN/SAC reporting, ensuring accurate invoice summaries. This improves the clarity and accuracy of invoices generated for Russian businesses.
Original PR description
How to reproduce : - With l10n_in company - Create Invoice - Add section - Add product under section - Confirm invoice - Print to pdf The problem : The value for the total amount of the section is in the wrong column (the one to the left) Why : The l10n_in module adds a column in the report for the HSN/SAC of the products. It correctly did for the products and the table title but not for the sections. opw-5879828 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246768
This update fixes an issue where the HTML editor toolbar remained visible on mobile devices when the side menu or a popover was open. Now, the toolbar disappears automatically when these elements are active, providing a cleaner and more user-friendly mobile experience. This enhancement ensures a better workflow for users editing content on their phones.
Original PR description
In mobile, when the side menu or a popover is opened, the toolbar remains displayed above the keyboard. This commit hides the mobile toolbar while such elements are opened. Steps to reproduce: - In mobile, go to a "To do" note - Put cursor inside text to display the toolbar - Open the hamburger menu => The toolbar remained displayed on top of the side menu - Open the gear menu => The toolbar remained displayed while the menu was opened task-5222582 Forward-Port-Of: odoo/odoo#247389 Forward-Port-Of: odoo/odoo#241611
This update resolves an issue where users could incorrectly modify attendance records. The change now prevents unauthorized updates to attendance data, ensuring data integrity and accuracy. Added test coverage to confirm the fix.
Original PR description
Closes [odoo/odoo#226007](https://github.com/odoo/odoo/issues/226007). Description of the issue/feature this PR addresses: Prevents a user from updating their attendance record by changing the employee to the one whose attendance is not managed by the current user. Current behavior before PR: - Assign the Officer Group of Attendance group to a user. - Assign the user as the attendance manager of itself. - Login with that user. - Create an attendance record for the employee and save it. - Try to change the employee and save; an error will be thrown as expected. - Go to the Attendance menu; the record will still be saved. Desired behavior after PR is merged: This commit ensures that un-allowed write does not take place + test coverage added. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243719 Forward-Port-Of: odoo/odoo#226335
This pull request fixes a problem where invoice descriptions were not consistently displayed when printing invoices, particularly with factur-x e-invoices. The update ensures that both the custom description and product names are correctly printed, improving invoice accuracy and compliance. This resolves issues reported by users importing factur-x invoices.
Original PR description
**Issue 1** Steps to reproduce: - Create a new invoice - Add an invoice line, with just a description - Save - On the same line, add any product - Print Issue: Only the custom description will be visible on the line opw-5471809 --- **Issue 2** Steps to reproduce: - Import factur-x e-invoice - Print pdf Issue: Only product name will be printed, even if the invoice record include the complete description opw-5471809 Forward-Port-Of: odoo/odoo#248010
This update resolves a memory issue that occurred when Odoo processed large amounts of email data. The fix optimizes how recordsets are handled, preventing excessive memory allocation and ensuring stable performance, particularly when dealing with many records. This improves the overall reliability of Odoo's email functionality.
Original PR description
**Issue Description :** In _mail_group_by_operation_for_mail_message_operation [function](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L77).…
**Issue Description :**
In _mail_group_by_operation_for_mail_message_operation [function](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L77).
The memory error occurred due to recordset concatenation triggered by: [operation_documents[record_operation] += record](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L83)
This resulted in repeated recordset concatenations inside a loop. Since recordsets are immutable, each concatenation [creates a new recordset](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/odoo/orm/models.py#L5874) and reallocates the underlying tuple of IDs. When processing a large number of records this caused memory growth.
**Solution:**
Replace iterative recordset concatenation.
- Collect record IDs using Python sets (O(1) insertion).
- Build recordsets once per operation after the loop.
- Apply with_prefetch() only once per operation.
**Traceback:**
```
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/mail_message.py",
line 397, in _search
allowed_ids.update(self._find_allowed_doc_ids(model_ids))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/mail_message.py",
line 428, in _find_allowed_doc_ids
operation_res_ids =
records_all._mail_group_by_operation_for_mail_message_operation('read')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/models.py", line 83,
in _mail_group_by_operation_for_mail_message_operation
operation_documents[record_operation] += record
File "/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py", line 5851, in
__add__
return self.concat(other)
^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py", line 5864, in concat
ids.extend(arg._ids)
MemoryError
```
opw-[5915534]
upg-[3878714]
tgb - 2445
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-prThis update resolves a visual bug where product arrows within snippets were incorrectly positioned, particularly when the snippet was set to full width. The fix ensures arrows appear correctly regardless of snippet size or scrolling mode, improving the overall presentation of product listings on the website. This enhances the user experience and consistency of product displays.
Original PR description
*: website_sale Since commit [1], the position of the arrows in the product snippet was broken when they were set to appear at the bottom. It also fixes the arrow positioning when the snippet is set…
*: website_sale Since commit [1], the position of the arrows in the product snippet was broken when they were set to appear at the bottom. It also fixes the arrow positioning when the snippet is set to full width, with the title displayed on the side and "Scrolling Mode" set to "All." This commit correctly adjusts the arrow positioning. [1]: https://github.com/odoo/odoo/commit/54fde5da6c229a7173c5b4c042b3330598db3904 task-5935743 | Before | After | |--------|--------| | <img width="1617" height="635" alt="Capture d’écran 2026-02-13 à 09 40 36" src="https://github.com/user-attachments/assets/21e3545c-e243-4ee7-9fd5-51ca06b8c496" /> | <img width="1620" height="664" alt="Capture d’écran 2026-02-13 à 09 39 14" src="https://github.com/user-attachments/assets/6dcdfc0f-6dc8-4293-9d23-ea36d19fc2b4" /> | | <img width="1921" height="719" alt="Capture d’écran 2026-02-13 à 11 12 22" src="https://github.com/user-attachments/assets/8916438c-8108-43ec-a70a-aba8c83ba881" /> | <img width="1918" height="654" alt="Capture d’écran 2026-02-13 à 11 17 21" src="https://github.com/user-attachments/assets/df872f4a-5674-4fff-a0de-b6c99f30acb2" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing users from correctly updating map addresses within the website. The fix eliminates an infinite loop that occurred when changing map locations, ensuring accurate map displays after address modifications. This improves the user experience when using the Google Maps integration.
Original PR description
When we add the google map block and try to change the address, we're unable to do so because of the infinite loop. The issue is due to the onPlaceChanged call inside the onPlaceChanged. We'll use commitPlace instead to commit place's coordinates, then re-render the map to reflect it. Steps to reproduce: 1. Add a google map block. 2. Try to change the address. It doesn't work due to the maximum call size exceeded due to infinite loop. opw-5386094 Forward-Port-Of: odoo/odoo#243679
This update fixes an issue where resetting dynamic colors in SVG illustrations would cause the images to disappear. Now, resetting the color palette restores the correct theme colors, ensuring SVG images remain visible and functional after color adjustments. This improves the user experience when customizing website visuals.
Original PR description
Steps to reproduce: - Insert a media library SVG illustration. - Change one of its Dynamic Colors. - Click the reset button in the colorpicker. => The SVG disappears. Before this commit, resetting a dynamic SVG color could send an empty color value and the image failed to render. After this commit, resetting restores the theme palette colors so the SVG stays visible. task-5868584 Forward-Port-Of: odoo/odoo#248092 Forward-Port-Of: odoo/odoo#245778
This update fixes an issue where the split screen in the restaurant POS module incorrectly showed discount information. The fix ensures that the correct discount value (as a percentage) is displayed, resolving a confusing user experience. This improves accuracy and clarity when splitting bills.
Original PR description
Steps: --- - Configure Restaurant with a global discount. - Open a session and add products. - Apply a global discount. - Open the control buttons and click Split. Issue: --- - The split screen displays the text `With [Object Object]% discount`. Cause: --- - The discount object was rendered directly instead of its value. Fix: --- - Display the correct discount value based on its type. task-5905885 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update prevented the accidental removal of content within HTML editor sections. Previously, pressing 'Delete' after selecting all content could unexpectedly clear the entire section, even when it was designed to be non-editable. This fix ensures that only intended content is removed, improving stability and user experience.
Original PR description
**Steps to reproduce:** - Drop a dynamic snippet, for example Recent Blogs → “Latest Stories”. - Click on the section title. - Press Ctrl + A. - Press Delete. **Description of the issue:** - The content part is removed even though it is inside a contenteditable false container. doing discard after it crash the page. **Cause:** - In `removeNode`, there is no check to prevent removal of children of a contenteditable false element. - As a result, if a contenteditable false element itself is unremovable, the parent node is preserved, but its children are still removed. **Solution:** - In `removeNode`, add a check to return false if node is not `isNodeEditable`. task-5858259 Forward-Port-Of: odoo/odoo#245463
This update fixes an issue where the code editor lost focus after changing the syntax highlighting language. Now, users can seamlessly switch languages without needing to manually re-enter the code. This improves the user experience and efficiency when working with code snippets.
Original PR description
**Description of the issue:** - When a user changes the language of a syntax-highlighted code block, the editor loses focus from the code input. As a result, the user must manually click back into…
**Description of the issue:** - When a user changes the language of a syntax-highlighted code block, the editor loses focus from the code input. As a result, the user must manually click back into the code block to continue typing **Steps to reproduce:** - Insert a syntax-highlighted code block. - Click the language dropdown to change the syntax highlighting language. - Select a different language from the dropdown. The language dropdown closes correctly after selection. Focus does not return to the code block input. Instead, focus remains on the dropdown button. **Cause:** - Although focus is explicitly set back to the code block input after selecting a language, closing the dropdown restores focus to the element that was active when the dropdown was opened . As a result, the input does not receive focus. **Solution:** - For the language selector dropdown, set focusToggleOnClosed = false so that closing the dropdown does not restore focus to the dropdown button. - For the copy button, prevent focus on pointerdown. task-5785595 Forward-Port-Of: odoo/odoo#245161
This update corrects a technical issue where website controllers could incorrectly link to irrelevant model types, leading to potential errors. By restricting controller bindings to concrete models, we’ve enhanced the stability and performance of the Odoo website. This change ensures data integrity and a smoother user experience.
Original PR description
Before this commit, a website_controller_page could be bound to any sort of model. For some of them this was irrelevant or plain wrong: - transient models: they are not pointing to anything relevant business wise - abstract: they cannot even have records, and most of them are mixin - _auto = False: Those are models with a table which is a custom one. The heuristics here is to say that records are not "real" ones. Also, most of these tables are sqlViews or something similar Business wise there were errors because of this, so this commit introduces a constraint that forbids the above use cases. sentry-6842596566 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#246115
This update significantly speeds up the inventory valuation report by optimizing how it calculates inventory values. Previously, the system was performing redundant calculations, leading to slow performance. This change eliminates unnecessary steps and batching processes, resulting in a faster and more efficient report generation.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247625
This update adds a system setting to automatically delete old device logs, helping to manage database storage and improve performance. Administrators can now define how long session data is retained, ensuring efficient log management. Careful consideration of database backups is required when setting this retention period.
Original PR description
The res.device.log table contains a huge amount of data. It makes sense to provide a way for administrators to garbage collect these logs according to their retention policy. The `ir.config_parameter` to determine the retention policy is `base.res_device_log_retention_days`. With the hard GC configured, a log will be deleted if its last activity has exceeded the number of days specified in the system parameter. This can remove all traces of a session identifier. The parameter must be chosen judiciously according to the database backups. Note: Put more information in the logs, as this data may be deleted. Task-5928301
This update resolves an issue where Point of Sale would crash when a user created an order containing a combo with an archived product. The fix prevents the system from attempting to access data from the archived product, ensuring a stable Point of Sale experience. This improves reliability for users managing product inventories.
Original PR description
Steps to reproduce: - Archive a product used in a combo. - Open Point of Sale. - Create a new order. - A blank screen appears (error in console) Cause: - The system attempts to access fields of an archived product included in a combo choice. Fix: - Skip loading the combo choice whose product is archived. Task-5936290
This update addresses a recent failure in the automated testing for the Employee Holiday Report. The fix involves ensuring a necessary table is always initialized, resolving an issue identified in a previous Odoo bug report. This ensures the report functionality continues to operate correctly.
Original PR description
Since odoo/odoo#215798 , Click All test has been failing, this commit aims to fix it by introducing a proper _init function to ensure the table exists at any time task-5907217 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where changes made to website translations weren't consistently saved. Now, when editing a translation in one language and switching to another, all delayed translation versions are properly saved, ensuring accurate display across languages. This improves the user experience and data consistency for multilingual websites.
Original PR description
Scenario: - have two languages on website - drop a snippet on a page in main language - go to secondary language => you see the previous page version, and a notification with `Click on…
Scenario: - have two languages on website - drop a snippet on a page in main language - go to secondary language => you see the previous page version, and a notification with `Click on "Edit/Translate" to apply changes made on default language.` is shown - click on Edit: Translate => you see the version with the change from main language applied - save without doing a change Result: nothing is saved Expectation: delayed translations that we are seeing when editing translation should be saved. Cause: Delayed translation (draft version from change of main language) on website were added or disabled with: - 2d08f97c0778469b409fca23f2be5f5a98ce3df8 (October 2023) in 17.0 added the delay translation feature - 0e0a74f8c5fc9f45311e629a76608c6c986d635d (December 2023) in 17.0 disabled the feature - 03a85b13b2c46ef7174123d902e95d5103031c6c (September 2025) in 19.0 enabled the feature again Currently delayed translations are only updated if there is a part of that translation that has been edited and is dirty. Fix: when we save translations, we should also save o_delay_translation that are not dirty. These translations if there is a delayed translation will publish the delayed translation. opw-5187670 opw-5240423 opw-5250497 opw-5254832 opw-5344412 opw-5347408 opw-5419427 opw-5424761 opw-5892371 Forward-Port-Of: odoo/odoo#238696
This update resolves a minor issue in the HTML editor that could occasionally cause errors. The fix uses a technique called 'optional chaining' to safely access the previous sibling element, preventing the error when the element is missing. This improves the overall stability and reliability of the HTML editor.
Original PR description
Before this commit: in rectifySelection, the focusTarget can be null and causing an error when calling the previousSibling After this commit: now we do an optional chaining(?.) on previousSibling task-5481248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248595
This update resolves a problem where font family settings in the mass mailing editor weren't consistently applied. The fix ensures that changes made through the Design Tab correctly override font styles, providing users with greater control over the appearance of their emails. This improves the overall user experience and design flexibility.
Original PR description
There is an issue where some editor descendants have a rule overriding their `font-family` which has more precedence than the inherited `font-family` from the Design Tab. How to reproduce: - create a new mass_mailing - add a text snippet - select all text and change e.g. the `font-size` - open the Design Tab and change the `font-family` of paragraphs Issue: - the text `font-family` does not change Resolution: Fix a css rule applying on every element that is not a `fa` element so that it only applies on the `o_layout` element to let the Design Tab override the `font-family` for specific elements (e.g. `<p>`, `<a>`, ...). task-5869568 Forward-Port-Of: odoo/odoo#245304
This update fixes a technical error in the l10n_hr module where tax group receivable accounts were incorrectly linked to payable accounts. This misconfiguration was preventing accurate tax reporting and financial calculations. The change ensures proper accounting for tax groups, resolving a potential reporting issue.
Original PR description
The receivable accounts were wrongly setup where the receivable account of the tax group was set with the payable account, ... task-5045769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248842
This update resolves an issue where users with limited inventory access experienced an error when validating recurring product deliveries. The fix ensures the system correctly retrieves necessary invoice information, preventing access restrictions that were blocking the validation process. This improves the reliability of recurring subscription deliveries.
Original PR description
When a user that only has inventory access right validate a delivery that has an recurring product it will trigger an access right error. Steps to reproduce: ------------------- * Install sales,…
When a user that only has inventory access right validate a delivery that has an recurring product it will trigger an access right error. Steps to reproduce: ------------------- * Install sales, inventory, subscription, * Create a subscription product * Create and validate a sale order with this product and a recurring plan * Connect to Odoo with an user that only has inventory user right * Validate the delivery -> Access Error Observation: ------------- When we validate the delivery,we call button_validate that will call [_action_done](https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock/models/stock_picking.py#L1427) During this we try retrieve invoices information [here](https://github.com/odoo/enterprise/commit/b07b1c47c97bb6d6da9fa61dacb5cba66aff2a16#diff-dbf7b40a6942fbcc81ebc4c3009a8a37a5a620cffac74889bd0ff2bccd52b1e3R30-R36). The issue is that this user doesn't have access right to several records: * sol.order_id.invoice_ids -> sale.order.invoice_ids * sol.order_id.last_invoice_date -> sale.subscription.plan opw-5869446 Forward-Port-Of: odoo/enterprise#106623
This update resolves an issue where users were encountering an error when editing reconciled invoice lines within the bank statement reconciliation process. The fix initializes necessary variables to prevent a runtime error, ensuring users can successfully adjust reconciled amounts and maintain accurate bank statement records.
Original PR description
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting`…
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting` module. - Create an `invoice` with an `invoice line` having an amount greater than zero. - `Confirm` the invoice. - Go to the `Bank journal` and create a `statement line` with the same amount as the invoice. - Click `Reconcile` on that `statement line` and select the newly `created invoice line`. - Click the `pencil icon` to edit the line, enter a `positive amount` in the Balance field, and save. `UnboundLocalError: local variable 'original_base_lines' referenced before assignment` The error occurs because, when a specific condition [1] becomes true, the variables original_base_lines and original_tax_lines are expected to be defined. However, if reconciled_lines_ids is present in move_line_to_edit, these variables are never initialized and are later referenced, causing the UnboundLocalError [2]. This commit ensures that original_base_lines and original_tax_lines are initialized to None, which prevents the error. [1]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1393-L1394 [2]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1410-L1411 sentry-7189027839 Forward-Port-Of: odoo/enterprise#104432
This update corrects a bug that prevented invoices with product lines having a price of zero in the Mexican (mx) tax module from being saved. The fix ensures that required tax object fields are correctly populated, resolving a critical issue for users creating invoices with zero-priced items. This improves invoice creation functionality for mx clients.
Original PR description
**PROBLEM** If you create an invoice, and add a line with a product with a price of 0, you cannot save the invoice. **STEP TO REPRODUCE** 1. On a mx company, create an invoice for a mx client. 2. Add a line with a product with a price of 0. 3. Try saving the invoice, it will fails. **CAUSE** Field `l10n_mx_edi_tax_object` is required on invoice line with mx company. However, for lines with a price of 0, it is not set by `_compute_l10n_mx_edi_tax_object` because `_l10n_mx_edi_cfdi_invoice_line_ids()` filters them. opw-5402045 Forward-Port-Of: odoo/enterprise#103981
This update corrects an issue where rental order display names were failing due to incorrect data being used. The fix ensures consistent and accurate partner name display by utilizing the `display_name` field, preventing errors when contact names are missing.
Original PR description
Steps to produce: --- - Install `sale_renting` and `contacts` modules. - Go to contact and open `yourcompany` record. - Add a new contact of type Delivery and save (leave the name empty). - Go to…
Steps to produce: --- - Install `sale_renting` and `contacts` modules. - Go to contact and open `yourcompany` record. - Add a new contact of type Delivery and save (leave the name empty). - Go to Rental > New Order. - Select YourCompany, Delivery as the customer. - Add a rental product and confirm the order. - Open the Schedule view. Traceback: --- `TypeError: sequence item 0: expected str instance, bool found`. Root cause: --- - At [1], the system tries to use the customer's name when computing the display name. However, in this case, the delivery contact has no name, resulting in a False value. This False value is then included in the description list, causing the TypeError when joining the sequence. Solution: --- - Use the partner's `display_name` instead of `name`. The `name` field can be `False` in some cases. The `display_name` field is a computed field that always provides a valid, formatted string by using fallback values such as the company name, parent name, or contact type. This ensures consistency and prevents errors [1] https://github.com/odoo/enterprise/blob/f5fea1d7b40e42b7bc1c323cc9613b1aa347da09/sale_renting/models/sale_order_line.py#L61 opw-5914084 --- Forward-Port-Of: odoo/enterprise#106827
This update resolves an issue where the version of the l10n_be_hr_payroll module was incorrectly referenced. This fix ensures accurate tracking and deployment of the payroll module, maintaining the stability and reliability of financial reporting within Odoo Enterprise. It's a routine maintenance update.
Original PR description
Forward-Port-Of: odoo/enterprise#107482
Documentation and clarification updates
This pull request updates the Adhoc Corporate Legal Agreement (CLA) membership list. This ensures Odoo's development team adheres to the required legal agreements for open-source contributions. The change is purely a formality and does not impact Odoo's functionality.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248286
5 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate a specific XML file (JPK KR PD) to meet legal obligations, avoiding potential penalties and ensuring continued software usability for accounting in Poland.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Resolved issues and error corrections
This update resolves an error that occurred when users attempted to edit reconciled bank statement lines. The fix initializes necessary variables to prevent a runtime error, ensuring the bank reconciliation process functions correctly. This improves stability and prevents data inconsistencies.
Original PR description
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting`…
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting` module. - Create an `invoice` with an `invoice line` having an amount greater than zero. - `Confirm` the invoice. - Go to the `Bank journal` and create a `statement line` with the same amount as the invoice. - Click `Reconcile` on that `statement line` and select the newly `created invoice line`. - Click the `pencil icon` to edit the line, enter a `positive amount` in the Balance field, and save. `UnboundLocalError: local variable 'original_base_lines' referenced before assignment` The error occurs because, when a specific condition [1] becomes true, the variables original_base_lines and original_tax_lines are expected to be defined. However, if reconciled_lines_ids is present in move_line_to_edit, these variables are never initialized and are later referenced, causing the UnboundLocalError [2]. This commit ensures that original_base_lines and original_tax_lines are initialized to None, which prevents the error. [1]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1393-L1394 [2]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1410-L1411 sentry-7189027839 Forward-Port-Of: odoo/enterprise#104432
This update fixes an issue where the activity menu in web_studio was incorrectly displaying all records for custom models, rather than just those associated with the current user. Now, clicking the activity menu will only show records with activities assigned to the user, improving the user experience and data accuracy.
Original PR description
After commit odoo/odoo@5c5fbc10b7024c7227f03e37897d421bba64df82 , actions spawned by the activities menu have their domain managed by dynamic <filter /> rather than a plain readonly domain. Before this commit, clicking on the activity menu to go to a custom model showed every record, not just ones with activities after this commit, only records with activities assigned to the current user are showed opw-5778806 Forward-Port-Of: odoo/enterprise#106622
This update adjusts the calculation of sickness relapse periods for the Belgian payroll module (l10n_be_hr_payroll). Starting January 1, 2026, the allowed relapse period between sick leaves will increase from 14 to 56 days, aligning with new Belgian tax regulations. This change ensures accurate payroll processing for employees in Belgium.
Original PR description
**Spec :-** Since 01/01/2026, the period between two sick time off to consider it as a relapse has been increased from 14 days to 56 days. **Implementation :-** . Update sickness relapse period from 14 to 56 days if the leave starts from 2026 . Add corresponding tests task-5476174 Forward-Port-Of: odoo/enterprise#104769
This update ensures that the preparation display in the backend accurately reflects changes when a POS order is cancelled or deleted. Specifically, related preparation orders and data are now properly removed, maintaining data consistency and a more accurate view of order history.
Original PR description
**In this commit:** Ensure the preparation display UI is updated when a POS order is cancelled or deleted from the backend. - On order cancellation, the preparation display is refreshed accordingly. - On order deletion, related preparation orders, lines, and states are removed via notify call. Task-5373116 Related: https://github.com/odoo/odoo/pull/240523
19 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate specific electronic reports, and this change enables the automatic creation of the required JPK KR PD files. Failure to comply could result in significant tax penalties.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Enhancements to existing features
This update ensures Odoo complies with new Polish tax reporting requirements set by the KAS. Starting in 2025, businesses will need to generate specific electronic reports, avoiding potential penalties and ensuring the software remains compliant for legal accounting in Poland. This change is critical for Polish users.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238374
Resolved issues and error corrections
This update fixes an issue where combo products were incorrectly calculating their total price, resulting in double-billing. The fix ensures that remaining combo amounts are accurately divided by the combo quantity, preventing inflated prices for zero-priced items. This ensures accurate pricing for combo orders.
Original PR description
Step to reproduce: - create two products with 0 price, A and B - create combo choice 'combo' with A and B, with max 2 items , free 2 items - create a combo product "test combo" with this combo choice, set price=40 - start pos and select this product - in combo product selector dialog, select same product 2 time and confirm Observation: - the total price is 80 (double then expected) in product screen Cause: - Remaining combo amount is assigned to the last line unit price. - For zero-price items, remaining amount equals combo price. - as `Total = qty × unit price`, as qty =2 it duplicates the combo price. Fix: - Since we assign unit price, divide remaining amount by combo qty. opw-5868831 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a previous issue where taxes related to GST, TDS, and TCS registration remained active even after the registration settings were disabled. Now, when a user disables these registrations, the associated taxes are automatically deactivated, ensuring accurate tax calculations and compliance. This improves the system's consistency and reduces potential errors.
Original PR description
Before this PR: - When enabling TDS, TCS, or GST registration from settings, related taxes are activated, but when disabling these settings, the taxes remain active. After this PR: - When disabling TDS, TCS, or GST registration, all related taxes are deactivated. task-5456351 Forward-Port-Of: odoo/odoo#242030
This update fixes an issue where the shipping weight for deliveries wasn't accurately calculated when products were placed into packages. The fix ensures that the total weight, including packaged items, is correctly computed, improving the accuracy of shipping costs and order fulfillment. This resolves a bug related to how the system handles product weights within packages.
Original PR description
Steps to reproduce: - Enable “Packaging” in Inventory settings. - Create a storable product “P1” with: - weight: 10 kg - Create a delivery picking: - Add one unit of P1 - Mark as “To Do” - Set…
Steps to reproduce:
- Enable “Packaging” in Inventory settings.
- Create a storable product “P1” with:
- weight: 10 kg
- Create a delivery picking:
- Add one unit of P1
- Mark as “To Do”
- Set quantity to 1 → the move becomes assigned and the picking weight is correctly computed to 10
- Click “Put in Pack” → a package is created with `shipping_weight = 0`, and the picking weight incorrectly computed to 0
Problem:
- `picking.shipping_weight` is computed as: `weight_bulk` + sum(`pack.shipping_weight or pack.weight`) https://github.com/odoo/odoo/blob/17.0/addons/stock_delivery/models/stock_picking.py#L72-L79
- Once the product is placed in a package:
- `weight_bulk` becomes 0 (because Total weight of products which are not in a package). https://github.com/odoo/odoo/blob/17.0/addons/stock_delivery/models/stock_picking.py#L96
- `pack.shipping_weight` is 0 on creation.
- The fallback `pack.weight` is 0 because its compute depends on the `picking_id` in context. Without this context, the compute uses only quants https://github.com/odoo/odoo/blob/f7c033eff7b7bc83d6d18fc5e4df320f43ae5021/addons/delivery/models/stock_quant_package.py#L11-L13
opw-5357843
Forward-Port-Of: odoo/odoo#245223
Forward-Port-Of: odoo/odoo#238917This update fixes a technical issue where certain elements with directives were incorrectly identified as translatable. This change ensures that only elements intended for translation are processed, improving the accuracy of our translation system and preventing potential translation errors. It addresses a previously missed directive, enhancing the overall quality of translated content.
Original PR description
Nodes with directives must not be included inside a translatable span. But the function `translatable` missed the directive `groups` (without `t-`), and the class `o_translate_inline` should only override the predicate about the element's tag. Forward-Port-Of: odoo/odoo#246354
This pull request fixes a problem where descriptions and product names were not consistently displayed on invoices during printing, particularly when importing factur-x e-invoices. The update ensures that the full invoice description is printed correctly, regardless of the input source, improving invoice accuracy and compliance.
Original PR description
**Issue 1** Steps to reproduce: - Create a new invoice - Add an invoice line, with just a description - Save - On the same line, add any product - Print Issue: Only the custom description will be visible on the line opw-5471809 --- **Issue 2** Steps to reproduce: - Import factur-x e-invoice - Print pdf Issue: Only product name will be printed, even if the invoice record include the complete description opw-5471809 Forward-Port-Of: odoo/odoo#248010
This update resolves a delay of 1 second when reading data from the Toledo scale. Previously, the system waited for a timeout. Now, it reads the scale data until the end of the response is reached, ensuring faster and more reliable data transmission. This improves the overall performance of the scale integration.
Original PR description
Before this commit, the `_get_raw_response` method would wait until the read timed out (1 second) before returning the response. After this commit, for the Toledo scale we instead read until we reach a `\r` character, which is at the end of the response. This eliminates the 1 second delay. Enterprise: https://github.com/odoo/enterprise/pull/107241 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248599 Forward-Port-Of: odoo/odoo#248413
This update fixes an issue where Italian company information (like VAT number and address) wasn't being correctly transferred when creating a company from an ecommerce order. This ensures accurate reporting and compliance for Italian businesses using Odoo, resolving a previous data discrepancy.
Original PR description
**STEP TO REPRODUCE** 1. Create a ecommerce order on a shop page of a italian company. 2. Goes to the checkout page, enter info (company_name, l10n_it_codice_fiscale, l10n_it_pa_index). 3. On the contact created, click on create company. 4. Notice l10n_it fields are not propagated to the company. opw-5477372 Forward-Port-Of: odoo/odoo#248317 Forward-Port-Of: odoo/odoo#246785
This update fixes an issue where the working time assigned to tasks wasn't correctly calculated when switching between companies, particularly when public holidays were involved. Now, the system accurately considers company-specific holidays and the time difference between task assignment and stage changes to determine the correct working time.
Original PR description
__ Fix after revert bf9729e997b15777a981ac258b0088107804fbe6 __ Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2…
__ Fix after revert bf9729e997b15777a981ac258b0088107804fbe6 __ Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2 days later in company A, then switch back to company B. In company B, we create a project and a task, and assign this task. The working time to assign will stay at 0. 1. Switch to company A and create a timeoff starting before today and ending later. 2. Switch back to company B. Create a project, a stage and a task. 3. Enable the debugger. 4. The field Working Time to Assign is invisible by default, so open studio, click on View, and check Show Invisible Elements. 5. Click on the tab Extra info and on the block Working time to assign. Uncheck Invisible. 6. Close studio and assign someone to the task. Make sure that you do this operation at a different time than the one recorded for the last stage change. The hours under Working Time to Assign should compute the difference between the last time the task got its stage changed and the time of assignation Nothing happens When computing the working time to assign, we also take into consideration leaves: if this happened during public holidays, we consider that it took no working time to get assigned. However, when a holiday is set in another company, the Working Time to Assign duration will be impacted, as the domain to retrieve the corresponding leaves is the following: https://github.com/odoo/odoo/blob/c7e965a61b7ce856c2daa8e2574cf4c60caf7a20/addons/resource/models/resource_calendar.py#L537-L546 The company isn't taken into account in the domain, applying the holiday for every company. __ opw-5222883 Forward-Port-Of: odoo/odoo#246994
This update resolves an issue where importing EDI invoices with products restricted to different companies would fail. The fix ensures products are correctly identified during import, preventing 'Incompatible company' errors and improving the reliability of invoice processing within multi-company Odoo environments.
Original PR description
In a multi-company environment, importing an EDI invoice could fail if a line contains a product restricted to another company. The error "Incompatible company on records" was raised because company consistency rules were applied.
Example steps to reproduce:
- Create two Italian companies, A and B
- In company A, create a product with default code or barcode "TEST"
- This can also occur using the barcode and the “Vendor Product code” from the Purchase supplier.
- Restrict this product to company A
- Create an EDI invoice in company A with this product for company B as customer
- Import the invoice in company B, which would fail
This fix adds a search domain to correctly find products during import
opw-5496912
Forward-Port-Of: odoo/odoo#248623
Forward-Port-Of: odoo/odoo#248149This update resolves an issue where purchase receipts for kits with different unit of measure categories would fail due to a calculation error. The fix ensures accurate quantity calculations for kit products during currency conversions, allowing receipts to post correctly.
Original PR description
Steps to reproduce ------------------ 1. Enable Units of Measure and Automatic Valuation. 2. Create: Product KIT, stockable, UoM category Unit, UoM = Units. BoM for KIT with at least one component…
Steps to reproduce
------------------
1. Enable Units of Measure and Automatic Valuation.
2. Create:
Product KIT, stockable, UoM category Unit, UoM = Units.
BoM for KIT with at least one component whose UoM is in a different
category (e.g. m from Length).
3. Go to the product's category and set the Costing Method to Average
Cost (AVCO) and the Inventory Valuation to Automated.
4. Create a PO for KIT in a currency different from the company currency.
5. Confirm the PO and validate the receipt.
Issue
-----
Validating the receipt raises:
> The unit of measure m defined on the order line doesn't belong to the
> same category as the unit of measure kit defined on the product…
If you keep the PO currency equal to the company currency, the same kit
and BoM work and the receipt posts correctly.
Cause of the issue
------------------
Validating the receipt will call the `_action_done` of stock.move's and generate the related accounting entries. During this call and the currency of the PO is different from the company currency the `_generate_valuation_lines_data` will call the `_get_currency_convert_date` method:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L134-L140
This call will in turn call the `_get_qty_received_without_self`:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L121-L122
which was not written to handle kit products since it assumes that the product of the PO is the same as the one of the related move:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L102-L108
Fix
---
The qty_received is relevant to the _get_currency_convert_date as the method compares the qty_invoiced with the qty_received to determine whether to use the Invoice Date (when qty_invoiced > qty_received) or the Receipt Date.
https://github.com/odoo/odoo/blob/888e086dc6c7823b07993e90f70e2849e988fa7a/addons/purchase_stock/models/stock_move.py#L122-L126
For kits, `qty_received` must be calculated by aggregating component
moves to accurately determine this status. Since the standard logic
crashes due to UoM mismatch, the override in `purchase_mrp` is
necessary to provide the correct quantity for this date selection.
opw-5030761
Forward-Port-Of: odoo/odoo#248318
Forward-Port-Of: odoo/odoo#236276This update resolves an issue where users could trigger a system error when entering non-numeric values in the serial/lot number field. By changing the field type to 'number' and adding a keypress handler, the system now correctly validates input, ensuring smooth serial number generation and preventing disruptions to the stock management process.
Original PR description
Issue before this commit: ========================= When generating serial/lot numbers, if a user enters a `string value (e.g. "dhha" or ".")` in the `Number of SN` field of the Generate Serials/Lots…
Issue before this commit: ========================= When generating serial/lot numbers, if a user enters a `string value (e.g. "dhha" or ".")` in the `Number of SN` field of the Generate Serials/Lots wizard, a traceback is raised: `InvalidNumberError: "dhha" is not a correct number`. Steps to Reproduce: ========================= - Install the "stock" module. - Create a receipt for a serial-tracked product. - Open the detailed operations. - Click on "Generate Serials/Lots". - Enter a string value in the "Number of SN" field. Result: A traceback is raised with: InvalidNumberError: `"dhha" is not a correct number.` Cause of the issue: ========================= The [next_serial_count input](https://github.com/odoo/odoo/blob/17.0/addons/stock/static/src/widgets/lots_dialog.xml#L36) field is defined as type="text", which allows users to enter string values, even though the field represents a numeric count. The value is later processed using [parseInteger](https://github.com/odoo/odoo/blob/17.0/addons/stock/static/src/widgets/generate_serial.js#L33), which throws an error when the input is not a valid integer string, [Here](https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/fields/parsers.js#L139). With This Commit: ========================= The input type is changed from type="text" to type="number", ensuring that only numeric values can be entered. This prevents invalid input and avoids the traceback when generating serial or lot numbers. Additionally, a `t-on-keydown` handler is added to prevent entering a `dot (.)`, ensuring that only integer values are allowed. Forward-Port-Of: odoo/odoo#248529 Forward-Port-Of: odoo/odoo#248221
This update fixes an issue where website controllers could be incorrectly linked to irrelevant model types, leading to potential errors. By restricting controller bindings to concrete models, we've enhanced the stability and performance of the Odoo website. This change ensures data integrity and a more reliable user experience.
Original PR description
Before this commit, a website_controller_page could be bound to any sort of model. For some of them this was irrelevant or plain wrong: - transient models: they are not pointing to anything relevant business wise - abstract: they cannot even have records, and most of them are mixin - _auto = False: Those are models with a table which is a custom one. The heuristics here is to say that records are not "real" ones. Also, most of these tables are sqlViews or something similar Business wise there were errors because of this, so this commit introduces a constraint that forbids the above use cases. sentry-6842596566 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#246115
This update fixes an issue where product names and prices in the Arabic version of the Product Catalog were misaligned. The change uses a specific styling technique to ensure text aligns correctly in RTL (right-to-left) layouts, providing a better user experience for Arabic-speaking customers. This resolves a visual inconsistency and improves readability.
Original PR description
Steps to reproduce: 1. Switch the user language to Arabic. 2. Open the Product Catalog from a Sales/Purchase order. 3. Observe that the Name, Internal Reference, and Price collapse into a single line with inconsistent ordering due to unmanaged horizontal inline flow. Cause: The use of generic span elements inside a portal encourages horizontal inline flow that fails to mirror correctly in RTL without explicit flex instructions. Solution: Update the Order Line portal template to use 'd-inline-flex' and 'align-items-baseline'. This treats the price and reference as a logical unit that respects the global direction and ensures consistent text alignment in both English and Arabic. opw-5867434
This update resolves a minor issue in the HTML editor that could occasionally cause errors. The fix uses a technique called 'optional chaining' to safely handle situations where the previous sibling element might not exist, preventing the error and improving overall stability. This ensures a smoother experience for users working with the editor.
Original PR description
Before this commit: in rectifySelection, the focusTarget can be null and causing an error when calling the previousSibling After this commit: now we do an optional chaining(?.) on previousSibling task-5481248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248595
This update fixes a discrepancy in how the 'Meses' month attribute is populated for global invoices and POS orders. Previously, the month was incorrectly tied to the invoice creation date, not the order date. This ensures accurate reporting and compliance with Mexican tax regulations.
Original PR description
**PROBLEM** In accounting, if you create a global invoice with an invoice, the attribute `Meses` will be the month of the invoice date. In POS, if you do the same with an order, the attribute `Meses` will be equal to the month the day we create the global invoice, instead of the month of the order date. This is wrong. **STEP TO REPRODUCE** 1. Have an order from the month before (not sure how to do this on a runbot). 2. Create a global invoice. 3. Check the generated xml, and notice the month is wrong. opw-5381607 Forward-Port-Of: odoo/enterprise#106856
This update corrects a problem where automatic bank statement data from Codabox contained extra spaces in the payment reference field. By removing these spaces, the system now correctly processes and interprets payment information, ensuring accurate accounting records. This improves data reliability and avoids potential errors.
Original PR description
Before this commit, when we do the creation of the automatic reco models, it was possible that the payment ref ended with a lot of empty spaces. To avoid that, we now strip the payment ref before the creation of the reco model. Data coming from codabox where wrongly formatted since the payment ref could have space at the end or the start and even in the middle. By using a split join we solve that issue. task-5926548
This update resolves a minor issue related to the calculation of scale certificates for European VAT compliance. It reflects a recent fix implemented in the main Odoo project, ensuring accurate reporting. This change improves the reliability of our EU VAT reporting.
Original PR description
This commit simply updates the expected scale checksum after the fix in the community PR odoo/odoo#248413. Forward-Port-Of: odoo/enterprise#107390 Forward-Port-Of: odoo/enterprise#107241
2 changes
Resolved issues and error corrections
This update fixes a bug where tags and followers weren't being carried over when renewing subscriptions. Now, tags added to a subscription will be reflected on the renewed subscription, and followers will be correctly associated. This ensures consistent tracking and management of subscriptions.
Original PR description
This commit is a backport of https://github.com/odoo/enterprise/commit/245759ef82250a8eb32f38853e5c5f6aac841823 and https://github.com/odoo/enterprise/commit/a35d64133cc3c598c66fcadc2310b0118a678424.…
This commit is a backport of https://github.com/odoo/enterprise/commit/245759ef82250a8eb32f38853e5c5f6aac841823 and https://github.com/odoo/enterprise/commit/a35d64133cc3c598c66fcadc2310b0118a678424.
## Issue
When renewing a subscription, the tags and followers are not copied from the original subscription to the new one.
## Steps to reproduce
1. Install *Subscriptions* (`sale_subscription`)
2. Create a confirm a subscription S
- Any *Customer*
- Any *Recurring Plan*
- Any Product
- In the *Other Info* tab, add a tag T
3. There should be two followers on the subscription S: the creator of the subscription, and the customer. If it is not the case, add at least one follower.
3. Create and confirm an invoice for subscription S
4. Back on the subscription S, click *Renew*
5. **The tag T is missing on the new subscription. Also, the followers were not copied from subscription S.**
## Cause & Fix
### Tags
In `SaleOrder._prepare_upsell_renew_order_values`, tags are not part of the `values` generated when renewing a subscription:
https://github.com/odoo/enterprise/blob/a650fb74fd79965a6f0e441e61d8977c599057e6/sale_subscription/models/sale_order.py#L1149-L1171
They were added by https://github.com/odoo/enterprise/commit/245759ef82250a8eb32f38853e5c5f6aac841823:
https://github.com/odoo/enterprise/blob/245759ef82250a8eb32f38853e5c5f6aac841823/sale_subscription/models/sale_order.py#L1173-L1175
### Followers
Similarly to the tags, followers were not added/subscribed to the subscription when generating the renewed subscription. This was fixed by https://github.com/odoo/enterprise/commit/a35d64133cc3c598c66fcadc2310b0118a678424, by creating and calling the `_subscribe_followers_to_new_order(order)` after creating the new subscription (`order`):
https://github.com/odoo/enterprise/blob/a35d64133cc3c598c66fcadc2310b0118a678424/sale_subscription/models/sale_order.py#L956-L958
https://github.com/odoo/enterprise/blob/a35d64133cc3c598c66fcadc2310b0118a678424/sale_subscription/models/sale_order.py#L2147-L2157
opw-5478071
Forward-Port-Of: odoo/enterprise#107230This update fixes an issue where the month displayed on global invoices linked to POS orders was incorrectly reflecting the invoice creation date instead of the order date. This ensures accurate reporting and compliance with Mexican tax regulations. The fix corrects the 'Meses' attribute in the generated XML.
Original PR description
**PROBLEM** In accounting, if you create a global invoice with an invoice, the attribute `Meses` will be the month of the invoice date. In POS, if you do the same with an order, the attribute `Meses` will be equal to the month the day we create the global invoice, instead of the month of the order date. This is wrong. **STEP TO REPRODUCE** 1. Have an order from the month before (not sure how to do this on a runbot). 2. Create a global invoice. 3. Check the generated xml, and notice the month is wrong. opw-5381607 Forward-Port-Of: odoo/enterprise#106856
6 changes
Enhancements to existing features
This update combines KMD and KMD INF reports into a single, streamlined report, automating the generation of Intrastat and EC Sales List tax returns. This simplifies VAT reporting for Estonian businesses and provides a new XML export option for the VAT Report Annex.
Original PR description
*: intrastate, reports Current behavior before PR: - KMD Report & VAT Report Annex (KMD INF Part A & Part B) were separate reports. - Intrastat and EC Sales List tax returns were not auto-generated.…
*: intrastate, reports
Current behavior before PR:
- KMD Report & VAT Report Annex (KMD INF Part A & Part B) were separate reports.
- Intrastat and EC Sales List tax returns were not auto-generated.
- The VAT Report Annex (KMD INF Part A & Part B) had no XML export option.
Desired behavior after PR is merged:
- KMD Report and VAT Report Annex (KMD INF Part A & Part B) are now merged into single combined report (`kmd_inf_tax_report`). Each report appears as a section within the merged report.
- Intrastat and EC Sales List reports are now automatically generated when a fiscal is defined.
- Added an option to export the VAT Report Annex (KMD INF Part A & Part B) in XML format.
Changes implemented:
- Added a new combined report (`kmd_inf_tax_report`) that includes the KMD Report as a section. When the `l10n_ee_reports` module is installed, it also includes KMD INF (Part A & Part B) as additional sections.
- Enabled auto-generation for Intrastat and EC Sales List reports by setting `auto_generate=True` in their tax return definitions.
- Updated the KMD Report tax return to use the new combined report (`kmd_inf_tax_report`) using the `report_id` field.
- Updated the VAT Report Annex (KMD INF) in `l10n_ee_reports` to support the new combined report (`kmd_inf_tax_report`) which also adds KMD INF (Part A & Part B) reports in the `section_report_ids`.
- Added `Export to XML` button in the combined tax report (kmd_inf_tax_report).
- Added `export_to_xml` method that calls the correct export function for the selected report section. If no valid section is selected, it returns None.
- Added helper methods:
- `export_tax_to_xml`,
- `export_kmd_inf_part_a_to_xml`,
- `export_kmd_inf_part_b_to_xml`
- Added dedicated QWeb templates (`kmd_inf_part_a_xml`, `kmd_inf_part_b_xml`).
related pr: odoo/odoo#233791
task-5136165
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update enhances the portal's chat functionality by allowing the server to better understand the origin of requests. It enables the system to apply specific limitations needed for portal chatter, preparing for a future migration to the mail fetch route. The change also streamlines internal code for improved efficiency.
Original PR description
This is a preparation change for replacing the portal chatter fetch route with the mail fetch route. Fetch methods can now receive extra fetch params from the caller components if needed, making it possible to inform the server when a request originates from the portal. This allows the server to apply specific limitations required for portal chatter. The change also involves a minor refactoring of the `useMessageScrolling` hook, which makes the thread built-in and removes the need to pass it as a parameter in every call. Extra fetch params could also be passed through another callback in the same way. [Community PR](https://github.com/odoo/odoo/pull/248208)
This update adjusts the layout of the Gantt chart by moving the side panel to the right. This change enhances the user experience by providing more screen real estate for the chart itself and improving visual clarity. It's a minor improvement focused on usability.
Original PR description
task-5937290
Resolved issues and error corrections
This update resolves an issue where global discounts on sales orders using Avalara Brazil weren't correctly calculating tax totals. The change improves the accuracy of discount application by cleaning up tax calculations before applying the discount, ensuring the discount is applied to the correct price unit.
Original PR description
This commit df08643 introduces support for global discounts for tax calculation at Avalara Brazil. When using global discounts from 'sale.order.discount' wizard, the lines weren't adding up to the amount specified. This new commit targets to fix that by cleaning up taxes before applying a discount, this way to have the target amount as price unit and avoid to depend on the taxes. target: master task-3452935
This update corrects an access error that prevented users with limited inventory permissions from validating recurring product deliveries. The issue stemmed from a lack of necessary access rights to retrieve invoice information, specifically related to subscription plans. This fix ensures all users can properly validate recurring deliveries.
Original PR description
When a user that only has inventory access right validate a delivery that has an recurring product it will trigger an access right error. Steps to reproduce: ------------------- * Install sales,…
When a user that only has inventory access right validate a delivery that has an recurring product it will trigger an access right error. Steps to reproduce: ------------------- * Install sales, inventory, subscription, * Create a subscription product * Create and validate a sale order with this product and a recurring plan * Connect to Odoo with an user that only has inventory user right * Validate the delivery -> Access Error Observation: ------------- When we validate the delivery,we call button_validate that will call [_action_done](https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock/models/stock_picking.py#L1427) During this we try retrieve invoices information [here](https://github.com/odoo/enterprise/commit/b07b1c47c97bb6d6da9fa61dacb5cba66aff2a16#diff-dbf7b40a6942fbcc81ebc4c3009a8a37a5a620cffac74889bd0ff2bccd52b1e3R30-R36). The issue is that this user doesn't have access right to several records: * sol.order_id.invoice_ids -> sale.order.invoice_ids * sol.order_id.last_invoice_date -> sale.subscription.plan opw-5869446 Forward-Port-Of: odoo/enterprise#106623
This update corrects a calculation error in how mobility budgets are determined for employee contracts, specifically in Belgium. The change implements an iterative method to ensure budgets align with legal minimums, maximums, and wage rates, leading to more accurate and compliant payroll processing.
Original PR description
We implement in this PR the iterative computation method of mobility budget. Given an employer cost, we find the wage and mobility budget such that mobility budget amount respect legal constraints of minimum and maximum and rate with respect to wage Forward-Port-Of: odoo/enterprise#106754
8 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish tax reporting requirements (JPK KR PD) mandated by the tax authority. Starting in 2025, businesses will need to generate this specific XML file to avoid penalties and ensure continued legal operation. This is a critical update for Polish clients.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 Forward-Port-Of: odoo/enterprise#100345
Enhancements to existing features
This update enhances the payroll dashboard for Odoo users in Switzerland by addressing specific requirements. It disables irrelevant generic warnings and introduces new warnings to alert users to missing or incorrect data within Swiss employee and company records. This ensures accurate payroll processing and compliance in the Swiss market.
Original PR description
This PR improves the payroll dashboard for Switzerland by: 1- Disabling the generic warnings as they are currently irrelevant to Switzerland. 2- Add new warnings for the missing/invalidity of some needed fields in swiss employees and companies. Task: 5856084
Resolved issues and error corrections
This update enables archiving of Indian Goods and Services Tax (GST) returns regardless of their state, aligning with Indian regulatory requirements. The change includes a technical update to improve flexibility and prevent further processing of archived returns, ensuring compliance and streamlining the accounting workflow.
Original PR description
Previously, the Archive action was only available in the `new` state. However, the Indian GST workflow requires returns to be archivable in any state. This commit: - Introduces a computed boolean to control the visibility of the Archive action, making the behavior extensible for localizations. - Updates the Indian localization to allow archiving in all states. - Hides functional action buttons on archived GSTR returns to prevent further processing. task-5247758
This update resolves an issue where users encountered an error when editing reconciled invoice lines in the Bank journal. The fix initializes necessary variables to avoid a runtime error, ensuring users can successfully adjust reconciled amounts without disruption.
Original PR description
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting`…
Currently, an error occurs when user edits a reconciled line. **Steps to Reproduce([Video](https://drive.google.com/file/d/18dSAsZCl---wfCkMBfyo9LviTqgq3qpK/view)):** - Install the `Accounting` module. - Create an `invoice` with an `invoice line` having an amount greater than zero. - `Confirm` the invoice. - Go to the `Bank journal` and create a `statement line` with the same amount as the invoice. - Click `Reconcile` on that `statement line` and select the newly `created invoice line`. - Click the `pencil icon` to edit the line, enter a `positive amount` in the Balance field, and save. `UnboundLocalError: local variable 'original_base_lines' referenced before assignment` The error occurs because, when a specific condition [1] becomes true, the variables original_base_lines and original_tax_lines are expected to be defined. However, if reconciled_lines_ids is present in move_line_to_edit, these variables are never initialized and are later referenced, causing the UnboundLocalError [2]. This commit ensures that original_base_lines and original_tax_lines are initialized to None, which prevents the error. [1]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1393-L1394 [2]- https://github.com/odoo/enterprise/blob/fa4bbc20f25ec12c609ebbf37885e48900619de5/account_accountant/models/account_bank_statement.py#L1410-L1411 sentry-7189027839 Forward-Port-Of: odoo/enterprise#104432
This update resolves a bug that prevented users from saving invoices in Mexico when a line item had a price of zero. The fix ensures that required tax object fields are correctly populated for all invoice lines, regardless of price, to comply with Mexican tax regulations. This ensures invoices can be properly processed and submitted.
Original PR description
**PROBLEM** If you create an invoice, and add a line with a product with a price of 0, you cannot save the invoice. **STEP TO REPRODUCE** 1. On a mx company, create an invoice for a mx client. 2. Add a line with a product with a price of 0. 3. Try saving the invoice, it will fails. **CAUSE** Field `l10n_mx_edi_tax_object` is required on invoice line with mx company. However, for lines with a price of 0, it is not set by `_compute_l10n_mx_edi_tax_object` because `_l10n_mx_edi_cfdi_invoice_line_ids()` filters them. opw-5402045 Forward-Port-Of: odoo/enterprise#103981
This update resolves an issue where the Employer File Number field was hidden in the payroll settings after installing the l10n_hk_hr_payroll_empf module. The fix removes the setting that previously obscured this important data, ensuring it's now readily accessible for payroll processing.
Original PR description
Issue: - Employer File Number was hidden in Payroll settings after installing the l10n_hk_hr_payroll_empf module. Fix: - Removed the setting that hid the Employer File Number field. task-5476454
This update fixes a translation error in the ARCA (AFIP) error message displayed when validating Argentine electronic invoices. The message has been corrected to accurately reflect the issue: that the invoice date cannot be before the last validated invoice. This ensures proper invoice processing and compliance with Argentine tax regulations.
Original PR description
WSFE error 10016-1 must be "The invoice date cannot be before the last invoice validated in AFIP." instead of "The invoice date cannot be after the last invoice validated in AFIP". Steps to reproduce: validate argentinean customer electronic invoice with invoice date before than the last invoice date validated in ARCA. Task Adhoc side: 44290 Task latam: 1376 Forward-Port-Of: odoo/enterprise#106305
This update corrects a bug where the activity menu in web_studio was displaying all records for custom models, regardless of whether they had associated activities. Now, the menu only shows records with activities assigned to the current user, ensuring a more focused and relevant experience. This improves data efficiency and user experience.
Original PR description
After commit odoo/odoo@5c5fbc10b7024c7227f03e37897d421bba64df82 , actions spawned by the activities menu have their domain managed by dynamic <filter /> rather than a plain readonly domain. Before this commit, clicking on the activity menu to go to a custom model showed every record, not just ones with activities after this commit, only records with activities assigned to the current user are showed opw-5778806 Forward-Port-Of: odoo/enterprise#106622
17 changes
New functionality added to Odoo
This update ensures Odoo Enterprise complies with new Polish electronic tax reporting requirements mandated by the KAS. Starting in 2025, businesses will need to generate specific XML reports, and this change enables the creation of the required JPK KR PD file. Failure to comply could result in significant tax penalties.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281
Enhancements to existing features
This update ensures Odoo complies with new Polish tax reporting requirements set by the KAS. Starting in 2025, businesses will need to generate specific electronic reports, and this change prepares Odoo to meet these legal obligations and avoid potential penalties. It’s a critical update for Polish users.
Original PR description
Ensure compliance with the new electronic reporting obligations imposed by the Polish National Revenue Administration (KAS). This takes effect starting in 2025 for large enterprises, followed by SMEs with a one-year delay. Local software providers (such as Comarch or InsERT) will natively integrate this standard; failing to do so would expose users to severe tax penalties, rendering the software de facto unusable for legal accounting in Poland Enable the generation of the JPK_KR_PD file in the strict XML format mandated by the Polish Ministry of Finance. task-5163281 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the integration with fiskaly for accurate VAT export mapping, addressing previous performance issues and improving data accuracy. It includes fixes for tax calculations and order processing, ensuring reliable reporting for German POS operations. This change improves the overall reliability and compliance of the POS system.
Original PR description
*: pos, pos_cert In this commit: ------------------ - The transactions were shown to be processed within 0-1 seconds as we were used to call start and finish transaction calls on validation so in the case of retails it won't give actual data of start and end time so we need to improve this and called now for `start transaction` when first orderline added to a new order, calling `cancelled` if the order is deleted or all the orderlines are removed manually, and `finished` on validation of the order. - we have also now handle correct tax mapping by backporting pr: https://github.com/odoo/enterprise/pull/83300 and many other business cases are handled. task: 5184287
Resolved issues and error corrections
This update resolves an issue where generating lots on picking receipts would fail when users entered non-numeric values (like letters) for quantity. The fix ensures that the system handles invalid input gracefully, preventing errors and allowing users to correctly generate lots. This improves the reliability of the stock management process.
Original PR description
Currently, an error occurs when user tries to generate lots on a picking receipt for a product that is tracked by lots. Steps to replicate: - Install `stock` and create a product `test` tracked `by…
Currently, an error occurs when user tries to generate lots on a picking receipt for a product that is tracked by lots.
Steps to replicate:
- Install `stock` and create a product `test` tracked `by lots`.
- Open Inventory > Operation > Receipts , create a new one with product `test` and quantity 3.
- Open the form view of the stock move for `test` using the `view` button.
- Click `Generate Serials/Lots` and type `a` in `Quantity received` and click generate. (Error-1 will occur.)
- Click `Generate Serials/Lots` and type `a` in `Quantity per lot` and click generate. (Error-2 will occur.)
Error-1 :
```
File '/home/odoo/odoo18/community/addons/stock/models/stock_move.py', line 1055, in generate_lot_qty
line_count = int(quantity // qty_per_lot)
~~~~~~~~~^^~~~~~~~~~~~~
TypeError: unsupported operand type(s) for //: 'NoneType' and 'int'
```
Error-2 :
```
File '/home/odoo/odoo18/community/addons/stock/models/stock_move.py', line 1053, in generate_lot_qty
if qty_per_lot <= 0:
^^^^^^^^^^^^^^^^
TypeError: '<=' not supported between instances of 'NoneType' and 'int'
```
Cause:
- As the user typed in alphabets the [parsefloat] returns `NaN` which will be translated to `None` python side.
- As quantity is received as None the [line1] raises Error-1.
- As qty_per_lot is recieved as None the [line2] raises Error-2.
Solution:
- Raised Usererror when quantity received or quantity per lot is either negative or not a number.
[parsefloat]: https://github.com/odoo/odoo/blob/2da791df55762ae4dc1c06d2a43fad25b09dc11b/addons/stock/static/src/widgets/generate_serial.js#L50-L51
[line1]: https://github.com/odoo/odoo/blob/2da791df55762ae4dc1c06d2a43fad25b09dc11b/addons/stock/models/stock_move.py#L1001
[line2]: https://github.com/odoo/odoo/blob/2da791df55762ae4dc1c06d2a43fad25b09dc11b/addons/stock/models/stock_move.py#L999
related-sentry-7254849206
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an inconsistency in how stock availability is calculated for online shopping carts. Previously, a duplicate process was causing inaccurate stock counts, leading to potential issues with order fulfillment. Now, the system correctly utilizes the standard stock availability calculation, ensuring accurate inventory information for customers.
Original PR description
**Description of the issue:** _get_cart_and_free_qty duplicates inline the same logic already provided by _get_product_available_qty, bypassing the intended extension point. **Current behavior:**…
**Description of the issue:**
_get_cart_and_free_qty duplicates inline the same logic already provided by _get_product_available_qty, bypassing the intended extension point.
**Current behavior:**
_all_product_available delegates to _get_product_available_qty, but _get_cart_and_free_qty calls free_qty directly, causing inconsistent stock availability results within the same cart flow.
**Desired behavior:**
_get_cart_and_free_qty delegates to _get_product_available_qty, making it the single extension point for all stock availability queries in the cart.
@tecnativa TT60862
@carlosdauden @pedrobaeza
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where loyalty points weren't correctly reflected when opening orders in trusted POS systems. The fix updates the loyalty ticket screen to automatically apply rewards after loading an order, ensuring accurate point tracking across all POS locations. This improves the customer experience and data accuracy.
Original PR description
Step to reproduce: - Create a loyalty program for a specific product as for 1 $ spent gets 1 point - Have a trusted pos for our main shop (both pos should have each other as trusted) - Create an order from the main pos , select a partner (notice we get LPs) - save the order - Open the order in the trusted pos - we do not see the loyalty points Cause: - currently, when loading a order in trusted pos, there is no trigger to update rewards for selected order Fix: - the ticket screen in loyalty has been patched to update rewards after loading a order opw-5412744 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug in the Point of Sale system where kit products (phantom BOMs) incorrectly prompted for lot/serial numbers. Now, stock movements for kit products are handled correctly based on their components, eliminating the unnecessary popup and ensuring accurate inventory tracking. This improves the user experience when selling kits.
Original PR description
Selling a kit product (phantom BOM) that was tracked by lots in the Point of Sale incorrectly opened the lot/serial popup for the kit line. Only the kit's components should drive stock moves and…
Selling a kit product (phantom BOM) that was tracked by lots in the Point of Sale incorrectly opened the lot/serial popup for the kit line. Only the kit's components should drive stock moves and lots; the kit product itself must not require a lot on the order line. Steps to reproduce: ------------------- * Create a product "Kit" with tracking = By Lots. * Create a phantom BOM (type Kit) for that product with a component that is also tracked by lots; add stock and a lot for the component. * Open a POS session and add the kit product to the order. > Observation: The Lot/Serial Number(s) Required popup appears for the kit product. After payment, stock moves are correctly created for the components (and their lots), so the popup on the kit line is wrong. Why the fix: ------------ POS was using product.tracking only when deciding to show the lot popup, and did not treat phantom-kit products differently. With pos_mrp, stock moves for a kit line come from the BOM components, not from the kit product, so the frontend must not ask for a lot on the kit line. We add a computed flag pos_has_phantom_bom on product.product in pos_mrp and make isTracked() return false when that flag is set so the lot popup is skipped for kit products. opw-5917964
This update resolves an issue where applying multiple gift cards from the same program caused an infinite page reload during checkout. The fix addresses a discrepancy in how discount lines are handled, specifically separating logic for percent and per-point rewards to ensure accurate synchronization and a smoother checkout experience. This improves the reliability of gift card usage.
Original PR description
### Issue: Applying multi gift card from the same program results in an infinite reload cycle. #### Steps to reproduce: 1- Create a gift card program and generate two gift cards. 2- In eCommerce add…
### Issue: Applying multi gift card from the same program results in an infinite reload cycle. #### Steps to reproduce: 1- Create a gift card program and generate two gift cards. 2- In eCommerce add a deliverable product to cart. 3- Open cart and add both gift card codes. 4- Click on checkout to navigate to delivery step. The page is going to keep refreshing. ### Cause: The reload is supposed to sync the discount lines in the back-end with the discount lines displayed during checkout. If the number of lines don't match, a reload is triggered.: https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/website_sale_loyalty/static/src/js/checkout.js#L22-L24 After the fix #191132, discount lines are grouped by `reward_id`. This is done because in the back-end, by applying a single percent discount, separate lines are created per product lines with different taxes, while in front-end there is still single line. However, that fix doesn't consider that a SO might have multiple lines of the same reward: ewallet, gift_card ### Fix: This can be fixed by separating logic of groupable lines which are the lines with `percent` mode, with `per-point` mode lines. Discount is the only mode that might be added to multiple lines separately, keeping #191132 fix, and `per-point` is the only mode that might be applied multiple times per reward (in ewallet and gift_card). opw-5485912
This update fixes an issue where multiple packages being returned through a delivery process were incorrectly treated as a single shipment. Now, the system accurately recognizes and manages multiple incoming shipments during a return-re-delivery flow, ensuring accurate tracking and labeling. This improves the efficiency of our delivery operations.
Original PR description
Issue ----- When doing delivery -> return -> re-delivery, only one label is received even when there are mutliple packages to be "re-delivered". Steps to reproduce ----- - Create a UPS delivery -…
Issue ----- When doing delivery -> return -> re-delivery, only one label is received even when there are mutliple packages to be "re-delivered". Steps to reproduce ----- - Create a UPS delivery - Multiple packages - Validate transfer - Return - Validate IN - Return again - Add the UPS under the "additional info" tab - Ensure still multiple packages - Validate OUT Cause ----- When preparing the shipping data, we go through https://github.com/odoo/enterprise/blob/913e55abc4a9aa58509aa2a60d378fb552de554d/delivery_ups_rest/models/delivery_ups.py#L120-L121 which leads us to do https://github.com/odoo/odoo/blob/89733b0e4d1e9a57dd25f552db4e6330a6b14cdf/addons/stock_delivery/models/delivery_carrier.py#L142-L155 so we end up with a single package to send to the delivery service. The reason `is_return_picking` is true is because the compute method only checks for an existing move with an `origin_returned_move_id`. https://github.com/odoo/odoo/blob/89733b0e4d1e9a57dd25f552db4e6330a6b14cdf/addons/stock_delivery/models/stock_picking.py#L53-L58 From a delivery flow perspective, it doesn't make much sense to consider outgoing shipments as returns. ----- Ticket: opw-5866100
This update fixes an issue where Point of Sale session messages were consistently displayed in English, regardless of the user's selected language. The fix ensures that all cash-related messages within POS sessions are translated accurately based on the user's language preference, improving the user experience for international customers.
Original PR description
**Problem:** When opening or closing a POS session, chatter messages display untranslated English text regardless of the user's language setting. **Steps to reproduce:** 1. Set user language to any non-English language (e.g., Spanish) 2. Open a POS session and register cash in/out operations 3. Close the session 4. Check the chatter messages - labels appear in English **Current behavior:** Messages display in English: "Opening cash difference", "Opening cash expected", "Opening cash counted", "Closing difference", etc. **Expected behavior:** Messages should be translated according to the user's language setting. **Cause of the issue:** The hardcoded strings were not wrapped in the translation function `_()`, preventing them from being translated. **Fix:** Wrap the concatenated strings with `_()` to enable proper translation of all cash details messages. opw-5185310
This update resolves an issue where loyalty reward products were sometimes hidden within the Point of Sale (PoS) system. This change ensures that reward products are always visible and selectable during transactions, improving the customer experience and preventing lost sales. The fix was implemented as part of a standard bug fix process.
Original PR description
Before this commit, a product used as a loyalty reward could be hidden in the PoS. opw-5918550 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing users in Argentina from completing the checkout process due to missing localization fields. The fix addresses a generic 'missing fields' error by ensuring required Argentinian tax information is correctly populated during the address form. This improves the user experience for Argentinian customers.
Original PR description
### Issue: Cannot get passed the address form in `ar` localization. #### Steps to reproduce: 1- Set up a company with Argentinian localization. 2- Set the portal user to this company. 3- Add an…
### Issue: Cannot get passed the address form in `ar` localization. #### Steps to reproduce: 1- Set up a company with Argentinian localization. 2- Set the portal user to this company. 3- Add an address and set country to `Argentina`. 4- Assign website to Argentinian company; 5- As the portal user, add something to cart. 6- go to checkout, and save the address. You will get the error that some fields are missing. ### Cause: This issue is partially fixed in https://github.com/odoo/odoo/pull/239998. However, there are three issues left: 1. That fix doesn't show the error regarding 'Identification and AFIP Resposibility Types' when we have `use_delivery_as_billing`. As a result a generic error `some fields are missing` is shown. 2. `can_edit_vat` is used in: https://github.com/odoo/odoo/blob/5b39cdceb84758f767b83b741be927c1a7cfac7a/addons/l10n_ar_website_sale/views/templates.xml#L7-L9 https://github.com/odoo/odoo/blob/5b39cdceb84758f767b83b741be927c1a7cfac7a/addons/l10n_ar_website_sale/views/templates.xml#L32-L35 This needs to also consider `l10n_ar_afip_responsibility_type_id` and `l10n_latam_identification_type_id` being set. 3. Also we need to make sure `Identification Number` which is `vat` is set if we want to prevent it from being modified. opw-5376149
This update enhances the accuracy of payment reference validation by tailoring checks to the bank account's country. Previously, a single global check caused issues with differing country formats. Now, the system validates references against the correct country, falling back to a standard ISO check if the country isn't supported, ensuring more reliable payment processing.
Original PR description
Currently, when initiating a payment, we check if the reference is a structured one by using `is_valid_structured_reference` which checks the validity of the structure accross all supported countries. This can lead to issues when it matches formats accepted by other countries but not the one of the bank account. With this commit, we replace this check by a call to a new function that checks the structure validity according to the country of the bank account, with a fallback to the generic check (ISO 11649) if the country is not supported. opw-5387269
This update resolves an issue where attendance managers couldn't edit their subordinates' attendance records. The fix ensures both managers and officers can now modify attendance data, improving workflow efficiency. Additionally, the tests have been updated for greater reliability.
Original PR description
The commit https://github.com/odoo/odoo/commit/d115cca1296c0bd20a2875bdaadf2a9136c33dda introduced the opportunity for attendance managers to edit their subordinates attendances, but the condition was lacking parenthesis, leading to an unexpected behaviour. This commit changes the condition so that it is possible both for a manager and an officer to do the edition. It also rewrite the tests in order to be more thorough. No related task Forward-Port-Of: odoo/odoo#248471
This update optimizes how Odoo retrieves usable direct debit mandates, resulting in a significant speed improvement. By adding an index and restructuring the query, the process is now 10 times faster, leading to quicker invoice processing. This change primarily addresses a performance bottleneck related to mandate retrieval.
Original PR description
affected versions: 16, 17 The query for `_sdd_get_usable_mandate` is far from optimal. An EXPLAIN ANALYZE shows some pain points that we address in this PR:…
affected versions: 16, 17 The query for `_sdd_get_usable_mandate` is far from optimal. An EXPLAIN ANALYZE shows some pain points that we address in this PR: https://explain.dalibo.com/plan/c4eddda16fa4cf39 - Indexing `sdd_mandate` in `account.move` lets the subquery use an Index Scan instead of a full-table Seq Scan. - Without changing the logic of the subquery it is now way more performant using NOT EXISTS, which avoids the Aggregate node and enables early exit. These two minor changes yield a ~10x speedup in our tests. (probably there's more performance to gain, although this seems to be an issue that will cease on later versions) Some captures on performance over ~2000 payments. Before, a big chunk of the time was spent retrieving the mandate. The more operations the larger the time: <img width="1246" height="655" alt="image" src="https://github.com/user-attachments/assets/3b6695e1-dbb0-46fa-a22c-fba0e9c2ec2b" /> Now over the same amount of payments, the mandates retrievement isn't that troubling anymore: <img width="1050" height="609" alt="image" src="https://github.com/user-attachments/assets/63ad88d1-51a0-4607-ae50-8022cf4cffc7" /> cc @moduon MT-11292 fyi @yajo Forward-Port-Of: odoo/enterprise#97410
This update fixes an issue where duplicate DateV identifiers could be assigned to partners, even after archiving. The change ensures that DateV IDs are unique across all partners, including archived ones, preventing data inconsistencies. This improves data accuracy for German reporting.
Original PR description
Currently, it is possible to set a DateV identifier on a partner even if it is already assigned to an archived partner. This leads to duplicate identifiers if the archived partner is later…
Currently, it is possible to set a DateV identifier on a partner even if it is already assigned to an archived partner. This leads to duplicate identifiers if the archived partner is later unarchived. ### **Steps to reproduce:** 1) Install **l10n_de_reports, Contacts** App with Demo Data. 2) Switch to a **DE company**. 3) Create a contact 'Test-A' and set `'DateV Vendor' to 123456789` in the **Accounting Section**. 4) Archive 'Test-A'. 5) Create 'Test-B' and set `'DateV Vendor' to 123456789`. 6) Unarchive 'Test-A'. ### **Observed Behavior:** 'Test-B' is created successfully. After step 6, both 'Test-A' and 'Test-B' are active with the same DateV identifier. ### **Expected Behavior:** A validation error should be raised when trying to save 'Test-B', stating that the identifier is already defined. ### **Root Cause:** Since [this commit](https://github.com/odoo/enterprise/commit/733c4ba1fd5558891ffdbc67066c3a3a5938e2f0), company-dependent fields are stored as JSONB in the database. Due to this improvement, the previous SQL constraint (which enforced uniqueness across all records) was removed and replaced with a Python constraint. However, the new Python constraint utilizes `search_count`, which by default filters out archived records (`active=False`). This allows the reuse of identifiers belonging to archived partners, breaking the uniqueness requirement that existed in previous versions. Fix: Update the `_check_datev_identifier` and `_check_datev_identifier_customer` constraints to use `with_context(active_test=False)`. This ensures that the uniqueness check considers all partners, including archived ones. opw-5474106
Documentation and clarification updates
This pull request confirms that a Class License Agreement (CLA) has been signed by @pedrobaeza. This is a standard legal step for contributions to the Odoo project, ensuring compliance with Odoo's licensing terms. The change involves a documentation update to record the CLA signature.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
6 changes
Resolved issues and error corrections
This update adjusts the Odoo installation process to maintain compatibility across different versions. Specifically, it addresses a change in how the 'base' module is handled in Odoo 18.2, ensuring a smoother installation experience. This change ensures consistent behavior regardless of the Odoo version being used.
Original PR description
Starting in 18.2 the skip-auto-install is not working as in 17.0 because base is not marked as to install another way. The detailed explanation: https://github.com/odoo/odoo/pull/239044#discussion_r2603384580 This commit just makes the logic and code consistent in all versions even if this is not needed in 17.0
This update enhances accounting reports by allowing users to filter data across multiple journals simultaneously. Previously, filtering was limited to a single journal. This change provides greater flexibility and accuracy when analyzing financial data.
Original PR description
In accounting reports, we want to be able to filter on multiples journals if needed. This filter will allow us to do this. Using `context['search_default_journal_id'] = journal_ids` doesn't work as only the first id is passed to the filter. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where FedEx freight service requests were failing due to missing information required by the FedEx API. Specifically, the system was missing a 'bookingConfirmationNumber' field, leading to validation errors. This fix ensures accurate rate retrieval and delivery validation for FedEx freight services.
Original PR description
Issue ----- Fedex freights services require extra information not present in the db, so requests will not be accepted by the API. A rate can be retrieved but the delivery cannot by validated by users as they get a `SHIPMENT.LOADCOUNT.INVALID` error. This is due to the lack of a `expressFreightDetail` entry in the request sent to the Fedex API. This `expressFreightDetail` field should contain some information which Odoo does not have a way to retrieve, such as a `bookingConfirmationNumber`. API details: https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html#:~:text=expressFreightDetail Feedback 5913471 ----- Ticket: opw-5876616
This update resolves a technical issue that caused a 500 error when users accessed appointment information URLs with incorrect parameters. The fix ensures a smoother booking experience by gracefully handling missing data, preventing errors and improving overall stability. This change impacts the appointment booking process.
Original PR description
Steps to reproduce: 1. Install 'appointment' module. 2. Set up any regular appointment. 3. Instead of following the steps for booking, try to access an info url with wrong parameters, e.g.: just /info or /info?allday=0 4. Observe a 500 error due to missing parameters. Issue: When accesing the /info route with the missing parameters of 'date_time' and 'duration' which are exepected to be always present, a 500 error is raised. Solution: We could gracefully handle this issue by redirecting the user if the proper values are not present in the URL parameters. opw-5412775
This update resolves an issue where autofilling pivot cells with invalid relational IDs would cause a crash. The fix ensures that autofill functionality continues to work while preventing the associated tooltip from triggering a system error. This improves the reliability and usability of the pivot table feature.
Original PR description
If you try to autofill a pivot cell that has an invalid relational id in its domain (eg. `=PIVOT.HEADER(1, "stage_id", 99999999)`), the autofill actually works but the tooltip make everything crash. Task: [5913754](https://www.odoo.com/web#id=5913754&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update reverts a recent change that caused all upsell quotes to be canceled, disrupting legitimate business processes. The previous update incorrectly used a function that resulted in errors and unintended cancellations. This reversion restores the correct quote handling functionality.
Original PR description
…mmit/55b6bbe27cc31abcaee40cd4a196e087fdfd4ce5 This commit introduced an issue. All upsell quote were canceled and no filtering was done on "alternative quotes". As a result it could disrupt legit business flow. Moreover, action_cancel was called instead of _action_cancell which can lead to ValueError: Expected singleton as action_cancel can require single record sometimes.