function drawForm(par){ populateSourceTable(par); let tableId="entryTable"; generateTable("formDiv",tableId); generateRow(tableId, par,"User"); populateSelectTableEntry(par,"User"); generateRow(tableId, par,"Site"); generateRow(tableId, par, "FormStatus"); generateRow(tableId, par,"Crf"); populateSelectTableEntry(par,"Site"); populateSelectTableEntry(par,"FormStatus"); let formTableId="selectFormTable"; generateTable("selectFormDiv",formTableId); generateRow(formTableId,par,"Form"); generateButtonRow(formTableId,"Add new CRF","Add", par, addNewEntry); populateSelectTableEntry(par,"Form"); generateTable("startDiv","startTable"); generateButtonRow("startTable","Start filling the selected form","Start", par, startForm); } function generateQConfig(listName){ let qConfig=new Object(); qConfig.containerPath="TECANT/Data"; qConfig.schemaName="lists"; qConfig.queryName=listName; return qConfig; } function sourceVar(crfEntryName,elementId,sourceName){ let f=new Object(); f.masterSelectVarName=crfEntryName; f.selectId=elementId; f.inputType="innerHTML"; f.sourceSelectVarName=sourceName; return f; } function generateHead(config, headDivName,divName,title){ print(config,"generateHead"); let tb=document.createElement('table'); tb.className='t2'; let row=tb.insertRow(); let cell=document.createElement('th'); row.appendChild(cell); cell.setAttribute("colspan","4"); cell.style.fontSize="20px"; cell.style.textAlign="center"; let cellData=document.createTextNode(title); cell.appendChild(cellData); cell=row.insertCell(); cell.style.fontSize="20px"; let input=document.createElement("input"); input.type="button"; input.value="Show"; input.id="toggle"+divName+"VisbilityButton"; input.onclick=function(){toggleVisibility(divName,input.id)}; cell.appendChild(input); document.getElementById(headDivName).appendChild(tb); print(config,"generateHead: Done"); } function toggleVisibility(divName,buttonName){ let x = document.getElementById(divName); if (x.style.display === "none") { x.style.display = "block"; document.getElementById(buttonName).value="Hide"; } else { x.style.display = "none"; document.getElementById(buttonName).value="Show"; } } function populateSourceTable(par){ let debug=true; if (debug){ document.getElementById('formStatus').value += "\npopulateSourceTable: Starting"; } let config=generateQConfig(par.source.queryName); config.schemaName=par.source.schemaName; if (!("source" in par)) return; if (debug){ print(par.config,"populateSourceTable ["+par.source.queryName+"]"); } config.success=function(data){populateSourceTableData(data,par)}; config.failure=function(errorTxt){print(par.config,"populateSourceData:fail")}; LABKEY.Query.selectRows(config); } function print(config,msg){ config.document.getElementById(config.debugId).value +="\n"+msg; } function populateSourceTableData(data,par){ let debug=true; if (debug){ document.getElementById('formStatus').value += "\npopulateSourceTableData: nrow: "+data.rows.length; } let entry=data.rows[0]; for (let i=0;i < par.source.vars.length;i++){ let srcVarName=par.source.vars[i]; if (debug){ document.getElementById('formStatus').value += "\npopulateSourceTable ["+srcVarName+"]"; } let row=par.vars[srcVarName]; let el=document.getElementById(row.selectId); if (debug){ document.getElementById('formStatus').value += "\nElement: "+el; } el.innerHTML=entry[row.sourceSelectVarName]; } } function populateSelectNotLookup(config,data,parameters,rowId, entry){ //selectId //masterSelectVarName let debug=true; if (debug) print(config,"populateSelectNonLookup on "+data.queryName); let row=parameters.vars[rowId]; let varName=row.masterSelectVarName; if (debug) print(config,"var "+varName+" rows "+data.rows.length); if (debug) print(config,"Getting element "+row.selectId); let el=document.getElementById(row.selectId); if (!el) { print(config,"Element not found"); return; } if (debug) print(config,"Element "+el); if (debug) print(config,"Clearing entries"); //remove previous options for(i = el.options.length; i >= 0; i--) { el.remove(i); } if (debug) print(config,"Adding entries"); if ("addSelect" in row){ if (debug) print(config,"adding "; opt.value = -2; el.options[0] = opt; } if ("addNewFlag" in row){ if (debug) print(config,"adding Add new"); let opt = document.createElement("option"); opt.text = "Add New"; opt.value = row.addNewFlag; el.options[el.options.length] = opt; } for (let i=0;i< data.rows.length;i++){ let valEntry=data.rows[i]; if (debug) print(config,"adding "+valEntry[varName]); let opt = document.createElement("option"); opt.text = valEntry[varName]; opt.value = valEntry[varName]; if (entry){ if (opt.value==entry[varName]) el.selectedIndex=el.options.length-1; } el.options[el.options.length] = opt; } if (entry) row.callback(parameters,rowId); } function populateSelect(data,selectedData, parameters, rowId){ //data is the set of lookup entries, selectedData is a subset of entries valued at lookup.keyColumn let debug=true; if (debug) print("populateSelect Data: "+data.queryName+" selectedData:"+selectedData.queryName); let row=parameters.vars[rowId]; let selectId=row.selectId; let varName=row.masterSelectVarName; if ("filter" in row){ varName=row.filter.filterVarName; } let field=getField(selectedData,varName); let displayColumn=field.lookup.displayColumn; let keyColumn=field.lookup.keyColumn; if (debug){ document.getElementById('formStatus').value+="\n Query: "+data.queryName; document.getElementById('formStatus').value+="\n ElementId: "+selectId; document.getElementById('formStatus').value+="\n keyColumn: "+keyColumn; document.getElementById('formStatus').value+="\n displayColumn: "+displayColumn; } let el = document.getElementById(selectId); if (debug) document.getElementById('formStatus').value+="\n Element: "+el; for(i = el.options.length; i >= 0; i--) { el.remove(i); } if ("addSelect" in row){ let opt = document.createElement("option"); opt.text = "