Commit d0907084 authored by Xiaowu Zhang's avatar Xiaowu Zhang

erp5_web_renderjs_ui: add support for OR operation

parent 9e56822f
...@@ -130,7 +130,6 @@ ...@@ -130,7 +130,6 @@
\n \n
function submitFilterQuery(gadget) {\n function submitFilterQuery(gadget) {\n
var i,\n var i,\n
operator,\n
query = "",\n query = "",\n
value,\n value,\n
key,\n key,\n
...@@ -142,7 +141,10 @@ ...@@ -142,7 +141,10 @@
options = gadget.props.options,\n options = gadget.props.options,\n
filterforms = gadget.props.element.querySelectorAll(".filterForm"),\n filterforms = gadget.props.element.querySelectorAll(".filterForm"),\n
and = gadget.props.element.querySelector(".and");\n and = gadget.props.element.querySelector(".and");\n
operator = and.checked ? "AND" : "OR";\n //when OR is selected, since OR with Related Query is not supported,\n
// see https://git.erp5.org/gitweb/erp5.git/blob/HEAD:/product/ZSQLCatalog/Query/ComplexQuery.py?js=1#l113\n
//convert OR to NOT with AND\n
//a + b = NOT ( NOT (a) AND NOT (b)) \n
//build simple&complex query\n //build simple&complex query\n
for (i = 0; i < filterforms.length; i += 1) {\n for (i = 0; i < filterforms.length; i += 1) {\n
value = filterforms[i][2].value;\n value = filterforms[i][2].value;\n
...@@ -156,15 +158,34 @@ ...@@ -156,15 +158,34 @@
} else {\n } else {\n
key = filterforms[i][0][filterforms[i][0].selectedIndex].value;\n key = filterforms[i][0][filterforms[i][0].selectedIndex].value;\n
}\n }\n
simple_query_list.push(new SimpleQuery(\n if (and.checked || filterforms.length === 1) {\n
{\n simple_query_list.push(new SimpleQuery(\n
key: key,\n {\n
type: "simple",\n key: key,\n
value: value\n type: "simple",\n
}\n value: value\n
));\n }\n
));\n
} else {\n
simple_query_list.push(new ComplexQuery(\n
{\n
operator: "NOT",\n
query_list: [new SimpleQuery(\n
{\n
key: key,\n
type: "simple",\n
value: value\n
}\n
)],\n
type: "complex"\n
}\n
));\n
}\n
}\n }\n
}\n }\n
\n
\n
\n
\n \n
if (gadget.props.tree_path[0] !== "--") {\n if (gadget.props.tree_path[0] !== "--") {\n
for (i = 0; i < gadget.props.tree_path.length; i += 1) {\n for (i = 0; i < gadget.props.tree_path.length; i += 1) {\n
...@@ -192,11 +213,18 @@ ...@@ -192,11 +213,18 @@
\n \n
if (simple_query_list.length > 0) {\n if (simple_query_list.length > 0) {\n
complex_query = new ComplexQuery({\n complex_query = new ComplexQuery({\n
operator: operator,\n operator: "AND",\n
query_list: simple_query_list,\n query_list: simple_query_list,\n
type: "complex"\n type: "complex"\n
});\n });\n
query = Query.objectToSearchText(complex_query);\n if (!and.checked && filterforms.length > 1) {\n
complex_query = new ComplexQuery({\n
operator: "NOT",\n
query_list: [complex_query],\n
type: "complex"\n
});\n
}\n
query = complex_query.toString();\n
}\n }\n
\n \n
if (domain_tree_query_list.length > 0) {\n if (domain_tree_query_list.length > 0) {\n
...@@ -206,14 +234,14 @@ ...@@ -206,14 +234,14 @@
type: "complex"\n type: "complex"\n
});\n });\n
domain_tree_query = Query.objectToSearchText(domain_tree_query);\n domain_tree_query = Query.objectToSearchText(domain_tree_query);\n
}\n }\n
\n \n
gadget.props.jelement.panel("toggle");\n gadget.props.jelement.panel("toggle");\n
\n \n
return gadget.redirect({jio_key: options.jio_key,\n return gadget.redirect({jio_key: options.jio_key,\n
"extended_search": query, "domain_tree": domain_tree_query,\n "extended_search": query, "domain_tree": domain_tree_query,\n
"sort_list": options.form_definition.sort_list || "",\n "sort_list": options.form_definition.sort_list || "",\n
"hide_item": options.form_definition.hide_item || ""});\n "hide_item": options.form_definition.hide_item || ""});\n
\n \n
}\n }\n
\n \n
...@@ -474,7 +502,6 @@ ...@@ -474,7 +502,6 @@
\n \n
.declareMethod(\'render\', function (options) {\n .declareMethod(\'render\', function (options) {\n
var container = this.props.element.querySelector(".filter_item_container"),\n var container = this.props.element.querySelector(".filter_item_container"),\n
domain_tree_container = this.props.element.querySelector(".domain_tree_container"),\n
i,\n i,\n
gadget = this,\n gadget = this,\n
domain_tree,\n domain_tree,\n
...@@ -500,16 +527,24 @@ ...@@ -500,16 +527,24 @@
gadget.props.domain_tree_map = result._embedded._view.listbox.domain_tree_map;\n gadget.props.domain_tree_map = result._embedded._view.listbox.domain_tree_map;\n
if (query !== "") {\n if (query !== "") {\n
query_list = QueryFactory.create(query);\n query_list = QueryFactory.create(query);\n
if (query_list.operator === "OR") {\n if (query_list.operator === "OR" || query_list.operator === "NOT") {\n
or.checked = true;\n or.checked = true;\n
or.parentElement.children[0].setAttribute("class", "ui-btn ui-corner-all ui-btn-inherit ui-btn-icon-left ui-radio-on");\n or.parentElement.children[0].setAttribute("class", "ui-btn ui-corner-all ui-btn-inherit ui-btn-icon-left ui-radio-on");\n
} else {\n } else {\n
and.checked = true;\n and.checked = true;\n
and.parentElement.children[0].setAttribute("class", "ui-btn ui-corner-all ui-btn-inherit ui-btn-icon-left ui-radio-on");\n and.parentElement.children[0].setAttribute("class", "ui-btn ui-corner-all ui-btn-inherit ui-btn-icon-left ui-radio-on");\n
}\n }\n
query_list = query_list.query_list || [query_list];\n if (or.checked) {\n
query_list = query_list.query_list[0].query_list;\n
} else {\n
query_list = query_list.query_list || [query_list];\n
}\n
for (i = 0; i < query_list.length; i += 1) {\n for (i = 0; i < query_list.length; i += 1) {\n
item = createFilterItem(gadget, query_list[i]);\n if (or.checked) {\n
item = createFilterItem(gadget, query_list[i].query_list[0]);\n
} else {\n
item = createFilterItem(gadget, query_list[i]);\n
}\n
container.insertBefore(item, container.lastChild);\n container.insertBefore(item, container.lastChild);\n
}\n }\n
} else {\n } else {\n
...@@ -710,7 +745,7 @@ ...@@ -710,7 +745,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>945.62461.33513.45533</string> </value> <value> <string>946.3040.41776.59886</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -728,7 +763,7 @@ ...@@ -728,7 +763,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1443426358.29</float> <float>1443452242.14</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment