Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[17.0][MIG] web_m2x_options: Migration to 17.0 #2772

Closed
wants to merge 93 commits into from

Conversation

Ammar-OSI
Copy link

No description provided.

Nicolas JEUDY and others added 30 commits March 15, 2024 15:41
- Add static/description/index.html

fix: use include instead of extend in js function inheritance.

fix: not overwriting the existing object references with the result of the include

fix: update name according to new module name.

fix: error when displaying many2many field without options defined.
[ADD] support 'no_open_edit' on many2one
[FIX] typos
…and make the module installable [MIG] adapt form.js to the new API. [FIX] Fix bug mentioned in pull OCA#262. [MIG] Make the module installable.
…th `options={'open': True}` it always open the first element with this fix it will open the right one
* [FIX][web_m2x_options] Fix Qweb templates.

They were trying to replace non-existing elements, and this was being logged to console:

    Can't find "a.oe_m2o_cm_button" when extending template FieldMany2One
    Can't find "span.badge" when extending template FieldMany2ManyTag

* Raise version correctly.

* [FIX] Make many2many_tags tag deletion work again

* Correct replacement of event

Instead of overwriting all events from upstream widget, better just overwrite the one you need and inherit the rest.
* fix unecessary calls

Do check_access_rights and disable_quick_create calls only once per field.
`web_m2x_options` is supposed to render fields in the context of a form or tree view, where domains can safely be applied because there's a main record that includes a context.

However, when installing along with `web_advanced_search_x2x`, they produce an incompatibility when a x2x field's domain is defined and depends on the current record's context, because a search view has no notion of a *current record*.

The fix is simple: try to do as usual, and if it fails, try without the field's domain.

Without this patch, an exception like this would be raised, i.e. when both addons are installed and you are trying to search project tasks by stage:

``` Error: NameError: name 'project_id' is not defined
http://localhost/web/static/lib/py.js/lib/py.js:370# Traceback:# Changes to be committed:
PY_ensurepy@http://localhost/web/static/lib/py.js/lib/py.js:370:19# modified: static/src/js/form.js
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1340:20#
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1397:35
py.evaluate@http://localhost/web/static/lib/py.js/lib/py.js:1409:34
py.eval@http://localhost/web/static/lib/py.js/lib/py.js:1453:16
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:869:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:873:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
eval_domains/<@http://localhost/web/static/src/js/framework/pyeval.js:873:39
_.forEach@http://localhost/web/static/lib/underscore/underscore.js:145:9
_.mixin/</_.prototype[name]@http://localhost/web/static/lib/underscore/underscore.js:1484:29
eval_domains@http://localhost/web/static/src/js/framework/pyeval.js:860:5
pyeval@http://localhost/web/static/src/js/framework/pyeval.js:977:16
eval_arg@http://localhost/web/static/src/js/framework/pyeval.js:988:16
ensure_evaluated@http://localhost/web/static/src/js/framework/pyeval.js:1011:21
call@http://localhost/web/static/src/js/framework/data_model.js:56:9
name_search@http://localhost/web/static/src/js/framework/data.js:537:16
get_search_result@http://localhost/web_m2x_options/static/src/js/form.js:130:50
OdooClass.extend/Class.include/</prototype[name]</<@http://localhost/web/static/src/js/framework/class.js:122:35
source@http://localhost/web/static/src/js/views/form_relational_widgets.js:271:17
_search@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:6823:3
$.widget/</proxiedPrototype[prop]</<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:415:19
search@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:6815:10
$.widget/</proxiedPrototype[prop]</<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:415:19
$.widget.bridge/$.fn[name]/<@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:508:19
each@http://localhost/web/static/lib/jquery/jquery.js:383:49
each@http://localhost/web/static/lib/jquery/jquery.js:136:24
$.widget.bridge/$.fn[name]@http://localhost/web/static/lib/jquery.ui/jquery-ui.js:494:4
render_editable/<@http://localhost/web/static/src/js/views/form_relational_widgets.js:189:21
dispatch@http://localhost/web/static/lib/jquery/jquery.js:4640:50
add/elemData.handle@http://localhost/web/static/lib/jquery/jquery.js:4309:41
```
web_m2x_options: Fix usage for non-admins

web_m2x_options: Reduce rpc calls

web_m2x_options: Update manifest and readme
Currently translated at 91.7% (11 of 12 strings)

Translation: web-11.0/web-11.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_m2x_options/pt_BR/
The method `_onOpenColorPicker` is defined on `FormFieldMany2ManyTags`, not in `FieldMany2ManyTags`, so it can only be called on its descendants.

Otherwise, clicking on a `many2many_tags` tag when found in a tree view produces an error such as:

    TypeError: self._onOpenColorPicker is not a function

    http://localhost/web_m2x_options/static/src/js/form.js:354
    Rastreo de error:
    _onOpenBadge@http://localhost/web_m2x_options/static/src/js/form.js:354:17
    proxy/<@http://localhost/web/static/src/js/core/mixins.js:279:20
    dispatch@http://localhost/web/static/lib/jquery/jquery.js:4640:50
    add/elemData.handle@http://localhost/web/static/lib/jquery/jquery.js:4309:41

(cherry picked from commit ddbbe81)
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/
Currently translated at 91.7% (11 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/fr/
Currently translated at 100.0% (12 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/fr/
Currently translated at 100.0% (12 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/pt_BR/
Currently translated at 100.0% (12 of 12 strings)

Translation: web-12.0/web-12.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_m2x_options/zh_CN/
OCA-git-bot and others added 9 commits March 15, 2024 15:41
Currently translated at 100.0% (15 of 15 strings)

Translation: web-16.0/web-16.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_m2x_options/it/
Currently translated at 100.0% (15 of 15 strings)

Translation: web-16.0/web-16.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_m2x_options/it/
Currently translated at 40.0% (6 of 15 strings)

Translation: web-16.0/web-16.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_m2x_options/fr/
Currently translated at 53.3% (8 of 15 strings)

Translation: web-16.0/web-16.0-web_m2x_options
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_m2x_options/fr/
@pedrobaeza pedrobaeza changed the title [17.0][mig] web m2x options module. [17.0][MIG] web_m2x_options: Migration to 17.0 Mar 15, 2024
@@ -15,7 +15,7 @@
</xpath>
</t>

<t
<!-- <t
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can't comment a part of the code.

@mostafabarmshory
Copy link

@Ammar-OSI

Could you fix this issue?

@Sanazzzmi
Copy link

I also need this module. Please complete it as soon as possible. Thank you

Copy link
Contributor

@CRogos CRogos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you also adapt the commits (rename/squash) according to the migration guide.

https://github.com/OCA/maintainer-tools/wiki/Merge-commits-in-pull-requests#mergesquash-the-commits-generated-by-bots-or-weblate

Some samples:
image

@CasVissers-360ERP
Copy link

@Ammar-OSI are you going to continue here?

@mostafabarmshory
Copy link

@Ammar-OSI are you going to continue here?

Dear @CasVissers-360ERP

He does not reply here.

I`m ready to create a new PR and follow the MIG.

@Ammar-OSI
Copy link
Author

Ammar-OSI commented Apr 1, 2024

Hello Team ,

Yes I am working on this module I will update you in a 2 days

@mostafabarmshory
Copy link

@Ammar-OSI

I launch and use it with odoo community 17. It faces many problems.

The main issue is that some fields (such as the sale order line field) are inherited from the relation field primarily.

However, the props schema does not contain items such as searchMore.

Would you test the module side by side with the following ones:

  • Sale
  • Project

tx

@mostafabarmshory
Copy link

Yes I am working on this module I will update you i

@Ammar-OSI did you finish this one?

@Ammar-OSI
Copy link
Author

@Ammar-OSI

I launch and use it with odoo community 17. It faces many problems.

The main issue is that some fields (such as the sale order line field) are inherited from the relation field primarily.

However, the props schema does not contain items such as searchMore.

Would you test the module side by side with the following ones:

  • Sale
  • Project

tx

Yes @mostafabarmshory ,

I currently stuck on that issue and currently working on that issue,

for this which is not module working on debug mode.

That's i also face dealy on push a code.

@mostafabarmshory
Copy link

@Ammar-OSI
I launch and use it with odoo community 17. It faces many problems.
The main issue is that some fields (such as the sale order line field) are inherited from the relation field primarily.
However, the props schema does not contain items such as searchMore.
Would you test the module side by side with the following ones:

  • Sale
  • Project

tx

Yes @mostafabarmshory ,

I currently stuck on that issue and currently working on that issue,

for this which is not module working on debug mode.

That's i also face dealy on push a code.

@Ammar-OSI tx

Hope you find a way.

I try to find a way and test more. I feedback you.

Copy link

@mostafabarmshory mostafabarmshory left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a basic problem and adding properties into sub-classes is not a good idea.

nodeOptions: {type: Object, optional: true},
};

SaleOrderLineProductField.props = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are many other classes which extend from Many2OneField (ex. ProjectMany2OneField). All of them face with such issue.
Bad idea to patch them in a base module (a dependency required).

We have to look for a better idea.

@@ -14,15 +14,31 @@ import {Many2OneField, many2OneField} from "@web/views/fields/many2one/many2one_
import {PartnerMany2XAutocomplete} from "@partner_autocomplete/js/partner_autocomplete_many2one";
import {ReferenceField} from "@web/views/fields/reference/reference_field";
import {X2ManyField} from "@web/views/fields/x2many/x2many_field";
import {Many2OneAvatarUserField} from "@mail/views/web/fields/many2one_avatar_user_field/many2one_avatar_user_field";
import { SaleOrderLineProductField } from '@sale/js/sale_product_field';

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This add-on is not depended on odoo/sale. So this component may not exist at runtime.

@@ -26,12 +26,14 @@ patch(Many2XAutocomplete.prototype, {

// Add options limit used to change number of selections record
// returned.
console.log("this.ir_options: ",this.ir_options);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not add console.log

Please use developer tools and debugger instead.

// 4- if set globally, apply its value
// 5- if not set globally either, check if returned values are more than node's limit
var search_more = false;
if (this.props.nodeOptions.search_more !== "undefined") {
Copy link
Contributor

@manuelregidor manuelregidor Apr 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't undefined be without quotes?

var search_more = false;
if (this.props.nodeOptions.search_more !== "undefined") {
search_more = is_option_set(this.props.nodeOptions.search_more);
} else if (this.ir_options["web_m2x_options.search_more"] !== "undefined") {
Copy link
Contributor

@manuelregidor manuelregidor Apr 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't undefined be without quotes?

Copy link
Contributor

@manuelregidor manuelregidor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have you thought of calling super loadOptionsSource function and then remove the elements that should not be applied?
Super loadOptionsSource could be called in line 23 in relational_utils.esm.js file. Then lines 118-137 could be replace by the following code:

        if (!(
            create_enabled &&
            !this.props.nodeOptions.no_quick_create &&
            request.length > 0 &&
            !raw_result.includes(request) &&
            show_create
        )) {
                        options.splice(options.findIndex(e => e.classList === "o_m2o_dropdown_option o_m2o_dropdown_option_create"),1);

        }

This way, the function would not be completely overidden plus only those elements that are necessary would be added. For example, the "Start typing..." element would be already added by the super function.

@jeroenev
Copy link

seems multiple dependencies are missing, partner_autocomplete, mail, sale etc...
Also should be made to work if partner_autocomplete or sale are not installed

@cle-enovea
Copy link

Any updates on this PR ?

@rven rven mentioned this pull request Jun 18, 2024
26 tasks
@pedrobaeza
Copy link
Member

Superseded by #2847, as this one is not completed.

@pedrobaeza pedrobaeza closed this Jun 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.