From d090708479f98b957136031051dd099f000c8f03 Mon Sep 17 00:00:00 2001 From: Xiaowu Zhang <xiaowu.zhang@tiolive.com> Date: Mon, 28 Sep 2015 15:03:39 +0000 Subject: [PATCH] erp5_web_renderjs_ui: add support for OR operation --- .../rjs_gadget_erp5_filtereditor_js.xml | 81 +++++++++++++------ 1 file changed, 58 insertions(+), 23 deletions(-) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_filtereditor_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_filtereditor_js.xml index 66870074e9..c3eb1b3156 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_filtereditor_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_filtereditor_js.xml @@ -130,7 +130,6 @@ \n function submitFilterQuery(gadget) {\n var i,\n - operator,\n query = "",\n value,\n key,\n @@ -142,7 +141,10 @@ options = gadget.props.options,\n filterforms = gadget.props.element.querySelectorAll(".filterForm"),\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 for (i = 0; i < filterforms.length; i += 1) {\n value = filterforms[i][2].value;\n @@ -156,15 +158,34 @@ } else {\n key = filterforms[i][0][filterforms[i][0].selectedIndex].value;\n }\n - simple_query_list.push(new SimpleQuery(\n - {\n - key: key,\n - type: "simple",\n - value: value\n - }\n - ));\n + if (and.checked || filterforms.length === 1) {\n + simple_query_list.push(new SimpleQuery(\n + {\n + key: key,\n + type: "simple",\n + value: value\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 if (gadget.props.tree_path[0] !== "--") {\n for (i = 0; i < gadget.props.tree_path.length; i += 1) {\n @@ -192,11 +213,18 @@ \n if (simple_query_list.length > 0) {\n complex_query = new ComplexQuery({\n - operator: operator,\n + operator: "AND",\n query_list: simple_query_list,\n type: "complex"\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 if (domain_tree_query_list.length > 0) {\n @@ -206,14 +234,14 @@ type: "complex"\n });\n domain_tree_query = Query.objectToSearchText(domain_tree_query);\n - }\n + }\n \n - gadget.props.jelement.panel("toggle");\n + gadget.props.jelement.panel("toggle");\n \n - return gadget.redirect({jio_key: options.jio_key,\n - "extended_search": query, "domain_tree": domain_tree_query,\n - "sort_list": options.form_definition.sort_list || "",\n - "hide_item": options.form_definition.hide_item || ""});\n + return gadget.redirect({jio_key: options.jio_key,\n + "extended_search": query, "domain_tree": domain_tree_query,\n + "sort_list": options.form_definition.sort_list || "",\n + "hide_item": options.form_definition.hide_item || ""});\n \n }\n \n @@ -474,7 +502,6 @@ \n .declareMethod(\'render\', function (options) {\n var container = this.props.element.querySelector(".filter_item_container"),\n - domain_tree_container = this.props.element.querySelector(".domain_tree_container"),\n i,\n gadget = this,\n domain_tree,\n @@ -500,16 +527,24 @@ gadget.props.domain_tree_map = result._embedded._view.listbox.domain_tree_map;\n if (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.parentElement.children[0].setAttribute("class", "ui-btn ui-corner-all ui-btn-inherit ui-btn-icon-left ui-radio-on");\n } else {\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 }\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 - 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 }\n } else {\n @@ -710,7 +745,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>945.62461.33513.45533</string> </value> + <value> <string>946.3040.41776.59886</string> </value> </item> <item> <key> <string>state</string> </key> @@ -728,7 +763,7 @@ </tuple> <state> <tuple> - <float>1443426358.29</float> + <float>1443452242.14</float> <string>UTC</string> </tuple> </state> -- 2.30.9