|
@@ -210,6 +210,17 @@ function getAdditionalData(formSetupEntry){
|
|
|
return ad;
|
|
|
}
|
|
|
|
|
|
+function generateSetup(){
|
|
|
+ let setup=new Object();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ setup.setVariables=new Object();
|
|
|
+ return setup;
|
|
|
+}
|
|
|
+
|
|
|
function fullAccessSetup(listName){
|
|
|
|
|
|
|
|
@@ -221,7 +232,7 @@ function fullAccessSetup(listName){
|
|
|
let debug=true;
|
|
|
if (debug) print("fullAccessSetup");
|
|
|
|
|
|
- let setup=new Object();
|
|
|
+ let setup=generateSetup();
|
|
|
setup.queryName=listName;
|
|
|
setup.readonlyFlag=function(vName){return false};
|
|
|
setup.filters=new Object();
|
|
@@ -238,7 +249,7 @@ function readonlySetup(listName){
|
|
|
let debug=true;
|
|
|
if (debug) print("readonlySetup");
|
|
|
|
|
|
- let setup=new Object();
|
|
|
+ let setup=generateSetup();
|
|
|
setup.queryName=listName;
|
|
|
setup.readonlyFlag=function(vName){return true};
|
|
|
setup.filters=new Object();
|
|
@@ -261,13 +272,31 @@ function getSetup(listName,writeAccess=true){
|
|
|
return fullAccessSetup(listName);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+function parseVariableDefinition(formSetupEntry){
|
|
|
+ let fName='parseVariableDefinition['+formSetupEntry['title']+']';
|
|
|
+ let code=formSetupEntry['variableDefinition'];
|
|
|
+ print(fName+' '+code);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let vars=new Object();
|
|
|
+ if (code==undefined)
|
|
|
+
|
|
|
+ return vars;
|
|
|
+ let ar=code.split(';');
|
|
|
+ for (let i=0;i<ar.length;i++){
|
|
|
+ q=ar[i].split('=');
|
|
|
+ vars[q[0]]=q[1];
|
|
|
+ }
|
|
|
+ return vars;
|
|
|
+}
|
|
|
|
|
|
-
|
|
|
|
|
|
-
|
|
|
function generateSection(formSetupEntry){
|
|
|
|
|
|
+
|
|
|
+
|
|
|
let listName=config.formConfig.queryMap[formSetupEntry['queryName']];
|
|
|
let fName='[generateSection/'+listName+']';
|
|
|
let sectionTitle=formSetupEntry['title'];
|
|
@@ -322,10 +351,12 @@ function generateSection(formSetupEntry){
|
|
|
div1.appendChild(div2);
|
|
|
|
|
|
}
|
|
|
- if (debug) print("generate master table");
|
|
|
+ if (debug) print(fName+" master table");
|
|
|
|
|
|
let writeMode=accessMode=="EDIT";
|
|
|
- let setup=getSetup(listName,writeMode);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
if ("isReview" in additionalData){
|
|
|
generateReviewSection(listName,div.id,generateReviewSectionCB);
|
|
@@ -333,11 +364,21 @@ function generateSection(formSetupEntry){
|
|
|
}
|
|
|
|
|
|
|
|
|
+ let setup=getSetup(listName,writeMode);
|
|
|
|
|
|
setup.unique=true;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ setup.setVariables=parseVariableDefinition(formSetupEntry);
|
|
|
+ for (x in setup.setVariables){
|
|
|
+ print(fName+' setVariables '+x+':'+setup.setVariables[x]);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
generateTable(listName,divTable.id,additionalData,setup);
|
|
|
|
|
|
- if (debug) print("generate master table: done");
|
|
|
+ if (debug) print(fName+" master table: done");
|
|
|
|
|
|
let generateSubTable=true;
|
|
|
|
|
@@ -351,15 +392,15 @@ function generateSection(formSetupEntry){
|
|
|
let dName=additionalData.divName;
|
|
|
|
|
|
|
|
|
- let setup=fullAccessSetup(qName);
|
|
|
+ let subSetup=fullAccessSetup(qName);
|
|
|
|
|
|
- setup.masterQuery=listName;
|
|
|
+ subSetup.masterQuery=listName;
|
|
|
|
|
|
- generateTable(qName,dName,additionalData,setup);
|
|
|
+ generateTable(qName,dName,additionalData,subSetup);
|
|
|
|
|
|
}
|
|
|
|
|
|
- print("generate review");
|
|
|
+ print(fName+" generate review");
|
|
|
|
|
|
let divReviewList=config.document.createElement('div');
|
|
|
divReviewList.id=listName+"ReviewList";
|
|
@@ -374,6 +415,8 @@ function generateSection(formSetupEntry){
|
|
|
|
|
|
|
|
|
generateReview(divReview.id,divReviewList.id,listName,accessMode);
|
|
|
+
|
|
|
+ print(fName+" generate review complete");
|
|
|
|
|
|
if (accessMode!='GENERATE') return;
|
|
|
print('Adding generate button');
|
|
@@ -803,7 +846,7 @@ function generateReview(divReviewId,divReviewListId, listName, accessMode){
|
|
|
let debug=true;
|
|
|
if (debug) print("Generate review for: "+listId+'/'+listName);
|
|
|
|
|
|
- let reviewSetup=new Object();
|
|
|
+ let reviewSetup=generateSetup();
|
|
|
reviewSetup.readonlyFlag=function(vName){
|
|
|
if (vName=="queryName") return true;
|
|
|
if (vName=="queryname") return true;
|
|
@@ -881,13 +924,17 @@ function updateListDisplay(divName,queryName,filters,readonlyFlag){
|
|
|
let fName="[updateListDisplay]";
|
|
|
|
|
|
if (debug)
|
|
|
- print(fName+": UpdateListDisplay: Query - "+queryName
|
|
|
+ print(fName+": Query - "+queryName
|
|
|
+" div - "+divName);
|
|
|
|
|
|
if (divName=="NONE") return;
|
|
|
+
|
|
|
|
|
|
let crfRef=getCRFref();
|
|
|
let div=config.document.getElementById(divName);
|
|
|
+ print(fName+": setting border");
|
|
|
+ div.style.border="thin solid black";
|
|
|
+ div.style.width="800px";
|
|
|
|
|
|
if (debug)
|
|
|
print(fName+": generating WebPart: "+queryName);
|
|
@@ -1173,6 +1220,8 @@ function addFieldRow(tb,field,setup,additionalData){
|
|
|
print(fName+": Element: "+input);
|
|
|
|
|
|
|
|
|
+ input.style.textAlign="center";
|
|
|
+
|
|
|
|
|
|
|
|
|
for(let i = input.options.length; i >= 0; i--) {
|
|
@@ -1200,7 +1249,30 @@ function addFieldRow(tb,field,setup,additionalData){
|
|
|
input.selectedIndex=0;
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+function selectEntry(entryRows,setVariables){
|
|
|
+ let fName='[selectEntry]';
|
|
|
+ for (let i=0;i<entryRows.length;i++){
|
|
|
+ let tE=entryRows[i];
|
|
|
+
|
|
|
+ let doContinue=false;
|
|
|
+ for (v in setVariables){
|
|
|
+ print(fName+' '+v+' '+tE[v]+'/'+setVariables[v]);
|
|
|
+ if (tE[v]!=setVariables[v]){
|
|
|
+ doContinue=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (doContinue) continue;
|
|
|
+ return tE;
|
|
|
+ }
|
|
|
+ let tE=Object();
|
|
|
+ tE['notValid']=true;
|
|
|
+ return tE;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
function populateFieldRow(entry,field,setup){
|
|
|
populateField(entry,field,setup);
|
|
|
populateSubQuery(entry,field,setup);
|
|
@@ -1339,16 +1411,18 @@ function populateField(entry,field,setup){
|
|
|
}
|
|
|
|
|
|
|
|
|
-function populateTable(listName,writeMode){
|
|
|
+function populateTable(listName,writeMode,setup=undefined){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let fName='[populateTable/'+listName+']';
|
|
|
-
|
|
|
- let setup=getSetup(listName,writeMode);
|
|
|
- let entry=new Object();
|
|
|
+ print(fName+' setup '+setup);
|
|
|
+ if (setup==undefined){
|
|
|
+ print(fName+' generating default setup');
|
|
|
+ setup=getSetup(listName,writeMode);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
let fQuery=config.formConfig.dataQueries[listName];
|
|
@@ -1357,9 +1431,10 @@ function populateTable(listName,writeMode){
|
|
|
|
|
|
print(fName+"]: nrows "+fQuery.rows.length);
|
|
|
|
|
|
- if (fQuery.rows.length>0)
|
|
|
- entry=fQuery.rows[0];
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ let entry=selectEntry(fQuery.rows,setup.setVariables);
|
|
|
+
|
|
|
let fields=fQuery.fields;
|
|
|
|
|
|
for (f in fields){
|
|
@@ -1384,7 +1459,6 @@ function generateTable(listName,divName,additionalData,setup){
|
|
|
|
|
|
|
|
|
|
|
|
- let entry=new Object();
|
|
|
|
|
|
|
|
|
let fQuery=config.formConfig.dataQueries[listName];
|
|
@@ -1393,8 +1467,7 @@ function generateTable(listName,divName,additionalData,setup){
|
|
|
|
|
|
print(fName+": Nrows "+fQuery.rows.length);
|
|
|
|
|
|
- if (fQuery.rows.length>0)
|
|
|
- entry=fQuery.rows[0];
|
|
|
+ let entry=selectEntry(fQuery.rows,setup.setVariables);
|
|
|
|
|
|
let tb=config.document.createElement('table');
|
|
|
tb.className="t2";
|
|
@@ -1409,6 +1482,8 @@ function generateTable(listName,divName,additionalData,setup){
|
|
|
print(fName+": Adding field: "+f+'/'+field.name);
|
|
|
if (field.hidden) continue;
|
|
|
if (field.name=="crfRef") continue;
|
|
|
+
|
|
|
+ if (field.name in setup.setVariables) continue;
|
|
|
addFieldRow(tb,field,setup,additionalData);
|
|
|
populateFieldRow(entry,field,setup);
|
|
|
|
|
@@ -1449,12 +1524,12 @@ function saveReview(queryName,elementId,setup){
|
|
|
|
|
|
let fQuery=config.formConfig.dataQueries[queryName];
|
|
|
|
|
|
- if (fQuery.rows.length==0) useInsert=true;
|
|
|
- let entry=new Object();
|
|
|
+ let entry=selectEntry(fQuery.rows,setup.setVariables);
|
|
|
+
|
|
|
+ if ("notValid" in entry) useInsert=true;
|
|
|
+
|
|
|
+ if (useInsert) entry=new Object();
|
|
|
|
|
|
- if (!useInsert){
|
|
|
- entry=fQuery.rows[0];
|
|
|
- }
|
|
|
entry.crfRef=getCRFrefData();
|
|
|
|
|
|
if (debug) print("Set crfRef="+entry.crfRef);
|
|
@@ -1553,6 +1628,11 @@ function saveReview(queryName,elementId,setup){
|
|
|
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ for (v in setup.setVariables){
|
|
|
+ entry[v]=setup.setVariables[v];
|
|
|
+ }
|
|
|
|
|
|
let qconfig=new Object();
|
|
|
qconfig.rows=[entry];
|
|
@@ -1584,7 +1664,7 @@ function updateLastSavedFlag(data,setup,elementId){
|
|
|
|
|
|
let writeMode=!setup.readonlyFlag();
|
|
|
if ("unique" in setup)
|
|
|
- setData(function (){populateTable(data.queryName,writeMode);});
|
|
|
+ setData(function (){populateTable(data.queryName,writeMode,setup);});
|
|
|
if ("masterQuery" in setup){
|
|
|
let ad=config.formConfig.additionalData[setup.masterQuery];
|
|
|
print('Updating list display: '+setup.queryName+'/'+ad.queryName);
|
|
@@ -2421,7 +2501,8 @@ function generateMasterForm(){
|
|
|
|
|
|
function populateBasicData(){
|
|
|
|
|
|
- config.document.getElementById('version').innerText=config.formConfig.softwareVersion;
|
|
|
+ config.document.getElementById('version').innerText=
|
|
|
+ config.formConfig.softwareVersion;
|
|
|
config.document.getElementById('eudraCTNumber').innerText=
|
|
|
config.formConfig.crfEntry.EudraCTNumber;
|
|
|
config.document.getElementById('studyCoordinator').innerText=
|
|
@@ -2434,6 +2515,10 @@ function populateBasicData(){
|
|
|
config.formConfig.currentSite['sitePhone'];
|
|
|
config.document.getElementById('investigatorName').innerText=
|
|
|
config.formConfig.user['DisplayName'];
|
|
|
+ let h1=config.formConfig.form['formName'];
|
|
|
+ config.document.getElementById('formTitle').innerText=h1;
|
|
|
+ print('Setting title to '+h1);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2581,10 +2666,15 @@ function afterData(){
|
|
|
|
|
|
let accessMode=config.formConfig.operator+'Mode';
|
|
|
let rowsSetup=config.formConfig.formSetupRows;
|
|
|
+ print(fName+' list of sections');
|
|
|
+ for (let i=0;i<rowsSetup.length;i++){
|
|
|
+ let entry=rowsSetup[i];
|
|
|
+ let queryName=config.formConfig.queryMap[entry['queryName']];
|
|
|
+ print(fName+'\t'+queryName);
|
|
|
+ }
|
|
|
for (let i=0;i<rowsSetup.length;i++){
|
|
|
let entry=rowsSetup[i];
|
|
|
let queryName=config.formConfig.queryMap[entry['queryName']];
|
|
|
-
|
|
|
print(fName+" ["+queryName+"]: showFlag: "+entry["showFlag"]);
|
|
|
print(fName+" ["+queryName+"]: accessMode: "+entry[accessMode]);
|
|
|
|
|
@@ -2650,10 +2740,14 @@ function populateSection(queryName){
|
|
|
let aM=entry[accessMode];
|
|
|
print(fName+': accessMode '+aM);
|
|
|
|
|
|
+
|
|
|
if (aM!='GENERATE'){
|
|
|
- let writeMode=entry[accessMode]=='EDIT';
|
|
|
- print(fName+': mode='+writeMode);
|
|
|
- populateTable(queryName,writeMode);
|
|
|
+ let writeMode=(aM=='EDIT');
|
|
|
+ print(fName+': writeMode '+writeMode);
|
|
|
+ let setup=getSetup(listName,writeMode);
|
|
|
+ setup.setVariables=parseVariableDefinition(entry);
|
|
|
+
|
|
|
+ populateTable(queryName,writeMode,setup);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -2928,7 +3022,7 @@ function setFormConfig(){
|
|
|
|
|
|
config.formConfig=new Object();
|
|
|
|
|
|
- config.formConfig.softwareVersion='0.14.18';
|
|
|
+ config.formConfig.softwareVersion='0.14.32';
|
|
|
let debug=true;
|
|
|
|
|
|
if (debug)
|