Thursday, May 25, 2023
54 changes · master
Enhancements to existing features
The Discuss channel member list has been visually refreshed so member avatars better match Odoo's current Milk design style. This provides a more consistent and polished experience when viewing participants in a channel.
Original PR description
Fitting the style of the channel member list with milk design. 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
The QR Code Menu setting buttons in Point of Sale self-ordering have been restyled to look more polished and appealing. This makes the settings screen clearer and more pleasant for users configuring self-order options.
Original PR description
The buttons for the QR Code Menu setting are quite unappealing. This PR changes their style. Closes 3338270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Recruitment users can now filter job positions using a search panel for departments and companies. This makes it faster to narrow down job listings and manage openings across organizational units.
Original PR description
task-3332640 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The point of sale interface has been adjusted to work better on mobile devices, including updated screen layouts and popups used by waiters. Table order badges now show the number of items still needing preparation or printing, helping staff see pending work more clearly.
Original PR description
The PoS needed improvments for the mobile use. This commit is changing the display of some screen and popups like the NumberPopup. It also changes the logic of the order count badge on the table. It now displays the number of orderline (and their quantity) to send to the printers or preparation display if there is at least one. Enterprise PR: odoo/enterprise#41013 task-id: 2893634 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The domain selector and search filters were refined to make filter conditions easier to read and manage. Users should see clearer filter descriptions, improved connector display, and a more comfortable dialog layout when building searches.
Original PR description
Task ID: 3324924
This update improves day-to-day manufacturing and inventory workflows with clearer production dates, searchable lot and serial details on work orders, kit scrapping, and optional replenishment after scrapping. It also adds better work-in-progress reporting and reduces avoidable errors by improving warehouse rule fallback behavior.
Original PR description
Combination of multiple small improvements in MRP, see different feature commits for details. Task: 2479234 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The partner portal now shows email and phone details in lead and opportunity lists, making it easier for partners to contact prospects quickly. The list labels were also clarified so users can better distinguish leads from opportunities.
Original PR description
**Before PR:** Improve the lead and opportunity list displayed on the partner portal. **After PR:** -> Add the Email and Phone field to the list of the lead and the opportunity. -> Change the name label of the lead's list with Lead. -> Change the name label of Opportunity's list with Opportunity. Task-3300626
The QR Code menu settings in Point of Sale self-order now show arrow icons on relevant buttons. This small visual update makes the settings page look more consistent and easier to scan.
Original PR description
This PR adds the arrow icons to buttons in the QR Code menu settings in the interest of making the styling more uniform with the rest of the page. Closes: 3339325 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale IoT integration was updated to stay compatible with recent mobile-friendly changes to the payment screen. This helps ensure payment information continues to display correctly for restaurant and in-store workflows using connected PoS devices.
Original PR description
In a community commit, we change the display of some part of the PoS for a mobile use. In this commit, we change the payment lines xml structure on the PaymentScreen. The code in pos_iot had to be adapted then. Community PR: odoo/odoo#121286
Manufacturing analysis now includes employee costs, giving businesses a more complete view of production expenses. Manufacturing tablet workflows also gain control over whether lot or serial numbers are prefilled, with a related update to keep quality checks aligned when lots change.
Original PR description
Combination of multiple small improvements in MRP, see different feature commits for details. Task: 2479234
Resolved issues and error corrections
This fixes duplicate internal names in Sales and Inventory settings screens. It helps future updates and customizations target the right sections reliably, reducing the risk of conflicts when extending these settings.
Original PR description
Following 78ae3da90213261071fdadb06cbb0507182303e2 names were added to improve the view inheritance. But some names were duplicates. This commit will ensure every name is unique to facilitate inheritance.
Documentation and clarification updates
This pull request records that contributor Byuanit has signed Odoo's Contributor License Agreement and acknowledged the contribution guidelines. This is an administrative legal step that helps ensure contributions can be accepted under the project's licensing rules.
Original PR description
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Before this commit: it was possible to create an event for another user as its organizer. But even if that user has a synchronized Google calendar, it will be sent by the current user token, and it causes several issues. The solution is to use the event's organizer token if it exists. opw-3076595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#121668 Forward-Port-Of: odoo/odoo#110858
Original PR description
Before this commit: it was possible to create an event for another user as its organizer. But even if that user has a synchronized Google calendar, it will be sent by the current user token, and it causes several issues. The solution is to use the event's organizer token if it exists. opw-3076595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#121668 Forward-Port-Of: odoo/odoo#110858
This update corrects minor visual issues in the self-ordering interface for Point of Sale. It helps provide a more polished and consistent experience for customers using self-service ordering.
Original PR description
This PR aims to fix some small styling issues from the pos_self_order app. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Social Marketing feed now avoids showing users a timeout error when a refresh or synchronization is affected by slow or lost connectivity. Since stream and statistics refreshes run repeatedly, skipped updates can be retried later without interrupting the user experience.
Original PR description
While loading the feed page with function( _fetch_page_posts) in social marketing module, which is facing connectivity issue due to loss of network or slow internet the page is getting read time out. This is happening when the page is being refreshed/synchronized. To avoid showing an error to the end user, we ignore those read timeouts.As refreshing the streams/statistics is a recurring work, they will get refreshed again later.  sentry id-3953488576
This update fixes typos in eSignature template identifiers and English text. It improves clarity and polish for users without changing how the signing process works.
Original PR description
This commit corrects typos in template identifiers as well as English text. task-3326795
This fix prevents Field Service sales-related modules from failing during installation or upgrade when a referenced Field Service project was previously deleted. It helps keep module updates reliable for customers who have removed default project records.
Original PR description
When the user deletes a project in the `Project` module that is present in the data file of `Field Service - Sale` module. While installing or upgrading the `Field Service - Sale` module, the user…
When the user deletes a project in the `Project` module that is present in the data file of `Field Service - Sale` module. While installing or upgrading the `Field Service - Sale` module, the user gets an error as the project referenced from the 'Project' module has been deleted.
Steps to reproduce :
1. Install the `Field Service` module.
2. Open the project app.
3. Delete all the tasks of the `Field Service` project and then delete the `Field Service` project.
4. Install or upgrade modules that are using that project like `Field Service - Sale`, `Helpdesk FSM`, etc.
5. Traceback will be generated.
Traceback in sentry :
```
KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f93d94743a0>, 'industry_fsm.fsm_project')
File "odoo/tools/cache.py", line 91, in lookup
r = d[key]
File "<decorator-gen-3>", line 2, in __getitem__
File "odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "odoo/tools/lru.py", line 34, in __getitem__
a = self.d[obj]
ValueError: External ID not found in the system: industry_fsm.fsm_project
File "odoo/tools/convert.py", line 550, in _tag_root
f(rec)
File "odoo/tools/convert.py", line 420, in _tag_record
f_val = self.id_get(f_ref, raise_if_not_found=nodeattr2bool(rec, 'forcecreate', True))
File "odoo/tools/convert.py", line 533, in id_get
res = self.model_id_get(id_str, raise_if_not_found)
File "odoo/tools/convert.py", line 539, in model_id_get
return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found)
File "odoo/addons/base/models/ir_model.py", line 1982, in _xmlid_to_res_model_res_id
return self._xmlid_lookup(xmlid)[1:3]
File "<decorator-gen-40>", line 2, in _xmlid_lookup
File "odoo/tools/cache.py", line 96, in lookup
value = d[key] = self.method(*args, **kwargs)
File "odoo/addons/base/models/ir_model.py", line 1975, in _xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
ParseError: while parsing /home/odoo/src/enterprise/saas-16.2/industry_fsm_sale/data/industry_fsm_data.xml:5, somewhere inside
<record id="field_service_product" model="product.product">
<field name="name">Field Service</field>
<field name="project_id" ref="industry_fsm.fsm_project"/>
<field name="service_tracking">task_global_project</field>
<field name="type">service</field>
<field name="list_price">100</field>
<field name="uom_id" ref="uom.pr...
File "odoo/http.py", line 2119, in __call__
response = request._serve_db()
File "odoo/http.py", line 1702, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1729, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1926, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 719, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 32, in call_button
action = self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 24, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "odoo/addons/base/models/res_config.py", line 614, in execute
installation_status = self._install_modules(to_install)
File "odoo/addons/base/models/res_config.py", line 32, in _install_modules
result = to_install_modules.button_immediate_install()
File "home/odoo/src/custom/trial/saas_trial/models/module.py", line 80, in button_immediate_install
return super(IrModuleModule, self).button_immediate_install()
File "<decorator-gen-73>", line 2, in button_immediate_install
File "odoo/addons/base/models/ir_module.py", line 76, in check_and_log
return method(self, *args, **kwargs)
File "odoo/addons/base/models/ir_module.py", line 472, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "home/odoo/src/custom/trial/saas_trial/models/module.py", line 52, in _button_immediate_function
res = super(IrModuleModule, self)._button_immediate_function(function)
File "odoo/addons/base/models/ir_module.py", line 596, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "<decorator-gen-14>", line 2, in new
File "odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "odoo/modules/loading.py", line 481, in load_modules
processed_modules += load_marked_modules(env, graph,
File "odoo/modules/loading.py", line 365, in load_marked_modules
loaded, processed = load_module_graph(
File "odoo/modules/loading.py", line 226, in load_module_graph
load_data(env, idref, mode, kind='data', package=package)
File "odoo/modules/loading.py", line 71, in load_data
tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind)
File "odoo/tools/convert.py", line 613, in convert_file
convert_xml_import(env, module, fp, idref, mode, noupdate)
File "odoo/tools/convert.py", line 679, in convert_xml_import
obj.parse(doc.getroot())
File "odoo/tools/convert.py", line 599, in parse
self._tag_root(de)
File "odoo/tools/convert.py", line 550, in _tag_root
f(rec)
File "odoo/tools/convert.py", line 563, in _tag_root
raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
```
In this commit, prevent the creation of a record that contains the reference of deleted record.
sentry - 4087533601, 4192250622The selection function get_selection_class for the field classname has obviously been thought to be overridable by subclasses in order to add new selection classes if need be. However, before this commit the method was passed directly to the Selection constructor, which used the callable object directly. If it was overridden by a subclass, the Selection object would still use the same non-overridden callable instance. With this commit, we give the name of the method instead of the callable
Original PR description
The selection function get_selection_class for the field classname has obviously been thought to be overridable by subclasses in order to add new selection classes if need be. However, before this commit the method was passed directly to the Selection constructor, which used the callable object directly. If it was overridden by a subclass, the Selection object would still use the same non-overridden callable instance. With this commit, we give the name of the method instead of the callable, which makes that the method is resolved after all overrides, and therefore the resulting selection will be the overridden one. Forward-Port-Of: odoo/odoo#122299
Steps to reproduce : - Create a product with a default `kg` uom - Create a MO to produce 100 `g` of this product - Open the MO Overview - The first line indicates we try to produce 0.1 `g`. For a `mrp.production`, `product_qty` is the quantity using the record's linked uom, while `product_uom_qty` is the quantity using the product's default uom. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122241
Original PR description
Steps to reproduce : - Create a product with a default `kg` uom - Create a MO to produce 100 `g` of this product - Open the MO Overview - The first line indicates we try to produce 0.1 `g`. For a `mrp.production`, `product_qty` is the quantity using the record's linked uom, while `product_uom_qty` is the quantity using the product's default uom. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122241
Allow users to find analytic accounts in the analytic widget if there are more than 7 results for their search criteria, by providing a Search More option. Current behavior before PR: Users were forced to type the entire analytic account name if they had many analytic accounts with similar names. Desired behavior after PR is merged: A "Search More" option is added to the Autocomplete options when there are more than 6 analytic accounts found. The Search More option provides a SelectCreat
Original PR description
Allow users to find analytic accounts in the analytic widget if there are more than 7 results for their search criteria, by providing a Search More option. Current behavior before PR: Users were forced to type the entire analytic account name if they had many analytic accounts with similar names. Desired behavior after PR is merged: A "Search More" option is added to the Autocomplete options when there are more than 6 analytic accounts found. The Search More option provides a SelectCreate Dialog where users are able to find the required analytic account easily. task-3180055 Forward-Port-Of: odoo/odoo#122172 Forward-Port-Of: odoo/odoo#115504
Description of the bug: - Have an IT company configured - Activate Dropship - Create a Product P with dropship enabled and vendor configured - Create a quotation to an IT customer - Add P to a line - Confirm - Purchase will be created automatically - Confirm it. - Go to dropship picking - Confirm - Print The DDT report does not show up correctly: - Warehouse address is the company address - Customer address is the vendor address Fast link to video https://watch.screencastify.c
Original PR description
Description of the bug: - Have an IT company configured - Activate Dropship - Create a Product P with dropship enabled and vendor configured - Create a quotation to an IT customer - Add P to a line - Confirm - Purchase will be created automatically - Confirm it. - Go to dropship picking - Confirm - Print The DDT report does not show up correctly: - Warehouse address is the company address - Customer address is the vendor address Fast link to video https://watch.screencastify.com/v/9Do2xXWmnwx8pHuFFtck https://www.odoo.com/web#id=3128812&model=project.task opw-3128812 Forward-Port-Of: odoo/odoo#122034 Forward-Port-Of: odoo/odoo#110398
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#122135
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122135
To reproduce ============ - add video to a course - unenroll if user is unrolled - open video in full screen mode and play it - move nearly to last of the video so that is detected as completed - an error will occure Problem ======= - we video is detected to be completed we want to mark the slide as completed - we retrieve the current slide using the directive `.o_wslides_sidebar_done_button[data-id="${slideId}"]` - as the user is not enrolled, this directive doesn't exist which mak
Original PR description
To reproduce
============
- add video to a course
- unenroll if user is unrolled
- open video in full screen mode and play it
- move nearly to last of the video so that is detected as completed
- an error will occure
Problem
=======
- we video is detected to be completed we want to mark the slide as completed
- we retrieve the current slide using the directive `.o_wslides_sidebar_done_button[data-id="${slideId}"]`
- as the user is not enrolled, this directive doesn't exist which makes our slide `undefined` so reading from `undefined` leads to the error
Solution
========
check if slide is correctly retreived before trying to read anything from it
opw-3295662
Forward-Port-Of: odoo/odoo#121062before this commit, if user need to bypass the validation added for the length in custom module, the entire function has be rewritten in the custom module. scenario: * add the phone_mobile_search field to the name search of res.partner model * then open sale order form, and in the customer field enter any letter or digits, this user error will be raised after this commit, users just need to change the class attribute: _phone_search_min_length in the inherited module. --- I co
Original PR description
before this commit, if user need to bypass the validation added for the length in custom module, the entire function has be rewritten in the custom module. scenario: * add the phone_mobile_search field to the name search of res.partner model * then open sale order form, and in the customer field enter any letter or digits, this user error will be raised after this commit, users just need to change the class attribute: _phone_search_min_length in the inherited module. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122248
_log_less_quantities_than_expected call _log_activity_get_documents with empty dict and raises error Description of the issue/feature this PR addresses: Validate bath picking mixing pickings with all lines available and pickings with lines not availables. The above exception was the direct cause of the following exception: File "/opt/odoo/auto/addons/stock_picking_batch/wizard/stock_backorder_confirmation.py", line 17, in process_cancel_backorder res = super().process_cancel_backo
Original PR description
_log_less_quantities_than_expected call _log_activity_get_documents with empty dict and raises error Description of the issue/feature this PR addresses: Validate bath picking mixing pickings with all…
_log_less_quantities_than_expected call _log_activity_get_documents with empty dict and raises error
Description of the issue/feature this PR addresses:
Validate bath picking mixing pickings with all lines available and pickings with lines not availables.
The above exception was the direct cause of the following exception:
File "/opt/odoo/auto/addons/stock_picking_batch/wizard/stock_backorder_confirmation.py", line 17, in process_cancel_backorder
res = super().process_cancel_backorder()
File "/opt/odoo/auto/addons/stock/wizard/stock_backorder_confirmation.py", line 72, in process_cancel_backorder
self._check_less_quantities_than_expected(pickings_to_validate)
File "/opt/odoo/auto/addons/stock/wizard/stock_backorder_confirmation.py", line 48, in _check_less_quantities_than_expected
pick_id._log_less_quantities_than_expected(moves_to_log)
File "/opt/odoo/auto/addons/sale_stock/models/stock.py", line 154, in _log_less_quantities_than_expected
documents = self._log_activity_get_documents(moves, 'sale_line_id', 'DOWN', _keys_in_sorted, _keys_in_groupby)
File "/opt/odoo/auto/addons/stock/models/stock_picking.py", line 1218, in _log_activity_get_documents
origin_objects = self.env[list(orig_obj_changes.keys())[0]._name].concat(*list(orig_obj_changes.keys()))
Exception
Current behavior before PR:
Raises error because try log empty changes
Desired behavior after PR is merged:
Only try _log_less_quantities_than_expected if picking has diferences
@Tecnativa TT43353
Related with new changes in this commit:
https://github.com/odoo/odoo/commit/ca301df2cbf344e291f36b32d583c1e1900add96
Surely before this commit the error are not raised because the log was not working.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#121820
Forward-Port-Of: odoo/odoo#121570## [FIX] core: maximum recursion because of `active` fields. In specific situation, unlink can lead to raise a `RecursionError`: - The model `A` has a many2one `b_id` field toward a model `B`. This field is set with `ondelete='cascade'`. - The model `A` has one **store** related field **no-sudo** named `a_related` (`related='b_id.b_other_field`). - With `ir.rule` on model `A` with a domain containing `a_related` You have one record B `b_1` with 20 records A linked to it (`a_1, ..., a_20
Original PR description
## [FIX] core: maximum recursion because of `active` fields. In specific situation, unlink can lead to raise a `RecursionError`: - The model `A` has a many2one `b_id` field toward a model `B`. This…
## [FIX] core: maximum recursion because of `active` fields.
In specific situation, unlink can lead to raise a `RecursionError`:
- The model `A` has a many2one `b_id` field toward a model `B`. This field is set with `ondelete='cascade'`.
- The model `A` has one **store** related field **no-sudo** named `a_related` (`related='b_id.b_other_field`).
- With `ir.rule` on model `A` with a domain containing `a_related`
You have one record B `b_1` with 20 records A linked to it (`a_1, ..., a_20`). When you try to unlink `b_1`:
### Stack:
```
File "...", line 543, in ...
b_1.unlink()
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 3594, in unlink
self.env.flush_all()
```
=> At this point, `a_1, ..., a_20` have already been deleted from the database because of the 'cascade' deletion. But the ORM doesn't have any information about this, and `a_related` (for `a_1, ..., a_20`) are flagged to be recomputed (because it depends on `b_id.b_other_field`)
```
File "/home/odoo/Documents/dev/odoo/odoo/api.py", line 732, in flush_all
self._recompute_all()
File "/home/odoo/Documents/dev/odoo/odoo/api.py", line 728, in _recompute_all
self[field.model_name]._recompute_field(field)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 6165, in _recompute_field
field.recompute(records)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1348, in recompute
self.compute_value(record)
```
=> `self.compute_value(recs)` raised a `MissingError` before recalling `compute_value` with only the first `record` (but others are still in the prefetch)
```
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1368, in compute_value
records._compute_field_value(self)
```
=> `a_related` of `record` is removed from to_compute, but only the first record, not the rest of the records present in the prefetch set.
```
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 4194, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 100, in determine
return needle(records, *args)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 689, in _compute_related
values = [first(value[name]) for value in values]
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 689, in <listcomp>
values = [first(value[name]) for value in values]
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 5860, in __getitem__
return self._fields[key].__get__(self, type(self))
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 2772, in __get__
return super().__get__(records, owner)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1186, in __get__
recs._fetch_field(self)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 3162, in _fetch_field
self._read(fnames)
```
=> `_read` tries to read the first record + others from the prefetch set.
```
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 3215, in _read
self.with_context(active_test=False)._flush_search([], order='id')
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 4607, in _flush_search
self.env[model_name].flush_model(field_names)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 5560, in flush_model
self._recompute_model(fnames)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 6134, in _recompute_model
self._recompute_field(field)
```
=> This is where the recursion starts, record compute will move forward one by one. But sadly, the stack grows very fast, and with only a few (already deleted) records to recompute, the issue will be generated.
```
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 6165, in _recompute_field
field.recompute(records)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1348, in recompute
self.compute_value(record)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1368, in compute_value
records._compute_field_value(self)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 4194, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 100, in determine
return needle(records, *args)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 689, in _compute_related
values = [first(value[name]) for value in values]
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 689, in <listcomp>
values = [first(value[name]) for value in values]
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 5860, in __getitem__
return self._fields[key].__get__(self, type(self))
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 2772, in __get__
return super().__get__(records, owner)
File "/home/odoo/Documents/dev/odoo/odoo/fields.py", line 1186, in __get__
recs._fetch_field(self)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 3162, in _fetch_field
self._read(fnames)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 3215, in _read
self.with_context(active_test=False)._flush_search([], order='id')
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 4607, in _flush_search
self.env[model_name].flush_model(field_names)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 5560, in flush_model
self._recompute_model(fnames)
File "/home/odoo/Documents/dev/odoo/odoo/models.py", line 6134, in _recompute_model
self._recompute_field(field)
```
Fix:
Move the `MissingError` logic of `_recompute_field` inside the `recompute` directly.
## [IMP] core: avoid extra invalidate of compute no-store field.
'tocompute' in the 'Transaction' contains store field on records to be recomputed. No-store compute fields are directly invalidated from the cache when a dependency changes (see 'BaseModel.modified').
In fact, '_recompute_field' was actually doing too much for nothing. Also, it may invalidate caches of compute no-store fields for no reason (e.g., if they are searchable). Remove the part for field compute no-store field. And prevent '_recompute_field' callers from calling it with no-store fields.
opw-3268088
Forward-Port-Of: odoo/odoo#121917
Forward-Port-Of: odoo/odoo#121355Following the suppression of the use of useListener in this PR https://github.com/odoo/odoo/pull/112219. A function adaptation has been forgotten. A correction was made so that now the argument in the declaration of the said function is not decomposed. Forward-Port-Of: odoo/odoo#122104
Original PR description
Following the suppression of the use of useListener in this PR https://github.com/odoo/odoo/pull/112219. A function adaptation has been forgotten. A correction was made so that now the argument in the declaration of the said function is not decomposed. Forward-Port-Of: odoo/odoo#122104
Steps to reproduce: Without being logged in, complete the purchase flow on the ecommerce, taking care to have a different billing and shipping address. If you change the delivery address, you will get an access error. Cause: In some cases, we do not have access to the `name` field of the `partner` record. Solution: Add `sudo` to be able to read the fields. opw-3276877 Forward-Port-Of: odoo/odoo#122121
Original PR description
Steps to reproduce: Without being logged in, complete the purchase flow on the ecommerce, taking care to have a different billing and shipping address. If you change the delivery address, you will get an access error. Cause: In some cases, we do not have access to the `name` field of the `partner` record. Solution: Add `sudo` to be able to read the fields. opw-3276877 Forward-Port-Of: odoo/odoo#122121
This commit adds proxy urls for prod and test peppol servers that are missing at the moment. Additional small fixes: - `default_peppol_move_state` when receiving a new document should match the state on the iap server - not committing when running tests --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122090
Original PR description
This commit adds proxy urls for prod and test peppol servers that are missing at the moment. Additional small fixes: - `default_peppol_move_state` when receiving a new document should match the state on the iap server - not committing when running tests --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122090
With website preview, the previous youtube player was being played at the same time as the new one because of the iframefallback and the autoplay. To avoid this, we don't set iframefallback when there is a youtube player. task-3012952 Forward-Port-Of: odoo/odoo#112868
Original PR description
With website preview, the previous youtube player was being played at the same time as the new one because of the iframefallback and the autoplay. To avoid this, we don't set iframefallback when there is a youtube player. task-3012952 Forward-Port-Of: odoo/odoo#112868
Current behavior before PR: In email marketing, when we click on the mobile preview of the 'mail template' in dark mode, we find the close button in dark color which merges with the background and hence it is not distinguishable. Desired behavior after PR is merged: The close button can now be seen clearly in the dark mode. Task-3326846 Forward-Port-Of: odoo/odoo#121796
Original PR description
Current behavior before PR: In email marketing, when we click on the mobile preview of the 'mail template' in dark mode, we find the close button in dark color which merges with the background and hence it is not distinguishable. Desired behavior after PR is merged: The close button can now be seen clearly in the dark mode. Task-3326846 Forward-Port-Of: odoo/odoo#121796
Upon changing/removing/adding the analytic account on a manufacturing order, only the analytic lines due to the raw material moves are updated, but not the ones for workcenter costs. To reproduce: - Create an MO with a workorder on a workcenter which has an operating cost set - Complete time on this workorder to generate the [WC] AALs on this MO - Change the analytic account on the MO (or delete it) Bug: The [WC] AALs never get correctly updated. This fix builds on https://github.com/o
Original PR description
Upon changing/removing/adding the analytic account on a manufacturing order, only the analytic lines due to the raw material moves are updated, but not the ones for workcenter costs. To reproduce: - Create an MO with a workorder on a workcenter which has an operating cost set - Complete time on this workorder to generate the [WC] AALs on this MO - Change the analytic account on the MO (or delete it) Bug: The [WC] AALs never get correctly updated. This fix builds on https://github.com/odoo/odoo/pull/79614 to correct this behaviour and also take into account changes for the workcenter cost AALs when the analytic_account of a manufacturing order is changed. Task: 3252742 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#121891 Forward-Port-Of: odoo/odoo#117308
Since we've created unescapeHTML to replace the _.unescape function. The issue is that _.unescape was using the hex code ''," for the character " ' ". And the new function uses the decimal code '&https://github.com/odoo/odoo/issues/39;', but as there are some old domains for dashboard have ben stored escaped with ''', we are now unable to unescape them. We also have an upgrade PR to clean those domains badly stored, and on that will remove this use of unescape for dashboard. But w
Original PR description
Since we've created unescapeHTML to replace the _.unescape function. The issue is that _.unescape was using the hex code ''," for the character " ' ". And the new function uses the decimal code '&https://github.com/odoo/odoo/issues/39;', but as there are some old domains for dashboard have ben stored escaped with ''', we are now unable to unescape them. We also have an upgrade PR to clean those domains badly stored, and on that will remove this use of unescape for dashboard. But we'll still keep consistency with the _.unescape old function. Forward-Port-Of: odoo/odoo#122312
After the merge of the milk design at odoo, the calendar_appointments_hour_tour started failing due to a change in the button that returns to the calendar view. This commit fixes the tour by adapting the trigger selector to the new design. runbot-build-error-21004 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 Forwar
Original PR description
After the merge of the milk design at odoo, the calendar_appointments_hour_tour started failing due to a change in the button that returns to the calendar view. This commit fixes the tour by adapting the trigger selector to the new design. runbot-build-error-21004 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#122335
Follow-up of MILK web client redesign. Before this commit, the avatar and im status in invitation popover in discuss app were not showing properly: avatar not rounded, and im status mispositionned in top-right corner. This commit fixes the issue by absolutely positioning im status like all other uses of IM status on top of user avatar. Before / After <img width="393" alt="before" src="https://github.com/odoo/odoo/assets/6569390/032e3474-d139-4349-8eeb-bc7fbbdd3988"> <img width="398" al
Original PR description
Follow-up of MILK web client redesign. Before this commit, the avatar and im status in invitation popover in discuss app were not showing properly: avatar not rounded, and im status mispositionned in top-right corner. This commit fixes the issue by absolutely positioning im status like all other uses of IM status on top of user avatar. Before / After <img width="393" alt="before" src="https://github.com/odoo/odoo/assets/6569390/032e3474-d139-4349-8eeb-bc7fbbdd3988"> <img width="398" alt="after" src="https://github.com/odoo/odoo/assets/6569390/8adc2193-06ac-4bd2-be06-08425ed4a28e"> Forward-Port-Of: odoo/odoo#122355
Install and then uninstall the utm module via the web client, you get a traceback because the `ir.http` override of the utm module is still present in the registry altought the module is not installed anymore. The problem affects all modules that override the `_post_dispatch` method of `ir.http`, it is not limited to UTM. The problem is that, after the uninstallation, a new registry (without the uninstalled modules) is created but the old registry was still used by the HTTP stack. Close
Original PR description
Install and then uninstall the utm module via the web client, you get a traceback because the `ir.http` override of the utm module is still present in the registry altought the module is not installed anymore. The problem affects all modules that override the `_post_dispatch` method of `ir.http`, it is not limited to UTM. The problem is that, after the uninstallation, a new registry (without the uninstalled modules) is created but the old registry was still used by the HTTP stack. Closes: #121755 Forward-Port-Of: odoo/odoo#122242
If a partner in the imported invoice does not exist, we create one on the fly. However, the partner is created without a country, and `_run_vat_test` doesn't check it properly in 15.0, and fails in later versions, where we try to get the country code from the country we pass from `_import_retrieve_and_fill_partner`, which is `False`. This commit retrieves the country from the imported invoice to create the partner and passes the object instead of the `country_code` string to `_run_vat_test`
Original PR description
If a partner in the imported invoice does not exist, we create one on the fly. However, the partner is created without a country, and `_run_vat_test` doesn't check it properly in 15.0, and fails in later versions, where we try to get the country code from the country we pass from `_import_retrieve_and_fill_partner`, which is `False`. This commit retrieves the country from the imported invoice to create the partner and passes the object instead of the `country_code` string to `_run_vat_test` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122250 Forward-Port-Of: odoo/odoo#122077
Fixes and improvement to the taxes update script: 1. Add more testing for general behavior 2. Fix the notification to accountant advisors when there is a tax duplicated 3. Fix a problem with some databases that contain tax uniqueness violation(s) Forward-Port-Of: odoo/odoo#117855 Forward-Port-Of: odoo/odoo#114292
Original PR description
Fixes and improvement to the taxes update script: 1. Add more testing for general behavior 2. Fix the notification to accountant advisors when there is a tax duplicated 3. Fix a problem with some databases that contain tax uniqueness violation(s) Forward-Port-Of: odoo/odoo#117855 Forward-Port-Of: odoo/odoo#114292
When duplicating the reco model, we want to counterpart entry lines to be copied as well. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122309
Original PR description
When duplicating the reco model, we want to counterpart entry lines to be copied as well. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#122309
Before this commit, chat window header showed all actions, which made it quite bloated. The name of conversation was sometimes completely truncated by available actions. This commit fixes the issue by showing at most 2 actions immediately in the chat window header. When there are more actions, it shows an expandable more menu. As a consequence of this change, when a panel is open, it was harder to see the button to close the active panel (toggling off the button). To solve this issue, whe
Original PR description
Before this commit, chat window header showed all actions, which made it quite bloated. The name of conversation was sometimes completely truncated by available actions. This commit fixes the issue by showing at most 2 actions immediately in the chat window header. When there are more actions, it shows an expandable more menu. As a consequence of this change, when a panel is open, it was harder to see the button to close the active panel (toggling off the button). To solve this issue, when a panel is open in chat window, there's a floating button in the top-right corner of content to close the panel. Task-3334793 https://github.com/odoo/enterprise/pull/41348  Forward-Port-Of: odoo/odoo#121981
Have a calendar view with its attribute set to some value (eg `"month,year"`) In studio, change the mode to day. Before this commit, there was a crash because the calendar scales attribute constraints the value of the mode and of the default mode. After this commit, we don't even propose modes that are not part of the scales attribute. opw-3316186 Forward-Port-Of: odoo/enterprise#41356 Forward-Port-Of: odoo/enterprise#41294
Original PR description
Have a calendar view with its attribute set to some value (eg `"month,year"`) In studio, change the mode to day. Before this commit, there was a crash because the calendar scales attribute constraints the value of the mode and of the default mode. After this commit, we don't even propose modes that are not part of the scales attribute. opw-3316186 Forward-Port-Of: odoo/enterprise#41356 Forward-Port-Of: odoo/enterprise#41294
…t cash The spent cash is accumulated instead of making the difference between each year. reported by VALA Forward-Port-Of: odoo/enterprise#41390
Original PR description
…t cash The spent cash is accumulated instead of making the difference between each year. reported by VALA Forward-Port-Of: odoo/enterprise#41390
Before this commit, chat window header showed all actions, which made it quite bloated. The name of conversation was sometimes completely truncated by available actions. This commit fixes the issue by showing at most 2 actions immediately in the chat window header. When there are more actions, it shows an expandable more menu. As a consequence of this change, when a panel is open, it was harder to see the button to close the active panel (toggling off the button). To solve this issue, when
Original PR description
Before this commit, chat window header showed all actions, which made it quite bloated. The name of conversation was sometimes completely truncated by available actions. This commit fixes the issue by showing at most 2 actions immediately in the chat window header. When there are more actions, it shows an expandable more menu. As a consequence of this change, when a panel is open, it was harder to see the button to close the active panel (toggling off the button). To solve this issue, when a panel is open in chat window, there's a floating button in the top-right corner of content to close the panel. Task-3334793 https://github.com/odoo/odoo/pull/121981 Forward-Port-Of: odoo/enterprise#41348
Have an MX company setup Activate a foreign currency (EUR) Create an invoice in MXN, validate CFDI Register a payment in EUR Validate payment CFDI Error occurs during validation Message : Error en complemento Recepción de Pagos. [Error #CRP20275] La suma de los valores registrados en el campo ImpPagado del nodo DoctoRelacionado, convertidos a la moneda del pago, no es menor o igual que el valor del campo Monto opw-3299835 Forward-Port-Of: odoo/enterprise#40982
Original PR description
Have an MX company setup Activate a foreign currency (EUR) Create an invoice in MXN, validate CFDI Register a payment in EUR Validate payment CFDI Error occurs during validation Message : Error en complemento Recepción de Pagos. [Error #CRP20275] La suma de los valores registrados en el campo ImpPagado del nodo DoctoRelacionado, convertidos a la moneda del pago, no es menor o igual que el valor del campo Monto opw-3299835 Forward-Port-Of: odoo/enterprise#40982
…2manys This commit follows 2032f460f55fdfa8b7210dd44a0b6d832654914a that was, yet again, insufficient as a renderer also has the class that are passed in the arch ie: `<tree class="y" />` To have a selector that certainly selects a plain view, we add `.o_view_controller`, which is only added by View.js, and not by the field's subview's renderer. runbot-error-21536 Forward-Port-Of: odoo/enterprise#41473
Original PR description
…2manys This commit follows 2032f460f55fdfa8b7210dd44a0b6d832654914a that was, yet again, insufficient as a renderer also has the class that are passed in the arch ie: `<tree class="y" />` To have a selector that certainly selects a plain view, we add `.o_view_controller`, which is only added by View.js, and not by the field's subview's renderer. runbot-error-21536 Forward-Port-Of: odoo/enterprise#41473
We add a error sound in the Barcode App in odoo/enterprise#33383 The problem is, while running locally the test tours, even if chromium is run headless, the sounds are played. Those sounds coming from nowhere can drive anyone insane ! To fix that, this commit adds a new config parameter, `stock_barcode.mute_sound_notifications`. If set, it will disable the sound in the Barcode App (and it is in the tests' setup !). Also, moves the sound related code from `BarcodeModel` to `MainComponent` so
Original PR description
We add a error sound in the Barcode App in odoo/enterprise#33383 The problem is, while running locally the test tours, even if chromium is run headless, the sounds are played. Those sounds coming from nowhere can drive anyone insane !
To fix that, this commit adds a new config parameter, `stock_barcode.mute_sound_notifications`. If set, it will disable the sound in the Barcode App (and it is in the tests' setup !).
Also, moves the sound related code from `BarcodeModel` to `MainComponent` so it's easier to manage that as a config and it seems more logic for the sounds to be managed by a Component ("client side" object) instead of by the `BarcodeModel (data manipulating object).
Also avoid to load the sound when the when not needed.
Forward-Port-Of: odoo/enterprise#41337
Forward-Port-Of: odoo/enterprise#41135Before this fix: Making a transaction with a negative payment amount on an ingenico payment terminal would cause the PoS to hang forever in a "request sent" state with no way to cancel it. The request on the IoT would crash with a traceback ``` IngenicoDriver.py: Traceback (most recent call last): File "/home/pi/odoo/addons/hw_drivers/iot_handlers/drivers/IngenicoDriver.py", line 791, in action self._outgoingMessage( "TransactionRequest", transactionId=data['TransactionID'], amount=da
Original PR description
Before this fix: Making a transaction with a negative payment amount on an ingenico payment terminal would cause the PoS to hang forever in a "request sent" state with no way to cancel it. The…
Before this fix:
Making a transaction with a negative payment amount on an ingenico payment terminal would cause the PoS to hang forever in a "request sent" state with no way to cancel it. The request on the IoT would crash with a traceback
```
IngenicoDriver.py: Traceback (most recent call last):
File "/home/pi/odoo/addons/hw_drivers/iot_handlers/drivers/IngenicoDriver.py", line 791, in action
self._outgoingMessage( "TransactionRequest", transactionId=data['TransactionID'], amount=data['amount'])
File "/home/pi/odoo/addons/hw_drivers/iot_handlers/drivers/IngenicoDriver.py", line 781, in _outgoingMessage
self._protocolId, messageType, self._getSequence(), **kwargs)
File "/home/pi/odoo/addons/hw_drivers/iot_handlers/drivers/IngenicoDriver.py", line 450, in __init__
body, mdc = self._generateBody(self.messageTypeId)
File "/home/pi/odoo/addons/hw_drivers/iot_handlers/drivers/IngenicoDriver.py", line 508, in _generateBody
int(str(self.amount), 16).to_bytes(4, byteorder='big'))) +\
OverflowError: can't convert negative int to unsigned
```
but nothing is sent back to the server, so it keeps waiting for a reply
After this commit:
Any error is catched and sent back to the PoS.
For the specific case of the negative payment, a better error message have been added to be more precise regarding the issue

Known issue:
I noticed that after catching the error the device will be disconnected then reconnected. Any request sent in this time will be lost and the PoS will again be hanging infinitely
opw-3193179
Forward-Port-Of: odoo/enterprise#40078Before this commit: When resizing the XmlEditor the user could resize the panel beyond the screen width. After this commit: - The maximum witdh of the panel is now 100% of the screen width. - The resize event now also stops propagation and prevents default which prevent some unexpected behaviours when the mouse hovers other elements. Forward-Port-Of: odoo/enterprise#41359
Original PR description
Before this commit: When resizing the XmlEditor the user could resize the panel beyond the screen width. After this commit: - The maximum witdh of the panel is now 100% of the screen width. - The resize event now also stops propagation and prevents default which prevent some unexpected behaviours when the mouse hovers other elements. Forward-Port-Of: odoo/enterprise#41359
### Bug Currently, the system can generate 0 lines when using the "Adjustment Entry" feature in Unrealized Currency Gains/Losses. ### Setup * have two currencies with an exchange rate of 1 ### Steps to reproduce * create an invoice in a foreign currency and confirm it. * go to the 'Unrealized Currency Gains/Losses' report * click 'Adjustment Entry' You should see that some adjustment lines have a 0 balance. ### Note While working on this, I came across another related issue in
Original PR description
### Bug Currently, the system can generate 0 lines when using the "Adjustment Entry" feature in Unrealized Currency Gains/Losses. ### Setup * have two currencies with an exchange rate of 1 ### Steps to reproduce * create an invoice in a foreign currency and confirm it. * go to the 'Unrealized Currency Gains/Losses' report * click 'Adjustment Entry' You should see that some adjustment lines have a 0 balance. ### Note While working on this, I came across another related issue in the way the currency rates are normalized in the same report. This is why there are two commits. opw-3193437 Forward-Port-Of: odoo/enterprise#41173
With this commit, we allow the user to select a loss account on the asset sell wizard if there is not one already set on the company, if the value residual of the asset is zero. Therefore, when creating the disposal move, line values are well calculated. Steps: - Make sure there is no existing disposal move of any asset - Create an asset for 1500$, with 1000$ not depreciable, in the past in order to have it liquidated - Open the 'sell or dispose' wizard and dispose the asset -> UserError
Original PR description
With this commit, we allow the user to select a loss account on the asset sell wizard if there is not one already set on the company, if the value residual of the asset is zero. Therefore, when creating the disposal move, line values are well calculated. Steps: - Make sure there is no existing disposal move of any asset - Create an asset for 1500$, with 1000$ not depreciable, in the past in order to have it liquidated - Open the 'sell or dispose' wizard and dispose the asset -> UserError: "Cannot create unbalanced journal entry" The root of the issue is in the _get_disposal_move method on account_asset, when looking for the difference account. As company's loss/gain account is set when creating the first disposal move, it will be False in our case. opw-3325111 Forward-Port-Of: odoo/enterprise#41427 Forward-Port-Of: odoo/enterprise#41314
When the `test_no_merge_check_status` is ran at around midnight, it could happen that it failed because of the `invoice_due_date` not being set to the expected value. This was due to the fact that we rely on the `create_date` and `invoice_due_date` to decide if the due date should be filled or not. Unfortunately, when the `invoice_due_date` is set to "now" there can be a few seconds of difference with the `create_date` leading to a mismatch when one is set before midnight and the other aft
Original PR description
When the `test_no_merge_check_status` is ran at around midnight, it could happen that it failed because of the `invoice_due_date` not being set to the expected value. This was due to the fact that we rely on the `create_date` and `invoice_due_date` to decide if the due date should be filled or not. Unfortunately, when the `invoice_due_date` is set to "now" there can be a few seconds of difference with the `create_date` leading to a mismatch when one is set before midnight and the other after midnight. The test will now force that `invoice_date_due` is set to exactly `create_date`. Forward-Port-Of: odoo/enterprise#41409 Forward-Port-Of: odoo/enterprise#41141
### Setup Have a DB with `account_accountant` installed and a company that does not have a chart of accounts. ### Steps to reproduce Set up a horizontal group on the General Ledger report with the domain "Account" If you try to select that horizontal group in the General Ledger, you get a traceback. opw-3164062 Forward-Port-Of: odoo/enterprise#41399
Original PR description
### Setup Have a DB with `account_accountant` installed and a company that does not have a chart of accounts. ### Steps to reproduce Set up a horizontal group on the General Ledger report with the domain "Account" If you try to select that horizontal group in the General Ledger, you get a traceback. opw-3164062 Forward-Port-Of: odoo/enterprise#41399
In a workorder in tablet view: when failing a measure quality check, the popup wizard does not appear and the workorder goes directly to the next check. This fix makes the popup correctly appear. opw-3293256 Forward-Port-Of: odoo/enterprise#40878
Original PR description
In a workorder in tablet view: when failing a measure quality check, the popup wizard does not appear and the workorder goes directly to the next check. This fix makes the popup correctly appear. opw-3293256 Forward-Port-Of: odoo/enterprise#40878
The transactions bank account number should only be visible on the liquidity line. And it should appear after the link to the move. Task-3336583 Forward-Port-Of: odoo/enterprise#41351
Original PR description
The transactions bank account number should only be visible on the liquidity line. And it should appear after the link to the move. Task-3336583 Forward-Port-Of: odoo/enterprise#41351