|
@@ -1,831 +0,0 @@
|
|
|
-function myprint(config, msg){
|
|
|
- config.document.getElementById(config.debugId).value+="\n"+msg;
|
|
|
-}
|
|
|
-
|
|
|
-function print(config,msg){myprint(config,msg);}
|
|
|
-
|
|
|
-function getCRFref(config){
|
|
|
- //'crfRefId'
|
|
|
- return config.document.getElementById(config.crfRefId).innerHTML;
|
|
|
-}
|
|
|
-
|
|
|
-function populateBasicData(config,data){
|
|
|
- let debug=false;
|
|
|
- if (debug)
|
|
|
- print(config,"crfRef matched entries: "+data.rows.length);
|
|
|
- if (data.rows.length!=1) { return;}
|
|
|
- config.document.getElementById('eudraCTNumber').innerHTML=data.rows[0].EudraCTNumber;
|
|
|
- config.document.getElementById('studyCoordinator').innerHTML=data.rows[0].StudyCoordinator;
|
|
|
- config.document.getElementById('studySponsor').innerHTML=data.rows[0].StudySponsor;
|
|
|
- LABKEY.Query.selectRows({schemaName: 'lists',queryName: 'site',
|
|
|
- filterArray: [LABKEY.Filter.create('siteNumber', data.rows[0].Site)],
|
|
|
- success: function(data){setHTML(config,data,'siteName','siteName')};
|
|
|
- });
|
|
|
- LABKEY.Query.selectRows({schemaName: 'core',queryName: 'Users',
|
|
|
- filterArray: [LABKEY.Filter.create('UserId',data.rows[0].UserId)],
|
|
|
- success: function(data){setHTML(config,data,'investigatorName','DisplayName')}
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-function setHTML(config,data,elementId,varName){
|
|
|
- print(config,"\nsetHTML "+data.rows.length+" elementId: "+elementId+" varName:"+varName);
|
|
|
- if (data.rows.length>0){
|
|
|
- let entry=data.rows[0];
|
|
|
- let el=config.document.getElementById(elementId);
|
|
|
-
|
|
|
- print(config,"\nsetHTML: Entry[" + varName + "]: " + entry[varName]);
|
|
|
- print(config,"\nsetHTML: Element[" + elementId + "]: " + el;
|
|
|
- el.innerHTML=entry[varName];
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function setAdditionalData(config,additionalData,entry){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"setAdditionalData");
|
|
|
- if (entry["showFlag"]==="NONE") {
|
|
|
- if (debug) print(config,"Returning empty additionalData");
|
|
|
- return additionalData;
|
|
|
- }
|
|
|
- additionalData.showFlag=entry["showFlag"];
|
|
|
- additionalData.showFlagValue=entry["showFlagValue"];
|
|
|
- additionalData.queryName=entry["showQuery"];
|
|
|
- additionalData.filters=new Object();
|
|
|
- additionalData.filters['crfRef']=getCRFref();
|
|
|
- return additionalData;
|
|
|
-}
|
|
|
-
|
|
|
-function fullAccessSetup(listName){
|
|
|
- let setup=new Object();
|
|
|
- setup.readonlyFlag=function(vName){return false};
|
|
|
- setup.filters=new Object();
|
|
|
- setup.filters['crfRef']=getCRFref();
|
|
|
- setup.getInputId=function(vName){return listName+"_"+vName;}
|
|
|
- setup.addApply="Save";
|
|
|
- setup.unique=true;
|
|
|
- //no addApply
|
|
|
- return setup;
|
|
|
-}
|
|
|
-
|
|
|
-function generateForm(config,data){
|
|
|
-
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"generateForm ["+data.rows.length+"]");
|
|
|
- for (let i=0;i<data.rows.length;i++){
|
|
|
- let entry=data.rows[i];
|
|
|
- let queryName=entry["queryName"];
|
|
|
-
|
|
|
- if (!(queryName in config.fields))
|
|
|
- config.fields[queryName]=new Object();
|
|
|
- let field=config.fields[queryName];
|
|
|
- field.title=entry["title"];
|
|
|
-
|
|
|
- if (debug) print(config,"generateForm ["+i+"/"+data.rows.length+"]");
|
|
|
- if (debug) print(config,"entry[queryName]: "+entry["queryName"]);
|
|
|
- if (debug) print(config,"entry[showFlag]: "+entry["showFlag"]);
|
|
|
- let additionalData=new Object();
|
|
|
- setAdditionalData(config,additionalData,entry);
|
|
|
- generateSection(config,entry["queryName"],entry["title"],
|
|
|
- entry["queryName"], additionalData);
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function generateSection(config, sectionName, sectionTitle, listName, additionalData){
|
|
|
- let formName=config.masterForm;
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"generateSection");
|
|
|
- let tb=config.document.createElement('table');
|
|
|
- tb.className='t2';
|
|
|
- let row=tb.insertRow();
|
|
|
- let cell=config.document.createElement('th');
|
|
|
- row.appendChild(cell);
|
|
|
- cell.setAttribute("colspan","4");
|
|
|
- cell.style.fontSize="20px";
|
|
|
- cell.style.textAlign="center";
|
|
|
- let cellData=config.document.createTextNode(sectionTitle);
|
|
|
- cell.appendChild(cellData);
|
|
|
- cell=row.insertCell();
|
|
|
- let input=config.document.createElement("input");
|
|
|
- input.type="button";
|
|
|
- input.value="Show";
|
|
|
- input.id="toggle"+sectionName+"VisbilityButton";
|
|
|
- input.onclick=function(){toggleVisibility(sectionName,input.id)};
|
|
|
- cell.appendChild(input);
|
|
|
- config.document.getElementById(formName).appendChild(tb);
|
|
|
-
|
|
|
- let div=config.document.createElement('div');
|
|
|
- div.id=sectionName;
|
|
|
- div.style.display="none";
|
|
|
- config.document.getElementById(formName).appendChild(div);
|
|
|
-
|
|
|
- let divTable=config.document.createElement('div');
|
|
|
- divTable.id=sectionName+"Table";
|
|
|
- div.appendChild(divTable);
|
|
|
-
|
|
|
- if ("showFlag" in additionalData) {
|
|
|
-
|
|
|
- additionalData.divName=sectionName+"SubDiv";
|
|
|
- additionalData.divQueryName=sectionName+"SubDivList";
|
|
|
-
|
|
|
- let div1=config.document.createElement('div');
|
|
|
- div1.id=additionalData.divName;
|
|
|
- div1.style.display="none";
|
|
|
- div.appendChild(div1);
|
|
|
-
|
|
|
- let div2=config.document.createElement('div');
|
|
|
- div2.id=additionalData.divQueryName;
|
|
|
- div1.appendChild(div2);
|
|
|
-
|
|
|
- }
|
|
|
- if (debug) print(config,"generate master table");
|
|
|
- generateTable(config,listName,divTable.id,true,additionalData,fullAccessSetup(listName));
|
|
|
- if (debug) print(config,"generate master table: done");
|
|
|
- if ("showFlag" in additionalData){
|
|
|
- let qName=additionalData.queryName;
|
|
|
- let dName=additionalData.divName;
|
|
|
- generateTable(config,qName,dName,false,additionalData,fullAccessSetup(qName));
|
|
|
- }
|
|
|
-
|
|
|
- let divReviewList=config.document.createElement('div');
|
|
|
- divReviewList.id=sectionName+"ReviewList";
|
|
|
- div.appendChild(divReviewList);
|
|
|
-
|
|
|
- let divReview=config.document.createElement('div');
|
|
|
- divReview.id=sectionName+"Review";
|
|
|
- div.appendChild(divReview);
|
|
|
-
|
|
|
- let config=new Object();
|
|
|
- config.schemaName='lists';
|
|
|
- config.queryName='visitZeroSetup';
|
|
|
- config.success=function(data){generateReview(config,data,divReview.id,divReviewList.id,listName)};
|
|
|
- LABKEY.Query.selectRows(config);
|
|
|
-}
|
|
|
-
|
|
|
-function generateReview(config,data,divReviewId,divReviewListId, listName){
|
|
|
- let debug=true;
|
|
|
- let listId=-1;
|
|
|
- for (let i=0;i<data.rows.length;i++){
|
|
|
- let entry=data.rows[i];
|
|
|
- if (entry["queryName"]!=listName) continue;
|
|
|
- listId=entry["Key"];
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- let reviewSetup=new Object();
|
|
|
- reviewSetup.readonlyFlag=function(vName){if (vName=="queryName") return true; return false;};
|
|
|
- reviewSetup.addApply="Add Review";
|
|
|
- reviewSetup.filters=new Object();
|
|
|
- reviewSetup.filters["crfRef"]=getCRFref(config);
|
|
|
- reviewSetup.filters["queryName"]=listId;
|
|
|
- reviewSetup.getInputId=function(vName){return listName+"_"+vName;}
|
|
|
- reviewSetup.divReviewListId=divReviewListId;
|
|
|
-
|
|
|
- if (debug) print(config,"update list display");
|
|
|
- updateListDisplay(config,divReviewListId,"reviewComments",reviewSetup.filters,true);
|
|
|
- generateTable(config,"reviewComments",divReviewId,false,new Object(),reviewSetup);
|
|
|
-}
|
|
|
-
|
|
|
-function setListVisibility(config,setup,additionalData,readonlyFlag){
|
|
|
- let debug=true;
|
|
|
- if (debug){
|
|
|
- print(config,"Set list visibility ");
|
|
|
- for (f in additionalData){
|
|
|
- print(config,"AdditionalData["+f+"]: "+additionalData[f]);
|
|
|
- }
|
|
|
- }
|
|
|
- let x = config.document.getElementById(additionalData.divName);
|
|
|
- if (debug) print("\n Div: "+x);
|
|
|
- x.style.display="none";
|
|
|
- let eId=setup.getInputId(additionalData.showFlag);
|
|
|
- let e = config.document.getElementById(eId);
|
|
|
-
|
|
|
- let sText;
|
|
|
- if (readonlyFlag) sText=e.innerHTML;
|
|
|
- else sText=e.options[e.selectedIndex].text;
|
|
|
-
|
|
|
- if (debug) print(config,"\n Selected option text: "+sText);
|
|
|
-
|
|
|
- if (sText == additionalData.showFlagValue){
|
|
|
- let filters=new Object();
|
|
|
- if ("filters" in additionalData) filters=additionalData.filters;
|
|
|
- x.style.display = "block";
|
|
|
- updateListDisplay(config,additionalData.divQueryName,additionalData.queryName,filters,readonlyFlag);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function updateListDisplay(config,divName,queryName,filters,readonlyFlag){
|
|
|
- let debug=true;
|
|
|
-
|
|
|
- if (debug) print(config,"UpdateListDisplay: Query - "+queryName+" div - "+divName);
|
|
|
-
|
|
|
- if (divName=="NONE") return;
|
|
|
- let crfRef=getCRFref(config);
|
|
|
- let div=config.document.getElementById(divName);
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"Enabling display to queryName: "+queryName);
|
|
|
-
|
|
|
- var qconfig=new Object();
|
|
|
- qconfig.renderTo=divName;
|
|
|
- qconfig.schemaName='lists';
|
|
|
- qconfig.queryName=queryName;
|
|
|
- qconfig.buttonBarPosition='top';
|
|
|
- qconfig.filters=[];
|
|
|
- for (f in filters){
|
|
|
- qconfig.filters.push(LABKEY.Filter.create(f, filters[f]));
|
|
|
- }
|
|
|
- qconfig.success=function(data){updateSuccess(config,data)};
|
|
|
- qconfig.failure=function(data){updateFailure(config,data)};
|
|
|
- //show only print button
|
|
|
- if (readonlyFlag){
|
|
|
- qconfig.buttonBar=new Object();
|
|
|
- qconfig.buttonBar.items=["print"];
|
|
|
- }
|
|
|
-
|
|
|
- LABKEY.QueryWebPart(qconfig);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function updateSuccess(config,data){
|
|
|
- print(config,"Update success");
|
|
|
-}
|
|
|
-
|
|
|
-function updateFailure(config,data){
|
|
|
- print(config,"Update failed");
|
|
|
-}
|
|
|
-
|
|
|
-function toggleVisibility(config, divName,buttonName){
|
|
|
-
|
|
|
- let x = config.document.getElementById(divName);
|
|
|
- if (x.style.display === "none") {
|
|
|
- x.style.display = "block";
|
|
|
- config.document.getElementById(buttonName).value="Hide";
|
|
|
-
|
|
|
- } else {
|
|
|
- x.style.display = "none";
|
|
|
- config.document.getElementById(buttonName).value="Show";
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function generateButton(config,divName,buttonName,callback,callbackParameters){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"generateButton");
|
|
|
-
|
|
|
- let tb=config.document.createElement('table');
|
|
|
- tb.className="t2";
|
|
|
-
|
|
|
- let r1=tb.insertRow();
|
|
|
- th=config.document.createElement('th');
|
|
|
- r1.appendChild(th);
|
|
|
- th.innerHTML="Complete submission";
|
|
|
- //*!*
|
|
|
- let c2=r1.insertCell();
|
|
|
- let i1=config.document.createElement("input");
|
|
|
- i1.type="button";
|
|
|
- i1.value=buttonName;
|
|
|
- i1.style.fontSize="20px";
|
|
|
- i1.onclick=function(){callback(callbackParameters);}
|
|
|
- c2.appendChild(i1);
|
|
|
-
|
|
|
- let c1=r1.insertCell();
|
|
|
- c1.setAttribute("colspan","1");
|
|
|
- c1.id=callbackParameters.submitReportId;
|
|
|
-
|
|
|
- let el=config.document.getElementById(divName);
|
|
|
- if (debug) print("generateButton: element["+divName+"]: "+el);
|
|
|
-
|
|
|
-
|
|
|
- el.appendChild(tb);
|
|
|
-
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function generateTable(config,listName,divName,unique,additionalData,setup){
|
|
|
- let debug=true;
|
|
|
-
|
|
|
- //add temp variables
|
|
|
- let qconfig=new Object();
|
|
|
- qconfig.schemaName='lists';
|
|
|
- qconfig.queryName=listName;
|
|
|
- //apply filters on data to get right entries
|
|
|
- qconfig.filterArray=[];
|
|
|
- for (f in setup.filters){
|
|
|
- qconfig.filterArray.push(LABKEY.Filter.create(f,setup.filters[f]));
|
|
|
- }
|
|
|
- qconfig.success=function(data){populateTable(config,data,divName,unique,additionalData,setup)};
|
|
|
- LABKEY.Query.selectRows(qconfig);
|
|
|
-}
|
|
|
-
|
|
|
-function populateTable(config,data,divName,unique,additionalData,setup){
|
|
|
- //generate and populate table with the first suitable entry
|
|
|
- let debug=true;
|
|
|
-
|
|
|
- if (debug){
|
|
|
- print(config,"populateTable Query: "+data.queryName+" divName: "+divName+" setup: "+setup);
|
|
|
-
|
|
|
-
|
|
|
- if (0){
|
|
|
- let obj=data.metaData.fields;
|
|
|
- for (f in obj){
|
|
|
- print(config,"Data["+f+"]: "+obj[f]);
|
|
|
- for (g in obj[f]){
|
|
|
- print(config,"Data.metaData.fields["+f+"]["+g+"]: "+obj[f][g]);
|
|
|
- }
|
|
|
- if ("lookup" in obj[f]){
|
|
|
- for (h in obj[f]["lookup"]){
|
|
|
- print(config,"Lookup["+h+"]: "+obj[f]["lookup"][h]);
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- let crfRef=getCRFref(config);
|
|
|
- let entry=new Object();
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"Data: nrows "+data.rows.length);
|
|
|
-
|
|
|
- if (data.rows.length > 0) entry=data.rows[0];
|
|
|
-
|
|
|
- let tb=config.document.createElement('table');
|
|
|
- tb.className="t2";
|
|
|
- config.document.getElementById(divName).appendChild(tb);
|
|
|
-
|
|
|
- let fields=data.metaData.fields;
|
|
|
- for (f in fields){
|
|
|
- let field=fields[f];
|
|
|
- if (field.hidden) continue;
|
|
|
-
|
|
|
- let vName=field.name;
|
|
|
-
|
|
|
- if (debug) print(config,"Field ["+vName+"]");
|
|
|
- if (vName=="crfRef") continue;
|
|
|
-
|
|
|
- let vType=field.type;
|
|
|
- if (debug) print(config,"Field ["+vName+"/"+vType+"]");
|
|
|
- let row=tb.insertRow();
|
|
|
- let cell=config.document.createElement('th');
|
|
|
- row.appendChild(cell);
|
|
|
- let text = config.document.createTextNode(fields[f].shortCaption);
|
|
|
- cell.appendChild(text);
|
|
|
- cell=row.insertCell();
|
|
|
-
|
|
|
- let varValue="UNDEF";
|
|
|
- if (vName in setup.filters) varValue=setup.filters[vName];
|
|
|
- if (vName in entry) varValue=entry[vName];
|
|
|
- if (vType=="date"){
|
|
|
- if (varValue==="UNDEF") varValue=new Date();
|
|
|
- else varValue=new Date(varValue);
|
|
|
- }
|
|
|
- if (debug) print("value: "+varValue);
|
|
|
- let input;
|
|
|
- if (setup.readonlyFlag(vName)){
|
|
|
- input=config.document.createTextNode(varValue);
|
|
|
- cell.id=setup.getInputId(vName);
|
|
|
- }
|
|
|
- else{
|
|
|
- cell.colSpan="3";
|
|
|
-
|
|
|
- let cellClass="input";
|
|
|
- let cellType="text";
|
|
|
- if ("lookup" in field){
|
|
|
- input = config.document.createElement("select");
|
|
|
- }
|
|
|
- if (vType=="date"){
|
|
|
- input = config.document.createElement("input");
|
|
|
- input.type="date";
|
|
|
- }
|
|
|
- if (vType=="string"){
|
|
|
- if(vName.search("reviewComment")>-1){
|
|
|
- input = config.document.createElement("textarea");
|
|
|
- input.cols="65";
|
|
|
- input.rows="5";
|
|
|
- }
|
|
|
- else{
|
|
|
- input = config.document.createElement("input");
|
|
|
- input.type="text";
|
|
|
- }
|
|
|
- }
|
|
|
- if (vType=="float"){
|
|
|
- input = config.document.createElement("input");
|
|
|
- input.type="text";
|
|
|
- }
|
|
|
-
|
|
|
- input.id=setup.getInputId(vName);
|
|
|
- if (vName in entry){
|
|
|
- if (vType=="string") input.value=varValue;
|
|
|
- if (vType=="float") input.value=varValue;
|
|
|
- if (vType=="date") input.valueAsDate=varValue;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- cell.appendChild(input);
|
|
|
-
|
|
|
- if ("lookup" in field){
|
|
|
- let lookup=field["lookup"];
|
|
|
- let qconfig=new Object();
|
|
|
- if (debug) print(config,"Query: "+lookup.queryName);
|
|
|
- qconfig.schemaName=lookup.schemaName;
|
|
|
- qconfig.queryName=lookup.queryName;
|
|
|
- let parameters= new Object();
|
|
|
- parameters.elementId=setup.getInputId(vName);
|
|
|
- parameters.keyColumn=lookup.keyColumn;
|
|
|
- parameters.displayColumn=lookup.displayColumn;
|
|
|
-
|
|
|
- if (vName in setup.filters) parameters.selectedKey=setup.filters[vName];
|
|
|
- if (vName in entry) parameters.selectedKey=entry[vName];
|
|
|
-
|
|
|
- if ("showFlag" in additionalData) parameters.additionalData=additionalData;
|
|
|
- if (debug) print("Populate select for "+parameters.elementId);
|
|
|
- qconfig.success=function(data){populateSelect(config,data,parameters,setup,setup.readonlyFlag(vName))};
|
|
|
- LABKEY.Query.selectRows(qconfig);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //add comment field
|
|
|
- if (!("addApply" in setup)) {
|
|
|
- print(config,"populateTable: done");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- let row=tb.insertRow();
|
|
|
-
|
|
|
- let th=config.document.createElement('th');
|
|
|
- row.appendChild(th);
|
|
|
- th.innerHTML=setup.addApply;
|
|
|
- let cell=row.insertCell();
|
|
|
- //cell.setAttribute("colspan","2");
|
|
|
- let input=config.document.createElement("input");
|
|
|
- input.type="button";
|
|
|
- input.value=setup.addApply;
|
|
|
- cell.appendChild(input);
|
|
|
- let cell1=row.insertCell();
|
|
|
- cell1.setAttribute("colspan","2");
|
|
|
- cell1.id=setup.getInputId("rewievLastSave");
|
|
|
- cell1.innerHTML="No recent update";
|
|
|
- input.onclick=function(){saveReview(config,data.queryName,cell1.id,setup)};
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-function populateSelect(config,data,parameters,setup,readonlyFlag){
|
|
|
- let debug=true;
|
|
|
- if (debug)
|
|
|
- print(config,"populateSelect on "+data.queryName);
|
|
|
- let elementId=parameters.elementId;
|
|
|
- let keyColumn=parameters.keyColumn;
|
|
|
- let displayColumn=parameters.displayColumn;
|
|
|
- if (debug){
|
|
|
- print(config,"Query: "+data.queryName);
|
|
|
- print(config,"ElementId: "+elementId);
|
|
|
- print(config,"keyColumn: "+keyColumn);
|
|
|
- print(config,"displayColumn: "+displayColumn);
|
|
|
-
|
|
|
- if ("selectedKey" in parameters){
|
|
|
- print(config,"SelectedKey: "+parameters["selectedKey"]);
|
|
|
- }
|
|
|
- }
|
|
|
- let el = config.document.getElementById(elementId);
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"Element: "+el);
|
|
|
-
|
|
|
- if (!readonlyFlag){
|
|
|
- //clear options
|
|
|
- for(i = el.options.length; i >= 0; i--) {
|
|
|
- el.remove(i);
|
|
|
- }
|
|
|
-
|
|
|
- let opt = config.document.createElement("option");
|
|
|
- opt.text = "<Select>";
|
|
|
- opt.value = -1;
|
|
|
- el.options[0] = opt;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- for (let i = 0; i < data.rows.length; i++) {
|
|
|
- let displayText = data.rows[i][displayColumn];
|
|
|
- let keyValue = data.rows[i][keyColumn];
|
|
|
-
|
|
|
- if (!readonlyFlag){
|
|
|
- let opt = config.document.createElement("option");
|
|
|
-
|
|
|
- opt.text = displayText;
|
|
|
- opt.value = keyValue;
|
|
|
- el.options[el.options.length] = opt;
|
|
|
-
|
|
|
- }
|
|
|
- if (debug) print("Adding: "+keyValue+" : "+displayText);
|
|
|
-
|
|
|
- let t1=checkVariable(config,el,keyValue,displayText,parameters,"selectedKey",readonlyFlag);
|
|
|
- if (t1) setup.keyValue=keyValue;
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if (!("additionalData" in parameters)) return;
|
|
|
-
|
|
|
- if (debug) print(config,"\n Parsing additional data ");
|
|
|
-
|
|
|
- let additionalData=parameters["additionalData"];
|
|
|
-
|
|
|
- let expId=setup.getInputId(additionalData.showFlag);
|
|
|
- if (expId!=elementId) {
|
|
|
- print(config,"Element mismatch: got :"+expId+"/"+elementId);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"Setting onChange to "+el.id);
|
|
|
-
|
|
|
- el.onchange=function(){setListVisibility(config,setup,additionalData,readonlyFlag)};
|
|
|
- setListVisibility(config,setup,additionalData,readonlyFlag);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function checkVariable(config,el,varValue,displayText, parameters,varName,readonlyFlag){
|
|
|
- let debug=true;
|
|
|
- if (!varName in parameters) return false;
|
|
|
- if (debug) print(config,"Comparing: " + varValue + "/" + parameters[varName]);
|
|
|
-
|
|
|
- if (varValue==parameters[varName]){
|
|
|
- if (readonlyFlag) el.innerHTML=displayText;
|
|
|
- else {
|
|
|
- el.selectedIndex=el.options.length-1;
|
|
|
- if (debug) print(" Equal; "+el.selectedIndex);
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-function failureSelect(config,errorInfo,resp,opt){
|
|
|
- document.getElementById('formStatus').value+="\n Error: ";
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function saveReview(config,queryName,elementId,setup){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"saveReview: elementId "+elementId);
|
|
|
- let qconfig=new Object();
|
|
|
- qconfig.schemaName='lists';//could be made more generic
|
|
|
- qconfig.queryName=queryName;
|
|
|
- if ("unique" in setup){
|
|
|
- qconfig.filterArray=[LABKEY.Filter.create("crfRef",getCRFref())];
|
|
|
- }
|
|
|
- qconfig.success=function(data){saveReviewToList(config,data,elementId,setup);}
|
|
|
- //to guess the fields, one must do selectRows first?
|
|
|
- LABKEY.Query.selectRows(qconfig);
|
|
|
-}
|
|
|
-
|
|
|
-function saveReviewToList(config,data,elementId,setup){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"saveReviewToList: "+" elementId "+elementId+ " nrows "+data.rows.length);
|
|
|
-
|
|
|
- let useInsert=false;
|
|
|
- if (!("unique" in setup)) useInsert=true;
|
|
|
- if (data.rows.length==0) useInsert=true;
|
|
|
- let entry=new Object();
|
|
|
-
|
|
|
- if (!useInsert){
|
|
|
- entry=data.rows[0];
|
|
|
- }
|
|
|
- entry.crfRef=getCRFref();
|
|
|
-
|
|
|
- if ("keyValue" in setup) entry.queryName=setup.keyValue;
|
|
|
-
|
|
|
- let fields=data.metaData.fields;
|
|
|
- for (f in fields){
|
|
|
-
|
|
|
- let field=fields[f];
|
|
|
- if (debug) print(config,"saveReview field: "+field.name);
|
|
|
- if (field.hidden) continue;
|
|
|
-
|
|
|
- let vName=fields[f].name;
|
|
|
-
|
|
|
- if (vName=="crfRef") continue;
|
|
|
- if (vName=="queryName") continue;
|
|
|
-
|
|
|
- let eId=setup.getInputId(vName);
|
|
|
-
|
|
|
- let el=config.document.getElementById(eId);
|
|
|
-
|
|
|
- if (!el) {
|
|
|
- if (debug) print(config,"saveReview element: "+eId+" not found");
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (debug) print(config,"saveReview element: "+eId);
|
|
|
-
|
|
|
- let vType=fields[f].type;
|
|
|
-
|
|
|
- if ("lookup" in fields[f]){
|
|
|
- if (el.nodeName==="SELECT"){
|
|
|
- entry[vName]=el.options[el.selectedIndex].value;
|
|
|
- }
|
|
|
- if (el.nodeName==="TD"){
|
|
|
- entry[vName]=el.innerHTML;
|
|
|
- }
|
|
|
-
|
|
|
- print(config,"Setting lookup to "+entry[vName]);
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (vType=="date"){
|
|
|
- var date=el.valueAsDate;
|
|
|
- if (date==="null") continue;
|
|
|
- date.setUTCHours(12);
|
|
|
- entry[vName]=date.toString();
|
|
|
- print(config,"Setting date to "+entry[vName]);
|
|
|
- }
|
|
|
- if (vType=="string"){
|
|
|
- entry[vName]=el.value;
|
|
|
- }
|
|
|
- if (vType=="float"){
|
|
|
- entry[vName]=el.value;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- let qconfig=new Object();
|
|
|
- qconfig.rows=[entry];
|
|
|
- qconfig.schemaName=data.schemaName;
|
|
|
- qconfig.queryName=data.queryName;
|
|
|
-
|
|
|
- //only update comments
|
|
|
-
|
|
|
- qconfig.success=function(data){updateLastSavedFlag(config,data,setup,elementId)};
|
|
|
- if (!useInsert){
|
|
|
- LABKEY.Query.updateRows(qconfig);
|
|
|
- }
|
|
|
- else{
|
|
|
- LABKEY.Query.insertRows(qconfig);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function updateLastSavedFlag(config,data,setup,elementId){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"Update last saved flag to "+elementId);
|
|
|
- let el=config.document.getElementById(elementId);
|
|
|
- let dt=new Date();
|
|
|
- el.innerHTML="Last saved "+dt.toString();
|
|
|
- if (data.queryName=="reviewComments"){
|
|
|
- updateListDisplay(config,setup.divReviewListId,"reviewComments",setup.filters,true);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function onSubmit(config){
|
|
|
- let debug=true;
|
|
|
- hideErr(config);
|
|
|
- clearErr(config);
|
|
|
- printErr(config,"onSubmit");
|
|
|
- checkForm(config);
|
|
|
- let cb=new Object();
|
|
|
- cb.success=finalValidation;
|
|
|
- cb.failure=function(config){printErr("waitForCheckForm failed")};
|
|
|
- waitForCheckForm(config,cb);
|
|
|
-}
|
|
|
-
|
|
|
-function finalValidation(config){
|
|
|
- let debug=true;
|
|
|
- if (debug) print(config,"validate");
|
|
|
-
|
|
|
- let completed=true;
|
|
|
- for (f in config.fields){
|
|
|
- let field=config.fields[f];
|
|
|
- if (field.status!="DONE") {
|
|
|
- printErr(config,"Missing entry for "+field.title);
|
|
|
- completed=false;
|
|
|
- }
|
|
|
- }
|
|
|
- if (debug) print(config,"valid: "+completed);
|
|
|
-
|
|
|
- if (completed){
|
|
|
- finalRedirect(config);
|
|
|
- }
|
|
|
- else{
|
|
|
- updateSubmitStatus(config,"Form invalid");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function finalRedirect(config){
|
|
|
- printErr(config,"Form valid");
|
|
|
- let c1=new Object();
|
|
|
- c1.schemaName='lists';
|
|
|
- c1.queryName='crfEntry';
|
|
|
- c1.filterArray=[LABKEY.Filter.create('crfRef',getCRFref(config))];
|
|
|
- c1.success=function(data){setSubmitStatus(config,data)};
|
|
|
- LABKEY.Query.selectRows(c1);
|
|
|
-}
|
|
|
-
|
|
|
-function setSubmitStatus(config,data){
|
|
|
- let entry=data.rows[0];
|
|
|
- entry.formStatus=2;//Submitted
|
|
|
- let c1=new Object();
|
|
|
- c1.schemaName=data.schemaName;
|
|
|
- c1.queryName=data.queryName;
|
|
|
- c1.rows=[entry];
|
|
|
- c1.success=function(data){updateSubmitStatus(config,"Form submitted")};
|
|
|
- LABKEY.Query.updateRows(c1);
|
|
|
-}
|
|
|
-
|
|
|
-function updateSubmitStatus(config,msg){
|
|
|
- let el=document.getElementById(config.submitReportId);
|
|
|
- el.innerHTML=msg;
|
|
|
-}
|
|
|
-
|
|
|
-function hideErr(config){
|
|
|
- let el=config.document.getElementById("errorDiv");
|
|
|
- el.style.display="none";
|
|
|
-}
|
|
|
-
|
|
|
-function clearErr(config){
|
|
|
- let el=config.document.getElementById("errorTxt");
|
|
|
- el.value="";
|
|
|
-}
|
|
|
-
|
|
|
-function showErr(config){
|
|
|
- let el=config.document.getElementById("errorDiv");
|
|
|
- el.style.display="block";
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-function printErr(config,msg){
|
|
|
- showErr(config);
|
|
|
- el=config.document.getElementById("errorTxt");
|
|
|
- el.style.color="red";
|
|
|
- el.value+="\n"+msg;
|
|
|
-}
|
|
|
-
|
|
|
-function checkForm(config){
|
|
|
- let debug=false;
|
|
|
- let crfRef=getCRFref(config)
|
|
|
-
|
|
|
-
|
|
|
- config.status="UNKNOWN";
|
|
|
- for (f in config.fields){
|
|
|
- let field=config.fields[f];
|
|
|
- field.status="UNKNOWN";
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"Setting status for "+f+" to "+ field.status);
|
|
|
-
|
|
|
- let selectRows=new Object();
|
|
|
- selectRows.schemaName="lists";
|
|
|
- selectRows.queryName=f;
|
|
|
- selectRows.filterArray=[LABKEY.Filter.create('crfRef',crfRef)];
|
|
|
- selectRows.success=function(data){checkData(data,config)};
|
|
|
- selectRows.failure=function(errorObj){print(config,"checkData failed.")};
|
|
|
- LABKEY.Query.selectRows(selectRows);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function waitForCheckForm(config,cb){
|
|
|
- let debug=true;
|
|
|
- if (!("i" in config)) config.i=0;
|
|
|
- if (debug) print(config,"["+config.i+"] checkForm status "+config.status);
|
|
|
- if (config.i>100) {
|
|
|
- if (debug) print(config,"executing failure");
|
|
|
- cb.failure(config);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (config.status=="DONE") {
|
|
|
- if (debug) print(config,"executing success");
|
|
|
- cb.success(config);
|
|
|
- if (debug) print(config,"success executed");
|
|
|
- return;
|
|
|
- }
|
|
|
- config.i+=1;
|
|
|
- setTimeout(function(){waitForCheckForm(config,cb);},1000);
|
|
|
-}
|
|
|
-
|
|
|
-function checkData(data,config){
|
|
|
- let debug=false;
|
|
|
- if (debug) print(config,"checkData ");
|
|
|
- let field=config.fields[data.queryName];
|
|
|
- field.status="NONE";
|
|
|
- if (debug) print(config,"Setting status for "+data.queryName+" to "+field.status);
|
|
|
- if (data.rows.length>0)
|
|
|
- field.status="DONE";
|
|
|
-
|
|
|
- if (debug)
|
|
|
- print(config,"checkData set status for "+data.queryName+" to "+field.status);
|
|
|
-
|
|
|
- for (f in config.fields){
|
|
|
- let subField=config.fields[f];
|
|
|
- if (debug)
|
|
|
- print(config,"checkData status["+f+"]: "+subField.status);
|
|
|
- if (subField.status=="UNKNOWN") {
|
|
|
- if (debug) print(config,"\t Status for "+f+" not set ["+ subField.status+"]");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- config.status="DONE";
|
|
|
-}
|
|
|
-
|