Wednesday, August 14, 2024
37 changes · saas-17.4
Resolved issues and error corrections
Creating a new user interface view from a menu no longer triggers an error while the record is still being set up. This makes view creation more reliable and avoids a confusing interruption for users or administrators configuring the system.
Original PR description
An Error is thrown when attempting to _compute_warning_info on a newly created ir.ui.view record. This is due to the NewId it is assigned being unable to be parsed by the query generated by the _get_inheriting_views method. This PR bypasses that method call when generating a NewId, as a newly created view will not need to check for inheritance. Task-ID: 4102663 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Closing a chat window with the Esc key no longer causes an error when multiple chats are open. This improves the reliability of Odoo's messaging experience by keeping users in their workflow without interruption.
Original PR description
Before this commit, when 2 chat windows were open, focusing the chat window on right then pressing ESC would lead to the following crash: ``` TypeError: Cannot read properties of undefined (reading 'focus') ``` This happens because when closing a chat window, it attempts to focus the next open chat window if any exist. It remembers last index, and picks the next chat window at that index. Problem was that checking last index was applied on new listing after close, so it was not detecting the closed chat window as last, thus calling Array.at() on a invalid index. So in scenario above with 2 chat windows, the list of indexes was `[0, 1], then `[0]` but index was `1`, so it attempted to access `[0].at(1)` which is `undefined`. This commit fixes the issue by reliably picking the item at index of last close chat window.
The tag selection dropdown now hides values that have already been chosen in many-to-many fields. This reduces duplicate-looking options and makes selecting tags or similar records clearer for users.
Original PR description
Problem: When opening the autocomplete dropdown for tags (or any other ManyToMany field), the currently selected values are not excluded from the dropdown list. This leads to redundancy, as the user still see and select values that have already been chosen. Steps to reproduce: - Open any app that has a ManyToMany field (e.g., the tags field in Project/Task). - Select a value from the dropdown. - Open the dropdown again. - Observe that the selected value is still present in the list. This fix ensures that selected values are excluded from the autocomplete dropdown, providing a clearer and more intuitive user experience. opw-4102363 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a new technical view from the Settings menu no longer triggers an unexpected error. This improves reliability for administrators configuring or extending screens in Odoo.
Original PR description
When the user tries to create a new view, a traceback will appear. Steps to reproduce the error: - Go to Settings > Technical > User Interface > Views > New Traceback: ``` Traceback (most recent call…
When the user tries to create a new view, a traceback will appear.
Steps to reproduce the error:
- Go to Settings > Technical > User Interface > Views > New
Traceback:
```
Traceback (most recent call last):
File "/home/odoo/odoo/community/odoo/http.py", line 2373, in __call__
response = request._serve_db()
File "/home/odoo/odoo/community/odoo/http.py", line 1903, in _serve_db
return self._transactioning(
File "/home/odoo/odoo/community/odoo/http.py", line 1966, in _transactioning
return service_model.retrying(func, env=self.env)
File "/home/odoo/odoo/community/odoo/service/model.py", line 134, in retrying
result = func()
File "/home/odoo/odoo/community/odoo/http.py", line 1933, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/odoo/community/odoo/http.py", line 2177, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_http.py", line 223, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/odoo/community/odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/odoo/community/addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/odoo/community/odoo/api.py", line 459, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "/home/odoo/odoo/community/addons/web/models/models.py", line 1021, in onchange
snapshot1 = RecordSnapshot(record, fields_spec)
File "/home/odoo/odoo/community/addons/web/models/models.py", line 1108, in __init__
self.fetch(name)
File "/home/odoo/odoo/community/addons/web/models/models.py", line 1123, in fetch
self[field_name] = self.record[field_name]
File "/home/odoo/odoo/community/odoo/models.py", line 6727, in __getitem__
return self._fields[key].__get__(self)
File "/home/odoo/odoo/community/odoo/fields.py", line 1263, in __get__
self.compute_value(recs)
File "/home/odoo/odoo/community/odoo/fields.py", line 1445, in compute_value
records._compute_field_value(self)
File "/home/odoo/odoo/community/odoo/models.py", line 5037, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/odoo/community/odoo/fields.py", line 101, in determine
return needle(*args)
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_ui_view.py", line 467, in _compute_warning_info
combined_arch = view._get_combined_arch()
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_ui_view.py", line 931, in _get_combined_arch
tree_views = views._get_inheriting_views()
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_ui_view.py", line 634, in _get_inheriting_views
rows = self.env.execute_query(query)
File "/home/odoo/odoo/community/odoo/api.py", line 868, in execute_query
self.cr.execute(query)
File "/home/odoo/odoo/community/odoo/sql_db.py", line 347, in execute
res = self._obj.execute(query, params)
psycopg2.errors.SyntaxError: syntax error at or near ")"
LINE 5: WHERE id IN () AND (("ir_ui_view"."active" =
```
When the user creates a new view, self will be NewId in "_compute_warning_info",
so eventually in "_get_inheriting_views" method, self will be NewId,
so eventually self.ids will be [] here,
https://github.com/odoo/odoo/blob/855612ce254a4d4d547fc65b553b37c2876fcce2/odoo/addons/base/models/ir_ui_view.py#L611
so it will lead to the above traceback.
sentry-5675367115
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prMobile users will no longer see the send button stay visually highlighted after sending a message. The voice recording stop control is also easier to use because tapping the whole control now stops recording, not just the small icon.
Original PR description
Before this commit, when sending a message on mobile device with the dedicated send button "fa-plane-o", the button was highligted after composer content being cleared from posted message. This happens because the button, while being `:disabled`, has `:active` and `:hover`, both of which applies background active color and removes opacity rules of `:disabled`. This is unintentional, so this commit fixes the issue by enforcing the `:disabled` style even when composer button actions are `:active` and `:hover`. This commit also fixes another small UX issue where the voice recording stop button works only on red circle icon. This commit makes the whole component click acts as the trigger. Task-4107211 <img width="855" alt="Screenshot 2024-08-13 at 11 52 12" src="https://github.com/user-attachments/assets/7ee7780b-9589-4979-a1e3-844c9e8b86c7">
The Inventory Aging report is visible again from the Inventory reporting menu. This makes it easier for users to find aging information without needing to know it is also available inside the valuation pivot view.
Original PR description
Steps to reproduce: - Inventroy > Reporting Inventory aging is gone from the menu, removed in commit 92c4e7f719975027b6ac726f331e4a9262d001cf. The view is still available in the pivot view of Valuation but customers might not find it there. opw-4090460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a new view from Settings no longer triggers an unnecessary error or warning before the view is saved. This makes the view editing flow smoother and avoids confusing users during setup or customization.
Original PR description
It is not necessary to add a warning in the view editing interface if the view has not yet been created in the database.The error comes from the method to combine inherited arch which uses a custom sql query. issue: Go to the settings menu and try to create a view opw-4107450
Fixed an issue that caused a technical error when users clicked New from the Bank view in the Accounting dashboard while in debug mode. Users can now create new bank reconciliation transactions without interruption.
Original PR description
This PR fixes a technical error that occurs while trying to create new transaction in Bank Reconciliation Screen. Steps to reproduce error: - Install Accounting module - Activate debug mode - Go to Accounting Dashboard -> Bank (Kanban View) - Click New. A technical error will be raised. Desired behaviour after this commit: The technical error is resolved. TaskID: 4095322
Miscellaneous changes
Problem --------- Currently, when reversing a move, the current company is used as recipient bank. 1. Set a bank on a partner A 2. Go to Accounting 3. Set A as the customer of the invoice 4. Set a bank under 'recipient bank' in Other Info tab 5. Post the invoice 6. "Add Credit Note" 7. Fill in with wathever and press Reverse -> The Other Info tab of the reverse move has the company bank and not the customer's Objective --------- Obtain a similar behavior as when a credit note is
Original PR description
Problem --------- Currently, when reversing a move, the current company is used as recipient bank. 1. Set a bank on a partner A 2. Go to Accounting 3. Set A as the customer of the invoice 4. Set a bank under 'recipient bank' in Other Info tab 5. Post the invoice 6. "Add Credit Note" 7. Fill in with wathever and press Reverse -> The Other Info tab of the reverse move has the company bank and not the customer's Objective --------- Obtain a similar behavior as when a credit note is created directly: have the customer's bank set as recipient bank. Solution --------- Provide a default bank id that is set, if possible, to one of the customer's bank. opw-4035448 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#173640
This solve 2 problems: -------------------- * Singleton Error: - STEP TO REPRODUCE: Go to tree view mode of task, press New to create a new Task, input 'description' -> Save -> Then edit its description again -> Save -> View history revision -> Error - Solution is to ensure 'recordId' has value when opening History Dialog * Wrong resId when switching task: - when you have 2 tasks, and you navigate between them, this.props.resId will usually be the one for the first task, so
Original PR description
This solve 2 problems: -------------------- * Singleton Error: - STEP TO REPRODUCE: Go to tree view mode of task, press New to create a new Task, input 'description' -> Save -> Then edit its description again -> Save -> View history revision -> Error - Solution is to ensure 'recordId' has value when opening History Dialog * Wrong resId when switching task: - when you have 2 tasks, and you navigate between them, this.props.resId will usually be the one for the first task, so the history is wrong when we navigate between tasks, Instead we use this.model.root.resId Video to reproduce on runbot saas-17.1 https://github.com/odoo/odoo/assets/56789189/1cfd2dd8-a80e-4bdd-aac4-82856eadc8de --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175770 Forward-Port-Of: odoo/odoo#171090
Steps to reproduce: - Create a product - Update its quantity and set 4 in Stock - Create two MO that consume each 2 units of that product with the same scheduled date - Create a scrap order with 1 quantity of that product and validate it Issue: The unreserve will be done on the first MO. When going through the candidate move lines in the `_free_reservation()`, we sort them depending on their picking, their date if they have a move, or their id if they don't. The issue is that when
Original PR description
Steps to reproduce: - Create a product - Update its quantity and set 4 in Stock - Create two MO that consume each 2 units of that product with the same scheduled date - Create a scrap order with 1 quantity of that product and validate it Issue: The unreserve will be done on the first MO. When going through the candidate move lines in the `_free_reservation()`, we sort them depending on their picking, their date if they have a move, or their id if they don't. The issue is that when their related move have an equal date, then the order becomes underministic. Now, always sort by their id as a last resort, so we have a consistent order no matter what. opw-4046240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176399 Forward-Port-Of: odoo/odoo#174442
When on the main menu, `/odoo?cids=1`, if you activate the debug assets, the router will push a new key (debug) into the query string : `/odoo?cids=1&debug=assets`. To fully activate the debug, a reload will be done. After the reload, the action service will push the new loaded state (the menu), taking into account the locked keys (in this case: `cid` and `debug`), which will inverse the order of the query string : `/odoo?debug=assets&cids=1`. This occurs because, the order of the keys
Original PR description
When on the main menu, `/odoo?cids=1`, if you activate the debug assets, the router will push a new key (debug) into the query string : `/odoo?cids=1&debug=assets`. To fully activate the debug, a…
When on the main menu, `/odoo?cids=1`, if you activate the debug assets, the router will push a new key (debug) into the query string : `/odoo?cids=1&debug=assets`. To fully activate the debug, a reload will be done. After the reload, the action service will push the new loaded state (the menu), taking into account the locked keys (in this case: `cid` and `debug`), which will inverse the order of the query string : `/odoo?debug=assets&cids=1`. This occurs because, the order of the keys on the query string will depend on: the push order; if the keys are locked keys or not; and of the kind of push state (replacement or simple push state). The issue with this almost "random" order of the keys, is that the router could push the same URL (with keys in different order) multiple times into the browser history. Before this commit, to compare the actual URL with the new one, we just compare the two strings, and if the order of the query strings are not the same the URLs are considered as different. This commit, will avoid this issue by deep comparing the query string as objects, so when just a difference of order exists in the query string, they will be considered as the same URL. opw-3557575 Forward-Port-Of: odoo/odoo#175837
Combining purchase order line and product supplier info for orders with multiple pages results in inconsistent behavior: - products on first page shows the internal references and names - subsequent pages shows the supplier's codes and names. It is better to display the internals for the product field and keep the supplier codes and names for the description field. Therefore, the search has also been fixed accordingly. task: 4040598 (see also 3893787) see also https://github.com/odoo/
Original PR description
Combining purchase order line and product supplier info for orders with multiple pages results in inconsistent behavior: - products on first page shows the internal references and names - subsequent pages shows the supplier's codes and names. It is better to display the internals for the product field and keep the supplier codes and names for the description field. Therefore, the search has also been fixed accordingly. task: 4040598 (see also 3893787) see also https://github.com/odoo/odoo/pull/113527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175067
[IMP] l10n_pl: Credit note can't be more than the invoice total amount Polish law don't allow to have credit note with an amount higher than the invoice Solution: Don't allow to post a credit note if the total is higher than the invoice task-id#3965527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176537 Forward-Port-Of: odoo/odoo#168252
Original PR description
[IMP] l10n_pl: Credit note can't be more than the invoice total amount Polish law don't allow to have credit note with an amount higher than the invoice Solution: Don't allow to post a credit note if the total is higher than the invoice task-id#3965527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176537 Forward-Port-Of: odoo/odoo#168252
Commit 775c113382231 change the variable name from `i` to `picking` but the fw-port 9a3b2940da55f keeps the old name. Resulting on the access token is never found. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176560
Original PR description
Commit 775c113382231 change the variable name from `i` to `picking` but the fw-port 9a3b2940da55f keeps the old name. Resulting on the access token is never found. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176560
Steps to reproduce: - insert a pivot in a spreadsheet - add the formula =ODOO.PIVOT.TABLE(1) - share the spreadsheet - open the sharing link in an incognito browser window => only the top left cell of the table is present Task: 4089358 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175634
Original PR description
Steps to reproduce: - insert a pivot in a spreadsheet - add the formula =ODOO.PIVOT.TABLE(1) - share the spreadsheet - open the sharing link in an incognito browser window => only the top left cell of the table is present Task: 4089358 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175634
Steps to reproduce: - Create a product and set a quantity in a sublocation of Stock - Create a scrap order for that product - Set location as Stock (NOT the sublocation) - Validate the scrap order Issue: The insufficient quantity warning doesn't trigger anymore. The change made in [1] allowed the scrap orders to properly handle kits. To do that, it uses the product qty_available directly as it correctly handles kit components. But since we're not using the strict mode of `_gather()` a
Original PR description
Steps to reproduce: - Create a product and set a quantity in a sublocation of Stock - Create a scrap order for that product - Set location as Stock (NOT the sublocation) - Validate the scrap order Issue: The insufficient quantity warning doesn't trigger anymore. The change made in [1] allowed the scrap orders to properly handle kits. To do that, it uses the product qty_available directly as it correctly handles kit components. But since we're not using the strict mode of `_gather()` anymore, it will also look for child locations quantities, which isn't what we want for scrap orders. Added a context key to enable a strict location lookup for qty_available and uses it for scrap orders. [1] a196f947c829fde08d3ddf79b6c4f5a42a1217cd opw-4055721 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176404 Forward-Port-Of: odoo/odoo#174373
VAT validations for Costa Rica identification types according to: - CÉDULA FÍSICA: 9 digits - CÉDULA JURÍDICA: 10 digits - CÉDULA DIMEX: 11 or 12 digits - CÉDULA NITE: 10 digits Legal information is on [page 4](https://atv.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4/ANEXOS%20Y%20ESTRUCTURAS.pdf). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163923
Original PR description
VAT validations for Costa Rica identification types according to: - CÉDULA FÍSICA: 9 digits - CÉDULA JURÍDICA: 10 digits - CÉDULA DIMEX: 11 or 12 digits - CÉDULA NITE: 10 digits Legal information is on [page 4](https://atv.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4/ANEXOS%20Y%20ESTRUCTURAS.pdf). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163923
Before this commit: When loading a signature, the displayed image would be stretched to fit the signature box, messing up the ratio between width and height. This commit aims to fix this issue by: keeping the same ratio between width and height. and just multiply both of them by the same factor. Task: 4049758 Before:    After:   Forward-Port-Of: odoo/odoo#173653
Purpose ======= Fix the height of the mail templates in the mailing form. Specification ============= For small templates / theme selector, there is a blank space below the editor because the iframe's height is matching the full height of the website snippets on the side. For big templates, the website snippets doesn't follow the template scrolling which makes it difficult to drag and drop the snippets. This happens following the removal of the full width view and a related js file
Original PR description
Purpose ======= Fix the height of the mail templates in the mailing form. Specification ============= For small templates / theme selector, there is a blank space below the editor because the…
Purpose ======= Fix the height of the mail templates in the mailing form. Specification ============= For small templates / theme selector, there is a blank space below the editor because the iframe's height is matching the full height of the website snippets on the side. For big templates, the website snippets doesn't follow the template scrolling which makes it difficult to drag and drop the snippets. This happens following the removal of the full width view and a related js file which was previously resizing the editor height accordingly (ref commit: https://github.com/odoo/odoo/commit/cf6cd5ef46287f4e71fe96ad6b404ba9b08c1066 ) Reverting a part of the old "mailing_mailing_view_form_full_width" file into the "mass_mailing_html_field" one so that the editor iframe is correctly resized depending on its content and the editor sidebar is correctly resized to follow the scrolling behavior. Concretely, introducting back the resize observer and the "_updateIframe", "_isFullScreen", "_resizeMailingEditorIframe" and "_repositionMailingEditorSidebar" methods. Task-4086341 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170901
### Steps to reproduce: - Enable Multi-Step Routes and Batch Transfers in the settings - Inventory > Configuration > Warehouse Management > Operation Types - Click on internal transfer: Enable Auomatic batches group by dest - Create a internal transfer with two moves: 1 x screw and 1 x bolt - Mark the transfer as Todo, duplicate it and `mark as Todo` > the two transfers should be added to a batch - In the barcode app, batch transfers, go on your batch - Add a single screw and validate
Original PR description
### Steps to reproduce: - Enable Multi-Step Routes and Batch Transfers in the settings - Inventory > Configuration > Warehouse Management > Operation Types - Click on internal transfer: Enable…
### Steps to reproduce: - Enable Multi-Step Routes and Batch Transfers in the settings - Inventory > Configuration > Warehouse Management > Operation Types - Click on internal transfer: Enable Auomatic batches group by dest - Create a internal transfer with two moves: 1 x screw and 1 x bolt - Mark the transfer as Todo, duplicate it and `mark as Todo` > the two transfers should be added to a batch - In the barcode app, batch transfers, go on your batch - Add a single screw and validate > A pop up appears to tell you that the rest will be backordered - Validate ### Bug: Instead of being redirected to the barcode app, you are left on the old version of the batch. If you go back the barcode app you will see that your old batch is actually empty (0 lines) and its state is "in progress" instead of being done. If you click on the the empty batch you get a traceback since its picking_type is nowhere to be found by owl ### Cause of the issue: When you added your screw via the barcode app, you marked the move of the picking as picked. When you validated the batch, you are going to mark this move as done and to back order its picking since only part of it was completed. However, since one of its move is 'done' and the other one is 'assigned', its state will not be done and the picking to backorder will be removed from the original batch y these lines: https://github.com/odoo/odoo/blob/686e0f40f28b81ec99ad41f784a06d0ff231b01c/addons/stock_picking_batch/models/stock_picking.py#L140-L144 It would make sense if the the other pickings were to stay in the batch, which is what the "any" part of the if condition is trying to check. However the other picking of the batch is going to be removed later by these lines (since none of its move are picked so that it is considered to be empty): https://github.com/odoo/odoo/blob/686e0f40f28b81ec99ad41f784a06d0ff231b01c/addons/stock_picking_batch/models/stock_picking_batch.py#L233-L234 https://github.com/odoo/odoo/blob/686e0f40f28b81ec99ad41f784a06d0ff231b01c/addons/stock_picking_batch/models/stock_picking.py#L120-L121 This is the cause of all the issues since the old batch is now emptied from all of its picking so that its state will stay in progress and its picking_type_id can't be found from its pickings. ### Expected behavior: The part of the picking that was marked as done should have stayed in the old batch. ### Fix: The any part of this if condition should take into account the pickings that are going to be detached from the batch. https://github.com/odoo/odoo/blob/686e0f40f28b81ec99ad41f784a06d0ff231b01c/addons/stock_picking_batch/models/stock_picking.py#L140-L144 opw-4088846 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176384 Forward-Port-Of: odoo/odoo#176121
Before this commit: Invoices reconciled with a single payment appeared in a random order on the Payment Receipt. This was caused by the use of a set, which does not preserve the order of invoices. After this commit: Invoices are displayed in the order defined by the account.move model, ensuring a consistent and logical sequence. Steps to reproduce: - Create four invoices for the same customer on different dates. - Register a customer payment covering the total amount of the four invoic
Original PR description
Before this commit: Invoices reconciled with a single payment appeared in a random order on the Payment Receipt. This was caused by the use of a set, which does not preserve the order of invoices. After this commit: Invoices are displayed in the order defined by the account.move model, ensuring a consistent and logical sequence. Steps to reproduce: - Create four invoices for the same customer on different dates. - Register a customer payment covering the total amount of the four invoices. - Reconcile the payment with the invoices. - Print the Payment Receipt for the payment. opw-4096451 Forward-Port-Of: odoo/odoo#176536 Forward-Port-Of: odoo/odoo#176313
Specification: when creating a widget percentpie with Studio, the field's name has been added after percent pie, which is not user-friendly.  Expected behavior: The duplicate label should not be visible. Task-3942207 Forward-Port-Of: odoo/odoo#176364 Forward-Port-Of: odoo/odoo#172046
Original PR description
Specification: when creating a widget percentpie with Studio, the field's name has been added after percent pie, which is not user-friendly.  Expected behavior: The duplicate label should not be visible. Task-3942207 Forward-Port-Of: odoo/odoo#176364 Forward-Port-Of: odoo/odoo#172046
**Behaviour before PR:** When we try to add a link on an image through dialog box, image gets hidden and url is added as a link label instead. **Behaviour after PR:** Now, link can be added to the image without vanishing the image. task-4049730 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176358 Forward-Port-Of: odoo/odoo#174211
Original PR description
**Behaviour before PR:** When we try to add a link on an image through dialog box, image gets hidden and url is added as a link label instead. **Behaviour after PR:** Now, link can be added to the image without vanishing the image. task-4049730 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176358 Forward-Port-Of: odoo/odoo#174211
Issue 1: --- ### Steps to reproduce: - Create a storable product P tracked by SN - Create a consumable (or a storable with 5 units on hand) product COMP 1 and a storable product COMP 2 (without units on hand) - Create a BOM for P with an operation op 1 and two component lines: - 1 x COMP 1 consumed in op 1 - 1 x COMP 2 consumed in op 1 - Create and confirm an MO for 5 units of P - Go to the shopfloor and click on register production. **> the qty is updated to 1 on COMP 2
Original PR description
Issue 1: --- ### Steps to reproduce: - Create a storable product P tracked by SN - Create a consumable (or a storable with 5 units on hand) product COMP 1 and a storable product COMP 2 (without units…
Issue 1:
---
### Steps to reproduce:
- Create a storable product P tracked by SN
- Create a consumable (or a storable with 5 units on hand) product
COMP 1 and a storable product COMP 2 (without units on hand)
- Create a BOM for P with an operation op 1 and two component lines:
- 1 x COMP 1 consumed in op 1
- 1 x COMP 2 consumed in op 1
- Create and confirm an MO for 5 units of P
- Go to the shopfloor and click on register production.
**> the qty is updated to 1 on COMP 2 but to 5/1 on COMP 1**
As such, if you click on the 5/1, 5 units of COMP 1 will be consumed to produce only one unit of P
### Cause of the issue:
When you confirm the MO, since Comp 1 is a consumable its quantity is automatically set to 5.0 because reservation are bypassed. On the other hand, since Comp 2 is a storable without on hand qty, its quantity stays at 0.0. When you click on register production, or on the plus sign will trigger a call of the "_set_qty_producing" method. This call will update the qty_producing of the final product:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1214-L1218
However, the update of the qty consumed by the raw move will be bypassed because of these lines:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1225-L1226
https://github.com/odoo/enterprise/blob/0646022d7726a0cc183b191ca5be4e4bb4368f93/mrp_workorder/models/stock_move.py#L10-L13
And the quantity will therefore not be updated by these lines:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1228-L1231
However, as the quantity is not set to 0, it will be displayed as "quantity/should_consume_qty" and clicking on the raw move line will not update the quantity so 5 units will be marked as consumed ("picked").
Issue 2
---
### Steps to reproduce:
- Enable Multi-Step routes in the settings
- Go Inventory > Configuration > Warehouse Management > Warehouses
- Enable 2-step manufacturing on your Warehouse
- Create 2 storable products:
- product P: tracked by SN
- product COMP: tracked by lot
- Update the "on hand qty" of COMP by creating a lot with 10 units
- Create and confirm a manufacturing order for 1 unit of P
- Assign a serial number to the final product
- Validate the transfer of components from stock to preproduction (The lot is automatically used on this transfer as it is available)
### Expected behavior:
Since the lot of COMP was used in the transfer from stock to preproduction it should be displayed on the raw move of the MO.
### Current behavior:
The raw move is not updated.
Note: if the transfer is validated before we assign a serial number to the final product, the lot of the component is correctly updated.
### Cause of the issue:
When the 'action_generate_serial' is triggered in order to assign a SN to the final product P, the '_set_qty_producing' is called in order adapt the quantities of the MO (produce only one unit and consume accordingly):
https://github.com/odoo/odoo/blob/37c67ba6d2bef0bdca715619f117c3124ef5d334/addons/mrp/models/mrp_production.py#L1397-L1398
https://github.com/odoo/odoo/blob/37c67ba6d2bef0bdca715619f117c3124ef5d334/addons/mrp/models/mrp_production.py#L1215-L1231
Now, changing the quantity of the stock move of the component to a positive quantity will trigger the inverse method '_set_quantity' of that field to adapt reservation by creating a stock.move.line. Therefore, validating the transfer of components from stock to pre-production will not update the lot of components on the raw move because the computed need will be at 0 here:
https://github.com/odoo/odoo/blob/3097ea49705a1b6319be9677152d65ebe3ce515b/addons/stock/models/stock_move.py#L1689-L1697
and the '_update_reserved_quantity' call will therefore be empty.
Issue 1: opw-3887580 and opw-3863572
Issue 2: opw-3925894
Enterprise: https://github.com/odoo/enterprise/pull/63912
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#175050
Forward-Port-Of: odoo/odoo#168205task-4104252 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176493
Original PR description
task-4104252 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#176493
## Issue: - A user with sufficient access rights to timesheet, ('User: all timesheets' or 'User: own timesheets only') cannot create an invoice for a sales order within a specific timesheet period, receiving the error: 'Timesheets before [PERIOD] are validated and cannot be modified.' ## Steps To Reproduce: - Edit `Create on Order` of the `Service on Timesheets` product to be `Project & Task`. - in settings: - enable the `Lock Timesheets` option. - set the invoicing polic
Original PR description
## Issue: - A user with sufficient access rights to timesheet, ('User: all timesheets' or 'User: own timesheets only') cannot create an invoice for a sales order within a specific timesheet period,…
## Issue:
- A user with sufficient access rights to timesheet, ('User: all timesheets' or 'User: own timesheets only') cannot create an invoice for a sales order within a specific timesheet period, receiving the error: 'Timesheets before [PERIOD] are validated and cannot be modified.'
## Steps To Reproduce:
- Edit `Create on Order` of the `Service on Timesheets` product to be `Project & Task`.
- in settings:
- enable the `Lock Timesheets` option.
- set the invoicing policy for Timesheets to `validated timesheets only` .
- set the invoicing policy for Sales to 'invoice what is delivered'.
- Update the timesheet access for `Marc Demo` and set it as 'User: all timesheets'.
- Create a SO with `Service on Timesheets` as a product.
- On the related Task create a timesheet for period 01 May to 31 May and validate it.
- With Marc Demo click on Create an Invoice on the SO, for the same period notice The Access Error.
## Solution:
- in `check_if_allowed` I modified the condition to check if the current user is not a superuser.
opw-3965532
Forward-Port-Of: odoo/enterprise#68250
Forward-Port-Of: odoo/enterprise#654351. Add a button in the dashboard to view the number of drafts SODA entries for the CodaBox Soda journal. This button opens the SODA draft entries 2. Add a new non-stored field on the validation wizard to verify that the user has correctly copied the Accounting Firm password. If not, the 'Validate connection' button will be disabled 3. Add a link to the documentation in the connection wizard task-id 4008140 Forward-Port-Of: odoo/enterprise#68251 Forward-Port-Of: odoo/enterprise#65440
Original PR description
1. Add a button in the dashboard to view the number of drafts SODA entries for the CodaBox Soda journal. This button opens the SODA draft entries 2. Add a new non-stored field on the validation wizard to verify that the user has correctly copied the Accounting Firm password. If not, the 'Validate connection' button will be disabled 3. Add a link to the documentation in the connection wizard task-id 4008140 Forward-Port-Of: odoo/enterprise#68251 Forward-Port-Of: odoo/enterprise#65440
The PR hides the M2O external button in the "Add to Dashboard" dialog by passing the 'no_open' option to the widget. Task: [4066519](https://www.odoo.com/odoo/project/2328/tasks/4066519?cids=2) Forward-Port-Of: odoo/enterprise#67804
Original PR description
The PR hides the M2O external button in the "Add to Dashboard" dialog by passing the 'no_open' option to the widget. Task: [4066519](https://www.odoo.com/odoo/project/2328/tasks/4066519?cids=2) Forward-Port-Of: odoo/enterprise#67804
[FIX] l10n_in_asset: fix check_depreciation func dependencies `_check_depreciations` function is only called at creation and not afterwards We need to have it raised afterwards too task-id#3909619 Forward-Port-Of: odoo/enterprise#68374
Original PR description
[FIX] l10n_in_asset: fix check_depreciation func dependencies `_check_depreciations` function is only called at creation and not afterwards We need to have it raised afterwards too task-id#3909619 Forward-Port-Of: odoo/enterprise#68374
Issue: When we have multiple companies and we create different folders for each other, if we are working in a folder from let's say company A and then we switch to Company B, we will run the same link to this folder but from the Company B rights point of view, and since this folder is not accesible from this company it will throw a traceback and break the page until refresh to another url. Steps to reproduce: 1. Install Documents. 2. Have atleast 2 companies. 3. Create a new folder that
Original PR description
Issue: When we have multiple companies and we create different folders for each other, if we are working in a folder from let's say company A and then we switch to Company B, we will run the same…
Issue: When we have multiple companies and we create different folders for each other, if we are working in a folder from let's say company A and then we switch to Company B, we will run the same link to this folder but from the Company B rights point of view, and since this folder is not accesible from this company it will throw a traceback and break the page until refresh to another url. Steps to reproduce: 1. Install Documents. 2. Have atleast 2 companies. 3. Create a new folder that belongs to the current company. 4. While having this folder selected, change to the 2nd company. Solution: The issue is triggered within the load funcion for the DocumentsSearchModel, since we get the folderId that's in the url, and we also get the list of the folder we have access to, we could filter out if the current folder we are trying to access is within this list before calling toggleCategoryValue, and If it's not we could just call it on `folderId = false;` as default (which is the "All" section of folders). This way we avoid calling `category.values.get(...)` later on for undefined (we don't have access to this folder). opw-3971935 Forward-Port-Of: odoo/enterprise#68377 Forward-Port-Of: odoo/enterprise#64513
#### [FIX] stock_barcode: restrict product scan pckging > #### How to reproduce: > - Create a product with a product packaging and set a barcode for this packaging; > - In the Receipts operation type config, check the product mandatory scan; > - Create and confirm a receipt for the created product; > - Open the receipt in the Barcode app; > - Scan the product's packaging => A notification asks you to scan the product first. > > This behavior is not right, a packaging should be a valid s
Original PR description
#### [FIX] stock_barcode: restrict product scan pckging > #### How to reproduce: > - Create a product with a product packaging and set a barcode for this packaging; > - In the Receipts operation type…
#### [FIX] stock_barcode: restrict product scan pckging > #### How to reproduce: > - Create a product with a product packaging and set a barcode for this packaging; > - In the Receipts operation type config, check the product mandatory scan; > - Create and confirm a receipt for the created product; > - Open the receipt in the Barcode app; > - Scan the product's packaging => A notification asks you to scan the product first. > > This behavior is not right, a packaging should be a valid scan too for product's mandatory scan. > > [OPW-4062460](https://www.odoo.com/odoo/project/49/tasks/4062460?cids=1) ### [FIX] stock_barcode: GS1 packaging with lot > #### Steps to reproduce: > - In Inventory settings, choose GS1 as barcode nomenclature and activate packages; > - Create a storable product tracked by lot; > - Create a lot for this product (e.g.: 12345); > - Create a second storable product tracked by lot; > - Create a new lot with the same name (12345) and a packaging on the product page with the barcode number 10000000240489; > - Go back to the barcode app and create a new delivery; > - San the barcode 01100000002404891012345 > => The line is added for the right product but the lot is missing. > > #### What happens: > When the GS1 barcode is parsed, we got a lot name and a packaging barcode, thus, we will search a lot for the scanned lot name. > To avoid fetching the wrong lot in case multiple lots have the same name (but different product), we give a filter when the lot is scanned alongside a product. > The issue here is we didn't scan a product but a packaging and we forgot to give the same filter in this case. > > [OPW-3894500](https://www.odoo.com/odoo/project/49/tasks/3894500?cids=1) ### [FIX] stock_barcode_picking_batch: reserved lot > Bug introduced by: https://github.com/odoo/enterprise/pull/63908 > > #### How to reproduce: > - Create a product tracked by lot; > - For this product, add some quantity in stock for at least two different lots; > - Create a delivery for this product, with enough quantity to reserve at least two different lots; > - Confirm it and add it into a batch; > - Open this batch in the Barcode app; > - You should have a button to display reserved lots on the product line, click on it, it will display the reserved lot AND select the first one; > - Scan a reserved lot other than the first one => The first one will be replaced by the scannned lot even if there is already another line with this lot. > > [OPW-4017945](https://www.odoo.com/odoo/project/49/tasks/4017945?cids=1) Forward-Port-Of: odoo/enterprise#68313 Forward-Port-Of: odoo/enterprise#67267
Current behaviour: --- When settings the user's language as hebrew, the user cannot open any documents Steps to reproduce: --- 1. My profile > Language > Hebrew 2. Go to Documents 3. Open any documents 4. Traceback Cause of the issue: --- file_extension would be literally translated Fix: --- Setting t-translation as off opw-3938083 Forward-Port-Of: odoo/enterprise#68131 Forward-Port-Of: odoo/enterprise#66688
Original PR description
Current behaviour: --- When settings the user's language as hebrew, the user cannot open any documents Steps to reproduce: --- 1. My profile > Language > Hebrew 2. Go to Documents 3. Open any documents 4. Traceback Cause of the issue: --- file_extension would be literally translated Fix: --- Setting t-translation as off opw-3938083 Forward-Port-Of: odoo/enterprise#68131 Forward-Port-Of: odoo/enterprise#66688
Display a notification to the user when a document starts printing and again when the printing process is complete. Each notification include the name of the printer being used, so the user is informed about the status of their print job and the specific printer involved. This enhances the overall experience by providing clear feedback. Currently, the user is only notified when the print job is failed. Forward-Port-Of: odoo/enterprise#68279 Forward-Port-Of: odoo/enterprise#68102
Original PR description
Display a notification to the user when a document starts printing and again when the printing process is complete. Each notification include the name of the printer being used, so the user is informed about the status of their print job and the specific printer involved. This enhances the overall experience by providing clear feedback. Currently, the user is only notified when the print job is failed. Forward-Port-Of: odoo/enterprise#68279 Forward-Port-Of: odoo/enterprise#68102
The Ecuadorian law requires the unit price on the XML invoice and on the PDF to be the same, this is currently not the case with taxes included in the price. ### Steps to reproduce: - Install the 'l10n_ec' module and switch to an Ecuadorian company - Change the 'IVA 15% (411, Servicios)' Tax to be included - In Accounting create a new Customer Invoice - Select 'Instituto Ecuatoriano' as Customer - Add a line with the included tax set before - Select 'Sin utilization del sistema financie
Original PR description
The Ecuadorian law requires the unit price on the XML invoice and on the PDF to be the same, this is currently not the case with taxes included in the price. ### Steps to reproduce: - Install the 'l10n_ec' module and switch to an Ecuadorian company - Change the 'IVA 15% (411, Servicios)' Tax to be included - In Accounting create a new Customer Invoice - Select 'Instituto Ecuatoriano' as Customer - Add a line with the included tax set before - Select 'Sin utilization del sistema financiero' as Payment Method - Confirm - On the blue popup at the top of the page, click 'process now' to get the XML in the chatter - Click preview to get the PDF - The unit prices are not the same ### Cause: Usually on the PDF the unit price with included taxes is displayed. ### Solution: Create a xpath to compute the unit price in the same way as the XML. opw-4078177 Forward-Port-Of: odoo/enterprise#67721
### Steps to reproduce: - Create a storable product P tracked by SN - Create a consumable (or a storable with 5 units on hand) product COMP 1 and a storable product COMP 2 (without units on hand) - Create a BOM for P with an operation op 1 and two component lines: - 1 x COMP 1 consumed in op 1 - 1 x COMP 2 consumed in op 1 - Create and confirm an MO for 5 units of P - Go to the shopfloor and click on register production. **> the qty is updated to 1 on COMP 2 but to 5/1 on
Original PR description
### Steps to reproduce: - Create a storable product P tracked by SN - Create a consumable (or a storable with 5 units on hand) product COMP 1 and a storable product COMP 2 (without units on hand) -…
### Steps to reproduce:
- Create a storable product P tracked by SN
- Create a consumable (or a storable with 5 units on hand) product
COMP 1 and a storable product COMP 2 (without units on hand)
- Create a BOM for P with an operation op 1 and two component lines:
- 1 x COMP 1 consumed in op 1
- 1 x COMP 2 consumed in op 1
- Create and confirm an MO for 5 units of P
- Go to the shopfloor and click on register production.
**> the qty is updated to 1 on COMP 2 but to 5/1 on COMP 1**
As such, if you click on the 5/1, 5 units of COMP 1 will be consumed to produce only one unit of P
### Cause of the issue:
When you confirm the MO, since Comp 1 is a consumable its quantity is automatically set to 5.0 because reservation are bypassed. On the other hand, since Comp 2 is a storable without on hand qty, its quantity stays at 0.0. When you click on register production, or on the plus sign will trigger a call of the "_set_qty_producing" method. This call will update the qty_producing of the final product:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1214-L1218
However, the update of the qty consumed by the raw move will be bypassed because of these lines:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1225-L1226
https://github.com/odoo/enterprise/blob/0646022d7726a0cc183b191ca5be4e4bb4368f93/mrp_workorder/models/stock_move.py#L10-L13
And the quantity will therefore not be updated by these lines:
https://github.com/odoo/odoo/blob/f86c68ec8340a59407ea9c51dd0ba942f9b4429c/addons/mrp/models/mrp_production.py#L1228-L1231
However, as the quantity is not set to 0, it will be displayed as "quantity/should_consume_qty" and clicking on the raw move line will not update the quantity so 5 units will be marked as consumed ("picked").
Community: https://github.com/odoo/odoo/pull/168205
opw-3887580
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/enterprise#68011
Forward-Port-Of: odoo/enterprise#63912Before this commit: Having a printer P saved in the browser cache as the printer for a report R. If the printer P is removed from the IoT device, a pop-up error will raise when R tried to be printed with an unclear "iot.device(X) is missing". After this commit: The missing device is detected on the server side, and the cache is automatically cleaned for this report so that on the next attempt, the printer choice pop-up appear. Also took the opportunity to clean the JS code on the modified
Original PR description
Before this commit: Having a printer P saved in the browser cache as the printer for a report R. If the printer P is removed from the IoT device, a pop-up error will raise when R tried to be printed with an unclear "iot.device(X) is missing". After this commit: The missing device is detected on the server side, and the cache is automatically cleaned for this report so that on the next attempt, the printer choice pop-up appear. Also took the opportunity to clean the JS code on the modified functions :) opw-3965623 opw-4017201 Forward-Port-Of: odoo/enterprise#67355 Forward-Port-Of: odoo/enterprise#65743