diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js index cd9c3943d6433202f21825bcf74e4b98006c7185..e134c148e7ca0f0cf3c97c5f37a71378f5753459 100755 --- a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js @@ -282,8 +282,10 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.quer */ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getBOLayersFilters_ = function (oQueryBo) { oVmap.log('nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototypeBO.getLayersFilters_'); + var formReaderSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formReaderService"]); var oFilterValues = {}; + var oFilterDefinition = {}; var sFilter = ""; var filter = { 'relation': 'AND', @@ -297,6 +299,13 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getB oLayerFilter_ = oQueryBo['layers'][i].get('filter_values_cleared'); if (goog.isObject(oLayerFilter_)) { goog.object.extend(oFilterValues, oLayerFilter_); + oLayerFilterDef_ = oQueryBo['layers'][i].get('filter_form'); + if(goog.isObject(oLayerFilterDef_)){ + for (var field in oLayerFilter_){ + var oFieldDef = formReaderSrvc["getFormElementDefinition"](field, 'search', oLayerFilterDef_); + oFilterDefinition[field] = oFieldDef; + } + } } } } @@ -323,13 +332,51 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getB continue; } } - - filter['operators'].push({ - 'column': key, - 'compare_operator': goog.isArray(oFilterValues[key]) ? 'IN' : '=', - 'value': oFilterValues[key] - }); - } + var sValue = oFilterValues[key] + //surcharge le filtre si une définition est rpésente dans le formulaire + if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator"])){ + var aOperators = []; + for (var j = 0;j < oFilterDefinition[key]["comparator"].length;j++){ + var oOperator = {}; + if (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["formater"])) { + sValue = oFilterDefinition[key]["comparator"][j]["formater"].replace(/<VALUE_TO_REPLACE>/g, sValue); + } + if(goog.isArray(oFilterDefinition[key]["comparator"][j]["compare_operator"])) { + oOperator["relation"] = (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["relation"]) ? oFilterDefinition[key]["comparator"][j]["relation"] : "AND"); + oOperator["operators"] = []; + for (var k = 0; k < oFilterDefinition[key]["comparator"][j]["compare_operator"].length; k++){ + oOperator["operators"].push({ + "column": (goog.isArray(oFilterDefinition[key]["comparator"][j]["column"]) ? oFilterDefinition[key]["comparator"][j]["column"][k] : key), + "compare_operator": oFilterDefinition[key]["comparator"][j]["compare_operator"][k], + "value": sValue + }); + } + }else{ + oOperator["column"] = (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["column"]) ? oFilterDefinition[key]["comparator"][j]["column"] : key); + oOperator["compare_operator"] = oFilterDefinition[key]["comparator"][j]["compare_operator"]; + oOperator["value"] = sValue; + } + if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["compare_operator_options"])){ + oOperator["compare_operator_options"] = oFilterDefinition[key]["comparator"][j]["compare_operator_options"]; + } + aOperators.push(oOperator); + } + if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator_relation"])){ + filter['operators'].push({ + "relation": oFilterDefinition[key]["comparator_relation"], + "operators": aOperators + }); + }else{ + filter['operators'] = filter['operators'].concat(aOperators); + } + } else { + filter['operators'].push({ + 'column': key, + 'compare_operator': goog.isArray(oFilterValues[key]) ? 'IN' : '=', + 'value': sValue + }); + } + } sFilter = JSON.stringify(filter); return sFilter;