Daily updates from Odoo
Friday, November 29, 2024
104 changes
18 changes
Miscellaneous changes
Currently, a logger error is occurring when the user tries to change the Chart of Account to India with Indian company having no state. Clearly, it's related to demo data and it's not breaking the flow. Error:- ``` Message Error while loading Indian-Accounting demo data in the company "odoo".State is not set in the company. ``` So we can change the logger error to a warning to reduce the noise in the sentry sentry-5610804086 Forward-Port-Of: odoo/odoo#173485
Original PR description
Currently, a logger error is occurring when the user tries to change the Chart of Account to India with Indian company having no state. Clearly, it's related to demo data and it's not breaking the flow. Error:- ``` Message Error while loading Indian-Accounting demo data in the company "odoo".State is not set in the company. ``` So we can change the logger error to a warning to reduce the noise in the sentry sentry-5610804086 Forward-Port-Of: odoo/odoo#173485
Before this commit, we are not following this rule, causing warning at validation. https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/UBL-CR-600/ task-no Forward-Port-Of: odoo/odoo#188844
Original PR description
Before this commit, we are not following this rule, causing warning at validation. https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/UBL-CR-600/ task-no Forward-Port-Of: odoo/odoo#188844
This is needed so that the variable can be reused in overrides opw-4232114 Forward-Port-Of: odoo/odoo#189014
Original PR description
This is needed so that the variable can be reused in overrides opw-4232114 Forward-Port-Of: odoo/odoo#189014
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown which indicates that the cursor is inside the link - Try to add content - The content is added oustide the link Origin of the issue: ==================== When the selection have the p element and inside it there is an a element , currentNode will be the p and not the a, but lastposition
Original PR description
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown…
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown which indicates that the cursor is inside the link - Try to add content - The content is added oustide the link Origin of the issue: ==================== When the selection have the p element and inside it there is an a element , currentNode will be the p and not the a, but lastposition will have the link node which is not padded with zws yet. So we put the selection without the padding and then it's added which changes the selection to have anchor node on the end of the ufeff charater inside the link (`<a>󾿼ontent[]<a>`) which makes the selection appears as inside the link but adding content will be after the link. Solution: ========= We need to pad the link with zws in case the selection we put is at the edges of the link. ----------------------------------------------- Before: ======= In rtl lang, the cursor gets stuck at the edge of the link using the arrow keys. After: ====== No the cursor moves correctly in rtl lang. We need to make `arrowLeft` as go to next and `arrowRight` as going previous task-4089193 Forward-Port-Of: odoo/odoo#185707
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors, such as "Invalid property value." The `style.backgroundImage` property in vanilla JavaScript returns the raw value of the attribute, unlike jQuery's `.css('background-image')`, which automatically encodes URLs. This fix ensures that URLs extracted are properly encoded using `getComputedStyle`.
Original PR description
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors,…
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors, such as "Invalid property value."
The `style.backgroundImage` property in vanilla JavaScript returns the raw value of the attribute, unlike jQuery's `.css('background-image')`, which automatically encodes URLs.
This fix ensures that URLs extracted are properly encoded using `getComputedStyle`.
Steps to reproduce:
- Install the Blog module.
- Configure your credentials in the Unsplash settings.
- Create a new post within a blog.
- Change the background of the post by searching for "electrical wire" on Unsplash. Select the first image in the results, noting that its filename contains a space.
- Click the "Add" button to set the background image.
- Save the changes.
- Observe that the background image is not applied. Inspect the style attribute of the div, and you will find: background-image: url(/unsplash/hokONTrHIAQ/electrical wire.jpg?unique=6015d8d5); This value is invalid for the background-image property due to the unencoded space in the URL.
[1]: https://github.com/odoo/odoo/commit/f9c9d6c4058086849b7e87174afd7f97d514baad
opw-4233483
opw-4271093
Forward-Port-Of: odoo/odoo#187932Add information in email footer when relevant to let people know that Peppol will become mandatory in their country, and recommend Odoo as a compliant software in that regard. task-4332306 Example of sent emails: To a customer in a Peppol country, with Email + Peppol sending:  To a customer in a Peppol country with Email only (obviously the Belgian specific information only appear to invoices se
Original PR description
Add information in email footer when relevant to let people know that Peppol will become mandatory in their country, and recommend Odoo as a compliant software in that regard. task-4332306 Example of sent emails: To a customer in a Peppol country, with Email + Peppol sending:  To a customer in a Peppol country with Email only (obviously the Belgian specific information only appear to invoices sent to belgian customers):  To a cutomer in a non Peppol country: No change  Forward-Port-Of: odoo/odoo#188618
Currently a parse error would arises if the user deletes the saleable product category and try to install POS To reproduce this issue 1) Install Sale Management without a demo data 2) Delete the Saleable product category 3) Try to install POS Error:- ``` ParseError: while parsing /home/odoo/src/odoo/18.0/addons/point_of_sale/data/point_of_sale_data.xml:21, somewhere inside <record id="product_category_pos" model="product.category"> <field name="parent_id" ref="product.
Original PR description
Currently a parse error would arises if the user deletes the saleable product category and try to install POS To reproduce this issue 1) Install Sale Management without a demo data 2) Delete the…
Currently a parse error would arises if the user deletes the saleable product category and try to install POS
To reproduce this issue
1) Install Sale Management without a demo data
2) Delete the Saleable product category
3) Try to install POS
Error:-
```
ParseError: while parsing /home/odoo/src/odoo/18.0/addons/point_of_sale/data/point_of_sale_data.xml:21, somewhere inside
<record id="product_category_pos" model="product.category">
<field name="parent_id" ref="product.product_category_1"/>
<field name="name">PoS</field>
</record>
```
This error is occurring because the user deleted the saleable product category, which leads to the above traceback as the saleable product category is referenced at multiple places to create master data.
https://github.com/odoo/odoo/blob/51296055790f8c6f01dfbbc82ca340756c54cdb3/addons/point_of_sale/data/point_of_sale_data.xml#L16
We can resolve this issue by preventing the user to delete the saleable product category.
sentry-6026143114
Forward-Port-Of: odoo/odoo#188788Steps to reproduce ================== - Create a product with many variants - Go to the form view - Switch to the french language so that the text is long enough or edit the button label with studio => The button box goes outside the main view Solution ======== - Set a max width on the control panel - Set a min-width on stat buttons so they can reduce their size - Hide the overflow as when a text is truncated, it goes outside opw-4056439 Forward-Port-Of: odoo/odoo#188986
Original PR description
Steps to reproduce ================== - Create a product with many variants - Go to the form view - Switch to the french language so that the text is long enough or edit the button label with studio => The button box goes outside the main view Solution ======== - Set a max width on the control panel - Set a min-width on stat buttons so they can reduce their size - Hide the overflow as when a text is truncated, it goes outside opw-4056439 Forward-Port-Of: odoo/odoo#188986
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available quantity of quants present in the DB are not updated. This commit ensures that the quants proposed for your move line creation have an available quantity (even if currenlty dirty) and that the quantity used for the next move line creation is both related to the demand of the move, and the real
Original PR description
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available…
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available quantity of quants present in the DB are not updated. This commit ensures that the quants proposed for your move line creation have an available quantity (even if currenlty dirty) and that the quantity used for the next move line creation is both related to the demand of the move, and the real availability of the quant used to create it. [FIX] stock: avoid move line reset when opening detailled ops --- This reverts [1] commit b45e249f8f5f36cffdb1ff615953eac7bb45b995. ### Steps to reproduce: - Enable Multi-step routes - Create a storable product: put 5 units on shelf 1 and 5 on shelf 2 - Create and "mark as todo" a delivery order for 3 units - Click on the detailed operation and change the reservation from shelf 1 to shelf 2 > save (the subrecord not the record) - Reopen the details operation #### > The records get resets in front of you ### Cause of the issue: One of the main problems of [1] is that it modifies dirrectly the data's of the props of the component used by the X2many dialog: https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/static/src/fields/stock_move_line_x2_many_field.js#L48 As such, as soon as you mount that component, you will reset the data's used by that same component. Worse, the component is doing this to itself. Hence, if you did not perform a save before opening the details operation you will reset the values to match the DB's data. Furthermore this data change modifying the props of the component we are looking at will force to reload the component with the newly hardcoded data (which explains that you see your last change resetting in front of you). In addition, the `quant_id` field of the stock.move.line model is a very particular field as it is neither stored or computed but is used by the create and the write for the stock.move.line data's to match some of the quant informations: https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/models/stock_move_line.py#L85 https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/models/stock_move_line.py#L310-L311 Therefore this field will never be set on a move. line that was not modified in JS and is not saved yet. In order to take into account the offset between the DB Data and the data's we are setting on the form of stock move it is therefore necessary to perform an rpc to **guess** what quant was used to create a given line. HOWEVER, as teached by the JS framework formation: ``` The first rule of customizing Odoo in JS is: do it in python ``` So that you should not do that matching in JS but rather where it belongs. Finally, modifying the props of a component during the `onMounted` is a super hacky way to use OWL as it is the first Hook for which OWL does not destroy the component because of props inconsistency... opw-4294650 Original issue of the reverted "FIX": --- ### Steps to reproduce - In the setting enable Multi Step Routes - Create a storable prodcut and put 5 units on shelf 1 - Create and Mark as Todo a delivery order for 3 units of your product - Set the quantity of the move to 0 and save the record - Click on the "burger list icon" of the stock move to edit the detailed operations and make the reservations for your 3 units - We want to make the reservation in 2 lines targetting the same quant - Add a new line selecting your shelf 1 quant and set the qty to 1 - Try to add a second one the quant is not proposed ### Cause of the issue: When a quant has been selected at least once and the record is not yet saved the js data of the record contains the info of the quant used to create/update the move line because of the non stored not computed dummy field `quant_id` of the stock move. As such the quant will be considered to already having been used in this transaction and hence not available: https://github.com/odoo/odoo/blame/54e06a1b25ed9e317e368e89979c7c77ddbffc08/addons/stock/static/src/fields/stock_move_line_x2_many_field.js#L52-L54 ### Note: The IMP fixes the original issue + more. This reverted commit already required an other fix: Commit ea4fca8faa4ee84693e645514085a65b92364842 opw-4072541 opw-4294650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186400
As the previous 'embed_viewer' was also (wrongly) used in maintenance, make it available globally. Runbot issue: https://runbot.odoo.com/web#id=105095&view_type=form&model=runbot.build.error&menu_id=405&cids=1 Forward-Port-Of: odoo/odoo#187035
Original PR description
As the previous 'embed_viewer' was also (wrongly) used in maintenance, make it available globally. Runbot issue: https://runbot.odoo.com/web#id=105095&view_type=form&model=runbot.build.error&menu_id=405&cids=1 Forward-Port-Of: odoo/odoo#187035
**[FIX] account: fix empty string and False/None inconsistencies** When empty, the `name` field of `account.move.line` could inconsistently hold either an empty string or False. This inconsistency led to different results when searching for lines with an empty label, as `label->not set` and `label == ""` yielded different outcomes. The latter behavior aligns with expected ORM operations. This fix ensures the name field is set to False whenever the computed result is an empty string, standa
Original PR description
**[FIX] account: fix empty string and False/None inconsistencies** When empty, the `name` field of `account.move.line` could inconsistently hold either an empty string or False. This inconsistency led to different results when searching for lines with an empty label, as `label->not set` and `label == ""` yielded different outcomes. The latter behavior aligns with expected ORM operations. This fix ensures the name field is set to False whenever the computed result is an empty string, standardizing search behavior. opw-4167139 [Enterprise PR](https://github.com/odoo/enterprise/pull/73256) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187135 Forward-Port-Of: odoo/odoo#186079
Current behaviour: --- When you make content of type article in eLearning, then add an animation on scroll on an element, when you put the article in fullscreen, the animations do not trigger. Steps to reproduce: --- 1. Go to eLearning 2. Select a course with articles 3. Click on Go to website 4. Go on the article content 5. Open the editor 6. Drag and drop the columns block at the end 7. Select "feature one" and add an animation on scroll 8. After saving, scroll, the animation wo
Original PR description
Current behaviour: --- When you make content of type article in eLearning, then add an animation on scroll on an element, when you put the article in fullscreen, the animations do not trigger. Steps…
Current behaviour: --- When you make content of type article in eLearning, then add an animation on scroll on an element, when you put the article in fullscreen, the animations do not trigger. Steps to reproduce: --- 1. Go to eLearning 2. Select a course with articles 3. Click on Go to website 4. Go on the article content 5. Open the editor 6. Drag and drop the columns block at the end 7. Select "feature one" and add an animation on scroll 8. After saving, scroll, the animation works 9. Click on "Fullscreen" 10. Scroll again, animation doesn't trigger Cause of the issue: --- In website_slide, fullscreen mode, the right scrollable element is not `#wrapwrap`, but `.o_wslide_fs_article_content` Note: --- If the animation is not complete, but the page is scrolled at maximum, animation intensity can be lowered in the editor panel, so that the animation can finish earlier. opw-4151770 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#184717
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable products: Kit 1, Kit 2, content, foo - Create 2 boms of type kit: one for Kit 1 and one for Kit 2, both with: - 1 x content - Create and confirm a sale order with two lines: - 1 x Kit 1 - 1 x Kit 2 > On the associated pick, you can see 2 distinct moves: one per kit - On the SO add a li
Original PR description
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable…
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable products: Kit 1, Kit 2, content, foo - Create 2 boms of type kit: one for Kit 1 and one for Kit 2, both with: - 1 x content - Create and confirm a sale order with two lines: - 1 x Kit 1 - 1 x Kit 2 > On the associated pick, you can see 2 distinct moves: one per kit - On the SO add a line for 1 unit of foo and save the SO #### > On the associated pick both kit moves were merged. ### Cause of the issue: When you add 1 unit of foo, the `_action_launch_stock_rule` will be called in order to create and confirm the associated stock moves. During the `_action_confirm` of this move a `_merge_moves` will be called to determine if the move can be merged with any other already existing one. However, this merge operation will actually be performed on each of the move present in the "candidate_move_set" which includes all the moves of the already existing picking: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1015-L1027 https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1011-L1013 This is problematic since the `disting_fields` used as a merging criterion are based solely on the records present in self and not on the candidates on which the merging might be performed: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1021 In our case, the reason why the two kit moves where not merged the first time that they were confirmed was because the `bom_line_id` was added to the distinct fields by: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/mrp/models/stock_move.py#L605-L609 But on the action confirm of the foo move and since this move is not assocaited with a `bom_line_id` of phantom type, it will not and the two kit moves will be considered as good condidates to merge into one an other. ### Fix: The `distinct_fields` used as a merging criterion should be based on the set of all moves that are considered to be merged rather than to the moves that we initially wanted to merge. opw-4337128 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188101
When we click on a many2one field we want to open the dropdown with or without a query input. The use of the query input is determined by a simple heuristic `savedValue !== inputValue`. The issue here is that we could have extra spaces either in the saved value or in the input value. These extra spaces can influence the search results so we need to trim them. opw-4146031 Forward-Port-Of: odoo/odoo#188933
Original PR description
When we click on a many2one field we want to open the dropdown with or without a query input. The use of the query input is determined by a simple heuristic `savedValue !== inputValue`. The issue here is that we could have extra spaces either in the saved value or in the input value. These extra spaces can influence the search results so we need to trim them. opw-4146031 Forward-Port-Of: odoo/odoo#188933
Steps to reproduce the bug: - Create a storable product “P1” and “P2” - Create two route: - route 1: - rule 1: Pull from “WH/Stock” to “WH/Stock/Shelf 1” -> Trigger another action - rule 2: Pull from “WH/Stock/Shelf 1” to “customer -> Trigger another action - route 2: - rule 1: Pull from “WH/Stock” to “WH/Stock/Shelf 2” -> Trigger another action - rule 2: Pull from “WH/Stock/Shelf 2” to “customer -> Trigger another action - P1 -> route 1 + buy (add azure interi
Original PR description
Steps to reproduce the bug: - Create a storable product “P1” and “P2” - Create two route: - route 1: - rule 1: Pull from “WH/Stock” to “WH/Stock/Shelf 1” -> Trigger another action - rule 2: Pull from…
Steps to reproduce the bug:
- Create a storable product “P1” and “P2”
- Create two route:
- route 1: - rule 1: Pull from “WH/Stock” to “WH/Stock/Shelf 1” -> Trigger another action - rule 2: Pull from “WH/Stock/Shelf 1” to “customer -> Trigger another action
- route 2:
- rule 1: Pull from “WH/Stock” to “WH/Stock/Shelf 2” -> Trigger another action
- rule 2: Pull from “WH/Stock/Shelf 2” to “customer -> Trigger another action
- P1 -> route 1 + buy (add azure interior as vendor)
- P2 -> route 2 + buy (add azure interior as vendor)
- Create a SO: - vendor: Azure interior
- One unit of P1 and P2
- Confirm the SO
- Go to the created PO
- Confirm the PO and go to the reception
- put in pack the products together
- Try to validate the picking
Probelm:
An User Error is triggered:
ValueError: Expected singleton: stock.location(3694, 3696)
Because we have two moves with different destination locations, and we are trying to set them in all the move lines.
opw-4291067
Forward-Port-Of: odoo/odoo#188074This revert commit 063e224c17c0e0194e5ade6acbe82ff38a669b54 Many customers don’t use the bank account field on the employee form, and the change was blocking for them. Enterprise: https://github.com/odoo/enterprise/pull/74769 task-4206895 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189073 Forward-Port-Of: odoo/odoo#188956
Original PR description
This revert commit 063e224c17c0e0194e5ade6acbe82ff38a669b54 Many customers don’t use the bank account field on the employee form, and the change was blocking for them. Enterprise: https://github.com/odoo/enterprise/pull/74769 task-4206895 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189073 Forward-Port-Of: odoo/odoo#188956
Users rely on analytical accounting for accurate sales reporting. In operations involving automated inventory valuation, when an account move is confirmed, cogs entries are created with the same analytic account as the product line. However, due to a recent commit this is no longer the case. Steps to reproduce: - Enable Analytic Accounting and Anglo-Saxon Accounting in the settings - Create a storable product - Set inventory valuation to Automated on the product's category - Add
Original PR description
Users rely on analytical accounting for accurate sales reporting. In operations involving automated inventory valuation, when an account move is confirmed, cogs entries are created with the same analytic account as the product line. However, due to a recent commit this is no longer the case. Steps to reproduce: - Enable Analytic Accounting and Anglo-Saxon Accounting in the settings - Create a storable product - Set inventory valuation to Automated on the product's category - Add a cost to the product - Create an invoice with the product and add an analytic distribution - When the invoice is confirmed, COGS line are created Issue: Analytic distribution is not applied to COGS line This reverts commit https://github.com/odoo/odoo/commit/2a5463eb013aecc1d24041928974a9bbff5fb23a. opw-4347110 opw-4351323 opw-4351111 opw-4350640 opw-4350188 ... Forward-Port-Of: odoo/odoo#189130 Forward-Port-Of: odoo/odoo#188865
When creating an invoice in foreign currency with only 0% tax, we still want to display the company currency table on the invoice pdf. task-4367088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188955
Original PR description
When creating an invoice in foreign currency with only 0% tax, we still want to display the company currency table on the invoice pdf. task-4367088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188955
34 changes
Enhancements to existing features
Copy-to-clipboard buttons now use a clipboard icon instead of a clone icon across several Odoo apps. This makes the button purpose clearer for users and improves consistency in the interface.
Original PR description
* = account_reports, appointment, documents, knowledge, spreadsheet_dashboard_edition Buttons that copy text to the clipboard were previously using the fa-clone icon, which was incorrect. Updated these icons to fa-clipboard. task-3181092
The Documents app no longer carries outdated skipped mobile tests from the previous testing system. This keeps the test setup cleaner and reduces maintenance work after the move to the newer testing approach.
Original PR description
Since we have migrated all tests from QUnit to Hoot, we remove all the legacy skipped tests from qunit_mobile_suite_tests. If re-enabled, the document suite tests will have to be converted to Hoot. task-4028335
This update removes outdated styling rules related to autocomplete dropdowns in the Room module. It helps keep the interface code cleaner and prepares the module for future removal of legacy elements, with no expected functional impact for users.
Original PR description
There are some rules for the ui-autocomplete elements define on some scss files inside the /web/static/src/legacy folder linked to the jQuery-UI autocomplete dropdown. This commit cleans up these applied rules and remove it if they are not currently needed. We also plan to remove these classes in the future task-4330695
Resolved issues and error corrections
This update fixes several visual inconsistencies in the Documents app, including button grouping, dropdown borders, modal buttons, loading alignment, and count positioning. Users get a cleaner, more consistent interface with fewer distracting layout issues.
Original PR description
This commit: 1. Removes useless btn-group around "New" button 2. Removes useless borders in the cog dropdown 3. Makes the edit modal buttons more consistent with the rest of the modals 4. Fixes an…
This commit: 1. Removes useless btn-group around "New" button 2. Removes useless borders in the cog dropdown 3. Makes the edit modal buttons more consistent with the rest of the modals 4. Fixes an alignment problem when the loading indicator is displayed 5. Fixes an alignment problem between cog and count | - | 2 | 3 | 4 | 5 | |--------|--------|--------|--------|--------| | before |  |  |  |  | | after | <img width="227" alt="Screenshot 2024-04-04 at 11 04 49" src="https://github.com/odoo/enterprise/assets/110090660/bc264ad0-28b7-44a4-b4ae-29cf03b3f33a"> | <img width="231" alt="Screenshot 2024-04-04 at 11 03 54" src="https://github.com/odoo/enterprise/assets/110090660/891554fa-7ac8-4f3b-9566-5340e98522ea"> | <img width="196" alt="Screenshot 2024-04-04 at 11 02 57" src="https://github.com/odoo/enterprise/assets/110090660/7479740b-80fd-47af-95e4-8b4fbc8228d9">| <img width="198" alt="Screenshot 2024-04-04 at 11 03 25" src="https://github.com/odoo/enterprise/assets/110090660/32229f8e-16d9-487b-845d-704f7a07e63e">| task-3580143
This update fixes missing translation markers on user-facing text across several Odoo apps and localizations. It helps ensure labels, messages, and reports can be properly translated for users working in different languages.
Original PR description
Sometimes, developers forget to wrap their strings inside a gettext call. This commit adds those missing calls. Community: https://github.com/odoo/odoo/pull/177354
Code cleanup and technical improvements
This update aligns WhatsApp notification naming between different parts of the system, reducing internal inconsistency. It is a small maintenance change that helps keep the codebase easier to maintain without changing business workflows.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/188878
The delivery IoT package workflow now determines available scales from the specific stock move lines being packed rather than the broader transfer. This keeps the process aligned with recent inventory changes and helps ensure the right scale options appear during packing.
Original PR description
To adjust for the change made in https://github.com/odoo/odoo/pull/171743, available scales in `choose.delivery.package` is now retrieved from the move lines not the picking. Task-4023634
Child financial reports no longer automatically run setup logic from their parent report, reducing the chance of duplicate or unexpected processing. This makes report behavior more predictable and lowers the risk of errors in localized accounting reports.
Original PR description
Child account reports would execute the _custom_options_initializer method from their root report. It's not intuitive and error prone and can lead to executing _custom_options_initializer multiple times if the child handler inherits it's root handler. Executing root _custom_options_initializer should (only) be done by inheriting the root handler. Task: 4318404
Miscellaneous changes
Since https://github.com/odoo/enterprise/commit/e598fcb48b5e4f0126406a4008f175a88528ba85 the balance sheet report has a custom handler. Make indian balance sheet handler execute super method in it's _custom_options_initializer() do execute parent logic. Forward-Port-Of: odoo/enterprise#74574
Original PR description
Since https://github.com/odoo/enterprise/commit/e598fcb48b5e4f0126406a4008f175a88528ba85 the balance sheet report has a custom handler. Make indian balance sheet handler execute super method in it's _custom_options_initializer() do execute parent logic. Forward-Port-Of: odoo/enterprise#74574
The query in `_get_invoice_matching_so_candidates` will frequently plan a Seq Scan because of the low selectivity of the conditions. And when it does not, the number of rows returned by the CTE is expected to high. Because of that, filtering the resulting rows by a sequence of `OR` conditions can quickly become slow. In this commit, the `OR` conditions are replaced by `LIKE(ANY(ARRAY[]))` conditions. That way the CTE is only referenced once in the conditions and applying the filter on each ro
Original PR description
The query in `_get_invoice_matching_so_candidates` will frequently plan a Seq Scan because of the low selectivity of the conditions. And when it does not, the number of rows returned by the CTE is…
The query in `_get_invoice_matching_so_candidates` will frequently plan a Seq Scan because of the low selectivity of the conditions. And when it does not, the number of rows returned by the CTE is expected to high. Because of that, filtering the resulting rows by a sequence of `OR` conditions can quickly become slow. In this commit, the `OR` conditions are replaced by `LIKE(ANY(ARRAY[]))` conditions. That way the CTE is only referenced once in the conditions and applying the filter on each row is way faster. We also discarded duplicated `text_tokens` to reduce the size of the `ARRAY`. The reason why using a `LIKE(ANY(ARRAY[]))` is faster is because postgres inlines the CTE in the outer query. This means that it performs a Seq Scan on sale.order and injects the CTE definition of sub.name inside the `WHERE` conditions of the outer query, along with injecting the `WHERE` conditions of the CTE. So, the regex functions are distributed among the `OR` conditions. I.e. every `OR` condition left operand will contain the regex functions. As those have to be executed for every `OR` condition, this quickly becomes slow. We can explicitely materialize the CTE to avoid that. This makes postgres evaluate the regex functions only once. But it will still have lots of `OR` conditions to check along with running pattern matching for each one of them. `LIKE(ANY(ARRAY[]))` avoids this issue. The CTE is still inlined but since we now only have a single condition, the regex functions are only evaluated once and pattern matched once against an array of options. This makes the whole query faster and scale better. #### speedup Customer database with 808341 sale.orders. Query timing when increasing the number of text tokens. | Number of tokens | Before PR | After PR | |:-------------------:|:----------:|:--------:| | 2 | 7s | 1.3s | | 5 | 10s | 1.3s | | 10 | 18s | 1.4s | | 20 | 33s | 1.55s | opw-4329067 opw-4316765 Forward-Port-Of: odoo/enterprise#74827 Forward-Port-Of: odoo/enterprise#73755
**Specifications:** Users currently land on the 'Company' page by default when there is no context. Instead, users should land on the 'Home' page. **After this PR:** Users will land on the 'Home' page by default. Task-4282430 Forward-Port-Of: odoo/enterprise#72787
Original PR description
**Specifications:** Users currently land on the 'Company' page by default when there is no context. Instead, users should land on the 'Home' page. **After this PR:** Users will land on the 'Home' page by default. Task-4282430 Forward-Port-Of: odoo/enterprise#72787
…ing ReferenceNumber to the request opw-4358458 Forward-Port-Of: odoo/enterprise#74751
Original PR description
…ing ReferenceNumber to the request opw-4358458 Forward-Port-Of: odoo/enterprise#74751
Steps to reproduce ------------------ 1. Change the parent of the "Projects" folder to put it in another folder. 2. Delete that folder. The "Projects" folder will be deleted, despite the constraint preventing it from being deleted. This is because when a relational field is set as `ondelete=cascade`, we don't call the `unlink` on the cascaded records and let the database handle it. Therefore, the constraint is not triggered. With this PR, we check not only the folder being deleted, bu
Original PR description
Steps to reproduce ------------------ 1. Change the parent of the "Projects" folder to put it in another folder. 2. Delete that folder. The "Projects" folder will be deleted, despite the constraint preventing it from being deleted. This is because when a relational field is set as `ondelete=cascade`, we don't call the `unlink` on the cascaded records and let the database handle it. Therefore, the constraint is not triggered. With this PR, we check not only the folder being deleted, but also its descendants. Task-4241631 Forward-Port-Of: odoo/enterprise#74388 Forward-Port-Of: odoo/enterprise#71468
Steps to reproduce ================== - Use a small viewport - Open the Shop Floor - Click on the dropdown toggle next to the search bar => The dropdown goes outside the viewport Cause of the issue ================== In the shopfloor, the search view has a max width of 65%. Solution ======== We can set the max-width of the search bar menu as the minimum between the initial value and 65% opw-4232114 Forward-Port-Of: odoo/enterprise#74801
Original PR description
Steps to reproduce ================== - Use a small viewport - Open the Shop Floor - Click on the dropdown toggle next to the search bar => The dropdown goes outside the viewport Cause of the issue ================== In the shopfloor, the search view has a max width of 65%. Solution ======== We can set the max-width of the search bar menu as the minimum between the initial value and 65% opw-4232114 Forward-Port-Of: odoo/enterprise#74801
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4. Open the website and click on the `Edit` button, Will encounter Traceback Error. Cause: ------ In this [PR](https://github.com/odoo/enterprise/commit/eedf84b093f6c4803f53d7dc0021830c0c7b84cf) there have been changes made using an xpath where the node 'event_upcoming_snippet_hook' is being
Original PR description
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4.…
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4. Open the website and click on the `Edit` button, Will encounter Traceback Error. Cause: ------ In this [PR](https://github.com/odoo/enterprise/commit/eedf84b093f6c4803f53d7dc0021830c0c7b84cf) there have been changes made using an xpath where the node 'event_upcoming_snippet_hook' is being used. But there exists a view called 'website_event.snippets', where that particular node 'event_upcoming_snippet_hook' is being replaced with some other element/node. >File(FYR): website_enterprise/views/snippets/snippets.xml As the view 'website_event.snippets' has same priority [i.e; 16 default] as the 'website_enterprise.external_snipppets' view, the 'website_event.snippets' is being executed before than 'website_enterprise. external_snippets' which in result, the node 'event_upcoming_snippet_hook' will get replaced first and will not found for the view 'website_enterprise.external_snippets' when it tries to find that node for making changes and causes the error. Note: The view 'website_event.snippets' will have smaller id than the view 'website_enterprise.external_snippets' cause it exists before than 'website_enterprise.external_snippets'. Solution: --------- Reset the priority of view 'website_enterprise.external_snippets' to 15 so that it will get executed first for finding the node and then gets replaced by the other view 'website_event.snippets'. Forward-Port-Of: odoo/enterprise#69384
### Steps to reproduce the issue: 1. In a Colombian Company, create an Invoice with a Product with UNSPSC 2. Confirm then Send & Print (check DIAN option in wizard) 3. Access Error: > You are not allowed to access 'Colombian operation modes of DIAN used for different documents' (l10n_co_dian.operation_mode) records. > > This operation is allowed for the following groups: > - Administration/Settings ### Explanation: Access Rights for `l10n_co_dian.operation_mode` are
Original PR description
### Steps to reproduce the issue: 1. In a Colombian Company, create an Invoice with a Product with UNSPSC 2. Confirm then Send & Print (check DIAN option in wizard) 3. Access Error: > You are not…
### Steps to reproduce the issue: 1. In a Colombian Company, create an Invoice with a Product with UNSPSC 2. Confirm then Send & Print (check DIAN option in wizard) 3. Access Error: > You are not allowed to access 'Colombian operation modes of DIAN used for different documents' (l10n_co_dian.operation_mode) records. > > This operation is allowed for the following groups: > - Administration/Settings ### Explanation: Access Rights for `l10n_co_dian.operation_mode` are reserved to `base.group_system`. During tests, discovered an Access Rights issue with `l10n_co_dian.certificate` as well when trying to "Reload DIAN configuration" of `account.journal`. ### Fix reasoning: Log note from MASI on the ticket: add Read Access for Invoicing / Billing on `l10n_co_dian.operation_mode` Since `l10n_co_dian.certificate` should not be openly accessible, we will use sudo to retrieve them while sending the request. Testing access rights for invoicing, sudo addition and journal flow at the same time. opw-4242695 Forward-Port-Of: odoo/enterprise#74617 Forward-Port-Of: odoo/enterprise#72623
This error occurs when attempting to ``Print & Send`` an invoice using incorrect credentials for the ``Authorized Certification Provider (PAC)`` or if no credentials are provided and you choose to ``Retry`` after receiving the warning. Steps to reproduce: --- - Install ``l10n_mx_edi`` module - Change the company to ``ESCUELA KEMPER URGATE`` - Invoicing > Customers > Invoices > Select an Invoice - ``Print&Send`` (you will face a warning) > CFDI(Notebook page) > Retry Traceback: ---
Original PR description
This error occurs when attempting to ``Print & Send`` an invoice using incorrect credentials for the ``Authorized Certification Provider (PAC)`` or if no credentials are provided and you choose to ``Retry`` after receiving the warning. Steps to reproduce: --- - Install ``l10n_mx_edi`` module - Change the company to ``ESCUELA KEMPER URGATE`` - Invoicing > Customers > Invoices > Select an Invoice - ``Print&Send`` (you will face a warning) > CFDI(Notebook page) > Retry Traceback: --- ``TypeError: 'int' object is not iterable`` At [1], we are directly passing the ID of self instead of self. [1]- https://github.com/odoo/enterprise/blob/0f7a4eb991fc59240710c0f8ba78f4da5b889fe6/l10n_mx_edi/models/account_move.py#L1726 sentry-6095574663 Forward-Port-Of: odoo/enterprise#74758
In this PR: - Updated `_cron_send_gstr1_data` to ignore entries with `gstr1_blocking_level` set. - Ensures only unblocked GSTR1 entries are processed by the cron job. Forward-Port-Of: odoo/enterprise#74564
Original PR description
In this PR: - Updated `_cron_send_gstr1_data` to ignore entries with `gstr1_blocking_level` set. - Ensures only unblocked GSTR1 entries are processed by the cron job. Forward-Port-Of: odoo/enterprise#74564
This error occurs when we remove the Start Date while computing a new loan. Steps to reproduce: - Install ``accountant`` module - Create a new loan in ``Loans``(eg: Test) > Click ``Compute`` button - Add any loan amount and remove ``Start Date`` Traceback: ``TypeError: unsupported operand type(s) for +: 'bool' and 'relativedelta'`` [1]- https://github.com/odoo/enterprise/blob/42b7b322d6c720de45661e3370397adaf74fe1f4/account_loans/wizard/account_loan_compute_wizard.py#L79 sentry-6
Original PR description
This error occurs when we remove the Start Date while computing a new loan. Steps to reproduce: - Install ``accountant`` module - Create a new loan in ``Loans``(eg: Test) > Click ``Compute`` button - Add any loan amount and remove ``Start Date`` Traceback: ``TypeError: unsupported operand type(s) for +: 'bool' and 'relativedelta'`` [1]- https://github.com/odoo/enterprise/blob/42b7b322d6c720de45661e3370397adaf74fe1f4/account_loans/wizard/account_loan_compute_wizard.py#L79 sentry-6093500366 Forward-Port-Of: odoo/enterprise#74686
Currently the view has the default priority and become the main search view for product despite being specific to industry_fsm_sale. It creates issues in inventory at date view where the filters doesn't exist due to this. Forward-Port-Of: odoo/enterprise#74644 Forward-Port-Of: odoo/enterprise#74600
Original PR description
Currently the view has the default priority and become the main search view for product despite being specific to industry_fsm_sale. It creates issues in inventory at date view where the filters doesn't exist due to this. Forward-Port-Of: odoo/enterprise#74644 Forward-Port-Of: odoo/enterprise#74600
Fix validation to ensure the CFDI origin field is assigned properly. Prevents cases like `04|`, ensuring the UUID is correctly validated. Before: `{'tipo_relacion': '04', 'cfdi_relationado_list': ['']}` After: `{'tipo_relacion': '04', 'cfdi_relationado_list': []}` Forward-Port-Of: odoo/enterprise#74226
Original PR description
Fix validation to ensure the CFDI origin field is assigned properly. Prevents cases like `04|`, ensuring the UUID is correctly validated.
Before:
`{'tipo_relacion': '04', 'cfdi_relationado_list': ['']}`
After:
`{'tipo_relacion': '04', 'cfdi_relationado_list': []}`
Forward-Port-Of: odoo/enterprise#74226## Issue: After the changes we have made to sign in 17.0 we stop properly handling the state of the buttons for submit our sign after signing, the problem then is that in Draw mode for example, we are able to submit the sign even before drawing anything, which will allow us to send the document "unsigned", since there will not be any sign. ## Steps to reproduce: 1. Get Sign module. 2. Upload any document to sign. 3. Add sign box and go to sign the document. 4. Now change from Auto to Dr
Original PR description
## Issue: After the changes we have made to sign in 17.0 we stop properly handling the state of the buttons for submit our sign after signing, the problem then is that in Draw mode for example, we…
## Issue: After the changes we have made to sign in 17.0 we stop properly handling the state of the buttons for submit our sign after signing, the problem then is that in Draw mode for example, we are able to submit the sign even before drawing anything, which will allow us to send the document "unsigned", since there will not be any sign. ## Steps to reproduce: 1. Get Sign module. 2. Upload any document to sign. 3. Add sign box and go to sign the document. 4. Now change from Auto to Draw. ## Solution: We should take into account that it makes sense that everytime we update if our signature is empty, we update the state of the buttons accordingly avoiding this way to be able to sign without an actual sing. The solution address a similar approach at what was already being done with the onChangeName, we move this logic to be handled by a specific function for this buttons 'handleButtonStateChange'. The fix is part of > [#164410](https://github.com/odoo/odoo/pull/164410) opw-3874034 Forward-Port-Of: odoo/enterprise#71474 Forward-Port-Of: odoo/enterprise#61981
Branches can access their parent companies' accounts, and generally will just use their parent companies' CoA. Therefore, it makes no sense to create an account `123456 Account Payslip Houserental` in a branch if it already exists in the parent company. Community PR: https://github.com/odoo/odoo/pull/188247 task-none Forward-Port-Of: odoo/enterprise#74604 Forward-Port-Of: odoo/enterprise#74409
Original PR description
Branches can access their parent companies' accounts, and generally will just use their parent companies' CoA. Therefore, it makes no sense to create an account `123456 Account Payslip Houserental` in a branch if it already exists in the parent company. Community PR: https://github.com/odoo/odoo/pull/188247 task-none Forward-Port-Of: odoo/enterprise#74604 Forward-Port-Of: odoo/enterprise#74409
Following odoo/enterprise#73372 where we create a new group, so that the admin users don't see all the documents by default, the admin user used in this tour is not able to see anymore the "Folder1" created in the test as it is owned by odooBot with no additional rights. To solve the problem, we set access_internal="edit" on the "Folder1". Task-4361749 Forward-Port-Of: odoo/enterprise#74614
Original PR description
Following odoo/enterprise#73372 where we create a new group, so that the admin users don't see all the documents by default, the admin user used in this tour is not able to see anymore the "Folder1" created in the test as it is owned by odooBot with no additional rights. To solve the problem, we set access_internal="edit" on the "Folder1". Task-4361749 Forward-Port-Of: odoo/enterprise#74614
# [FIX] mrp_workorder: always select first option > Depending of the selected work centers in the Shop Floor view, different work center buttons will be visible ("All Mo", "My WO", "Assembly 1", ...) When no work center are selected by default, the first one should be the selected one, but for now, in this case it's always "All MO" who is selected. This commit fixes that, the first button/WC will always the selected one if there is no WC id in the context. # [FIX] mrp_workorder: don't set q
Original PR description
# [FIX] mrp_workorder: always select first option > Depending of the selected work centers in the Shop Floor view, different work center buttons will be visible ("All Mo", "My WO", "Assembly 1", ...)…
# [FIX] mrp_workorder: always select first option
> Depending of the selected work centers in the Shop Floor view, different work center buttons will be visible ("All Mo", "My WO", "Assembly 1", ...) When no work center are selected by default, the first one should be the selected one, but for now, in this case it's always "All MO" who is selected.
This commit fixes that, the first button/WC will always the selected one if there is no WC id in the context.
# [FIX] mrp_workorder: don't set qty for component added from catalog in the Shop Floor.
> Description
> ===========
>
> Before this commit, the quantity of a new move raw added through the catalog in Shop Floor was set directly in `_get_new_catalog_line_values`.
With this commit, it is not the case anymore, that way, if we should pick the component (production in 2 steps), the picking will be correctly created (before this fix, the picking was created only after an updated by `_get_new_catalog_line_values`.)
>
> How to reproduce
> ================
>
> - In Inventory settings, enable "Multi-Steps Routes";
> - In your warehouse configuration, select the 2 steps options for the manufacture;
> - Create a product with a BoM with at least a component;
> - Create a second product component (but not as a part of the BoM;)
> - Add quantity in stock for both components;
> - Create and confirm a MO for the product with the BoM;
> - Go in the MO's transfer and validate the "Pick Component" picking;
> - Go in Shop Floor, and for this MO, add the second component: click on the gear icon, "Add Component", search your component and click on it.
>
> If you check your MO in the back end, you'll see no "Pick Component" transfer was created for the added component. That said, if you add more quantity for this component (still through the Shop Floor catalog), you'll see the transfer will be created but 1 qty will be missing.
>
> Explanation
> ===========
>
> When in 2 steps manufacture, if a component line is added and the demand is greater than the actual quantity, a Pick Component transfer will be created for this product.
In the catalog, when using it through the Shop Floor, the raw move is
created with an equal quantity and demand, which means no Pick Component
transfer is needed.
That said, when updating an existing raw move through the Shop Floor
catalog, the demand is updated BEFORE the actual quantity, resulting of
the creating/update of the Pick Component transfer.
>
> To fix this issue, the quantity is not set directly during the move creation but will be updated just after (see related community fix.)
Community PR: odoo/odoo#183532
Forward-Port-Of: odoo/enterprise#71791**Steps:** - Install the frontdesk module - Open the frontdesk kiosk mode - Change the language from the language selector --- **Description of the issue/feature this PR addresses:** In kiosk mode, changing the language from the selector doesn’t apply the selected language. Instead, the field displays the first language in the list as the default, preventing the correct display of the chosen language. --- **Cause:** The `_get_additional_info` function modifies the language form
Original PR description
**Steps:** - Install the frontdesk module - Open the frontdesk kiosk mode - Change the language from the language selector --- **Description of the issue/feature this PR addresses:** In kiosk mode, changing the language from the selector doesn’t apply the selected language. Instead, the field displays the first language in the list as the default, preventing the correct display of the chosen language. --- **Cause:** The `_get_additional_info` function modifies the language format from `_` to `-`, which results in the incorrect language display. --- **Fix:** This PR resolves the issue by returning the language directly without calling `py_to_js_locale`, ensuring the correct format and accurate display of the selected language. task-4223597 Forward-Port-Of: odoo/enterprise#73437
The US payslip PDF needs some changes to make it compliant with the US requirements. Task: 4329656 Forward-Port-Of: odoo/enterprise#74184
Original PR description
The US payslip PDF needs some changes to make it compliant with the US requirements. Task: 4329656 Forward-Port-Of: odoo/enterprise#74184
The year considered in the holiday attest should be the same as the start of the notice period, not the end which could be in the following year. Task: 4274127 Forward-Port-Of: odoo/enterprise#73133
Original PR description
The year considered in the holiday attest should be the same as the start of the notice period, not the end which could be in the following year. Task: 4274127 Forward-Port-Of: odoo/enterprise#73133
The module description of `account_sepa_direct_debit` in the manifest states that posting an invoice will automatically generate a payment. Actually that feature was dropped in Odoo 13 with commit e3d390c4455c620793c481874b4503fa91bb6125 but the `__manifest__.py` was not updated at that time. This makes the situation uncomfortable where a feature not present in the code is still advertised in the module description. This commit updates the description of the module in the manifest. Forward-P
Original PR description
The module description of `account_sepa_direct_debit` in the manifest states that posting an invoice will automatically generate a payment. Actually that feature was dropped in Odoo 13 with commit e3d390c4455c620793c481874b4503fa91bb6125 but the `__manifest__.py` was not updated at that time. This makes the situation uncomfortable where a feature not present in the code is still advertised in the module description. This commit updates the description of the module in the manifest. Forward-Port-Of: odoo/enterprise#74532 Forward-Port-Of: odoo/enterprise#73380
## [IMP] hr_payroll_expense: Add Error when no expense rule is found This commit improves "expenses to be reimbursed in a payslip "config Before this commit: There was no way for a user to know if a payslip set to be reimbursed in a payslip would never be due to a bad configuration. After this commit: The user now gets an error when choosing to reimburse an expense through a payslip, asking to first setup a proper rule. task-id: 4273421 ## [IMP] hr_payroll_expense: Add a test
Original PR description
## [IMP] hr_payroll_expense: Add Error when no expense rule is found This commit improves "expenses to be reimbursed in a payslip "config Before this commit: There was no way for a user to know if a payslip set to be reimbursed in a payslip would never be due to a bad configuration. After this commit: The user now gets an error when choosing to reimburse an expense through a payslip, asking to first setup a proper rule. task-id: 4273421 ## [IMP] hr_payroll_expense: Add a test ensuring no sheet if no rule In https://github.com/odoo/enterprise/commit/6e4a94f530643a9ad7b461d49e149a339bc6a341, the issue of expense sheets being linked to payslips whose structure missed an expense ruled was resolved, but no test was added. This adds a test covering this case, to make sure it never happens again Forward-Port-Of: odoo/enterprise#74505 Forward-Port-Of: odoo/enterprise#72912
Bug === The many2one to the partner of the share panel can be really slow, because it will count all partner of the database. We don't need that count, setting the value to 1 will never call `search_count`. Task-4364119 Forward-Port-Of: odoo/enterprise#74681
Original PR description
Bug === The many2one to the partner of the share panel can be really slow, because it will count all partner of the database. We don't need that count, setting the value to 1 will never call `search_count`. Task-4364119 Forward-Port-Of: odoo/enterprise#74681
Some strings weren't translatable/were missing from the pot files to be translated. Since these strings weren't translatable (i.e. no lost work), they have been updated to be more grammatically correct + understandable where useful. opw-4321317 Forward-Port-Of: odoo/enterprise#74418 Forward-Port-Of: odoo/enterprise#73854
Original PR description
Some strings weren't translatable/were missing from the pot files to be translated. Since these strings weren't translatable (i.e. no lost work), they have been updated to be more grammatically correct + understandable where useful. opw-4321317 Forward-Port-Of: odoo/enterprise#74418 Forward-Port-Of: odoo/enterprise#73854
The links created with the many2OneGridRow widget won't work correctly. This commit, will change the link to the new format. This commit is a followup of https://github.com/odoo/odoo/commit/98f748603ed7677265280d33b0b4750010f71fe0 Forward-Port-Of: odoo/enterprise#74543 Forward-Port-Of: odoo/enterprise#74461
Original PR description
The links created with the many2OneGridRow widget won't work correctly. This commit, will change the link to the new format. This commit is a followup of https://github.com/odoo/odoo/commit/98f748603ed7677265280d33b0b4750010f71fe0 Forward-Port-Of: odoo/enterprise#74543 Forward-Port-Of: odoo/enterprise#74461
The civil status field in the swizz localization has terms that are not exported to be translated. Also, There was a typo in one of the terms. This commit fixes the typo and exports the terms to be translated later on. Opw-4292046 Opw-4278798 Community: https://github.com/odoo/odoo/pull/186473 Forward-Port-Of: odoo/enterprise#74627 Forward-Port-Of: odoo/enterprise#73406
Original PR description
The civil status field in the swizz localization has terms that are not exported to be translated. Also, There was a typo in one of the terms. This commit fixes the typo and exports the terms to be translated later on. Opw-4292046 Opw-4278798 Community: https://github.com/odoo/odoo/pull/186473 Forward-Port-Of: odoo/enterprise#74627 Forward-Port-Of: odoo/enterprise#73406
39 changes
Enhancements to existing features
When a refund credit note is created from a sales order in a straightforward delivered-products flow, it is now connected to the invoice it reverses. This makes refund records clearer for users and improves traceability between invoices and credit notes without changing other refund scenarios.
Original PR description
In the context of a sale order with products invoiced on delivery, if there's a refund, it is possible to create a credit note from the sale order (by clicking "Create Invoice" button). From a user perspective, it would be logic if you created an invoice, to have the credit note being the reversal of this invoice. Here the goal is to set when a `reversed_entry_id` for this simple case, and nothing otherwise. task-3862316
Resolved issues and error corrections
Purchase order reports now display tax descriptions correctly when they include formatting. This prevents confusing or incorrectly shown tax information on documents sent to vendors.
Original PR description
Changed the tax display in the purchase order template from `t-esc` to `t-out` to ensure proper HTML rendering of tax labels. This adjustment is necessary to display the tax descriptions correctly without escaping HTML content, which was causing display issues in the rendered document. This change addresses the need for accurate representation of tax information in purchase orders, improving the clarity and correctness of the document output. opw-4313981 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures Stripe payment forms can open properly from customer payment links by providing an initial amount. Customers can still choose installment or early payment options afterward, reducing failed payment starts.
Original PR description
Stripe (inline payment form) expect to have a default `amount` value because it need to initialize a payment "intent" when opening the payment form, so before the user will be able to choose between one of the different installment/epd payment options. This commit set that default amount to the total due amount, so that Stripe can successfully create the initial payment intent, the amount being then updated JS side when user choose any of the available option. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now keeps the displayed font name in sync when users undo or redo formatting changes. This prevents confusing toolbar information after editing formatted content, such as in todo notes.
Original PR description
Steps to reproduce the issue: ============================= - Create a new todo - Add some content - Select it and choose a font - Press `ctrl+z` - The display name doesn't get updated Origin of the issue: ==================== We don't update the state of the font_selector after redo/undo. Solution: ========= We need to lift the state from font_selector to the font_plugin so we can detect commands and events and upate the displayName accordingly task-4243952
This update improves the reliability and clarity of Odoo's automated test tools, especially around timing, simulated user actions, form submissions, and reporting. It helps teams catch issues more consistently while reducing false failures and confusing test output, with little direct impact on day-to-day users.
Original PR description
## Pull Request HOOT (PRHOOT) - part 27 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4:…
## Pull Request HOOT (PRHOOT) - part 27 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10: https://github.com/odoo/odoo/pull/155639 Part 11: https://github.com/odoo/odoo/pull/156255 / https://github.com/odoo/enterprise/pull/58135 Part 12: https://github.com/odoo/odoo/pull/156869 Part 13: https://github.com/odoo/odoo/pull/158384 / https://github.com/odoo/enterprise/pull/59019 Part 14: https://github.com/odoo/odoo/pull/158916 Part 15: https://github.com/odoo/odoo/pull/160292 / https://github.com/odoo/enterprise/pull/59971 Part 15.5: https://github.com/odoo/odoo/pull/166463 Part 16: https://github.com/odoo/odoo/pull/166311 Part 17: https://github.com/odoo/odoo/pull/168328 Part 18: https://github.com/odoo/odoo/pull/171004 / https://github.com/odoo/enterprise/pull/65657 Part 19: https://github.com/odoo/odoo/pull/171242 / https://github.com/odoo/enterprise/pull/65767 Part 20: https://github.com/odoo/odoo/pull/173332 / https://github.com/odoo/enterprise/pull/66895 Part 21: https://github.com/odoo/odoo/pull/174337 Part 22: https://github.com/odoo/odoo/pull/176777 / https://github.com/odoo/enterprise/pull/68721 Part 23: https://github.com/odoo/odoo/pull/179660 / https://github.com/odoo/enterprise/pull/69728 Part 24: https://github.com/odoo/odoo/pull/181971 Part 25: https://github.com/odoo/odoo/pull/183358 Part 26: https://github.com/odoo/odoo/pull/186403 / https://github.com/odoo/enterprise/pull/73361 Enterprise: https://github.com/odoo/enterprise/pull/74093 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The point of sale cash move popup now keeps the confirm button disabled when the reason field contains only spaces. This prevents blank or meaningless cash movement reasons from being submitted, improving data quality for store operations.
Original PR description
Description of the issue/feature this PR addresses: In the cash move popup of the point of sale, the confirm button is currently enabled when the reason input field contains only whitespace, allowing submission with invalid input. Current behavior before PR: The confirm button is active even when the reason input field only contains empty spaces, which can lead to erroneous or empty reason entries. Desired behavior after PR is merged: The confirm button will only be enabled when the reason input field contains valid, non-whitespace characters, ensuring that only meaningful input allows confirmation. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The withholding wizard now automatically fills in the TDS journal configured in settings. This prevents users from having to manually select the journal and helps ensure Indian withholding tax entries are created with the correct accounting setup.
Original PR description
Before This Commit: - The TDS journal is set in the settings, but when opening the withhold wizard, the journal is not populated in the wizard. After This Commit: - The TDS journal now correctly populates in the withhold wizard. Reason: - The compute method `_compute_journal` depends on `company_id`. The compute method of `company_id` depends on `related_move_id` and `related_payment_id`, but these two fields are not defined in the view. As a result, `company_id` is not computed. Since `company_id` is not set, `_compute_journal` cannot retrieve the journal from the settings. - The fields `related_move_id` and `related_payment_id` were mistakenly removed in this PR: https://github.com/odoo/odoo/pull/178572 Task-4366374
This fix makes automated checks for the website editor's link popover behave consistently. It reduces random test failures, helping development teams validate changes with more confidence and less wasted investigation time.
Original PR description
Before this commit: Tests involving the opening and closing of the link popover by clicking the link button could fail unpredictably After this commit: They are updated to ensure deterministic behavior --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue on Odoo IoT devices where restarting the Odoo service could also stop the remote debugging connection. The remote debugging tunnel now continues running independently, reducing interruptions during support and troubleshooting.
Original PR description
In IoT image 24.10, the Odoo service was changed to a systemd service (rather than init). A side effect of this change is that all subprocesses are killed when the service is stopped. This causes the `ngrok` to be killed while remote debugging if you restart the Odoo service. This PR changes `ngrok` to run as a service, which is then started by Odoo. This means it now keeps running when Odoo is stopped. task-4363825 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an editor issue where inserting a dynamic field next to existing text placed it on the next line. This keeps edited content formatted as expected and reduces manual cleanup for users.
Original PR description
**Current behavior before PR:** - When adding a dynamic field next to text nodes, the dynamic field would be inserted on the following line. **Desired behavior after PR is merged:** - The dynamic field is now added on the same line as the text. task:4220919
Fixes an issue where signing an employee contract could fail if the signing request was connected to more than one contract. The system now uses the newest related contract, helping users complete contract signing without interruption.
Original PR description
while signing a contract, it may happen that we end up with a sign request linked to multiple contracts. This will lead to an error when trying to call `_get_sign_request_folder` that has `ensure_one` on the contract. to avoid that we take the newest contract linked to the sign request. opw-4348211
Fixed an automated website rental shopping test that could fail after 11pm because the selected rental time accidentally rolled into the next day. The test now uses a stable future date, improving reliability of validation for the rental purchase flow.
Original PR description
The tour would fail after 11pm as the smallest rental interval for the item is 1 hours leading to default dates leaking into the next day leading to more hours than planned being encoded. By forcing the date to be the first day of the next month we can ensure the date is always valid. Runbot Error 108371
Spreadsheet document imports no longer run a production data validation step that is no longer needed. This keeps the feature aligned with current usage while moving that validation responsibility into tests, reducing unnecessary processing in normal operations.
Original PR description
The data validation will be moved in the test modules as its use in production was diminished following https://github.com/odoo/odoo/pull/184846 Task: 4363803
Fixed a display issue in appraisal forms where placeholder text could overlap when users clicked into an input field. This improves readability and makes the form easier to complete.
Original PR description
Steps: - Open the appraisal form. - Click on the input field with the placeholder text. - The placeholder text was overlapping. Cause of the issue: - The input field was not displaying properly due to layout constraints. Fix: - Adjusted the layout to allow proper display of the input field and placeholder. task-4316840
Code cleanup and technical improvements
This change slightly reduces the default waiting time between automated tour checks, helping test flows complete faster when no custom delay is set. It is an internal performance improvement for Odoo's website and web tour testing and should not change the customer-facing experience.
Original PR description
By default, the checkdelay is 500ms when it is not stipulated in a tour. For performance reasons, we reduce this delay to 400ms. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves and simplifies Odoo's automated test infrastructure across accounting, appointments, CRM, documents, and spreadsheets. It helps test suites run more consistently and efficiently, reducing the risk of regressions reaching users without changing day-to-day product behavior.
Original PR description
## Pull Request HOOT (PRHOOT) - part 27 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4:…
## Pull Request HOOT (PRHOOT) - part 27 Part 1: https://github.com/odoo/odoo/pull/152930 Part 2: https://github.com/odoo/odoo/pull/153018 Part 3: https://github.com/odoo/odoo/pull/153023 Part 4: https://github.com/odoo/odoo/pull/153203 Part 5: https://github.com/odoo/odoo/pull/153425 Part 6: https://github.com/odoo/odoo/pull/153700 Part 7: https://github.com/odoo/odoo/pull/154054 Part 8: https://github.com/odoo/odoo/pull/154579 Part 9: https://github.com/odoo/odoo/pull/155073 Part 10: https://github.com/odoo/odoo/pull/155639 Part 11: https://github.com/odoo/odoo/pull/156255 / https://github.com/odoo/enterprise/pull/58135 Part 12: https://github.com/odoo/odoo/pull/156869 Part 13: https://github.com/odoo/odoo/pull/158384 / https://github.com/odoo/enterprise/pull/59019 Part 14: https://github.com/odoo/odoo/pull/158916 Part 15: https://github.com/odoo/odoo/pull/160292 / https://github.com/odoo/enterprise/pull/59971 Part 15.5: https://github.com/odoo/odoo/pull/166463 Part 16: https://github.com/odoo/odoo/pull/166311 Part 17: https://github.com/odoo/odoo/pull/168328 Part 18: https://github.com/odoo/odoo/pull/171004 / https://github.com/odoo/enterprise/pull/65657 Part 19: https://github.com/odoo/odoo/pull/171242 / https://github.com/odoo/enterprise/pull/65767 Part 20: https://github.com/odoo/odoo/pull/173332 / https://github.com/odoo/enterprise/pull/66895 Part 21: https://github.com/odoo/odoo/pull/174337 Part 22: https://github.com/odoo/odoo/pull/176777 / https://github.com/odoo/enterprise/pull/68721 Part 23: https://github.com/odoo/odoo/pull/179660 / https://github.com/odoo/enterprise/pull/69728 Part 24: https://github.com/odoo/odoo/pull/181971 Part 25: https://github.com/odoo/odoo/pull/183358 Part 26: https://github.com/odoo/odoo/pull/186403 / https://github.com/odoo/enterprise/pull/73361 Community: https://github.com/odoo/odoo/pull/187034 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This pull request records that the contributor has signed Odoo's Contributor License Agreement. It is an administrative legal step that helps ensure contributions can be accepted under the project's rules, with no expected product or user-facing changes.
Original PR description
[CLA] Signature for Kripal K 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
Miscellaneous changes
When the write is called with multiple companies (like the test TestAccountComposerPerformance), the values are updated with the values of the very first company. This will write a new peppol_endpoint on all companies. However, in this test, the very first company is a BE one but another is FR. Then, this write makes an inconsistency between the original FR EAS and the new BE endpoint. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of:
Original PR description
When the write is called with multiple companies (like the test TestAccountComposerPerformance), the values are updated with the values of the very first company. This will write a new peppol_endpoint on all companies. However, in this test, the very first company is a BE one but another is FR. Then, this write makes an inconsistency between the original FR EAS and the new BE endpoint. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188985
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable products: Kit 1, Kit 2, content, foo - Create 2 boms of type kit: one for Kit 1 and one for Kit 2, both with: - 1 x content - Create and confirm a sale order with two lines: - 1 x Kit 1 - 1 x Kit 2 > On the associated pick, you can see 2 distinct moves: one per kit - On the SO add a li
Original PR description
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable…
### Steps to reproduce: - In the settings enable Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in delivery in 2 steps - Create 4 storable products: Kit 1, Kit 2, content, foo - Create 2 boms of type kit: one for Kit 1 and one for Kit 2, both with: - 1 x content - Create and confirm a sale order with two lines: - 1 x Kit 1 - 1 x Kit 2 > On the associated pick, you can see 2 distinct moves: one per kit - On the SO add a line for 1 unit of foo and save the SO #### > On the associated pick both kit moves were merged. ### Cause of the issue: When you add 1 unit of foo, the `_action_launch_stock_rule` will be called in order to create and confirm the associated stock moves. During the `_action_confirm` of this move a `_merge_moves` will be called to determine if the move can be merged with any other already existing one. However, this merge operation will actually be performed on each of the move present in the "candidate_move_set" which includes all the moves of the already existing picking: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1015-L1027 https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1011-L1013 This is problematic since the `disting_fields` used as a merging criterion are based solely on the records present in self and not on the candidates on which the merging might be performed: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/stock/models/stock_move.py#L1021 In our case, the reason why the two kit moves where not merged the first time that they were confirmed was because the `bom_line_id` was added to the distinct fields by: https://github.com/odoo/odoo/blob/8c5ad7621fe8370da4c28d42a51ba06e15ce42ee/addons/mrp/models/stock_move.py#L605-L609 But on the action confirm of the foo move and since this move is not assocaited with a `bom_line_id` of phantom type, it will not and the two kit moves will be considered as good condidates to merge into one an other. ### Fix: The `distinct_fields` used as a merging criterion should be based on the set of all moves that are considered to be merged rather than to the moves that we initially wanted to merge. opw-4337128 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188101
Steps to reproduce ================== - Create a product with many variants - Go to the form view - Switch to the french language so that the text is long enough or edit the button label with studio => The button box goes outside the main view Solution ======== - Set a max width on the control panel - Set a min-width on stat buttons so they can reduce their size - Hide the overflow as when a text is truncated, it goes outside opw-4056439 Forward-Port-Of: odoo/odoo#188986
Original PR description
Steps to reproduce ================== - Create a product with many variants - Go to the form view - Switch to the french language so that the text is long enough or edit the button label with studio => The button box goes outside the main view Solution ======== - Set a max width on the control panel - Set a min-width on stat buttons so they can reduce their size - Hide the overflow as when a text is truncated, it goes outside opw-4056439 Forward-Port-Of: odoo/odoo#188986
Before this commit, when the user wants to create a SO via the stat button displayed in the project form view when the project is billable without any SO created. The SO to create should have at least one service product to be able to timesheet on it inside the project. To make sure a service product will be in the lines of the newest SO, an user error should be displayed once no service product is inside lines of the SO created to avoid letting the user to create the SO until there is no servic
Original PR description
Before this commit, when the user wants to create a SO via the stat button displayed in the project form view when the project is billable without any SO created. The SO to create should have at…
Before this commit, when the user wants to create a SO via the stat button displayed in the project form view when the project is billable without any SO created. The SO to create should have at least one service product to be able to timesheet on it inside the project. To make sure a service product will be in the lines of the newest SO, an user error should be displayed once no service product is inside lines of the SO created to avoid letting the user to create the SO until there is no service product. This commit makes sure the context is correctly passed to the action to be able to trigger the warning once it is needed. Steps to reproduce the issue: ============================ 1. install `sale_project` module 2. create new billable project 3. go to the form view of that new project 4. set a customer to that project 5. click on `0 Sales Order\nMake Billable` stat button to create a new SO linked to that project 6. Create/Confirm the SO without any service products in its lines Expected behavior ----------------- The user error should be displayed since no service product is inside the lines of new SO. Actual Behavior --------------- The SO is created/confirmed without any errors. task-4291437 Forward-Port-Of: odoo/odoo#185533
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors, such as "Invalid property value." The `style.backgroundImage` property in vanilla JavaScript returns the raw value of the attribute, unlike jQuery's `.css('background-image')`, which automatically encodes URLs. This fix ensures that URLs extracted are properly encoded using `getComputedStyle`.
Original PR description
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors,…
In a prior commit [1], a jQuery call was replaced with a vanilla JS implementation, inadvertently introducing an issue where unencoded URLs in background-image caused rendering or validation errors, such as "Invalid property value."
The `style.backgroundImage` property in vanilla JavaScript returns the raw value of the attribute, unlike jQuery's `.css('background-image')`, which automatically encodes URLs.
This fix ensures that URLs extracted are properly encoded using `getComputedStyle`.
Steps to reproduce:
- Install the Blog module.
- Configure your credentials in the Unsplash settings.
- Create a new post within a blog.
- Change the background of the post by searching for "electrical wire" on Unsplash. Select the first image in the results, noting that its filename contains a space.
- Click the "Add" button to set the background image.
- Save the changes.
- Observe that the background image is not applied. Inspect the style attribute of the div, and you will find: background-image: url(/unsplash/hokONTrHIAQ/electrical wire.jpg?unique=6015d8d5); This value is invalid for the background-image property due to the unencoded space in the URL.
[1]: https://github.com/odoo/odoo/commit/f9c9d6c4058086849b7e87174afd7f97d514baad
opw-4233483
opw-4271093
Forward-Port-Of: odoo/odoo#187932In the domain selector (and expression editor), using autocompletion to build conditions for X2many fields will use their domains. Note that it cannot be done for a field many2one since values can be created outside of the field domain in that case. Forward-Port-Of: odoo/odoo#188873 Forward-Port-Of: odoo/odoo#187740
Original PR description
In the domain selector (and expression editor), using autocompletion to build conditions for X2many fields will use their domains. Note that it cannot be done for a field many2one since values can be created outside of the field domain in that case. Forward-Port-Of: odoo/odoo#188873 Forward-Port-Of: odoo/odoo#187740
This is needed so that the variable can be reused in overrides opw-4232114 Forward-Port-Of: odoo/odoo#189014
Original PR description
This is needed so that the variable can be reused in overrides opw-4232114 Forward-Port-Of: odoo/odoo#189014
This commit will correct the fact that the siret and APE number must be displayed also when the country code is from the DOM-TOM task:4290323 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188579 Forward-Port-Of: odoo/odoo#185862
Original PR description
This commit will correct the fact that the siret and APE number must be displayed also when the country code is from the DOM-TOM task:4290323 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188579 Forward-Port-Of: odoo/odoo#185862
With this PR [1], unfortunately an extra parameter `isCheck` was introduced in the tour. This commit removes that unusual parameter. [1]: https://github.com/odoo/odoo/pull/168474 runbot-107873 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188556
Original PR description
With this PR [1], unfortunately an extra parameter `isCheck` was introduced in the tour. This commit removes that unusual parameter. [1]: https://github.com/odoo/odoo/pull/168474 runbot-107873 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188556
Before this commit, we are not following this rule, causing warning at validation. https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/UBL-CR-600/ task-no Forward-Port-Of: odoo/odoo#188844
Original PR description
Before this commit, we are not following this rule, causing warning at validation. https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/UBL-CR-600/ task-no Forward-Port-Of: odoo/odoo#188844
### Steps to reproduce the issue: 1. Make sure you are in a company that is not a branch 2. Create a branch company 3. In the parent company, create an account group 4. In the branch company, create an account that should be set in the account group 5. The branch account is not set in the account group ### Explanation: When creating an account, we will enter `_adapt_accounts_for_account_groups` with a value for `account_ids`. As can be seen, `company_ids` is then assigned `account_i
Original PR description
### Steps to reproduce the issue: 1. Make sure you are in a company that is not a branch 2. Create a branch company 3. In the parent company, create an account group 4. In the branch company, create an account that should be set in the account group 5. The branch account is not set in the account group ### Explanation: When creating an account, we will enter `_adapt_accounts_for_account_groups` with a value for `account_ids`. As can be seen, `company_ids` is then assigned `account_ids.company_id.root_id.ids` which only corresponds to the id of the root company, not its branches. ### Fix reasoning: As asked by TSB, `account.group.company_id` can not have a `parent_id`, redirecting default value to `root_id`. `_accessible_branches` is only looking for active companies, the objective is to retrieve all children of `root_companies` (recursively). opw-4192988 Forward-Port-Of: odoo/odoo#182109
before this commit: ============== - Products with attributes in instant mode appeared duplicated in the product list for each combination.  after this commit: ============== - The product list now shows only the main product for variants, similar to POS. Clicking on the product opens the configuration page. - Disabled attribute values associated with archived combinations are on the product c
Original PR description
before this commit: ============== - Products with attributes in instant mode appeared duplicated in the product list for each combination.  after this commit: ============== - The product list now shows only the main product for variants, similar to POS. Clicking on the product opens the configuration page. - Disabled attribute values associated with archived combinations are on the product configuration page.  Task-4269189 Forward-Port-Of: odoo/odoo#185224
Currently, an error occurs when the user attempts to preview an invoice, and invoice date is not available. Step to produce: - Install the ```account``` module. - Create a new invoice, add a customer name and invoice line, and add a 'Payment Terms' which have an 'Early Discount' available. - 'Cancel' this invoice. - Click on the 'Preview' button (ensure that the invoice has no date). ```TypeError: unsupported operand type(s) for +: 'bool' and 'relativedelta'``` An error occurs whe
Original PR description
Currently, an error occurs when the user attempts to preview an invoice, and invoice date is not available. Step to produce: - Install the ```account``` module. - Create a new invoice, add a customer name and invoice line, and add a 'Payment Terms' which have an 'Early Discount' available. - 'Cancel' this invoice. - Click on the 'Preview' button (ensure that the invoice has no date). ```TypeError: unsupported operand type(s) for +: 'bool' and 'relativedelta'``` An error occurs when the system attempts to calculate the discount days with the invoice date, but the invoice date is not available there. To resolve this issue, we hide the preview button on canceled invoices. Sentry-6006569495 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188765 Forward-Port-Of: odoo/odoo#184817
Currently, a logger error is occurring when the user tries to change the Chart of Account to India with Indian company having no state. Clearly, it's related to demo data and it's not breaking the flow. Error:- ``` Message Error while loading Indian-Accounting demo data in the company "odoo".State is not set in the company. ``` So we can change the logger error to a warning to reduce the noise in the sentry sentry-5610804086 Forward-Port-Of: odoo/odoo#173485
Original PR description
Currently, a logger error is occurring when the user tries to change the Chart of Account to India with Indian company having no state. Clearly, it's related to demo data and it's not breaking the flow. Error:- ``` Message Error while loading Indian-Accounting demo data in the company "odoo".State is not set in the company. ``` So we can change the logger error to a warning to reduce the noise in the sentry sentry-5610804086 Forward-Port-Of: odoo/odoo#173485
This PR fixes multiple issues related to the mass_mailing_html_field used in `marketing_automation` and in `mass_mailing` modules. 1) The iframe scrollbar is hidden behind the snippets sidebar in fullscreen mode - concerns: mass_mailing, marketing_automation 2) In fullscreen mode, the iframe is not scrollable while dragging a snippet from the sidebar - concerns: mass_Mailing, marketing_automation 3) The snippets sidebar overlaps with the content - concerns: mass_mailing, marketing
Original PR description
This PR fixes multiple issues related to the mass_mailing_html_field used in `marketing_automation` and in `mass_mailing` modules. 1) The iframe scrollbar is hidden behind the snippets sidebar in fullscreen mode - concerns: mass_mailing, marketing_automation 2) In fullscreen mode, the iframe is not scrollable while dragging a snippet from the sidebar - concerns: mass_Mailing, marketing_automation 3) The snippets sidebar overlaps with the content - concerns: mass_mailing, marketing_automation 4) The snippets sidebar height in a dialog is too big - concerns: marketing_automation See individual commits for further explanation. task-4178640 Co-authored-by: Astik Singh <assi@odoo.com> Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Mahdi Cheikh Rouhou <macr@odoo.com> Co-authored-by: Shubham Thanki <shut@odoo.com> Forward-Port-Of: odoo/odoo#188833 Forward-Port-Of: odoo/odoo#187134
The attribute scales of the gantt view specifies which scales are available in the view. This means that for instance "year" or "month" can be absent from scales. If that happens and that "year" or "month" is the selected range, a crash occurs when rendering the GanttRendererControls component: TypeError: Cannot read properties of undefined (reading 'groupHeaderFormatter') Here we assign to each range a function groupHeaderFormatter so that we can call it independently from the available
Original PR description
The attribute scales of the gantt view specifies which scales are available in the view. This means that for instance "year" or "month" can be absent from scales. If that happens and that "year" or "month" is the selected range, a crash occurs when rendering the GanttRendererControls component:
TypeError: Cannot read properties of undefined (reading 'groupHeaderFormatter')
Here we assign to each range a function groupHeaderFormatter so that we can call it independently from the available scales.
Forward-Port-Of: odoo/enterprise#74689At the moment, the SOAP call in `_l10n_ec_get_client_service_response` catches `ConnectionError`, but some exceptions raised by zeep (such as `Timeout`) are not caught and will cause a traceback for the user. We catch `RequestException` to make sure that these are caught. task-none Forward-Port-Of: odoo/enterprise#74266
Original PR description
At the moment, the SOAP call in `_l10n_ec_get_client_service_response` catches `ConnectionError`, but some exceptions raised by zeep (such as `Timeout`) are not caught and will cause a traceback for the user. We catch `RequestException` to make sure that these are caught. task-none Forward-Port-Of: odoo/enterprise#74266
### Steps to reproduce: - In Accounting Dashboard, click on "import file" in the Bank kanban box - Select a CSV file with two missing values on a line, for example: ``` Transaction Type,Bank Reference,Narrative,Debit Amount,Credit Amount TRANSFER,bank_ref_1,bank_statement_line_1,,1000 TRANSFER,,bank_statement_line_2,,3500 ``` (missing `bank_ref_2`) - Complete the Odoo fields: Transaction Type, Reference, Label, Debit, Credit - Import - Go in Accounting Dashboard > Bank Reconciliation
Original PR description
### Steps to reproduce: - In Accounting Dashboard, click on "import file" in the Bank kanban box - Select a CSV file with two missing values on a line, for example: ``` Transaction Type,Bank…
### Steps to reproduce: - In Accounting Dashboard, click on "import file" in the Bank kanban box - Select a CSV file with two missing values on a line, for example: ``` Transaction Type,Bank Reference,Narrative,Debit Amount,Credit Amount TRANSFER,bank_ref_1,bank_statement_line_1,,1000 TRANSFER,,bank_statement_line_2,,3500 ``` (missing `bank_ref_2`) - Complete the Odoo fields: Transaction Type, Reference, Label, Debit, Credit - Import - Go in Accounting Dashboard > Bank Reconciliation and select the list view - `bank_statement_line_2` appears in Reference instead of Label ### Cause: In `_parse_import_data` some line values are added and some are expected to be removed. The values expected to be removed are stored by index but they are removed by value. In this case the index supposed to be removed is 3 but its value is empty like index 1. On the line `line.remove(line[index])` the first occurrence is removed, so index 1 is removed instead of 3. ### Solution: Use `del` to remove by index. opw-4319464 Forward-Port-Of: odoo/enterprise#74512
…ing ReferenceNumber to the request opw-4358458 Forward-Port-Of: odoo/enterprise#74751
Original PR description
…ing ReferenceNumber to the request opw-4358458 Forward-Port-Of: odoo/enterprise#74751
Steps to reproduce ================== - Use a small viewport - Open the Shop Floor - Click on the dropdown toggle next to the search bar => The dropdown goes outside the viewport Cause of the issue ================== In the shopfloor, the search view has a max width of 65%. Solution ======== We can set the max-width of the search bar menu as the minimum between the initial value and 65% opw-4232114 Forward-Port-Of: odoo/enterprise#74801
Original PR description
Steps to reproduce ================== - Use a small viewport - Open the Shop Floor - Click on the dropdown toggle next to the search bar => The dropdown goes outside the viewport Cause of the issue ================== In the shopfloor, the search view has a max width of 65%. Solution ======== We can set the max-width of the search bar menu as the minimum between the initial value and 65% opw-4232114 Forward-Port-Of: odoo/enterprise#74801
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4. Open the website and click on the `Edit` button, Will encounter Traceback Error. Cause: ------ In this [PR](https://github.com/odoo/enterprise/commit/eedf84b093f6c4803f53d7dc0021830c0c7b84cf) there have been changes made using an xpath where the node 'event_upcoming_snippet_hook' is being
Original PR description
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4.…
Steps to reproduce: ------------------ 1. Create a fresh database of version 17.0 or earlier. 2. Install website_event and website_enterprise modules. 3. Migrate the database to version saas~17.4. 4. Open the website and click on the `Edit` button, Will encounter Traceback Error. Cause: ------ In this [PR](https://github.com/odoo/enterprise/commit/eedf84b093f6c4803f53d7dc0021830c0c7b84cf) there have been changes made using an xpath where the node 'event_upcoming_snippet_hook' is being used. But there exists a view called 'website_event.snippets', where that particular node 'event_upcoming_snippet_hook' is being replaced with some other element/node. >File(FYR): website_enterprise/views/snippets/snippets.xml As the view 'website_event.snippets' has same priority [i.e; 16 default] as the 'website_enterprise.external_snipppets' view, the 'website_event.snippets' is being executed before than 'website_enterprise. external_snippets' which in result, the node 'event_upcoming_snippet_hook' will get replaced first and will not found for the view 'website_enterprise.external_snippets' when it tries to find that node for making changes and causes the error. Note: The view 'website_event.snippets' will have smaller id than the view 'website_enterprise.external_snippets' cause it exists before than 'website_enterprise.external_snippets'. Solution: --------- Reset the priority of view 'website_enterprise.external_snippets' to 15 so that it will get executed first for finding the node and then gets replaced by the other view 'website_event.snippets'. Forward-Port-Of: odoo/enterprise#69384
In this PR: - Updated `_cron_send_gstr1_data` to ignore entries with `gstr1_blocking_level` set. - Ensures only unblocked GSTR1 entries are processed by the cron job. Forward-Port-Of: odoo/enterprise#74564
Original PR description
In this PR: - Updated `_cron_send_gstr1_data` to ignore entries with `gstr1_blocking_level` set. - Ensures only unblocked GSTR1 entries are processed by the cron job. Forward-Port-Of: odoo/enterprise#74564
9 changes
Resolved issues and error corrections
This update resolves an issue where users' LinkedIn accounts were unnecessarily disconnecting during comment loading. The fix ensures disconnections only occur when there's a genuine problem with fetching comments, improving the user experience and preventing frustrating interruptions.
Original PR description
This commit fixes an issue with the social_linkedin module's comments fetch methods introduced in https://github.com/odoo/enterprise/pull/67079. This method disconnects the user from its account every time they open a post's comments, even if all API calls are successful. This shouldn't happen as nothing wrong happened to warrant a disconnection on our end. Now the user's account is disconnected if and only if there was an actual issue when fetching comments. task-4363737 Forward-Port-Of: odoo/enterprise#74672
This update fixes a printing issue where long account names in PDF reports caused text to overflow. The change adds a styling override to properly wrap long account names, ensuring reports are formatted correctly and readable. This improves the user experience when generating and printing financial reports.
Original PR description
Issue: When printing PDF reports, long account names cause the report to overflow out of the page. Steps to reproduce: - Install the accounting app - Enable "Analytic Accounting" in the settings -…
Issue: When printing PDF reports, long account names cause the report to overflow out of the page. Steps to reproduce: - Install the accounting app - Enable "Analytic Accounting" in the settings - Create one (or more) analytic account(s) with very long names - Open either "Balance Sheet" or "Profit and Loss" reporting - Do an "Analytic Group By" with the created account(s) - Print the PDF Cause: The default style in the associated scss file does not use wrapping. https://github.com/odoo/enterprise/blob/bf6c64b8fd5591f271e9b0f18f40d205a64cd5bd/account_reports/static/src/scss/account_pdf_export_template.scss#L41 Solution: Override the default style by using the "o_overflow_name" class. This is the class already used for handling overflow in the tables' content lines. This gives a more readable result than just editing the "white-space" field (see below for comparison). The proposed solution gives the following result:  As opposed to just editing to "white-space: wrap;"  Ticket: opw-4277596
This update resolves an issue where users without the 'account.group_account_invoice' group couldn't access the purchase order view after installing the l10n_ke_edi_oscu_stock module. The change restricts access to a key model, ensuring all users can properly manage purchase orders.
Original PR description
At the moment, when `l10n_ke_edi_oscu_stock` is installed, the purchase order view is broken for users that don't belong to the `account.group_account_invoice` group, because they don't have access to the `l10n_ke_edi.customs.import` model. This commit restricts the `l10n_ke_customs_import_ids` field on the `purchase.order` view to the `account.group_account_invoice` so that this error no longer occurs. runbot-70725
This update resolves an issue where spreadsheet thumbnails weren't displaying correctly in Safari and other Webkit browsers. The fix ensures that thumbnails are converted to a compatible format (PNG) when WebP conversion fails, improving the user experience across different browsers.
Original PR description
In safari (and all webkit navigators) `HTMLCanvasElement.toDataUrl` does not support `image/webp` as `type` parameter. https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL#browser_compatibility Before this commit, spreadsheet_edition/hooks.js:useSpreadsheetThumbnail draws an image to a canvas and convert it to base64. But the code assumes that the conversion to webp will work. `toDataUrl` uses `png` type if it doesn't work https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL#type With this commit, the regexp that removes the encoding data will supports `webp` **and** `png`
This update fixes a potential issue where errors during API calls to the Ecuadorian tax system (l10n_ec_edi) would display confusing tracebacks to users. By catching a broader range of exceptions, including timeouts, the system is now more stable and reliable when communicating with external services.
Original PR description
At the moment, the SOAP call in `_l10n_ec_get_client_service_response` catches `ConnectionError`, but some exceptions raised by zeep (such as `Timeout`) are not caught and will cause a traceback for the user. We catch `RequestException` to make sure that these are caught. task-none Forward-Port-Of: odoo/enterprise#74266
This update corrects a technical error impacting the generation of CFDI invoices in Mexico. Specifically, the 'Pagos' namespace was incorrectly removed from the schemaLocation attribute, causing compatibility issues with Quarum pac. This fix ensures invoices are correctly formatted and processed.
Original PR description
after this commit [1] the **Pagos** namespace was always removed from the schemaLocation attribute, this was causing error for Quarum pac. this commit fix the issue by filtering the schemaLocation attribute based what is present in namespace map. [1] https://github.com/odoo/enterprise/commit/dd18e0829810df7594730e14e09ac2174eedcc32 opw-4168509
This update reverts a previous change to the payroll expense testing process. It corrects a requirement that an employee’s bank account must be set up before approving the payroll expense sheet. This ensures the testing process accurately reflects how the system functions in a real-world scenario, preventing potential errors.
Original PR description
This reverts commit 8bc7dfb8f994c2f1147bdba9a5a2cc6c965595bb related: https://github.com/odoo/odoo/pull/188956 task-4206895 Forward-Port-Of: odoo/enterprise#74769
This update resolves an issue where users were not receiving reminders to sign up for Odoo Enterprise. The fix ensures that the system correctly triggers a reminder email by simulating a user click within the sign-up tour, improving the user experience and sign-up conversion rates.
Original PR description
In this commit, we fix sign_resend_expired_link_tour tour by doing click in step action instead of doing nothing.
This update corrects an issue where a confirmation email was incorrectly sent when changing payment methods for subscriptions. The fix filters out validation transactions, ensuring emails are only triggered for actual payment confirmations, improving email efficiency and reducing potential noise for users.
Original PR description
Versions -------- - 17.0+ Community: https://github.com/odoo/odoo/pull/188440 >[!important] >All functional changes are made in `sale`, this PR simply adds a test. Steps ----- 1. Have a confirmed…
Versions -------- - 17.0+ Community: https://github.com/odoo/odoo/pull/188440 >[!important] >All functional changes are made in `sale`, this PR simply adds a test. Steps ----- 1. Have a confirmed subscription; 2. go to subscription management in portal; 3. set or change payment method. Issue ----- The following email is sent: > A payment [...] amounting $ 0.00 for [...] has been confirmed. Cause ----- The `_reconcile_after_done` override in `sale` sends a payment succeeded mail for any sale order linked to a transaction that wasn't confirmed by that transaction. It currently assumes all the transactions in `self` are actual payment operations, as any `validation` gets filtered out in `_finalize_post_processing`, before `_reconcile_after_done` is called[^1]. This assumption no longer holds with `sale_subscription` installed, which also calls `_reconcile_after_done` on validation transactions to manage payment tokens linked to subscriptions[^2]. Solution -------- Filter out `validation` transactions before calling `_send_payment_succeeded_for_order_mail` on linked orders. opw-4169491 [^1]: https://github.com/odoo/odoo/blob/12de68d342b/addons/payment/models/payment_transaction.py#L998-L1003 [^2]: https://github.com/odoo/enterprise/blob/bbd1be56538/sale_subscription/models/payment_transaction.py#L135-L144