diff --git a/shrine-webclient/src/main/html/index.html b/shrine-webclient/src/main/html/index.html index 9282ab469..ff0bb3bf0 100644 --- a/shrine-webclient/src/main/html/index.html +++ b/shrine-webclient/src/main/html/index.html @@ -1,1432 +1,1444 @@ Shrine Web Client
diff --git a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_QryTool.js b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_QryTool.js index d7881a97f..6d798bc7b 100644 --- a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_QryTool.js +++ b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_QryTool.js @@ -1,2863 +1,2938 @@ /** * @projectDescription Event controller for CRC's Query Tool. * @inherits i2b2.CRC.ctrlr * @namespace i2b2.CRC.ctrlr.QT * @author Nick Benik, Griffin Weber MD PhD * @version 1.3 * ---------------------------------------------------------------------------------------- * updated 9-15-08: RC4 launch [Nick Benik] */ console.group('Load & Execute component file: CRC > ctrlr > QueryTool'); console.time('execute time'); i2b2.CRC.ctrlr.QT = new QueryToolController(); function QueryToolController() { i2b2.CRC.model.queryCurrent = {}; this.queryIsDirty = true; this.queryIsRunning = false; this.queryNamePrompt = false; this.queryTiming = 'ANY'; this.temporalGroup = 0; this.tenporalBuilders = 0; this.hasModifier = false; this.queryNameDefault = 'New Query'; this.queryStatusDefaultText = 'Drag query items to one or more groups then click Run Query.'; this.panelControllers = []; this.panelControllers[0] = new i2b2_PanelController(this); this.panelControllers[1] = new i2b2_PanelController(this); this.panelControllers[2] = new i2b2_PanelController(this); // ================================================================================================== // this.doSetQueryName = function(inName) { this.queryIsDirty = true; $('queryName').innerHTML = inName; i2b2.CRC.model.queryCurrent.name = inName; } // ================================================================================================== // this.doQueryClear = function() { // function to clear query from memory delete i2b2.CRC.model.queryCurrent; delete i2b2.CRC.ctrlr.currentQueryResults; i2b2.CRC.model.queryCurrent = {}; i2b2.CRC.ctrlr.QT.temporalGroup = 0; var dm = i2b2.CRC.model.queryCurrent; dm.panels = []; dm.panels[0] = new Array(); dm.panels[1] = new Array(); dm.panels[2] = new Array(); this.doSetQueryName.call(this,''); this.doShowFrom(0); this._redrawPanelCount(); this.queryNamePrompt = false; this.queryIsDirty = true; this.hasModifier = false; $('infoQueryStatusText').innerHTML = ""; $('infoQueryStatusChart').innerHTML = ""; $('infoQueryStatusReport').innerHTML = ""; $('infoDownloadStatusData').innerHTML = ""; $('crc.temoralBuilder').hide(); $('crc.innerQueryPanel').show(); this.panelControllers[0].refTitle.innerHTML = 'Group 1'; $("defineTemporal-button").innerHTML = "Population in which events occur"; i2b2.CRC.view.QT.setQueryTiming(0); } // ================================================================================================== // this.doQueryLoad = function(qm_id) { // function to load query from history // clear existing query i2b2.CRC.ctrlr.QT.doQueryClear(); // show on GUI that work is being done i2b2.h.LoadingMask.show(); // callback processor var scopedCallback = new i2b2_scopedCallback(); scopedCallback.scope = this; scopedCallback.callback = function(results) { var cl_queryMasterId = qm_id; // THIS function is used to process the AJAX results of the getChild call // results data object contains the following attributes: // refXML: xmlDomObject <--- for data processing // msgRequest: xml (string) // msgResponse: xml (string) // error: boolean // errorStatus: string [only with error=true] // errorMsg: string [only with error=true] i2b2.CRC.view.QT.queryRequest = results.msgRequest; i2b2.CRC.view.QT.queryResponse = results.msgResponse; // switch to status tab i2b2.CRC.view.status.showDisplay(); // did we get a valid query definition back? var qd = i2b2.h.XPath(results.refXML, 'descendant::query_name/..'); if (qd.length != 0) { i2b2.CRC.ctrlr.QT.doQueryClear(); var dObj = {}; //1.17 dObj.name = i2b2.h.getXNodeVal(results.refXML,'name'); dObj.name = i2b2.h.getXNodeVal(results.refXML,'query_name'); $('queryName').innerHTML = dObj.name; dObj.specificity = i2b2.h.getXNodeVal(qd[0],'specificity_scale'); dObj.panels = []; //1.17 for (var j=0; j 0) { c = c[0]; var o = new Object; o.xmlOrig = c; o.table_name = i2b2.h.getXNodeVal(c,'tablename'); o.column_name = i2b2.h.getXNodeVal(c,'columnname'); o.operator = i2b2.h.getXNodeVal(c,'operator'); o.icd9 = i2b2.h.getXNodeVal(c,'basecode'); o.level = i2b2.h.getXNodeVal(c,'level'); o.name = i2b2.h.getXNodeVal(c,'name'); o.key = i2b2.h.getXNodeVal(c,'key'); o.tooltip = i2b2.h.getXNodeVal(c,'tooltip'); o.dim_code = i2b2.h.getXNodeVal(c,'dimcode'); o.visual_attribs = i2b2.h.getXNodeVal(c,'visualattributes'); o.hasChildren = i2b2.h.getXNodeVal(c,'visualattributes').substring(0,2); // these are not needed? o.fact_table_column = i2b2.h.getXNodeVal(c,'facttablecolumn'); o.column_name_datatype = i2b2.h.getXNodeVal(c,'columndatatype'); o.synonym_cd = i2b2.h.getXNodeVal(c,'synonym_cd'); o.totalnum = i2b2.h.getXNodeVal(c,'totalnum'); //1.17 process lab values. var lvd = i2b2.h.XPath(pi[i2], 'descendant::constrain_by_value'); if (lvd.length>0){ lvd = lvd[0]; // pull the LabValue definition for concept var lvdef = i2b2.h.XPath(c, "descendant::metadataxml/ValueMetadata[Loinc]"); if (lvdef.length > 0) { lvdef = lvdef[0]; } else { lvdef = false; } // extract & translate var t = i2b2.h.getXNodeVal(lvd,"value_constraint"); o.LabValues = {}; o.LabValues.NumericOp = i2b2.h.getXNodeVal(lvd,"value_operator"); o.LabValues.GeneralValueType = i2b2.h.getXNodeVal(lvd,"value_type"); switch(o.LabValues.GeneralValueType) { case "NUMBER": o.LabValues.MatchBy = "VALUE"; if (t.indexOf(' and ')!=-1) { // extract high and low values t = t.split(' and '); o.LabValues.ValueLow = t[0]; o.LabValues.ValueHigh = t[1]; } else { o.LabValues.Value = t; } break; case "STRING": o.LabValues.MatchBy = "VALUE"; o.LabValues.ValueString = t; break; case "TEXT": // this means Enum? o.LabValues.MatchBy = "VALUE"; try { o.LabValues.ValueEnum = eval("(Array"+t+")"); } catch(e) { console.error("Conversion Failed: Lab Value data = "+t); } break; case "FLAG": o.LabValues.MatchBy = "FLAG"; o.LabValues.ValueFlag = t break; default: o.LabValues.Value = t; } }//1.17 end lab values section var sdxDataNode = i2b2.sdx.Master.EncapsulateData('CONCPT',o); if (o.LabValues) { // We do want 2 copies of the Lab Values: one is original from server while the other one is for user manipulation sdxDataNode.LabValues = o.LabValues; } //push item on po. po.items.push(sdxDataNode); } else { console.error("CRC's ONT Handler could not get term details about '"+ckey+"'!"); } } dObj.panels[po.panel_num] = po; } // reindex the panels index (panel [1,3,5] should be [0,1,2]) dObj.panels = dObj.panels.compact(); i2b2.CRC.model.queryCurrent.panels[j] = dObj.panels; var qpc = i2b2.CRC.ctrlr.QT.panelControllers[0]; var dm = i2b2.CRC.model.queryCurrent; for (var k=0; k 0 && panel[0].items.length > 0; } if (i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length < 1) { alert('You must enter at least one concept to run a query.'); return void(0); } // make sure a shrine topic has been selected if (i2b2.PM.model.shrine_domain) { var topicSELECT = $('queryTopicSelect'); //@pcori_webclient if(topicSELECT){ if (topicSELECT.selectedIndex == null || topicSELECT.selectedIndex == 0) { alert('You must select a Topic to run a SHRINE query.'); return void(0); } var topicid = topicSELECT.options[topicSELECT.selectedIndex].value; } } // callback for dialog submission var handleSubmit = function() { // submit value(s) if(this.submit()) { // run the query var t = $('dialogQryRun'); var queryNameInput = t.select('INPUT.inputQueryName')[0]; var options = {}; var t2 = t.select('INPUT.chkQueryType'); for (var i=0;i"; } } // generate the result_output_list (for 1.3 backend) var result_output = ""; for(var name in options) { if (name) { i++; result_output += '\n'; } } + //@pcori_webclient + //result_output = ''; params.psm_result_output = ''+result_output+'\n'; // create query object $('runBoxText').innerHTML = "Cancel Query"; i2b2.CRC.ctrlr.currentQueryStatus = new i2b2.CRC.ctrlr.QueryStatus($('infoQueryStatusText')); i2b2.CRC.ctrlr.currentQueryStatus.startQuery(inQueryName, params); } // ================================================================================================== // this._queryRunningTime = function() { if (i2b2.CRC.ctrlr.QT.queryIsRunning) { var d = new Date(); var t = Math.floor((d.getTime() - queryStartTime)/100)/10; var el = $('numSeconds'); if (el) { var s = t.toString(); if (s.indexOf('.') < 0) { s += '.0'; } el.innerHTML = s; window.setTimeout('i2b2.CRC.ctrlr.QT._queryRunningTime()',100); } } } // ================================================================================================== // this._queryPromptRun = function(handleSubmit) { if (!i2b2.CRC.view.dialogQryRun) { var handleCancel = function() { this.cancel(); }; var loopBackSubmit = function() { i2b2.CRC.view.dialogQryRun.submitterFunction(); }; i2b2.CRC.view.dialogQryRun = new YAHOO.widget.SimpleDialog("dialogQryRun", { width: "400px", fixedcenter: true, constraintoviewport: true, modal: true, zindex: 700, buttons: [{ text: "OK", handler: loopBackSubmit, isDefault: true }, { text: "Cancel", handler: handleCancel }] }); $('dialogQryRun').show(); i2b2.CRC.view.dialogQryRun.validate = function(){ // now process the form data var msgError = ''; var queryNameInput = $('dialogQryRun').select('INPUT.inputQueryName')[0]; if (!queryNameInput || queryNameInput.value.blank()) { alert('Please enter a name for this query.'); return false; } return true; }; i2b2.CRC.view.dialogQryRun.render(document.body); } // manage the event handler for submit delete i2b2.CRC.view.dialogQryRun.submitterFunction; i2b2.CRC.view.dialogQryRun.submitterFunction = handleSubmit; // display the dialoge i2b2.CRC.view.dialogQryRun.center(); i2b2.CRC.view.dialogQryRun.show(); } // ================================================================================================== // this._queryPromptName = function(handleSubmit) { if (!i2b2.CRC.view.dialogQmName) { var handleCancel = function() { this.cancel(); }; var loopBackSubmit = function() { i2b2.CRC.view.dialogQmName.submitterFunction(); }; i2b2.CRC.view.dialogQmName = new YAHOO.widget.SimpleDialog("dialogQmName", { width: "400px", fixedcenter: true, constraintoviewport: true, modal: true, zindex: 700, buttons: [{ text: "OK", handler: loopBackSubmit, isDefault: true }, { text: "Cancel", handler: handleCancel }] }); $('dialogQmName').show(); i2b2.CRC.view.dialogQmName.validate = function(){ // now process the form data var msgError = ''; var queryNameInput = $('inputQueryName'); if (!queryNameInput || queryNameInput.value.blank()) { alert('Please enter a name for this query.'); return false; } return true; }; i2b2.CRC.view.dialogQmName.render(document.body); } // manage the event handler for submit delete i2b2.CRC.view.dialogQmName.submitterFunction; i2b2.CRC.view.dialogQmName.submitterFunction = handleSubmit; // display the dialoge i2b2.CRC.view.dialogQmName.center(); i2b2.CRC.view.dialogQmName.show(); } // ================================================================================================== // this._getQueryXML = function(queryName) { var i; var isTemporal = false; var el; var concept; var panel_list = i2b2.CRC.model.queryCurrent.panels[0]; //i2b2.CRC.ctrlr.QT.temporalGroup]; var panel_cnt = panel_list.length; var auto_query_name_len = 15; var auto_query_name = ''; if (this.queryTiming == "TEMPORAL") { isTemporal = true; } if (panel_cnt > 0) { auto_query_name_len = Math.floor(15/panel_cnt); if (auto_query_name_len < 1) {auto_query_name_len = 1;} } // build Query XML var s = '\n'; if (isTemporal) { queryName = '(t) ' + queryName; } s += '\t' + i2b2.h.Escape(queryName) + '\n'; if (this.queryTiming == "SAMEVISIT") { s += '\tSAMEVISIT\n'; } else if (this.queryTiming == "ANY") { s += '\tANY\n'; } else if (this.queryTiming == "TEMPORAL") { s += '\tANY\n'; } else { s += '\tSAMEINSTANCENUM\n'; } s += '\t0\n'; if (i2b2.PM.model.shrine_domain) { s += '\t1\n'; } for (var ip = 0; ip < i2b2.CRC.model.queryCurrent.panels.length; ip++) { panel_list = i2b2.CRC.model.queryCurrent.panels[ip]; //i2b2.CRC.ctrlr.QT.temporalGroup]; panel_cnt = panel_list.length; if (isTemporal && ip > 0) { //if equal to one than add subquery_contraint if (ip == 1) { for (var tb=0; tb <= this.tenporalBuilders; tb++) { s += '\t\n'; s += '\t\t\n'; s += '\t\t\t' + $('instancevent1[' + tb + ']').options[$('instancevent1[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('preloc1[' + tb + ']').options[$('preloc1[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('instanceopf1[' + tb + ']').options[$('instanceopf1[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\n'; s += '\t\t' + $('postloc[' + tb + ']').options[$('postloc[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\n'; s += '\t\t\t' + $('instancevent2[' + tb + ']').options[$('instancevent2[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('preloc2[' + tb + ']').options[$('preloc2[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('instanceopf2[' + tb + ']').options[$('instanceopf2[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\n'; if ( $('bytime1[' + tb + ']').checked) { s += '\t\t\n'; s += '\t\t\t' + $('byspan1[' + tb + ']').options[$('byspan1[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('bytimevalue1[' + tb + ']').value + '\n'; s += '\t\t\t' + $('bytimeunit1[' + tb + ']').options[$('bytimeunit1[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\n'; } if ( $('bytime2[' + tb + ']').checked) { s += '\t\t\n'; s += '\t\t\t' + $('byspan2[' + tb + ']').options[$('byspan2[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\t' + $('bytimevalue2[' + tb + ']').value + '\n'; s += '\t\t\t' + $('bytimeunit2[' + tb + ']').options[$('bytimeunit2[' + tb + ']').selectedIndex].value + '\n'; s += '\t\t\n'; } s += '\t\n'; } } if (panel_list[0].items.length == 0) break; s += '\n '; s += 'Event '+ ip +'\n'; s += 'EVENT\n'; s += 'Event '+ ip +'\n'; s += 'SAMEINSTANCENUM\n'; s += '0\n'; } for (var p = 0; p < panel_cnt; p++) { s += '\t\n'; s += '\t\t' + (p+1) + '\n'; // date range constraints if (panel_list[p].dateFrom) { s += '\t\t'+panel_list[p].dateFrom.Year+'-'+padNumber(panel_list[p].dateFrom.Month,2)+'-'+padNumber(panel_list[p].dateFrom.Day,2)+'T00:00:00.000-05:00\n'; } if (panel_list[p].dateTo) { s += '\t\t'+panel_list[p].dateTo.Year+'-'+padNumber(panel_list[p].dateTo.Month,2)+'-'+padNumber(panel_list[p].dateTo.Day,2)+'T00:00:00.000-05:00\n'; } s += "\t\t" + panel_list[p].relevance + "\n"; // Exclude constraint (invert flag) if (panel_list[p].exclude) { s += '\t\t1\n'; } else { s += '\t\t0\n'; } // Panel Timing s += '\t\t' + panel_list[p].timing + '\n'; // Occurs constraint s += '\t\t'+((panel_list[p].occurs*1)+1)+'\n'; // Concepts for (i=0; i < panel_list[p].items.length; i++) { var sdxData = panel_list[p].items[i]; s += '\t\t\n'; switch(sdxData.sdxInfo.sdxType) { case "QM": s += '\t\t\tmasterid:' + sdxData.origData.id + '\n'; s += '\t\t\t' + sdxData.origData.title + '\n'; s += '\t\t\t' + sdxData.origData.name + '\n'; s += '\t\t\tfalse\n'; s += '\t\t\t0\n'; break; case "PRS": s += '\t\t\tpatient_set_coll_id:' + sdxData.sdxInfo.sdxKeyValue + '\n'; s += '\t\t\t' + sdxData.sdxInfo.sdxDisplayName + '\n'; s += '\t\t\t' + sdxData.sdxInfo.sdxDisplayName + '\n'; s += '\t\t\tfalse\n'; s += '\t\t\t0\n'; break; case "ENS": s += '\t\t\tpatient_set_enc_id:' + sdxData.sdxInfo.sdxKeyValue + '\n'; s += '\t\t\t' + sdxData.sdxInfo.sdxDisplayName + '\n'; s += '\t\t\t' + sdxData.sdxInfo.sdxDisplayName + '\n'; s += '\t\t\tfalse\n'; s += '\t\t\t0\n'; break; default: if (sdxData.origData.isModifier) { var modParent = sdxData.origData.parent; var level = sdxData.origData.level; var key = sdxData.origData.parent.key; var name = (sdxData.origData.parent.name != null ? i2b2.h.Escape(sdxData.origData.parent.name) : i2b2.h.Escape(sdxData.origData.name)) ; var tooltip = sdxData.origData.tooltip; var itemicon = sdxData.origData.hasChildren; while (modParent != null) { if (modParent.isModifier) { modParent = modParent.parent; } else { level = modParent.level; key = modParent.key; name = modParent.name; tooltip = modParent.tooltip; itemicon = modParent.hasChildren; break; } } s += '\t\t\t' + level + '\n'; s += '\t\t\t' + key + '\n'; s += '\t\t\t' + name + '\n'; // (sdxData.origData.newName != null ? sdxData.origData.newName : sdxData.origData.name) + '\n'; s += '\t\t\t' + tooltip + '\n'; s += '\t\t\t' + itemicon + '\n'; s += '\t\t\tENC\n'; s += '\t\t\t\t\n'; s += '\t\t\t\t\t' + sdxData.origData.name + '\n'; s += '\t\t\t\t\t' + sdxData.origData.applied_path + '\n'; s += '\t\t\t\t\t' + sdxData.origData.key + '\n'; if (sdxData.ModValues) { s += this.getValues( sdxData.ModValues); } s += '\t\t\t\t\n'; } else { sdxData.origData.key = (sdxData.origData.key).replace(/\n'; //s += '\t\t\t' + (sdxData.origData.newName != null ? i2b2.h.Escape(sdxData.origData.newName) : i2b2.h.Escape(sdxData.origData.name)) + '\n'; s += '\t\t\t' + (sdxData.origData.name != null ? i2b2.h.Escape(sdxData.origData.name) : i2b2.h.Escape(sdxData.origData.newName)) + '\n'; s += '\t\t\t' + sdxData.origData.key + '\n'; s += '\t\t\t' + sdxData.origData.tooltip + '\n'; s += '\t\t\tENC\n'; s += '\t\t\t' + sdxData.origData.hasChildren + '\n'; } try { var t = i2b2.h.XPath(sdxData.origData.xmlOrig,'descendant::synonym_cd/text()'); t = (t[0].nodeValue=="Y"); } catch(e) { var t = "false"; } s += '\t\t\t'+t+'\n'; if (sdxData.LabValues) { //s += '\t\t\t\n'; s += this.getValues( sdxData.LabValues); } break; } //TODO add contraint to the item in the future /* s += '\t\t\t\n'; if (panel_list[p].dateFrom) { s += '\t\t\t\t'+panel_list[p].dateFrom.Year+'-'+padNumber(panel_list[p].dateFrom.Month,2)+'-'+padNumber(panel_list[p].dateFrom.Day,2)+'Z\n'; } if (panel_list[p].dateTo) { s += '\t\t\t\t'+panel_list[p].dateTo.Year+'-'+padNumber(panel_list[p].dateTo.Month,2)+'-'+padNumber(panel_list[p].dateTo.Day,2)+'Z\n'; } s += '\t\t\t\n'; */ s += '\t\t\n'; if (i==0) { if (undefined != sdxData.origData.name) { auto_query_name += sdxData.origData.name.substring(0,auto_query_name_len); } else if (undefined != sdxData.origData.title) { auto_query_name += sdxData.origData.title.substring(0,auto_query_name_len); } else { auto_query_name += "new query"; } if (p < panel_cnt-1) {auto_query_name += '-';} } } s += '\t\n'; } if (isTemporal && ip > 0) { s += '\n '; } if (isTemporal == false) { break; } } s += '\n'; this.queryMsg = {}; this.queryMsg.queryAutoName = auto_query_name; if (undefined===queryName) { this.queryMsg.queryName = this.queryNameDefault; } else { this.queryMsg.queryName = queryName; } this.queryMsg.queryXML = s; return(this.queryMsg); } this.getValues = function(lvd) { var s = '\t\t\t\n'; //var lvd = sdxData.LabValues; switch(lvd.MatchBy) { case "FLAG": s += '\t\t\t\tFLAG\n'; s += '\t\t\t\tEQ\n'; s += '\t\t\t\t'+i2b2.h.Escape(lvd.ValueFlag)+'\n'; break; case "VALUE": if (lvd.GeneralValueType=="ENUM") { var sEnum = []; for (var i2=0;i2\n'; s += '\t\t\t\tIN\n'; } else if (lvd.GeneralValueType=="STRING") { s += '\t\t\t\tTEXT\n'; s += '\t\t\t\t'+lvd.StringOp+'\n'; s += '\t\t\t\t\n'; } else if (lvd.GeneralValueType=="LARGESTRING") { if (lvd.DbOp) { s += '\t\t\t\tCONTAINS[database]\n'; } else { s += '\t\t\t\tCONTAINS\n'; } s += '\t\t\t\tLARGETEXT\n'; s += '\t\t\t\t\n'; } else { s += '\t\t\t\t'+lvd.GeneralValueType+'\n'; s += '\t\t\t\t'+lvd.UnitsCtrl+'\n'; s += '\t\t\t\t'+lvd.NumericOp+'\n'; if (lvd.NumericOp == 'BETWEEN') { s += '\t\t\t\t'+i2b2.h.Escape(lvd.ValueLow)+' and '+i2b2.h.Escape(lvd.ValueHigh)+'\n'; } else { s += '\t\t\t\t'+i2b2.h.Escape(lvd.Value)+'\n'; } } break; case "": break; } s += '\t\t\t\n'; return s; } // ================================================================================================== // this.panelAdd = function(yuiTree) { // this function is used to create a new panel, it initializes the data structure in the if (!i2b2.CRC.model.queryCurrent.panels) { i2b2.CRC.model.queryCurrent.panels = []; i2b2.CRC.model.queryCurrent.panels[0] = new Array(); i2b2.CRC.model.queryCurrent.panels[1] = new Array(); i2b2.CRC.model.queryCurrent.panels[2] = new Array(); // i2b2.CRC.model.queryCurrent.panels = new Array(new Array()); } var dm = i2b2.CRC.model.queryCurrent; var pi = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length; if (pi == undefined) { dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup] = new Array(); pi = 0; } var tTiming = i2b2.CRC.ctrlr.QT.queryTiming; if ((tTiming == "TEMPORAL") && (i2b2.CRC.ctrlr.QT.temporalGroup > 0)) tTiming = "SAMEINSTANCENUM"; if ((tTiming == "TEMPORAL") && (i2b2.CRC.ctrlr.QT.temporalGroup == 0)) tTiming = "ANY"; // setup the data model for this panel dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi] = {}; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateTo = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateFrom = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].exclude = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].occurs = '0'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].relevance = '100'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].timing = tTiming; // i2b2.CRC.ctrlr.QT.queryTiming; //'ANY'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].items = []; // create a treeview root node and connect it to the treeview controller dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode = new YAHOO.widget.RootNode(this.yuiTree); yuiTree.root = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode.tree = yuiTree; yuiTree.setDynamicLoad(i2b2.CRC.ctrlr.QT._loadTreeDataForNode,1); if (dm.panels.length == 1) { var tTiming = i2b2.CRC.ctrlr.QT.queryTiming; if (i2b2.CRC.ctrlr.QT.queryTiming == "TEMPORAL") tTiming = "ANY"; i2b2.CRC.ctrlr.QT.temporalGroup = 1; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup] = {}; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi] = {}; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateTo = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateFrom = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].exclude = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].occurs = '0'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].relevance = '100'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].timing = tTiming; //i2b2.CRC.ctrlr.QT.queryTiming; //'ANY'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].items = []; // create a treeview root node and connect it to the treeview controller dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode = new YAHOO.widget.RootNode(this.yuiTree); yuiTree.root = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode.tree = yuiTree; yuiTree.setDynamicLoad(i2b2.CRC.ctrlr.QT._loadTreeDataForNode,1); i2b2.CRC.ctrlr.QT.temporalGroup = 2; if (i2b2.CRC.ctrlr.QT.queryTiming == "TEMPORAL") tTiming = "SAMEINSTANCENUM"; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup] = {}; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi] = {}; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateTo = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].dateFrom = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].exclude = false; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].occurs = '0'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].relevance = '100'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].timing = tTiming; //i2b2.CRC.ctrlr.QT.queryTiming; //'ANY'; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].items = []; // create a treeview root node and connect it to the treeview controller dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode = new YAHOO.widget.RootNode(this.yuiTree); yuiTree.root = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode; dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi].tvRootNode.tree = yuiTree; yuiTree.setDynamicLoad(i2b2.CRC.ctrlr.QT._loadTreeDataForNode,1); i2b2.CRC.ctrlr.QT.temporalGroup = 0; } // update the count on the GUI this._redrawPanelCount(); // return a reference to the new panel object this.doSetQueryName.call(this,''); return dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][pi]; } // ================================================================================================== // this._loadTreeDataForNode = function(node, onCompleteCallback) { i2b2.sdx.Master.LoadChildrenFromTreeview(node, onCompleteCallback); } // ================================================================================================== // this.ToggleNode = function(divTarg, divTreeID) { // get the i2b2 data from the yuiTree node var tvTree = YAHOO.widget.TreeView.findTreeByChildDiv(divTarg); // this is a custom extention found in "hive_helpers.js" var tvNode = tvTree.getNodeByProperty('nodeid', divTarg.id); tvNode.toggle(); } // ================================================================================================== // this.panelDelete = function(index) { // alter the data model's panel elements var dm = i2b2.CRC.model.queryCurrent; if(index <0 || index>=dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length) { return false;} dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup].splice(index,1); // redraw the panels this.doShowFrom(this.panelControllers[0].panelCurrentIndex); // BUG FIX: force the panels to fully reattach the yuiRootNode to the controllers for (var i=0; i 0) { if (index_offset+i <= i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length) { $('queryBalloonAnd'+(i)).style.display = 'block'; } else { $('queryBalloonAnd'+(i)).style.display = 'none'; } } } this._redrawScrollBtns(); } // ================================================================================================== // this._redrawAllPanels = function() { $('infoQueryStatusText').innerHTML = ""; for (var i=0; i<3; i++) { this.panelControllers[i].doRedraw(); if (i > 0) {//@pcori panel fix. for panels[i2b2.CRC.ctrlr.QT.temporalGroup] if (this.panelControllers[i].panelCurrentIndex-1 < i2b2.CRC.model.queryCurrent.panels.length) { $('queryBalloonAnd'+(i)).style.display = 'block'; } else { $('queryBalloonAnd'+(i)).style.display = 'none'; } } } } // ================================================================================================== // this._redrawPanelCount = function() { var c = i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length; if (c == 1) { var s = '1 Group'; } else { var s = c + ' Groups'; } $('groupCount').innerHTML = s; } // ================================================================================================== // this.laodQueryStatus = function( queryMasterId, queryName) { var QRS = {}; var newHTML = ""; var qi_id = ""; $('infoQueryStatusText').innerHTML = ""; var scopedCallbackQI = new i2b2_scopedCallback(); scopedCallbackQI.scope = this; scopedCallbackQI.callback = function(results) { if (results.error) { alert(results.errorMsg); return; } else { // find our query instance var qi_list = results.refXML.getElementsByTagName('query_instance'); var l = qi_list.length; for (var i=0; i'; $('infoQueryStatusText').innerHTML += '
['+ (Math.floor((end_date - start_date)/100))/10 +' secs]
'; // $('infoQueryStatusText').innerHTML += '
Finished Query: "'+queryName+'"
Compute Time: ' + (Math.floor((end_date - start_date)/100))/10 + ' secs
'; i2b2.CRC.ajax.getQueryResultInstanceList_fromQueryInstanceId("CRC:QueryTool", {qi_key_value: qi_id}, scopedCallbackQRS); } } } // this is a private function that is used by all QueryStatus object instances to check their status // callback processor to check the Query Instance var scopedCallbackQRSI = new i2b2_scopedCallback(); scopedCallbackQRSI.scope = this; scopedCallbackQRSI.callback = function(results) { if (results.error) { alert(results.errorMsg); return; } else { // find our query instance var ri_list = results.refXML.getElementsByTagName('query_result_instance'); var l = ri_list.length; for (var i=0; i" + description + "
"; } var crc_xml = results.refXML.getElementsByTagName('crc_xml_result'); l = crc_xml.length; for (var i=0; i"; $('infoQueryStatusText').innerHTML += "
" + params[i2].getAttribute("column") + ": " + params[i2].firstChild.nodeValue + "" + (i2b2.PM.model.userRoles.indexOf("DATA_LDS") == -1 ? "±3" : "") + "
"; //$('infoQueryStatusText').innerHTML += ""; //i2b2.h.XPath(newxml, 'descendant-or-self::result/data')[0].firstChild.nodeValue; } var ri_id = i2b2.h.XPath(temp, 'descendant-or-self::result_instance_id')[0].firstChild.nodeValue; } } } // callback processor to check the Query Result Set var scopedCallbackQRS = new i2b2_scopedCallback(); scopedCallbackQRS.scope = this; scopedCallbackQRS.callback = function(results) { if (results.error) { alert(results.errorMsg); return; } else { // find our query instance var qrs_list = results.refXML.getElementsByTagName('query_result_instance'); var l = qrs_list.length; var resultStr = ""; for (var i=0; i" + rec.QRS_Description + ""; } } // $('infoQueryStatusText').innerHTML = resultStr; } } //first get instance id i2b2.CRC.ajax.getQueryInstanceList_fromQueryMasterId("CRC:QueryTool", {qm_key_value: queryMasterId}, scopedCallbackQI); //if (qi_id != "") { // i2b2.CRC.ajax.getQueryResultInstanceList_fromQueryInstanceId("CRC:QueryTool", {qi_key_value: qi_id}, scopedCallbackQRS); // for (var q in QRS) { // i2b2.CRC.ajax.getQueryResultInstanceList_fromQueryResultInstanceId("CRC:QueryTool", {qr_key_value: QRS[q].QRS_ID}, scopedCallbackQRSI); // } //} } // ================================================================================================== // this.doAddTemporal = function() { var html = $('temporalbuilders').innerHTML; this.tenporalBuilders = this.tenporalBuilders + 1; html = $('temporalbuilders').innerHTML + '
' + ' ' + ' ' + '
' + ' ' + '
' + ' ' + ' ' + '
' + ' By ' + ' ' + ' ' + '
' + ' And ' + ' ' + ' ' + '
'; '
' + html + '
'; $('temporalbuilders').innerHTML = html; } // ================================================================================================== // this.doScrollFirst = function() { this.doShowFrom(0); } // ================================================================================================== // this.doScrollPrev = function() { var i = this.panelControllers[0].panelCurrentIndex - 1; if (i<0) { i=0; } this.doShowFrom(i); } // ================================================================================================== // this.doScrollNext = function() { var i = this.panelControllers[0].panelCurrentIndex + 1; var dm = i2b2.CRC.model.queryCurrent; if (i > (dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length-3)) { i=dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length-3; } this.doShowFrom(i); } // ================================================================================================== // this.doScrollLast = function() { var i = i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length - 3; if (i<0) { i = 0; } this.doShowFrom(i); } // ================================================================================================== // this.doScrollNew = function() { var i = i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length - 2; if (i<0) { i = 0; } this.doShowFrom(i); } // ================================================================================================== // this._redrawScrollBtns = function() { // enable & disable scroll buttons (at least the look of the buttons) var dir = i2b2.hive.cfg.urlFramework + 'cells/CRC/assets/'; if (i2b2.CRC.ctrlr.QT.panelControllers[0].panelCurrentIndex == 0) { $('panelScrollFirst').src = dir+"QryTool_b_first_hide.gif"; $('panelScrollPrev').src = dir+"QryTool_b_prev_hide.gif"; } else { $('panelScrollFirst').src = dir+"QryTool_b_first.gif"; $('panelScrollPrev').src = dir+"QryTool_b_prev.gif"; } if ((i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup].length - i2b2.CRC.ctrlr.QT.panelControllers[0].panelCurrentIndex) > 3) { $('panelScrollNext').src = dir+"QryTool_b_next.gif"; $('panelScrollLast').src = dir+"QryTool_b_last.gif"; } else { $('panelScrollNext').src = dir+"QryTool_b_next_hide.gif"; $('panelScrollLast').src = dir+"QryTool_b_last_hide.gif"; } }, // =====================================================================================================// /*************** * Print Query ****************/ this.doPrintQuery = function() { var v_i2b2_quey_name = i2b2.CRC.model.queryCurrent.name; var crc_bcgrnd1 = ""; var crc_bcgrnd2 = ""; var crc_cur_bcgrnd = null; if( (v_i2b2_quey_name == null) || (v_i2b2_quey_name == undefined) || (v_i2b2_quey_name.length == 0) ){ v_i2b2_quey_name = 'No Query Name is currently provided.'; } var v_cnt_panels = i2b2.CRC.model.queryCurrent.panels[0].length; if(v_cnt_panels > 0){ var win_html_inner = ""+ ""; //Get Query Name if available win_html_inner += ""+ ""; var isTemporal = false; if (this.queryTiming == "TEMPORAL") { isTemporal = true; } for (var ip = 0; ip < i2b2.CRC.model.queryCurrent.panels.length; ip++) { var v_cnt_panels = i2b2.CRC.model.queryCurrent.panels[ip].length; //Get information for each query panel for(x =0; x < v_cnt_panels; x++){ var v_dateTo = i2b2.CRC.model.queryCurrent.panels[ip][x].dateTo; var v_dateFrom = i2b2.CRC.model.queryCurrent.panels[ip][x].dateFrom; var v_exclude = i2b2.CRC.model.queryCurrent.panels[ip][x].exclude; var v_occurs = i2b2.CRC.model.queryCurrent.panels[ip][x].occurs; var v_relevance = i2b2.CRC.model.queryCurrent.panels[ip][x].relevance; var v_timing = i2b2.CRC.model.queryCurrent.panels[ip][x].timing; var v_items = i2b2.CRC.model.queryCurrent.panels[ip][x].items; if((x % 2) == 0){ crc_cur_bcgrnd = crc_bcgrnd1; } else{ crc_cur_bcgrnd = crc_bcgrnd2; } var v_strDateTo = null; var v_strDateFrom = null; //Handle JS Dates if((v_dateTo == null) || (v_dateTo == undefined) || (v_dateTo == false) ){ v_strDateTo = "none"; } else{ v_strDateTo = v_dateTo.Month +"/"+ v_dateTo.Day +"/" + v_dateTo.Year; } //QueryTiming if (v_querytiming == "ANY") { v_timing = "Treat Independently"; } else if (v_querytiming == "SAMEVISIT") { if (v_timing == "ANY") { v_timing = "Treat Independently"; } else { v_timing = "Occurs in Same Encounter"; } } else { if (v_timing == "ANY") { v_timing = "Treat Independently"; } else { v_timing = "Items Instance will be the same"; } } //Handle JS Dates if((v_dateFrom == null) || (v_dateFrom == undefined) || (v_dateFrom == false) ){ v_strDateFrom = "none"; } else{ v_strDateFrom = v_dateFrom.Month +"/"+ v_dateFrom.Day +"/" + v_dateFrom.Year; } if (isTemporal) { var tempalTitle = "Population in which events occur"; if (ip > 0) tempalTitle = "Event " + ip; win_html_inner += ""+ crc_cur_bcgrnd; win_html_inner += ""+ tempalTitle ""; } win_html_inner += ""+ crc_cur_bcgrnd; win_html_inner += ""+ "Group "+ (x + 1) ""; win_html_inner += ""+ crc_cur_bcgrnd; win_html_inner += "
"+ $('instancevent1[0]').options[$('instancevent1[0]').selectedIndex].value + " " + $('preloc1[0]').options[$('preloc1[0]').selectedIndex].value +" " + $('instanceopf1[0]').options[$('instanceopf1[0]').selectedIndex].value +"
" + $('postloc[0]').options[$('postloc[0]').selectedIndex].value + "
" + $('instancevent2[0]').options[$('instancevent2[0]').selectedIndex].value + " " + $('preloc2[0]').options[$('preloc2[0]').selectedIndex].value + " " + $('instanceopf2[0]').options[$('instanceopf2[0]').selectedIndex].value +" "; if ( $('bytime1[0]').checked) { win_html_inner += "
" + $('byspan1[0]').options[$('byspan1[0]').selectedIndex].value + " " + $('bytimevalue1[0]').value + " " + $('bytimeunit1[0]').options[$('bytimeunit1[0]').selectedIndex].value +" "; } if ( $('bytime2[0]').checked) { win_html_inner += "
" + $('byspan2[0]').options[$('byspan2[0]').selectedIndex].value + " " + $('bytimevalue2[0]').value + " " + $('bytimeunit2[0]').options[$('bytimeunit2[0]').selectedIndex].value; } win_html_inner += "
"; } win_html_inner += "
"+ ""+ "Query Name: "+ v_i2b2_quey_name + "
Temporal Constraint: "; var v_querytiming = i2b2.CRC.ctrlr.QT.queryTiming; if (v_querytiming == "ANY") { win_html_inner += "Treat all groups independently"; } else if (v_querytiming == "SAMEVISIT") { win_html_inner += "Selected groups occur in the same financial encounter"; } else if (v_querytiming == "TEMPORAL") { win_html_inner += "Define sequence of events"; } else { win_html_inner += "Items Instance will be the same"; } win_html_inner += "
"+ ""+ ""+ ""+ ""+ ""; win_html_inner += ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""; win_html_inner += ""; for(n = 0; n < v_items.length; n++){ //str_shrine_path = v_items[n].sdxInfo.sdxKeyValue; //Using tooltips str_shrine_path = v_items[n].origData.tooltip; win_html_inner += ""; win_html_inner += ""; win_html_inner += ""; win_html_inner += ""; } //end if (isTemporal == false) break; } win_html_inner += "
"+ ""+ "  Date From:  "+ ""+ v_strDateFrom + ""+ " "+ ""+ "  Date To:  "+ ""+ v_strDateTo + ""+ " "+ ""+ ""+ "  Excluded?  "+ ""+ v_exclude + ""+ " "+ ""+ "  Occurs X times:  "+ "> "+ v_occurs + ""+ " "+ ""+ "  Relevance %:  "+ " "+ v_relevance + ""+ " "+ ""+ "  Temporal Constraint:  "+ ""+ v_timing + ""+ "
"+ "Path"+ ""+ "Concept/Term"+ ""+ "Other Information"+ "
"+ ""+ str_shrine_path + ""+ ""+ v_items[n].origData.name + ""+ ""; if((v_items[n].LabValues == null) || (v_items[n].LabValues == undefined) || (v_items[n].LabValues.length <= 0) ){ win_html_inner += " "; } else{ var v_lab_values = v_items[n].LabValues; var str_lab_values = ""; if(v_lab_values.GeneralValueType == "NUMBER") { str_lab_values = v_lab_values.NumericOp +" : "; if((v_lab_values.ValueLow != null) || (v_lab_values.ValueLow != undefined) ){ str_lab_values += v_lab_values.ValueLow + " - "+ v_lab_values.ValueHigh; } else { str_lab_values += v_lab_values.Value; } str_lab_values += " "+ v_lab_values.UnitsCtrl; } //String else if((v_lab_values.ValueString != null) || (v_lab_values.ValueString != undefined) ){ str_lab_values = "By String: "+ v_lab_values.ValueString; } //Flag else if((v_lab_values.ValueFlag != null) || (v_lab_values.ValueFlag != undefined) ){ var v_flag = "Normal"; if(v_lab_values.ValueFlag == "H"){ v_flag = "High"; } else if(v_lab_values.ValueFlag == "L"){ v_flag = "Low"; } str_lab_values = "By Flag: "+ v_flag; } win_html_inner += str_lab_values; } win_html_inner += "
"; } if (isTemporal) { win_html_inner += "
"; //Query Status window var self = i2b2.CRC.ctrlr.currentQueryStatus; if( (self != null) && (self != undefined) && (self.dispDIV != null) && (self.dispDIV != undefined) ){ win_html_inner += self.dispDIV.innerHTML; } var win = window.open("",'shrinePrintWindow','width=800,height=750,menubar=yes,resizable=yes,scrollbars=yes'); win.document.writeln('
'); win.document.writeln(win_html_inner); win.document.writeln('
'); } else{ alert("Currently no query is available for printing. \nPlease generate a query before clicking on [Print Query] button."); } }, // =====================================================================================================// /********************** * Query Report BG **********************/ // Print Query variables this.queryPanelObjForPrinting = {}; this.QI_Rec_ForPrinting = new Object(); this.QueryResultsForPrinting = {}; this.QueryResultsForPrintingIndex = 0; this.QueryResultsNum = 0; this.query_user_id=null; this.XMLResultsStringForPrint = ""; var uniqueItems = $H(); var queryReportWin = null; // End Print Query variables this.ClearVariablesForPrinting = function() { this.queryPanelObjForPrinting = {}; this.QI_Rec_ForPrinting = new Object(); this.QueryResultsForPrinting = {}; this.QueryResultsForPrintingIndex = 0; this.QueryResultsNum = 0; this.query_user_id=null; this.XMLResultsStringForPrint = ""; var uniqueItems = $H(); queryReportWin = null; }; this.createQueryReport = function(queryNameInput,previewQueryOnly) { //This request is to populate the query report panel in the query results section //If the status box is empty no need to proceed if($('infoQueryStatusText').innerHTML=="") return; //Clean the corresponding div before repopulating $("infoQueryStatusReport").innerHTML=""; //Clean and populate the variables for printing this.ClearVariablesForPrinting(); if(queryNameInput.length>0 || previewQueryOnly) this.queryPanelObjForPrinting.name = queryNameInput; else{ var nameObj = document.getElementById("queryName"); var v_i2b2_quey_name = i2b2.CRC.model.queryCurrent.name; if(nameObj){ this.queryPanelObjForPrinting.name = nameObj.innerHTML; } } var userIdElm = $("userIdElem"); if(userIdElm) this.query_user_id = userIdElm.value; var v_cnt_panels = i2b2.CRC.model.queryCurrent.panels[0].length; if(v_cnt_panels > 0){ this.queryPanelObjForPrinting.timing = i2b2.CRC.ctrlr.QT.queryTiming; var isTemporal = false; if (this.queryTiming == "TEMPORAL") { isTemporal = true; } this.queryPanelObjForPrinting.subQryRelationStructure = []; this.queryPanelObjForPrinting.mainQryStructure = []; this.queryPanelObjForPrinting.subQryStructure = []; this.queryPanelObjForPrinting.hasSubquery = false; for (var ip = 0; ip < i2b2.CRC.model.queryCurrent.panels.length; ip++) { var v_cnt_panels = i2b2.CRC.model.queryCurrent.panels[ip].length; //Get information for each query panel var panels = []; for(x =0; x < v_cnt_panels; x++){ var po = {}; po.dateTo = i2b2.CRC.model.queryCurrent.panels[ip][x].dateTo; po.dateFrom = i2b2.CRC.model.queryCurrent.panels[ip][x].dateFrom; po.exclude = i2b2.CRC.model.queryCurrent.panels[ip][x].exclude; po.occurs = i2b2.CRC.model.queryCurrent.panels[ip][x].occurs; po.relevance = i2b2.CRC.model.queryCurrent.panels[ip][x].relevance; po.timing = i2b2.CRC.model.queryCurrent.panels[ip][x].timing; po.subquery = false; if (isTemporal && ip>0){ po.name = "Event" + ip; po.subquery = true; } var v_items = i2b2.CRC.model.queryCurrent.panels[ip][x].items; var v_strDateTo = null; var v_strDateFrom = null; //Handle JS Dates if((po.dateTo == null) || (po.dateTo == undefined) || (po.dateTo == false) ){ v_strDateTo = "none"; } else{ v_strDateTo = po.dateTo.Month +"/"+ po.dateTo.Day +"/" + po.dateTo.Year; } po.dateTo = v_strDateTo //Handle JS Dates if((po.dateFrom == null) || (po.dateFrom == undefined) || (po.dateFrom == false) ){ po.strDateFrom = "none"; } else{ v_strDateFrom = po.dateFrom.Month +"/"+ po.dateFrom.Day +"/" + po.dateFrom.Year; } po.dateFrom = v_strDateFrom; po.items = []; for(n = 0; n < v_items.length; n++){ var itemObj = {}; itemObj.tooltip = v_items[n].origData.tooltip? v_items[n].origData.tooltip:""; itemObj.name = v_items[n].origData.result_instance_id ? (v_items[n].origData.title ? v_items[n].origData.title : (v_items[n].origData.titleCRC ? v_items[n].origData.titleCRC : "")) :(v_items[n].origData.newName ? v_items[n].origData.newName : (v_items[n].origData.name?v_items[n].origData.name:"")); itemObj.hasChildren = v_items[n].origData.hasChildren; po.items.push(itemObj); //itemObj.level = } panels[x] = po; } if(panels.length>0){ if (isTemporal) { if (ip > 0) this.queryPanelObjForPrinting.subQryStructure.push(panels); else this.queryPanelObjForPrinting.mainQryStructure.push(panels); } else this.queryPanelObjForPrinting.mainQryStructure.push(panels); } } if(isTemporal) { var evntRelDiv = document.getElementById('temporalbuilders'); if(evntRelDiv) { var relationNodes = evntRelDiv.childNodes; this.queryPanelObjForPrinting.subQryRelationStructure = []; var subQryRelationStructureIndex = 0; for(i=0; i < relationNodes.length; i++) { var thisRelNode = relationNodes[i]; var rel = {}; rel.spans = []; var spanIndex = 0; var spanObj = {}; var bytime1 = false; var bytime2 = false; var allChildren = thisRelNode.childNodes; for(j=0; j < allChildren.length; j++) { var currentNode = allChildren[j]; if(currentNode.id){ if(currentNode.id.indexOf("preloc1") >= 0) { rel.firstQryJoinCol = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("instanceopf1") >= 0) { rel.firstQryOp = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("instancevent1") >= 0) { rel.firstQryEvntNm = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("postloc") >= 0) { rel.operator = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("preloc2") >= 0) { rel.secondQryJoinCol = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("instanceopf2") >= 0) { rel.secondQryOp = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf("instancevent2") >= 0) { rel.secondQryEvntNm = getSelectedValueFromOptions(currentNode.options); } if((currentNode.id.indexOf('bytime1') >= 0) && currentNode.checked) { bytime1 = true; } if(currentNode.id.indexOf('byspan1') >= 0 && bytime1) { spanObj.oprator = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf('bytimevalue1') >= 0 && bytime1) { spanObj.value = currentNode.value; } if(currentNode.id.indexOf('bytimeunit1') >= 0 && bytime1) { spanObj.units = getSelectedValueFromOptions(currentNode.options); rel.spans[spanIndex++] = spanObj; } if((currentNode.id.indexOf('bytime2') >= 0) && currentNode.checked) { bytime2 = true; spanObj = {}; } if(currentNode.id.indexOf('byspan2') >= 0 && bytime2) { spanObj.oprator = getSelectedValueFromOptions(currentNode.options); } if(currentNode.id.indexOf('bytimevalue2') >= 0 && bytime2) { spanObj.value = currentNode.value; } if(currentNode.id.indexOf('bytimeunit2') >= 0 && bytime2) { spanObj.units = getSelectedValueFromOptions(currentNode.options); rel.spans[spanIndex++] = spanObj; } } } if(allChildren.length > 0) this.queryPanelObjForPrinting.subQryRelationStructure[subQryRelationStructureIndex++] = rel ; } } } //All variables are ready to print. var infoQueryStatusTextObj = $('infoQueryStatusText'); this.createHTMLForPrinting(previewQueryOnly); } else{ alert("Currently no query is available for printing. \nPlease generate a query before clicking on [Print Query] button."); } }; this.PrintQueryTemplate = ""+ "Query Report"+ // ""+ ""+ ""+ ""+ ""+ ""+ ""; this.PrintQueryBody = "
\"Loading\"/
"+ "
"+ ""+ " Print Report"+ "
Query Report
"+ "
"+ "
Query Definition
"+ "
"+ "

"+ "

"+ "
"+ "
Query Results
"+ "
" + " Print Report"+ "
"; this.createHTMLForPrinting = function(previewQueryOnly) { var QueryReportWin = null; var QueryReportDiv = null; var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); var browserIsIE = false; if (msie > 0) browserIsIE = true; if(!(window.ActiveXObject) && "ActiveXObject" in window) browserIsIE = true; var savedHTML = null; if(this.queryPanelObjForPrinting.mainQryStructure.length > 0){ if( previewQueryOnly){ if(browserIsIE){ i2b2.CRC.ctrlr.QT.queryReportViewer.yuiPanel = null; i2b2.CRC.ctrlr.QT.queryReportViewer.show(); QueryReportDiv = jQuery(i2b2.CRC.ctrlr.QT.queryReportViewer.yuiPanel.body)//.find('#queryReport-viewer-body'); } else{ //Open a new window for printing query for non-IE browsers QueryReportWin = window.open("",'shrinePrintWindow','width=800,height=750,menubar=yes,resizable=yes,scrollbars=yes'); //Request came for query preview generation. Need to load the child window with template // if(previewQueryOnly){ var doc = QueryReportWin.document; doc.write(this.PrintQueryTemplate); doc.write(this.PrintQueryBody); doc.close(); // } } } else { QueryReportDiv = $('infoQueryStatusReport'); QueryReportDiv.innerHTML=this.PrintQueryBody; var printLinks = $$('.no-print'); if(printLinks) printLinks.each(function(printLink){ var link = printLink.down('a'); if(link) link.href="javascript:i2b2.CRC.ctrlr.QT.PrintElem('infoQueryStatusReport')"; }); } //Populate the query details section try{ if(QueryReportWin) this.getQueryDetails(this.queryPanelObjForPrinting,this.query_user_id,previewQueryOnly,QueryReportWin,"queryDetailsTable"); if(QueryReportDiv) this.getQueryDetails(this.queryPanelObjForPrinting,this.query_user_id,previewQueryOnly,false,"queryDetailsTable"); } catch(e) { console.error(e); } //Populate the query description section try{ if(QueryReportWin) this.getQrTiming(this.queryPanelObjForPrinting,QueryReportWin,"qdHeaderTable"); if(QueryReportDiv) this.getQrTiming(this.queryPanelObjForPrinting,false,"qdHeaderTable"); } catch(e) { console.error(e); } //Populate the query structure description section var qdDescription = this.getQueryDescription(this.queryPanelObjForPrinting.mainQryStructure); if(qdDescription) { try{ var Row = "
"; var Cell = "" + "All Groups" + ""; Row = Row + Cell; if(QueryReportWin) jQuery("#qdContainerTable",QueryReportWin.document).append(Row); if(QueryReportDiv) jQuery("#qdContainerTable").append(Row); if(QueryReportWin) jQuery("#qdContainerTable",QueryReportWin.document).append(qdDescription); if(QueryReportDiv) jQuery("#qdContainerTable").append(qdDescription); } catch(e) { console.error(e); } } //Populate temporal query events description section var qdDescription = this.getQueryDescription(this.queryPanelObjForPrinting.subQryStructure); if(qdDescription) { try{ var Row = "
"; var Cell = "" + "All Events" + ""; Row = Row + Cell; if(QueryReportWin) jQuery("#temporalQryEventsContainerTable",QueryReportWin.document).append(Row); if(QueryReportDiv) jQuery("#temporalQryEventsContainerTable").append(Row); if(QueryReportWin) jQuery("#temporalQryEventsContainerTable",QueryReportWin.document).append(qdDescription); if(QueryReportDiv) jQuery("#temporalQryEventsContainerTable").append(qdDescription); } catch(e) { console.error(e); } } //Populate temporal query events relation section if(this.queryPanelObjForPrinting.subQryStructure && this.queryPanelObjForPrinting.subQryStructure.length>0){ var temporalQEventsRelTable = null; if(QueryReportWin) temporalQEventsRelTable = QueryReportWin.document.getElementById("temporalQryEventsRelationsTable"); if(QueryReportDiv) temporalQEventsRelTable = $("temporalQryEventsRelationsTable"); try{ var qdDescription = this.getTemporalQueryEventRelations(temporalQEventsRelTable); } catch(e) { console.error(e); } } if(!previewQueryOnly){ //Populate the query results section var resultsArray = i2b2.CRC.view.graphs.parseInputIntoArray(i2b2.CRC.ctrlr.currentQueryResults.resultString, true); if(resultsArray && resultsArray.length>0){ try{ if(QueryReportWin) this.createResultsForPrint(resultsArray,QueryReportWin); else{ this.createResultsForPrint(resultsArray,false); } } catch(e) { console.error(e); } } else // There is no results, so no need to show Query Results section { var resultTitleDiv = null; if(QueryReportWin) resultTitleDiv = QueryReportWin.document.getElementById("qrsTitle"); if(QueryReportDiv) resultTitleDiv = $("qrsTitle"); if(resultTitleDiv){ resultTitleDiv.parentNode.removeChild(resultTitleDiv); } } } else // This window is to only show the query structure preview, so no need to show Query Results section { var resultTitleDiv = null; if(QueryReportWin) resultTitleDiv = QueryReportWin.document.getElementById("qrsTitle"); if(QueryReportDiv) resultTitleDiv = $("qrsTitle"); if(resultTitleDiv){ resultTitleDiv.parentNode.removeChild(resultTitleDiv); } } var loaderDiv = null; if(QueryReportWin) loaderDiv = QueryReportWin.document.getElementById("QueryReportLoading"); if(QueryReportDiv){ // if(browserIsIE && printFromId) loaderDiv = jQuery(QueryReportDiv).find('#QueryReportLoading'); // else // loaderDiv = jQuery("#infoQueryStatusReport #QueryReportLoading"); } if(loaderDiv) jQuery(loaderDiv).addClass("no-show"); var resultsDiv = null; if(QueryReportWin) resultsDiv = QueryReportWin.document.getElementById("QueryReportContainer"); if(QueryReportDiv){ // if(browserIsIE && printFromId) resultsDiv = jQuery(QueryReportDiv).find('#QueryReportContainer'); // else // resultsDiv = $("#infoQueryStatusReport #QueryReportContainer"); } if(resultsDiv) jQuery(resultsDiv).removeClass("no-show"); if(browserIsIE && previewQueryOnly) { // this.PrintElem(); // jQuery(resultsDiv).html(savedHTML); } } else{ alert("Currently no query is available for printing. \nPlease generate a query before clicking on [Print Query] button."); } }; this.getQueryDetails = function(queryObj,query_user_id,previewQueryOnly,QueryReportWin,objId){ var username = this.getQueryUserFullName(query_user_id); var instanceRec = this.QI_Rec_ForPrinting; var dateInfoProvided = false; var diff = ""; var text = ""; var qrNameNotProvided = false; if(queryObj.name.length <= 0){ text = 'No Query Name is currently provided'; qrNameNotProvided = true; } else{ if(previewQueryOnly) text = 'The query is entitled "' + queryObj.name + '"'; else text = 'The query entitled "' + queryObj.name ; } var formattedResObj = i2b2.CRC.ctrlr.currentQueryResults; var resString = formattedResObj.resultString; var computeTime = null; if(resString.toLowerCase().indexOf("compute time")>0) { var textCompTime = resString.match(new RegExp("Compute Time" + "(.*)" + "\n")); if(textCompTime.length>0) { var compText = textCompTime[0]; var splitcompText = compText.split(":"); if(splitcompText && splitcompText.length>1) computeTime = splitcompText[1]; } } text = (qrNameNotProvided ? 'The query "' : '') + text + '" was completed in '+ computeTime + '. This query was performed by "'+ username +'".'; if(QueryReportWin) jQuery("#" + objId,QueryReportWin.document).append('' + text.toString() + ''); else jQuery("#" + objId).append('' + text.toString() + ''); }; this.getQrTiming = function(queryObj,QueryReportWin,objId){ var tdText = ""; if(queryObj.timing) { switch(queryObj.timing) { case "ANY": tdText = " Temporal Constraint: Treat All Groups Independently"; break; case "SAMEVISIT": tdText = " Temporal Constraint: Selected groups occur in the same financial encounter"; break; case "TEMPORAL": //Temporal query query_order = "Groups occur in the same sequence from left to right"; tdText = " Temporal Constraint: Population in which events occur"; } if(QueryReportWin) jQuery("#" + objId,QueryReportWin.document).append('' + tdText + ''); else jQuery("#" + objId).append('' + tdText + ''); } }; this.getQueryDescription = function(queryObj) { var elemToAppend = ""; if(queryObj.length > 0) { elemToAppend = ""; var panelNum = 0; elemToAppend = elemToAppend + "
"; var tdObj = ""; queryObj.each(function(queryData){ var andCounter = 0; var subQryEventNameDisplayed = false; queryData.each(function(panelData){ var orCounter = 0; var numItemsInPanel = panelData.items.length; var panelContdivObj = "
"; var PanelTableTrObj = ""; var PanelTableTd1Obj = "
"; PanelTableTrObj = PanelTableTrObj + PanelTableTd1Obj; var PanelTableTd2Obj = ""; panelNum++ ; var panelOperatorDivId = "PanelOp-" + panelNum; var panelOperatorDiv = "
"; if(andCounter == 0){ andCounter++ ; if (panelData.exclude) { panelOperatorDiv = panelOperatorDiv + "NOT"; panelContdivObj = panelContdivObj + " notOpPanel"; } } else { var text = "AND"; if (panelData.exclude) { text = "AND NOT"; panelContdivObj = panelContdivObj + " notOpPanel"; } panelOperatorDiv = panelOperatorDiv + text; andCounter++ ; } var panelItemDiv = "
"; var panelTiming = ""; switch(panelData.timing) { case "ANY": panelTiming = "Independent of Visit"; break; case "SAMEVISIT": panelTiming = "Occurs in Same Encounter"; break; case "SAMEINSTANCENUM": panelTiming = "Items Instance will be the same"; break; } var panelDateFrom = ""; if(panelData.dateFrom) { if(panelData.dateFrom.Month && panelData.dateFrom.Day && panelData.dateFrom.Year) panelDateFrom = panelData.dateFrom.Month + "/" + panelData.dateFrom.Day + "/" + panelData.dateFrom.Year; else { panelDateFrom = panelData.dateFrom; } } var panelDateTo = ""; if(panelData.dateTo) { if(panelData.dateTo.Month && panelData.dateTo.Day && panelData.dateTo.Year) panelDateTo = panelData.dateTo.Month + "/" + panelData.dateTo.Day + "/" + panelData.dateTo.Year; else { panelDateTo = panelData.dateTo; } } var panelDateRangeText = "From earliest date available to latest date available"; if(panelData.dateFrom && panelData.dateTo) { if(panelDateFrom == "none") panelDateFrom = "earliest date available"; if(panelDateTo == "none") panelDateTo = "latest date available"; panelDateRangeText = "From " + panelDateFrom + " to " + panelDateTo; } else { if(panelDateFrom == "none") panelDateFrom = "earliest date available"; if(panelDateTo == "none") panelDateTo = "latest date available"; if(panelData.dateFrom && !panelData.dateTo) panelDateRangeText = "From " + panelDateFrom + " to latest date available"; if(!panelData.dateFrom && panelData.dateTo) panelDateRangeText = "From earliest date available to " + panelDateTo; } var panelItemOccurrenceText = "# of times an item is recorded is > " + panelData.occurs; panelData.items.each(function(itemData){ var data = itemData; if(!(typeof itemData.origData == 'undefined')) data = itemData.origData; var qrPanelItemTableObj = ""; var qrPanelItemTableTrObj = ""; var imageObj = null; //Evaluate the lab values var str_lab_values = ""; if(data.LabValues){ var v_lab_values = data.LabValues; if(v_lab_values.GeneralValueType == "NUMBER") { var labOp = ""; switch(v_lab_values.NumericOp) { case "LT": labOp = " <"; break; case "LE": labOp = " <="; break; case "EQ": labOp = " ="; break; case "BETWEEN": labOp = " Between"; break; case "GE": labOp = " >="; break; case "GT": labOp = " >"; break; } str_lab_values = labOp +" "; if((v_lab_values.ValueLow != null) || (v_lab_values.ValueLow != undefined) ){ str_lab_values += v_lab_values.ValueLow + " - "+ v_lab_values.ValueHigh; } else { str_lab_values += v_lab_values.Value; } str_lab_values += " "+ v_lab_values.UnitsCtrl; } //String else if((v_lab_values.ValueString != null) || (v_lab_values.ValueString != undefined) ){ str_lab_values = "By String: "+ v_lab_values.ValueString; } //Flag else if((v_lab_values.ValueFlag != null) || (v_lab_values.ValueFlag != undefined) ){ var v_flag = "Normal"; if(v_lab_values.ValueFlag == "H"){ v_flag = "High"; } else if(v_lab_values.ValueFlag == "L"){ v_flag = "Low"; } str_lab_values = "By Flag: "+ v_flag; } // End evaluate lab values } if(data.hasChildren) //It is a previous query inside a query, so no item-icon provided { if( data.hasChildren.indexOf("LA") >=0 ) { imageObj = ""; } else { imageObj = ""; } } if(imageObj) { var nameText = ""; if(data.newName) nameText = data.newName; else nameText = data.name; var qrPanelItemTableTdObj = ""; } else { var qrPanelItemTableTdObj = ""; } qrPanelItemTableTrObj = qrPanelItemTableTrObj + qrPanelItemTableTdObj; qrPanelItemTableObj = qrPanelItemTableObj + qrPanelItemTableTrObj + ""; qrPanelItemTableTrObj = ""; qrPanelItemTableTdObj = ""; qrPanelItemTableTrObj = qrPanelItemTableTrObj + qrPanelItemTableTdObj + ""; qrPanelItemTableObj = qrPanelItemTableObj + qrPanelItemTableTrObj; qrPanelItemTableTrObj = ""; qrPanelItemTableTdObj = "" ; qrPanelItemTableTrObj = qrPanelItemTableTrObj + qrPanelItemTableTdObj + ""; qrPanelItemTableObj = qrPanelItemTableObj + qrPanelItemTableTrObj; qrPanelItemTableTrObj = ""; qrPanelItemTableTdObj = "" ; qrPanelItemTableTrObj = qrPanelItemTableTrObj + qrPanelItemTableTdObj + ""; qrPanelItemTableObj = qrPanelItemTableObj + qrPanelItemTableTrObj; qrPanelItemTableTrObj = ""; qrPanelItemTableTdObj = "" ; qrPanelItemTableTrObj = qrPanelItemTableTrObj + qrPanelItemTableTdObj + ""; qrPanelItemTableObj = qrPanelItemTableObj + qrPanelItemTableTrObj; qrPanelItemTableObj = qrPanelItemTableObj + "
" + imageObj + "
" + " " + nameText + str_lab_values + "
" + "
" + data.name + str_lab_values + "
" + data.tooltip + "
" + panelTiming + "
" + panelDateRangeText + "
" + panelItemOccurrenceText + "
"; panelItemDiv = panelItemDiv + "
" + qrPanelItemTableObj + "
"; if(++orCounter < numItemsInPanel) { var orDiv = "
" + "OR" + "
"; panelItemDiv = panelItemDiv + orDiv; } }); panelItemDiv = panelItemDiv + "
"; PanelTableTd2Obj = PanelTableTd2Obj + panelItemDiv + ""; PanelTableTrObj = PanelTableTrObj + PanelTableTd2Obj + ""; PanelTableObj = PanelTableObj + PanelTableTrObj + ""; panelContdivObj = panelContdivObj + "\">" + PanelTableObj + "
"; panelOperatorDiv = panelOperatorDiv + "
"; if(panelData.subquery) { if(!subQryEventNameDisplayed){ var eventNameDiv = "
" + panelData.name + "
"; tdObj = tdObj + eventNameDiv + panelOperatorDiv + panelContdivObj; subQryEventNameDisplayed = true; } else tdObj = tdObj + panelOperatorDiv + panelContdivObj; } else tdObj = tdObj + panelOperatorDiv + panelContdivObj; }); }); } if(elemToAppend) elemToAppend = elemToAppend + tdObj + ""; return elemToAppend; }; this.getTemporalQueryEventRelations = function(eventsRelTable){ if(this.queryPanelObjForPrinting.subQryRelationStructure.length > 0 ) { var Row = new Element('tr'); var Cell = new Element('td',{'width':'5px'}); var divInCell = new Element('div',{'class':'tabSpace'}); Row.insert(Cell.insert(divInCell)); Cell = new Element('td',{'class':'eventsRelHdr'}).update('Order of Events'); Row.insert(Cell); var tempDiv = new Element('div'); tempDiv.insert(Row); jQuery(eventsRelTable).append(jQuery(tempDiv).html()); } this.queryPanelObjForPrinting.subQryRelationStructure.each(function(relation){ var Row = new Element('tr'); var Cell = new Element('td',{'width':'5px'}); var divInCell = new Element('div',{'class':'tabSpace'}); Row.insert(Cell.insert(divInCell)); Cell = new Element('td', {'class' : 'eventsRel'}); var mnSpan = new Element('span', {'class' : 'eventsRelSpan'}); var mainSpan = new Element('center'); var textFirst = relation.firstQryJoinCol + " " + relation.firstQryOp + " occurrence for " + relation.firstQryEvntNm; var firstSpan = new Element('span').update(textFirst); mainSpan.insert(firstSpan).insert(new Element('br')); var relationOperator = ""; switch(relation.operator) { case "LESS": relationOperator = "Occurs Before"; break; case "LESSEQUAL": relationOperator = "Occurs On Or Before"; break; case "EQUAL": relationOperator = "Occurs Simultaneously With"; break; case "GREATER": relationOperator = "Occurs After"; break; case "GREATEREQUAL": relationOperator = "Occurs On or After"; break; default: break; } var textOperator = relationOperator.length>0 ? relationOperator : relation.operator; var opSpan = new Element('span').update(textOperator); mainSpan.insert(opSpan).insert(new Element('br')); var textSecond = relation.secondQryJoinCol + " of " + relation.secondQryOp + " occurrence of " + relation.secondQryEvntNm; var secondSpan = new Element('span').update(textSecond); mainSpan.insert(secondSpan).insert(new Element('br')); var firstSpan = true; relation.spans.each(function(thisSpan){ switch(thisSpan.oprator) { case "GREATER" : thisSpan.oprator = ">"; break; case "GREATEREQUAL" : thisSpan.oprator = ">="; break; case "EQUAL" : thisSpan.oprator = "="; break; case "LESSEQUAL" : thisSpan.oprator = "<="; break; case "LESS" : thisSpan.oprator = "<"; break; default: break; } var text = ""; if(firstSpan) { text = " By " + thisSpan.oprator + " " + thisSpan.value + " " + thisSpan.units; firstSpan = false; } else { text = " And " + thisSpan.oprator + " " + thisSpan.value + " " + thisSpan.units; } mainSpan.insert((new Element('span')).update(text)).insert(new Element('br')); }); mnSpan.insert(mainSpan); Row.insert((Cell).insert(mnSpan)); var tempDiv = new Element('div'); tempDiv.insert(Row); jQuery(eventsRelTable).append(jQuery(tempDiv).html()); }); }; this.createResultsForPrint = function(dataArray,child){ var _2DResultsArray = i2b2.CRC.view.downloadData.getFormattedResults(dataArray); if(_2DResultsArray && _2DResultsArray.length>0) { //Populate the tables var clonedArray = _2DResultsArray.slice(0); var allSites = $H(); var allSitesRow = clonedArray[0]; if(allSitesRow && allSitesRow.length>0) { for(var x = 1; x < allSitesRow.length ; x++) { var siteName = allSitesRow[x]; allSites.set(siteName,x); //SiteName,Index pairs } } clonedArray = _2DResultsArray.slice(0); var allUniqueBreakDowns = $H(); for(var i = 0 ; i < clonedArray.length ; i++) { var brkDownEntry = clonedArray[i][0]; if(brkDownEntry.length>0) { var tmpBrkDown = brkDownEntry.split("|"); if(tmpBrkDown && tmpBrkDown.length>1) { thisBrkDown = tmpBrkDown[0]; allUniqueBreakDowns.set(thisBrkDown,thisBrkDown); } } } //Take care of the patient number element separately //Create the data array for table creation clonedArray = _2DResultsArray.slice(0); var dataArray = new Array(); var thisRow = clonedArray[0].slice(0); thisRow[0] = ""; dataArray.push(thisRow); thisRow = clonedArray[1].slice(0); thisRow[0] = "Total Patients Count"; dataArray.push(thisRow); if(dataArray && dataArray.length>0) { jQuery('#tablesContainer').append("
"); jQuery('#tablesContainer').append("
Total Number of Cases
" ); - this.createTable(dataArray); + var sortArray = i2b2.CRC.ctrlr.QT.createShorterDataArray(dataArray); + if(sortArray && sortArray.length>0) + i2b2.CRC.ctrlr.QT.createTable(sortArray); + else + i2b2.CRC.ctrlr.QT.createTable(dataArray); } //Create tables for the breakdowns allUniqueBreakDowns.each(function(brkDown) { clonedArray = _2DResultsArray.slice(0); dataArray = new Array(); var thisRow = _2DResultsArray[0].slice(0); thisRow[0] = ""; dataArray.push(thisRow); var category = ""; for(var i = 1; i=0) { thisRow = clonedArray[i]; var tmpBrkDown = thisbrkDown.split("|"); if(tmpBrkDown && tmpBrkDown.length>1) { category = tmpBrkDown[0]; thisRow[0][0] = tmpBrkDown[1]; } dataArray.push(thisRow); } } if(dataArray && dataArray.length>0) { jQuery('#tablesContainer').append("
"); jQuery('#tablesContainer').append("
Total Unique Patients by " + category +"
" ); - i2b2.CRC.ctrlr.QT.createTable(dataArray); + var sortArray = i2b2.CRC.ctrlr.QT.createShorterDataArray(dataArray); + if(sortArray && sortArray.length>0) + i2b2.CRC.ctrlr.QT.createTable(sortArray); + else + i2b2.CRC.ctrlr.QT.createTable(dataArray); } }); //Populate charts jQuery('#tablesContainer').append("

"); i2b2.CRC.view.graphs.createGraphs("graphsContainer", i2b2.CRC.ctrlr.currentQueryResults.resultString, true); } }; + this.createShorterDataArray = function(dataArray) + { + try{ + if(dataArray.length>0) + { + var siteRow = dataArray[0]; + var totalNumOfSites = siteRow.length - 1; + if(totalNumOfSites > 10) + { + var finalArr = []; + var loopNum = 0; + var totalLoopsRequired = Math.floor(totalNumOfSites/10); + if(totalNumOfSites%10 >0) + totalLoopsRequired++; + while(loopNum"; } content += ""; } else { content += ""; - + var thisRowIsHeader = false; for(var j = 0 ; j < thisRow.length ; j++) { var thisRowColItem = thisRow[j]; if(thisRowColItem) { if((thisRowColItem.trim().indexOf("10 patients or fewer"))>0) thisRowColItem = 0; if(i==0 && j==0) content += " "; else{ - if(thisRowColItem==' ') - content += " "; - else - content += "" + thisRowColItem + ""; + if(thisRowColItem==' '){ + if(j == 0) + thisRowIsHeader = true; + + if(thisRowIsHeader) + content += " "; + else + content += " "; + } + else{ + if(thisRowIsHeader) + content += "" + thisRowColItem + ""; + else + content += "" + thisRowColItem + ""; + } } } - else - content += " "; + else{ + if(j == 0) + thisRowIsHeader = true; + if(thisRowIsHeader) + content += " "; + else + content += " "; + } } content += ""; } } content += ""; jQuery('#tablesContainer').append(content); } this.getQueryUserFullName = function(query_user_id) { var returnValue = query_user_id; if(query_user_id) { try { var response = i2b2.PM.ajax.getUser("CRC:PrintQueryNew", {user_id:query_user_id}); response.parse(); var data = response.model[0]; if (data.full_name) { returnValue = data.full_name;} } catch (e) {} } return returnValue; }; function getSelectedValueFromOptions(options) { var value = null; for(k = 0; k < options.length; k++) { var thisOption = options[k]; if(thisOption.selected == true) { value = options[k].innerHTML; break; } } return value; }; this.PrintElem = function(divIdToPrint) { // Popup(jQuery("#" + divToPrint).html()); if(jQuery("#" + divIdToPrint)){ var contents = jQuery("#" + divIdToPrint).html(); var frame1 = jQuery("