Bladeren bron

Adding form generator for crfManager

Andrej Studen 2 jaren geleden
bovenliggende
commit
ec9af6158c
1 gewijzigde bestanden met toevoegingen van 251 en 0 verwijderingen
  1. 251 0
      web/crfTecant/formGenerator.js

+ 251 - 0
web/crfTecant/formGenerator.js

@@ -0,0 +1,251 @@
+function fgInsertRow(schemaName,queryName,row,cb=null,containerPath=null){
+   let fName='[fgInsertRow]';
+   print(fName);
+   //cb=function(data){....}
+	let qconfig=new Object();
+	if (containerPath)
+      qconfig.containerPath=containerPath;
+	qconfig.schemaName=schemaName;
+	qconfig.queryName=queryName;
+	qconfig.success=cb;
+	qconfig.rows=[row];
+   print(fName+' qconfig '+qconfig);
+	LABKEY.Query.insertRows(qconfig);
+}
+
+function addInputRow(table,header,type){
+   let fName='[addInputRow]';
+   print(fName);
+   let row=table.insertRow();
+   let cell=config.document.createElement('th');
+   let text=config.document.createTextNode(header);
+   cell.appendChild(text);
+   row.appendChild(cell);
+   let input=null;
+      
+   if (type=="select")
+      input=config.document.createElement(type);
+
+   if (type=="button"){
+      input=config.document.createElement("input");
+      input.type="button";
+   }
+   if (type=="text"){
+      input=config.document.createElement('textarea');
+      input.cols="65";
+      input.rows="5";
+   }
+   if (type=="label")
+      input=config.document.createElement(type);
+
+   let cell1=row.insertCell();
+   cell1.appendChild(input);
+   return input;
+}
+ 
+function getFormName(formId){
+   let rows=config.formConfig.dataForms.rows;
+   for (let i=0;i<rows.length;i++){
+      if (rows[i]['Key']==formId){
+         return rows[i]['formName'];
+      }
+   }
+   return "NONE";
+}
+
+function getQueryName(queryId){
+   let rows=config.formConfig.inputLists.rows;
+   for (let i=0;i<rows.length;i++){
+      if (rows[i]['Key']==queryId){
+         return rows[i]['queryName'];
+      }
+   }
+   return "NONE";
+}
+
+function getGCRow(formId){
+   let formRows=config.formConfig.generateConfigData.rows;
+   for (let i=0;i<formRows.length;i++){
+      if (formRows[i]['formId']==formId){
+         return formRows[i];
+      }
+   }
+   return Object();
+}
+
+function getCrfSelectRow(crfRef){
+   let rows=config.formConfig.crfSelectRows;
+   for (let i=0;i<rows.length;i++){
+      if (rows[i]['crfRef']==crfRef)
+         return rows[i];
+
+   }
+   return Object();
+}
+
+
+function addOption(input,name,value){
+   let opt=config.document.createElement("option");
+   opt.text=name;
+   opt.value=value;
+   input.options[input.options.length]=opt;
+}
+ 
+function clearOptions(input){
+   for(let i = input.options.length; i >= 0; i--) {
+		input.remove(i);
+   }
+}
+	
+
+   
+function addFormGenerator(){
+      
+   let fName='[addFormGenerator]';
+   print(fName);
+   //layout
+   let table=config.document.createElement("table");
+   table.className="t2";
+   config.document.getElementById(config.div).appendChild(table);
+   let formGenerator=new Object();
+   formGenerator.formSelect=addInputRow(table,'Select form',"select");
+   formGenerator.crfSelect=addInputRow(table,'Select CRF',"select");
+   formGenerator.comment=addInputRow(table,'Enter comment','text');
+   formGenerator.details=addInputRow(table,'Details','label');
+   formGenerator.warnings=addInputRow(table,'Warnings','label');
+   formGenerator.warnings.innerHTML='None';
+   addOption(formGenerator.formSelect,'<Select>',-1);
+   let formRows=config.formConfig.generateConfigData.rows;
+   for (let i=0;i<formRows.length;i++){
+      let formId=formRows[i]["formId"];
+      let formName=getFormName(formId);
+      print(fName+' '+formRows[i]["formId"]+'/'+formName);
+      addOption(formGenerator.formSelect,formName,formId);
+   }
+   formGenerator.formSelect.onchange=function(){updateIdList(formGenerator);};
+   formGenerator.crfSelect.onchange=function(){updateLabel(formGenerator);};
+   formGenerator.generateButton=addInputRow(table,'Generate Form','button');
+   formGenerator.generateButton.value="Generate Form";
+   formGenerator.generateButton.onclick=function(){createFormWithId(formGenerator);};
+      
+}
+      
+function createFormWithId(formGenerator){
+   //get form id and entry id from select and create form as above
+   let fName='[createFormWithId]';
+
+   print(fName);
+   let formId=formGenerator.formSelect.options[formGenerator.formSelect.selectedIndex].value;
+   let crfRef=formGenerator.crfSelect.options[formGenerator.crfSelect.selectedIndex].text;
+   let configRow=getGCRow(formId);
+   let crfSelectRow=getCrfSelectRow(crfRef);
+	let formConfig=config.formConfig;
+
+	print("Create form w/id "+formId);
+	
+	let crfEntry=new Object();
+	crfEntry.entryId=Date.now();
+	crfEntry["Date"]=new Date();
+	crfEntry["View"]="[VIEW]";
+   crfEntry['participantStudyId']=crfSelectRow['participantStudyId'];
+   crfEntry['participantLocalId']=crfSelectRow['participantLocalId'];
+
+
+	crfEntry.formStatus=configRow['formStatus'];//In progress
+	//set other variables
+	//requires studyData as part of formConfig
+	let studyData=formConfig.studyData.rows[0];
+   let varRows=formConfig['crfStaticVariables'].rows;
+   for (let i=0;i<varRows.length;i++){
+      let varName=varRows[i].staticVariable;
+	   crfEntry[varName]=studyData[varName];
+   }
+	crfEntry.UserId=LABKEY.Security.currentUser.id;
+	crfEntry.Site=config.formConfig.currentSites[0].siteNumber;
+	print("Setting site to id="+crfEntry.Site);
+	//from argument list
+	crfEntry.Form=formId;
+   crfEntry.parentCrf=crfRef;
+  
+   //
+   //compose a reviewComments entry
+   let reviewComment=new Object();
+   reviewComment['submissionDate']=crfEntry['Date'];
+   reviewComment['crfRef']=crfRef;
+   //comment length
+   let x=formGenerator.comment.value;
+   print(fName+' comment length '+x.length);
+   if (x.length==0){
+      formGenerator.warnings.innerHTML='Supply a comment';
+      return;
+   }
+   reviewComment['reviewComment']=formGenerator.comment.value;
+   reviewComment['queryName']=configRow['queryId'];
+
+   let rd=function(data){redirect();};
+   let pass=function(data){fgInsertRow('lists','reviewComments',reviewComment,rd,getContainer('data'));}
+   fgInsertRow('lists','crfEntry',crfEntry,pass,getContainer('data'));
+}
+
+
+function updateIdList(formGenerator){
+   let fName='[updateIdList]';
+   let formId=formGenerator.formSelect.options[formGenerator.formSelect.selectedIndex].value;
+   print(fName+' id '+formId);
+   //remove old options
+   clearOptions(formGenerator.crfSelect);
+   print(fName+' options cleared');
+   //get query associated with form
+   let configRow=getGCRow(formId);
+   let queryId=configRow['queryId'];
+   print(fName+' queryId '+queryId);
+   if (!queryId || queryId<0)
+      return;
+
+   let qselect=new Object();
+   qselect.containerPath=getContainer('data');
+   qselect.schemaName='lists';
+   qselect.queryName=getQueryName(queryId);
+   qselect.success=function(data){updateIdListWithData(formGenerator,data);};
+   LABKEY.Query.selectRows(qselect);
+}
+
+function updateIdListWithData(formGenerator,data){
+   let rows=data.rows;
+   config.formConfig.crfSelectRows=data.rows;
+   for (let i=0;i<rows.length;i++){
+      addOption(formGenerator.crfSelect,rows[i]['crfRef'],i);
+   }
+   let event=new Event('change');
+   formGenerator.crfSelect.dispatchEvent(event);
+}
+
+function updateLabel(formGenerator){
+   let crfRef=formGenerator.crfSelect.options[formGenerator.crfSelect.selectedIndex].text;
+   let crfSelectRow=getCrfSelectRow(crfRef);
+   formGenerator.details.innerHTML='Generating for Study:'+crfSelectRow['participantStudyId']+' / Local:'+crfSelectRow['participantLocalId'];
+}
+
+function redirect(){
+
+	let debug=false;
+	let formUrl="begin";
+	let params=new Object();
+	params.name=formUrl;
+	params.pageId="CRF";
+
+	//points to crf container
+	let containerPath=getContainer('data');
+        
+	// This changes the page after building the URL. 
+	//Note that the wiki page destination name is set in params.
+        
+	var homeURL = LABKEY.ActionURL.buildURL(
+			"project", formUrl , containerPath, params);
+        print("Redirecting to "+homeURL);
+	if (debug) return;	 
+	window.location = homeURL;
+
+	
+
+}