[IMP] web_edit_user_filter: black, isort, prettier

pull/2017/head
Roberto Fichera 2021-09-05 12:49:58 +02:00
parent b288df563c
commit c97e91ebd8
8 changed files with 116 additions and 118 deletions

View File

@ -0,0 +1 @@
../../../../web_edit_user_filter

View File

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

View File

@ -2,21 +2,15 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Edit User Filters',
'category': 'Extra Tools',
'version': '12.0.1.0.2',
'development_status': 'Production/Stable',
'author': 'Onestein,Odoo Community Association (OCA)',
'license': 'AGPL-3',
'website': 'https://github.com/OCA/web',
'depends': [
'web'
],
'data': [
'templates/assets.xml'
],
'qweb': [
'static/src/xml/backend.xml'
],
'installable': True,
"name": "Edit User Filters",
"category": "Extra Tools",
"version": "12.0.1.0.2",
"development_status": "Production/Stable",
"author": "Onestein,Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/web",
"depends": ["web"],
"data": ["templates/assets.xml"],
"qweb": ["static/src/xml/backend.xml"],
"installable": True,
}

View File

@ -5,19 +5,17 @@ from odoo import api, fields, models
class IrFilters(models.Model):
_inherit = 'ir.filters'
_inherit = "ir.filters"
facet = fields.Text()
@api.model
def get_filters(self, model, action_id=None):
res = super().get_filters(model, action_id)
ids = map(lambda f: f['id'], res)
ids = map(lambda f: f["id"], res)
# Browse filters that are in res
filters = self.browse(ids)
for i, res_filter in enumerate(res):
# Add the field 'facet' to the result
res[i]['facet'] = filters.filtered(
lambda f: f.id == res_filter['id']
).facet
res[i]["facet"] = filters.filtered(lambda f: f.id == res_filter["id"]).facet
return res

View File

@ -1,18 +1,16 @@
/* Copyright 2019 Onestein
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
odoo.define('web_edit_user_filter', function (require) {
odoo.define("web_edit_user_filter", function (require) {
"use strict";
var FavoriteMenu = require('web.FavoriteMenu'),
core = require('web.core'),
SearchView = require('web.SearchView');
var FavoriteMenu = require("web.FavoriteMenu"),
core = require("web.core"),
SearchView = require("web.SearchView");
var qweb = core.qweb;
var _t = core._t;
FavoriteMenu.include({
/**
* Adds the facets data to the filter.
*
@ -24,18 +22,21 @@ odoo.define('web_edit_user_filter', function (require) {
this.query.each(function (facet) {
var json_facet = facet.attributes;
json_facet.values = facet.get('values');
json_facet.values = facet.get("values");
_.each(json_facet.values, function (value, i) {
if (typeof value.value === 'object' && value.value !== null &&
'attrs' in value.value) {
if (
typeof value.value === "object" &&
value.value !== null &&
"attrs" in value.value
) {
json_facet.values[i] = {
attrs: value.value.attrs,
};
}
});
if ('field' in json_facet) {
if ("field" in json_facet) {
json_facet.field = {
attrs: json_facet.field.attrs,
};
@ -58,15 +59,17 @@ odoo.define('web_edit_user_filter', function (require) {
var self = this;
var res = this._super(filter);
var key = this.key_for(filter);
this.$filters[key].append($('<span>', {
class: 'fa fa-pencil o-edit-user-filter',
on: {
click: function (event) {
event.stopImmediatePropagation();
self._unpackFilter(filter);
this.$filters[key].append(
$("<span>", {
class: "fa fa-pencil o-edit-user-filter",
on: {
click: function (event) {
event.stopImmediatePropagation();
self._unpackFilter(filter);
},
},
},
}));
})
);
return res;
},
@ -83,58 +86,61 @@ odoo.define('web_edit_user_filter', function (require) {
this.query.reset([]);
_.each(facets, function (segment) {
if (segment.cat === 'groupByCategory') {
if (segment.cat === "groupByCategory") {
_.each(segment.values, function (value) {
var groupBy = _.find(
self.searchview.groupbysMapping,
function (mapping) {
return mapping.groupby.attrs.context === value.attrs.context;
}
);
var groupBy = _.find(self.searchview.groupbysMapping, function (
mapping
) {
return (
mapping.groupby.attrs.context === value.attrs.context
);
});
var eventData = {
category: 'groupByCategory',
category: "groupByCategory",
itemId: groupBy.groupbyId,
isActive: true,
groupId: groupBy.groupId,
};
self.trigger_up('menu_item_toggled', eventData);
self.trigger_up("menu_item_toggled", eventData);
});
} else if (segment.cat === 'filterCategory') {
} else if (segment.cat === "filterCategory") {
var new_filters = [];
_.each(segment.values, function (value) {
if (value.attrs.name) {
var filterDomain = _.find(
self.searchview.filtersMapping,
function (mapping) {
return mapping.filter.attrs.name === value.attrs.name;
return (
mapping.filter.attrs.name === value.attrs.name
);
}
);
var eventData = {
category: 'filterCategory',
category: "filterCategory",
itemId: filterDomain.filterId,
isActive: true,
groupId: filterDomain.groupId,
};
self.trigger_up('menu_item_toggled', eventData);
self.trigger_up("menu_item_toggled", eventData);
} else {
new_filters.push({
groupId: null,
filter: {
tag: 'filter',
attrs: value.attrs
tag: "filter",
attrs: value.attrs,
},
itemId: _.uniqueId('__filter__')
itemId: _.uniqueId("__filter__"),
});
}
});
self.trigger_up('new_filters', new_filters);
self.trigger_up("new_filters", new_filters);
} else {
var search_widget = _.find(
self.searchview.search_fields, function (f) {
return f.attrs.name === segment.field.attrs.name;
}
);
var search_widget = _.find(self.searchview.search_fields, function (
f
) {
return f.attrs.name === segment.field.attrs.name;
});
new_facets.push({
category: segment.category,
field: search_widget,
@ -148,7 +154,6 @@ odoo.define('web_edit_user_filter', function (require) {
});
SearchView.include({
/**
* Removes a value from a facet.
*
@ -158,7 +163,7 @@ odoo.define('web_edit_user_filter', function (require) {
*/
_removeValue: function (model, value) {
var toRemove = model.values.filter(function (v) {
if (typeof v.attributes.value === 'object') {
if (typeof v.attributes.value === "object") {
return v.attributes.value.attrs.domain === value;
}
@ -176,23 +181,25 @@ odoo.define('web_edit_user_filter', function (require) {
*/
_renderPopover: function ($facet, model) {
var self = this;
var $content = $(qweb.render('web_edit_user_filter.Popover', {
values: model.get('values'),
}));
var $content = $(
qweb.render("web_edit_user_filter.Popover", {
values: model.get("values"),
})
);
// Cannot use Widget.events here because renderFacets is
// triggered apart from renderElement
$content.find('.list-group-item').click(function () {
self._removeValue(model, $(this).attr('data-value'));
$content.find(".list-group-item").click(function () {
self._removeValue(model, $(this).attr("data-value"));
});
$facet.popover({
title: _t('Edit Facet'),
template: qweb.render('web_edit_user_filter.PopoverTemplate'),
title: _t("Edit Facet"),
template: qweb.render("web_edit_user_filter.PopoverTemplate"),
content: $content,
container: this.$el,
html: true,
trigger: 'manual',
placement: 'bottom',
trigger: "manual",
placement: "bottom",
animation: false,
});
},
@ -203,7 +210,7 @@ odoo.define('web_edit_user_filter', function (require) {
* @private
*/
_hidePopovers: function () {
this.$el.find('.popover').popover('hide');
this.$el.find(".popover").popover("hide");
},
/**
@ -213,20 +220,22 @@ odoo.define('web_edit_user_filter', function (require) {
var self = this;
var res = this._super.apply(this, arguments);
this.$el.find('.o-edit-user-filter-popover').remove();
this.$el.find(".o-edit-user-filter-popover").remove();
_.each(this.input_subviews, function (input_subview) {
if (!input_subview.model ||
input_subview.model.attributes.is_custom_filter) {
if (
!input_subview.model ||
input_subview.model.attributes.is_custom_filter
) {
return;
}
input_subview.$el.addClass('o-edit-user-filter-editable');
input_subview.$el.addClass("o-edit-user-filter-editable");
self._renderPopover(input_subview.$el, input_subview.model);
input_subview.$el.click(function () {
self._hidePopovers();
input_subview.$el.popover('show');
input_subview.$el.popover("show");
});
});
return res;
@ -238,7 +247,7 @@ odoo.define('web_edit_user_filter', function (require) {
start: function () {
var self = this;
var res = this._super.apply(this, arguments);
this._proxyHidePopovers = this.proxy('_hidePopovers');
this._proxyHidePopovers = this.proxy("_hidePopovers");
$(document).click(this._proxyHidePopovers);
return res;
},
@ -248,8 +257,8 @@ odoo.define('web_edit_user_filter', function (require) {
*/
destroy: function () {
var res = this._super.apply(this, arguments);
$(document).unbind('click', this._proxyHidePopovers);
$(document).unbind("click", this._proxyHidePopovers);
return res;
}
},
});
});

View File

@ -1,16 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Onestein
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<template>
<div t-name="web_edit_user_filter.Popover">
<div class="list-group">
<t t-foreach="values" t-as="value">
<a class="list-group-item list-group-item-action"
t-attf-data-value="#{typeof value.value === 'object' ? value.value.attrs.domain : value.value}">
<a
class="list-group-item list-group-item-action"
t-attf-data-value="#{typeof value.value === 'object' ? value.value.attrs.domain : value.value}"
>
<span>
<t t-esc="value.label"/>
<t t-esc="value.label" />
</span>
<button class="btn btn-sm btn-link pull-right">
<span class="fa fa-close" />
@ -22,9 +23,9 @@
<t t-name="web_edit_user_filter.PopoverTemplate">
<div class="popover o-edit-user-filter-popover" role="tooltip">
<h3 class="popover-header"></h3>
<div class="arrow"></div>
<div class="popover-body"></div>
<h3 class="popover-header" />
<div class="arrow" />
<div class="popover-body" />
</div>
</t>
</template>

View File

@ -1,16 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Onestein
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="assets_backend" inherit_id="web.assets_backend">
<xpath expr=".">
<script src="/web_edit_user_filter/static/src/js/backend.js"></script>
<script src="/web_edit_user_filter/static/src/js/backend.js" />
</xpath>
<xpath expr="//link[last()]">
<link href="/web_edit_user_filter/static/src/scss/backend.scss"
rel="stylesheet"
type="text/scss"/>
<link
href="/web_edit_user_filter/static/src/scss/backend.scss"
rel="stylesheet"
type="text/scss"
/>
</xpath>
</template>
</odoo>

View File

@ -7,26 +7,14 @@ from odoo.tests.common import SingleTransactionCase, post_install
@post_install(True)
class TestEditUserFilter(SingleTransactionCase):
def test_filter_facet_inclusion(self):
self.env['ir.filters'].create({
'name': 'any2',
'model_id': 'ir.filters',
'domain': '[]',
'facet': 'test2'
})
new_filter = self.env['ir.filters'].create({
'name': 'any',
'model_id': 'ir.filters',
'domain': '[]',
'facet': 'test'
})
res = self.env['ir.filters'].get_filters('ir.filters')
self.assertTrue('facet' in res[0])
self.assertEqual(
list(
filter(
lambda f: f['id'] == new_filter.id,
res
)
)[0]['facet'],
'test'
self.env["ir.filters"].create(
{"name": "any2", "model_id": "ir.filters", "domain": "[]", "facet": "test2"}
)
new_filter = self.env["ir.filters"].create(
{"name": "any", "model_id": "ir.filters", "domain": "[]", "facet": "test"}
)
res = self.env["ir.filters"].get_filters("ir.filters")
self.assertTrue("facet" in res[0])
self.assertEqual(
list(filter(lambda f: f["id"] == new_filter.id, res))[0]["facet"], "test"
)