Skip to content

Instantly share code, notes, and snippets.

@imtiazahmad007
Last active October 14, 2015 17:40
Show Gist options
  • Save imtiazahmad007/a299e59168b2bda1e9a1 to your computer and use it in GitHub Desktop.
Save imtiazahmad007/a299e59168b2bda1e9a1 to your computer and use it in GitHub Desktop.
Ext.define('searchadmin.controller.reports.Reports', {
extend : 'Ext.app.Controller',
requires : [
'searchadmin.view.reports.DynamicGrid',
'searchadmin.store.DynamicGridStore'
],
refs:[
{
ref: 'selectReport',
selector: 'reportPageContents #reportCombo'
},
{
ref: 'resultsPanel',
selector: 'reports #searchResultsContainer'
},
{
ref: 'infoDisplayPanel',
selector: 'reportPageContents #queryInfoDisplayPanel'
}
],
init: function(app){
Ext.create('searchadmin.store.ReportStore',{storeId: 'precannedReportsStore'});
Ext.create('searchadmin.store.DynamicGridStore',{storeId: 'dynamicGridStore'});
var reportDef;
var me = this;
this.control({
'reportPageContents #reportCombo':{
select: function(combo) {
me.reportDef={};
var selectedReport = combo.getValue(); // gets the query correctly
var entryIdx = combo.getStore().findExact('queryValue', selectedReport);
me.reportDef['queryJson'] = selectedReport;
var storeRecord = combo.getStore().getAt(entryIdx);
me.reportDef['queryIndex'] = storeRecord.get('queryIndices');
me.reportDef['queryType'] = storeRecord.get('queryTypes');
me.reportDef['dataLocation'] = storeRecord.get('dataLocation');
var description = storeRecord.get('description'); // returns the descrip for report selected
me.getInfoDisplayPanel().update(description);
}
},
'reportPageContents #submitReportRun':{
click: function(btn){
me.executeReport(me.reportDef['queryJson'], me.reportDef['queryIndex'], me.reportDef['queryType'], me.reportDef['dataLocation']);
}
}
});
},
executeReport: function(queryJson, indexToQuery, typeToQuery, dataLocal) {
var me = this;
Ext.log('Executing Report request_json:' + queryJson);
var parameters = {"index": indexToQuery, "type": typeToQuery};
IcrFwk.util.AjaxRequestUtil.makeAjaxRequest({
url : 'query',
method: 'POST',
params: parameters,
jsonData : queryJson,
success : function(response, options){
if(response.resultCode != 200) {
IcrFwk.Msg.alert(response.errorMessage,"Error executing query: "+ response.resultCode);
return;
}
me.getResultsPanel().setValue(JSON.stringify(response,null,4));
me.handleSelectQueryResult(me, response, dataLocal);
},
scope : this
});
},
/**
* Handle the result from running a select query.
* @param data Query result
*/
handleSelectQueryResult : function(current, response, dataLocal) {
var _fields = [];
var _columns = [];
var cols_set = {};
var elastic_docs = [];
var queryStore = Ext.data.StoreManager.lookup('dynamicGridStore');
// eval("response+dataLocal")
var responseDocs = current.getProperty(response, dataLocal);
for( var idx in responseDocs ){
var src_doc;
if(dataLocal === 'hits.hits'){
src_doc = responseDocs[idx]._source;
elastic_docs.push(src_doc);
} else{
src_doc = responseDocs[idx];
elastic_docs.push(src_doc);
}
for (var key in src_doc) {
cols_set[key] = "1";
}
}
for( var col_name in cols_set ){
_columns.push({
text : col_name,
dataIndex : col_name,
flex : 1
});
_fields.push({
name : col_name
});
}
var data_docs = {"data" : elastic_docs}
queryStore.model.setFields(_fields);
queryStore.loadRawData(data_docs, false);
var grid = Ext.ComponentQuery.query('#dynamicGridId')[0];
grid.reconfigure(queryStore, _columns);
},
getProperty: function(obj, prop) {
var parts = prop.split('.'),
last = parts.pop(),
l = parts.length,
i = 1,
current = parts[0];
while((obj = obj[current]) && i < l) {
current = parts[i];
i++;
}
if(obj) {
return obj[last];
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment