diff --git a/web_widget_child_selector/__manifest__.py b/web_widget_child_selector/__manifest__.py
index a5802c76c..a7cd04b9e 100644
--- a/web_widget_child_selector/__manifest__.py
+++ b/web_widget_child_selector/__manifest__.py
@@ -2,19 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
- 'name': 'Web Widget Child Selector',
- 'summary': "Widget used for navigation on hierarchy fields",
- 'version': '12.0.1.0.0',
- 'license': 'AGPL-3',
- 'author': 'Creu Blanca,Odoo Community Association (OCA)',
- 'website': 'https://github.com/OCA/web',
- 'depends': [
- 'web',
- ],
- 'data': [
- 'views/assets.xml',
- ],
- 'qweb': [
- 'static/src/xml/widget_child_selector.xml',
- ],
+ "name": "Web Widget Child Selector",
+ "summary": "Widget used for navigation on hierarchy fields",
+ "version": "12.0.1.0.0",
+ "license": "AGPL-3",
+ "author": "Creu Blanca,Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/web",
+ "depends": ["web",],
+ "data": ["views/assets.xml",],
+ "qweb": ["static/src/xml/widget_child_selector.xml",],
}
diff --git a/web_widget_child_selector/models/base.py b/web_widget_child_selector/models/base.py
index 128fc6ba9..fa83ca824 100644
--- a/web_widget_child_selector/models/base.py
+++ b/web_widget_child_selector/models/base.py
@@ -5,27 +5,28 @@ from odoo import models
class Base(models.AbstractModel):
- _inherit = 'base'
+ _inherit = "base"
def _get_record_parents(self, field):
if not self or not hasattr(self, self._parent_name):
return []
- return getattr(
- self, self._parent_name
- )._get_record_parents(field) + [(self.id, str(getattr(self, field)))]
+ return getattr(self, self._parent_name)._get_record_parents(field) + [
+ (self.id, str(getattr(self, field)))
+ ]
def _get_record_direct_childs(self, field, domain):
if not hasattr(self, self._parent_name):
return []
- return [(r.id, str(getattr(r, field))) for r in self.search([(
- self._parent_name, '=', self.id or False
- )] + domain)]
+ return [
+ (r.id, str(getattr(r, field)))
+ for r in self.search([(self._parent_name, "=", self.id or False)] + domain)
+ ]
def get_record_direct_childs_parents(self, options, domain=False):
if not domain:
domain = []
- field = options.get('child_selection_field', 'display_name')
+ field = options.get("child_selection_field", "display_name")
return {
- 'childs': self._get_record_direct_childs(field, domain),
- 'parents': self._get_record_parents(field)
+ "childs": self._get_record_direct_childs(field, domain),
+ "parents": self._get_record_parents(field),
}
diff --git a/web_widget_child_selector/static/src/js/widget_child_selector.js b/web_widget_child_selector/static/src/js/widget_child_selector.js
index 813b18c8b..a3aafa00c 100644
--- a/web_widget_child_selector/static/src/js/widget_child_selector.js
+++ b/web_widget_child_selector/static/src/js/widget_child_selector.js
@@ -1,28 +1,37 @@
-odoo.define('web.web_widget_child_selector', function(require) {
+odoo.define("web.web_widget_child_selector", function(require) {
"use strict";
- var relational_fields = require('web.relational_fields');
- var field_registry = require('web.field_registry');
- var core = require('web.core');
+ var relational_fields = require("web.relational_fields");
+ var field_registry = require("web.field_registry");
+ var core = require("web.core");
var qweb = core.qweb;
var FieldMany2One = relational_fields.FieldMany2One;
var FieldChildSelector = FieldMany2One.extend({
template: "FieldChildSelector",
events: _.extend({}, FieldMany2One.prototype.events, {
- 'click .o_child_selection_button': '_onChildSelectionClick',
+ "click .o_child_selection_button": "_onChildSelectionClick",
}),
- start: function () {
- this.$input_dropdown = this.$('.o_input_dropdown');
- this.$input_value = this.$('.o_input_value')
+ start: function() {
+ this.$input_dropdown = this.$(".o_input_dropdown");
+ this.$input_value = this.$(".o_input_value");
return this._super.apply(this, arguments);
},
- _renderReadonly: function () {
- var value = _.escape((this.m2o_value || "").trim()).split("\n").join("
");
+ _renderReadonly: function() {
+ var value = _.escape((this.m2o_value || "").trim())
+ .split("\n")
+ .join("
");
this.$el.html(value);
if (!this.nodeOptions.no_open && this.value) {
- this.$el.attr('href', _.str.sprintf('#id=%s&model=%s', this.value.res_id, this.field.relation));
- this.$el.addClass('o_form_uri');
+ this.$el.attr(
+ "href",
+ _.str.sprintf(
+ "#id=%s&model=%s",
+ this.value.res_id,
+ this.field.relation
+ )
+ );
+ this.$el.addClass("o_form_uri");
}
},
_set_childs: function() {
@@ -32,42 +41,43 @@ odoo.define('web.web_widget_child_selector', function(require) {
this.$input_dropdown.empty();
this.$input_value.empty();
var resources = [];
- if (this.value.res_id)
- resources = [this.value.res_id]
+ if (this.value.res_id) resources = [this.value.res_id];
this._rpc({
model: this.field.relation,
- method: 'get_record_direct_childs_parents',
+ method: "get_record_direct_childs_parents",
args: [
resources,
this.nodeOptions,
this.record.getDomain({fieldName: this.name}),
],
context: this.record.getContext(this.recordParams),
- })
- .then(function (data) {
- _.each(data['parents'], function(parent, key) {
+ }).then(function(data) {
+ _.each(data.parents, function(parent, key) {
self.parents[key] = parent;
});
- _.each(data['childs'], function(child, key) {
+ _.each(data.childs, function(child, key) {
self.childs[key] = child;
});
- self.$input_dropdown.append(qweb.render('FieldChildSelectorChild', {
- 'childs': self.childs,
- }));
- self.$input_value.append(qweb.render('FieldChildSelectorParent', {
- 'parents': self.parents,
- }));
+ self.$input_dropdown.append(
+ qweb.render("FieldChildSelectorChild", {
+ childs: self.childs,
+ })
+ );
+ self.$input_value.append(
+ qweb.render("FieldChildSelectorParent", {
+ parents: self.parents,
+ })
+ );
});
},
_onChildSelectionClick: function(event) {
var target = $(event.target);
- var type = target.data('type');
- if (type === 'clear') {
+ var type = target.data("type");
+ if (type === "clear") {
this._setValue({id: false});
- }
- else {
- var index = target.data('index');
- var value = (type === 'child') ? this.childs[index]: this.parents[index];
+ } else {
+ var index = target.data("index");
+ var value = type === "child" ? this.childs[index] : this.parents[index];
this._setValue({id: value[0], display_name: value[1]});
}
},
@@ -76,6 +86,6 @@ odoo.define('web.web_widget_child_selector', function(require) {
},
});
- field_registry.add('child_selector', FieldChildSelector);
+ field_registry.add("child_selector", FieldChildSelector);
return FieldChildSelector;
-})
+});
diff --git a/web_widget_child_selector/static/src/less/widget_child_selector.less b/web_widget_child_selector/static/src/less/widget_child_selector.less
index e12d715b9..f973c606b 100644
--- a/web_widget_child_selector/static/src/less/widget_child_selector.less
+++ b/web_widget_child_selector/static/src/less/widget_child_selector.less
@@ -1,9 +1,9 @@
.o_child_selection_button {
- cursor: pointer,
+ cursor: pointer;
}
.o_child_selection_label {
- cursor: pointer,
+ cursor: pointer;
}
.o_child_selection_clear {
diff --git a/web_widget_child_selector/static/src/xml/widget_child_selector.xml b/web_widget_child_selector/static/src/xml/widget_child_selector.xml
index df5c2b799..5b1af432d 100644
--- a/web_widget_child_selector/static/src/xml/widget_child_selector.xml
+++ b/web_widget_child_selector/static/src/xml/widget_child_selector.xml
@@ -1,25 +1,42 @@
-
+
-
-
+
+
@@ -28,13 +45,21 @@
/
-
-
+
+
-
+
diff --git a/web_widget_child_selector/tests/test_widget_child_selector.py b/web_widget_child_selector/tests/test_widget_child_selector.py
index 68b02af97..a9f36b65c 100644
--- a/web_widget_child_selector/tests/test_widget_child_selector.py
+++ b/web_widget_child_selector/tests/test_widget_child_selector.py
@@ -5,30 +5,25 @@ from odoo.tests.common import TransactionCase
class TestWidgetChildSelector(TransactionCase):
-
def setUp(self):
super().setUp()
- ResPartner = self.env['res.partner'].with_context(tracking_disable=True)
- self.partner_1 = ResPartner.create({'name': 'P1'})
- self.partner_2 = ResPartner.create({
- 'name': 'P2',
- 'parent_id': self.partner_1.id
- })
- self.partner_3 = ResPartner.create({
- 'name': 'P3',
- 'parent_id': self.partner_2.id
- })
+ ResPartner = self.env["res.partner"].with_context(tracking_disable=True)
+ self.partner_1 = ResPartner.create({"name": "P1"})
+ self.partner_2 = ResPartner.create(
+ {"name": "P2", "parent_id": self.partner_1.id}
+ )
+ self.partner_3 = ResPartner.create(
+ {"name": "P3", "parent_id": self.partner_2.id}
+ )
# Model that doesnt have the parent/child structure
- self.group = self.env['res.groups'].create({
- 'name': 'Group'
- })
+ self.group = self.env["res.groups"].create({"name": "Group"})
def test_widget_child_selector(self):
res = self.partner_2.get_record_direct_childs_parents(
- {'child_selection_field': 'name'}
+ {"child_selection_field": "name"}
)
- self.assertIn((self.partner_1.id, self.partner_1.name), res['parents'])
- self.assertIn((self.partner_3.id, self.partner_3.name), res['childs'])
+ self.assertIn((self.partner_1.id, self.partner_1.name), res["parents"])
+ self.assertIn((self.partner_3.id, self.partner_3.name), res["childs"])
res = self.group.get_record_direct_childs_parents({})
- self.assertFalse(res['parents'])
- self.assertFalse(res['childs'])
+ self.assertFalse(res["parents"])
+ self.assertFalse(res["childs"])
diff --git a/web_widget_child_selector/views/assets.xml b/web_widget_child_selector/views/assets.xml
index 036bb5cc0..f7bf2475d 100644
--- a/web_widget_child_selector/views/assets.xml
+++ b/web_widget_child_selector/views/assets.xml
@@ -1,9 +1,19 @@
-
+
-
+
-
-
+
+