base_search_custom_field_filter permite crear búsquedas por campos custom, necesario apra búsqueda por género, autor, etc.

This commit is contained in:
santiky 2021-08-08 16:46:03 +02:00
parent 299fffffa8
commit 202a646406
Signed by: snt
GPG key ID: A9FD34930EADBE71
19 changed files with 837 additions and 0 deletions

View file

@ -0,0 +1,125 @@
====================================
Add custom filters for fields via UI
====================================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github
:target: https://github.com/OCA/server-ux/tree/12.0/base_search_custom_field_filter
:alt: OCA/server-ux
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-ux-12-0/server-ux-12-0-base_search_custom_field_filter
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/250/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to define custom filters in the search views for an specific
field belonging to the document or any other related document.
This nature makes the definition quite technical, but once done, it adds the
element in the UI for regular user use.
**Table of contents**
.. contents::
:local:
Configuration
=============
#. Go to *Settings > Technical > User Interface > Custom Field Filters*.
#. Create a new record, and define following information:
* The **Model** for which you are defining the filter. It will appear in all
the search views of this model.
* The label you want to see on the search line on the **Name** field. This
field allows translations for proper UI in different languages.
* The **Expression**, which is the field chain string with dot notation.
Examples: `product_id`, `product_id.seller_ids.name`, `partner_id.lang`.
* Optionally, you can fill **Position After** for indicating after which
existing field (technical name) the filter will appear. If empty or not
found, the filter will be added at the end.
#. You can reorder records for determining sorting for multiple filters for the
same model with the arrow handle in the left part.
Usage
=====
#. Go to the menu entry for which you have defined the custom field filter.
#. On the search bar, type anything.
#. In the filter list, you will see the line for the element you have defined.
As demo data, a custom field filter is included for sample purposes:
.. image:: https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/ir_ui_custom_field_filter.png
Steps for trying this sample:
#. Install `contacts` module.
#. Go to *Contacts*.
#. Type "english" and you'll find the filter "Language" at the end:
.. image:: https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/contact_search.png
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-ux/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-ux/issues/new?body=module:%20base_search_custom_field_filter%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Tecnativa
Contributors
~~~~~~~~~~~~
* `Tecnativa <https://www.tecnativa.com>`_:
* Carlos Dauden
* Pedro M. Baeza
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
:target: https://github.com/pedrobaeza
:alt: pedrobaeza
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-pedrobaeza|
This module is part of the `OCA/server-ux <https://github.com/OCA/server-ux/tree/12.0/base_search_custom_field_filter>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -0,0 +1,22 @@
# Copyright 2020 Tecnativa - Carlos Dauden
# Copyright 2020 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Add custom filters for fields via UI",
"version": "12.0.1.0.1",
"category": "Usability",
"website": "https://github.com/OCA/server-ux",
"author": "Tecnativa, Odoo Community Association (OCA)",
"demo": [
"demo/demo_ir_ui_custom_field_filter.xml",
],
"data": [
"security/ir.model.access.csv",
"templates/assets.xml",
"views/ir_ui_custom_field_filter_views.xml",
],
"depends": ["web"],
"license": "AGPL-3",
"installable": True,
"maintainers": ["pedrobaeza"],
}

View file

@ -0,0 +1,9 @@
<odoo>
<record id="custom_field_filter_demo" model="ir.ui.custom.field.filter">
<field name="model_id" ref="base.model_res_partner"/>
<field name="name">Language</field>
<field name="expression">lang</field>
</record>
</odoo>

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import base
from . import ir_ui_custom_field_filter

View file

@ -0,0 +1,64 @@
# Copyright 2020-2021 Tecnativa - Carlos Dauden
# Copyright 2020 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, models
from lxml import etree
class Base(models.AbstractModel):
_inherit = 'base'
@api.model
def _add_custom_filters(self, res, custom_filters):
arch = etree.fromstring(res['arch'])
for custom_filter in custom_filters:
node = False
if custom_filter.position_after:
node = arch.xpath(
"//field[@name='%s']" % custom_filter.position_after)
if not node:
node = (arch.xpath("//field[last()]") or
arch.xpath("//filter[last()]") or
arch.xpath("//group[last()]"))
if node:
elem = etree.Element('field', {
'name': 'ir_ui_custom_filter_%s' % custom_filter.id,
'string': custom_filter.name,
'custom_field_filter': custom_filter.expression,
})
node[0].addnext(elem)
res['arch'] = etree.tostring(arch)
return res
@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
submenu=False):
"""Inject fields field in search views."""
res = super().fields_view_get(
view_id=view_id, view_type=view_type, toolbar=toolbar,
submenu=submenu)
if view_type == 'search':
custom_filters = self.env['ir.ui.custom.field.filter'].search(
[("model_name", "=", res.get("model"))])
if custom_filters:
res = self._add_custom_filters(res, custom_filters)
return res
@api.model
def load_views(self, views, options=None):
"""Inject fake field definition for having custom filters available."""
res = super(Base, self.with_context(
custom_field_filter=True,
)).load_views(views, options=options)
custom_filters = self.env['ir.ui.custom.field.filter'].search(
[("model_name", "=", self._name)])
for custom_filter in custom_filters:
field = custom_filter._get_related_field()
field_name = 'ir_ui_custom_filter_%s' % custom_filter.id
res['fields'][field_name] = field.get_description(self.env)
# force this for avoiding to appear on the rest of the UI
res['fields'][field_name]['selectable'] = False
res['fields'][field_name]['sortable'] = False
res['fields'][field_name]['store'] = False
return res

View file

@ -0,0 +1,42 @@
# Copyright 2020 Tecnativa - Carlos Dauden
# Copyright 2020 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import _, api, exceptions, fields, models
class IrUiCustomFilter(models.Model):
_name = "ir.ui.custom.field.filter"
_description = "Custom UI field filter"
_order = "model_id, sequence, id"
sequence = fields.Integer()
model_id = fields.Many2one(comodel_name="ir.model", required=True)
model_name = fields.Char(
related="model_id.model", store=True, readonly=True, index=True,
string="Model name",
)
name = fields.Char(required=True, translate=True)
expression = fields.Char(required=True)
position_after = fields.Char(
help="Optional field name for putting the filter after that one. "
"If empty or not found, it will be put at the end.",
)
def _get_related_field(self):
"""Determine the chain of fields."""
self.ensure_one()
related = self.expression.split('.')
target = self.env[self.model_name]
for name in related:
field = target._fields[name]
target = target[name]
return field
@api.constrains('model_id', 'expression')
def _check_expression(self):
for record in self:
try:
record._get_related_field()
except KeyError:
raise exceptions.ValidationError(_("Incorrect expression."))

View file

@ -0,0 +1,14 @@
#. Go to *Settings > Technical > User Interface > Custom Field Filters*.
#. Create a new record, and define following information:
* The **Model** for which you are defining the filter. It will appear in all
the search views of this model.
* The label you want to see on the search line on the **Name** field. This
field allows translations for proper UI in different languages.
* The **Expression**, which is the field chain string with dot notation.
Examples: `product_id`, `product_id.seller_ids.name`, `partner_id.lang`.
* Optionally, you can fill **Position After** for indicating after which
existing field (technical name) the filter will appear. If empty or not
found, the filter will be added at the end.
#. You can reorder records for determining sorting for multiple filters for the
same model with the arrow handle in the left part.

View file

@ -0,0 +1,4 @@
* `Tecnativa <https://www.tecnativa.com>`_:
* Carlos Dauden
* Pedro M. Baeza

View file

@ -0,0 +1,5 @@
This module allows to define custom filters in the search views for an specific
field belonging to the document or any other related document.
This nature makes the definition quite technical, but once done, it adds the
element in the UI for regular user use.

View file

@ -0,0 +1,15 @@
#. Go to the menu entry for which you have defined the custom field filter.
#. On the search bar, type anything.
#. In the filter list, you will see the line for the element you have defined.
As demo data, a custom field filter is included for sample purposes:
.. image:: ../static/src/img/ir_ui_custom_field_filter.png
Steps for trying this sample:
#. Install `contacts` module.
#. Go to *Contacts*.
#. Type "english" and you'll find the filter "Language" at the end:
.. image:: ../static/src/img/contact_search.png

View file

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_ir_ui_custom_field_filter_user,ir.ui.custom.field.filter,model_ir_ui_custom_field_filter,base.group_user,1,0,0,0
access_ir_ui_custom_field_filter_system,ir.ui.custom.field.filter,model_ir_ui_custom_field_filter,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_ir_ui_custom_field_filter_user ir.ui.custom.field.filter model_ir_ui_custom_field_filter base.group_user 1 0 0 0
3 access_ir_ui_custom_field_filter_system ir.ui.custom.field.filter model_ir_ui_custom_field_filter base.group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,467 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Add custom filters for fields via UI</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="add-custom-filters-for-fields-via-ui">
<h1 class="title">Add custom filters for fields via UI</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/server-ux/tree/12.0/base_search_custom_field_filter"><img alt="OCA/server-ux" src="https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/server-ux-12-0/server-ux-12-0-base_search_custom_field_filter"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/250/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows to define custom filters in the search views for an specific
field belonging to the document or any other related document.</p>
<p>This nature makes the definition quite technical, but once done, it adds the
element in the UI for regular user use.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; Technical &gt; User Interface &gt; Custom Field Filters</em>.</li>
<li>Create a new record, and define following information:<ul>
<li>The <strong>Model</strong> for which you are defining the filter. It will appear in all
the search views of this model.</li>
<li>The label you want to see on the search line on the <strong>Name</strong> field. This
field allows translations for proper UI in different languages.</li>
<li>The <strong>Expression</strong>, which is the field chain string with dot notation.
Examples: <cite>product_id</cite>, <cite>product_id.seller_ids.name</cite>, <cite>partner_id.lang</cite>.</li>
<li>Optionally, you can fill <strong>Position After</strong> for indicating after which
existing field (technical name) the filter will appear. If empty or not
found, the filter will be added at the end.</li>
</ul>
</li>
<li>You can reorder records for determining sorting for multiple filters for the
same model with the arrow handle in the left part.</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<ol class="arabic simple">
<li>Go to the menu entry for which you have defined the custom field filter.</li>
<li>On the search bar, type anything.</li>
<li>In the filter list, you will see the line for the element you have defined.</li>
</ol>
<p>As demo data, a custom field filter is included for sample purposes:</p>
<img alt="https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/ir_ui_custom_field_filter.png" src="https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/ir_ui_custom_field_filter.png" />
<p>Steps for trying this sample:</p>
<ol class="arabic simple">
<li>Install <cite>contacts</cite> module.</li>
<li>Go to <em>Contacts</em>.</li>
<li>Type “english” and youll find the filter “Language” at the end:</li>
</ol>
<img alt="https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/contact_search.png" src="https://raw.githubusercontent.com/OCA/server-ux/12.0/base_search_custom_field_filter/static/src/img/contact_search.png" />
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-ux/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-ux/issues/new?body=module:%20base_search_custom_field_filter%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Carlos Dauden</li>
<li>Pedro M. Baeza</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-ux/tree/12.0/base_search_custom_field_filter">OCA/server-ux</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,22 @@
odoo.define('base_search_custom_field_filter.search_inputs_related_field', function (require) {
"use strict";
var core = require('web.core');
var search_inputs = require('web.search_inputs');
var ManyToOneField = core.search_widgets_registry.map.many2one;
search_inputs.Field.include({
make_domain: function (name, operator, facetValue) {
var name_n = this.attrs.custom_field_filter || name;
return this._super(name_n, operator, facetValue);
},
});
ManyToOneField.include({
make_domain: function (name, operator, facetValue) {
var name_n = this.attrs.custom_field_filter || name;
return this._super(name_n, operator, facetValue);
},
});
});

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="assets_backend" inherit_id="web.assets_backend">
<xpath expr=".">
<script src="/base_search_custom_field_filter/static/src/js/search_input.js"></script>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 Tecnativa - Pedro M. Baeza
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_ir_ui_custom_field_filter_form" model="ir.ui.view">
<field name="model">ir.ui.custom.field.filter</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="sequence" widget="handle" />
<field name="model_id" />
<field name="name" />
<field name="expression" />
<field name="position_after" />
</tree>
</field>
</record>
<act_window
id="action_ir_ui_custom_field_filter"
name="Custom Field Filters"
res_model="ir.ui.custom.field.filter"
/>
<menuitem
id="menu_ir_ui_custom_field_filter"
action="action_ir_ui_custom_field_filter"
parent="base.next_id_2"
sequence="6"
/>
</odoo>