mirror of
https://gitlab.com/flectra-community/server-ux.git
synced 2024-07-02 00:20:30 +00:00
115 lines
4.3 KiB
Python
115 lines
4.3 KiB
Python
# Migrated to v14.0 by Ashish Hirpara (https://www.ashish-hirpara.com)
|
|
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from lxml import etree
|
|
|
|
from flectra import api, models
|
|
|
|
|
|
class Base(models.AbstractModel):
|
|
_inherit = "base"
|
|
|
|
@api.model
|
|
def _add_grouped_filters(self, res, custom_filters):
|
|
arch = etree.fromstring(res["arch"])
|
|
node = arch.xpath("//search/filter[last()]")
|
|
if node:
|
|
node[0].addnext(etree.Element("separator"))
|
|
for custom_filter in custom_filters:
|
|
node = arch.xpath("//search/separator[last()]")
|
|
if node:
|
|
elem = etree.Element(
|
|
"filter",
|
|
{
|
|
"name": "ir_custom_filter_%s" % custom_filter.id,
|
|
"string": custom_filter.name,
|
|
"domain": custom_filter.domain,
|
|
},
|
|
)
|
|
node[0].addnext(elem)
|
|
res["arch"] = etree.tostring(arch)
|
|
return res
|
|
|
|
@api.model
|
|
def _add_grouped_groupby(self, res, custom_groupbys):
|
|
arch = etree.fromstring(res["arch"])
|
|
node = arch.xpath("//group/filter[last()]")
|
|
if node:
|
|
node[0].addnext(etree.Element("separator"))
|
|
for custom_groupby in custom_groupbys:
|
|
node = arch.xpath("//group/separator[last()]")
|
|
if node:
|
|
elem = etree.Element(
|
|
"filter",
|
|
{
|
|
"name": "ir_custom_filter_%s" % custom_groupby.id,
|
|
"string": custom_groupby.name,
|
|
"context": str(
|
|
{"group_by": custom_groupby.groupby_field.name}
|
|
),
|
|
},
|
|
)
|
|
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
|
|
):
|
|
"""Add filters in search views."""
|
|
res = super().fields_view_get(
|
|
view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu
|
|
)
|
|
if view_type == "search":
|
|
filter_groups = self.env["ir.filters.group"].search(
|
|
[
|
|
("model_id", "=", res.get("model")),
|
|
("filter_ids", "!=", False),
|
|
("type", "=", "filter"),
|
|
]
|
|
)
|
|
filters_no_group = self.env["ir.filters"].search(
|
|
[
|
|
("model_id", "=", res.get("model")),
|
|
("group_id", "=", False),
|
|
("type", "=", "filter"),
|
|
],
|
|
order="sequence desc",
|
|
)
|
|
groupby_groups = self.env["ir.filters.group"].search(
|
|
[
|
|
("model_id", "=", res.get("model")),
|
|
("filter_ids", "!=", False),
|
|
("type", "=", "groupby"),
|
|
]
|
|
)
|
|
groupbys_no_group = self.env["ir.filters"].search(
|
|
[
|
|
("model_id", "=", res.get("model")),
|
|
("group_id", "=", False),
|
|
("type", "=", "groupby"),
|
|
],
|
|
order="sequence desc",
|
|
)
|
|
# Add filter type
|
|
if filter_groups:
|
|
for filter_group in filter_groups:
|
|
res = self._add_grouped_filters(
|
|
res, filter_group.filter_ids.sorted("sequence", True)
|
|
)
|
|
if filters_no_group:
|
|
for filter_no_group in filters_no_group:
|
|
res = self._add_grouped_filters(res, filter_no_group)
|
|
# Add groupby type
|
|
if groupby_groups:
|
|
for groupby_group in groupby_groups:
|
|
res = self._add_grouped_groupby(
|
|
res, groupby_group.filter_ids.sorted("sequence", True)
|
|
)
|
|
if groupbys_no_group:
|
|
for groupby_no_group in groupbys_no_group:
|
|
res = self._add_grouped_groupby(res, groupby_no_group)
|
|
return res
|