|
@@ -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;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|