nzgisco-results-widget
Version:
Widget which displays results of interrogate operations.
170 lines (163 loc) • 7.52 kB
JavaScript
define([
'dojo/_base/declare',
'dojo/_base/lang',
'dojo/_base/array',
'dojo/on',
"dojo/dom-style",
"dojo/Deferred",
"jimu/BaseWidget",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
'dojo/text!./MailMerge.html',
'dijit/form/RadioButton',
"jimu/dijit/CheckBox",
'jimu/CustomUtils/QueryUtil',
"dijit/form/Form",
"dojo/text!./config.json"
],
function (declare, lang, array, on, domStyle,Deferred, BaseWidget, _TemplatedMixin, _WidgetsInTemplateMixin, template, RadioButton, CheckBox,QueryUtil, Form,config) {
var MailMerge = declare([BaseWidget, _WidgetsInTemplateMixin, _TemplatedMixin], {
templateString: template,
widgetsInTemplate: true,
_addressConcat:false,
_fileName:"records.csv",
relateTablesConfig:null,
constructor:function(){
this.relateTablesConfig = JSON.parse(config);
},
_showLoading:function(){
domStyle.set(this.loadingMask, "display", "block");
},
_hideLoading:function(){
domStyle.set(this.loadingMask, "display", "none");
},
execute: function (data) {
var deferred = new Deferred();
this._showLoading();
this._addressConcat = this.concatenateAddress.get("checked");
var tableConfigKey = this.templatePicker.attr('value').template;
if (!this._addressConcat) {
if (tableConfigKey === 'owner') {
this._fileName = "MM_Owner_AddressConcatFalse.csv";
} else {
this._fileName = "MM_Ratepayer_AddressConcatFalse.csv";
}
} else {
if (tableConfigKey === 'owner') {
this._fileName = "MM_Owner_AddressConcatTrue.csv";
} else {
this._fileName = "MM_Ratepayer_AddressConcatTrue.csv";
}
}
var tableConfig = this.relateTablesConfig[tableConfigKey];
var defQuery;
if (data.features.length > 0) {
defQuery = tableConfig.field + " IN (";
array.forEach(data.features, function (feature,index) {
var relateAttribute;
var attrKeys = Object.keys(feature.attributes);
array.some(attrKeys, function (key) {
if (key.toLowerCase() == (tableConfig.field).toLowerCase()) {
relateAttribute = key;
return false;
}
})
if (relateAttribute) {
defQuery += feature.attributes[relateAttribute] +",";
}
if (index == (data.features.length - 1)) {
defQuery = lang.trim(defQuery);
defQuery = defQuery.replace(/,$/, "");
defQuery += ")";
}
});
var queryObject = {
queryDefinition: defQuery,
serviceUrl: tableConfig.url,
returnGeometry: false,
groupByFieldsForStatistics: tableConfig.groupByFields,
outFields:tableConfig.outFields
}
QueryUtil.executeQuery(queryObject).then(lang.hitch(this,function (res) {
var formattedData = this._formatDataForDownLoad(res, tableConfig)
this._hideLoading();
deferred.resolve({
data: formattedData,
file:this._fileName
});
}), function (error) {
console.log(error);
deferred.resolve([]);
});
}
return deferred.promise;
},
_formatDataForDownLoad: function (response, config) {
var formattedData = [];
var excludeFields;
if (!this._addressConcat) {
excludeFields = config.defaultExcludeFields || [];
} else {
excludeFields = config.excludeFieldsOnConcatenateMode || [];
}
var fields = array.map(array.filter(response.fields, function (field) {
if (array.indexOf(excludeFields, field.alias) == -1 || array.indexOf(excludeFields, field.name) == -1) {
return true;
}
}), function (f) {
return f.alias;
});
formattedData.push(fields);
if (!this._addressConcat) {
array.forEach(response.features, function (feature) {
var tempArray = [];
array.forEach(fields, function (field) {
tempArray.push(feature.attributes[field]);
});
formattedData.push(tempArray);
})
} else {
var groupByField = config.groupByFields[0];
var concatFields = config.concatFields;
array.some(response.fields, function (field) {
if (field.alias.toLowerCase() === groupByField || field.name.toLowerCase() === groupByField) {
groupByField = field.alias;
}
});
var features = response.features;
var flags = [], groupingFieldValues = [], l = features.length, i;
for( i=0; i<l; i++) {
if (flags[features[i].attributes[groupByField]]) continue;
flags[features[i].attributes[groupByField]] = true;
groupingFieldValues.push(features[i].attributes[groupByField]);
}
array.forEach(groupingFieldValues, function (grpFieldValue) {
var groupedFeatures = array.filter(features,function(feature,index){
if (feature.attributes[groupByField] == grpFieldValue) {
return true;
}
});
array.forEach(groupedFeatures, function (feature, index) {
array.forEach(concatFields, function (field) {
if (index == 0) {
groupedFeatures[0].attributes[field] = feature.attributes[field] + ","
} else {
groupedFeatures[0].attributes[field] += feature.attributes[field] + ","
}
if (index == (groupedFeatures.length - 1)) {
groupedFeatures[0].attributes[field] = groupedFeatures[0].attributes[field].replace(/,$/, "");
}
});
});
var tempArray = [];
array.forEach(fields, function (field) {
tempArray.push(groupedFeatures[0].attributes[field]);
});
formattedData.push(tempArray);
});
}
return formattedData;
}
});
return MailMerge;
});