|  | @@ -0,0 +1,222 @@
 | 
											
												
													
														|  | 
 |  | +function generateTable(listName,divName,unique){
 | 
											
												
													
														|  | 
 |  | +	//add temp variables
 | 
											
												
													
														|  | 
 |  | +	LABKEY.Query.selectRows({schemaName: 'lists',queryName: listName, requiredVersion:"8.3", 
 | 
											
												
													
														|  | 
 |  | +		parameters:{"divName":divName}, success:function(data){populateTable(data,divName,unique)} });
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +function populateTable(data,divName,unique){
 | 
											
												
													
														|  | 
 |  | +	//generate and populate table with the first suitable entry
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n Query: "+data.queryName;
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n divName: "+divName;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	//document.getElementById('formStatus').value+="\n Div: "+resp.params["query.param.divName"];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	var obj=data.metaData.fields;
 | 
											
												
													
														|  | 
 |  | +	for (f in obj){	
 | 
											
												
													
														|  | 
 |  | +		document.getElementById('formStatus').value+="\n Data["+f+"]: "+obj[f];
 | 
											
												
													
														|  | 
 |  | +		for (g in obj[f]){
 | 
											
												
													
														|  | 
 |  | +			document.getElementById('formStatus').value+="\n Data.metaData.fields["+f+"]["+g+"]: "+obj[f][g];
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if ("lookup" in obj[f]){
 | 
											
												
													
														|  | 
 |  | +			for (h in obj[f]["lookup"]){
 | 
											
												
													
														|  | 
 |  | +				document.getElementById('formStatus').value+="\n Lookup["+h+"]: "+obj[f]["lookup"][h];
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	var crfRef=document.getElementById("crfRefId").innerHTML;
 | 
											
												
													
														|  | 
 |  | +	var entry=new Object();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	for (i=0;i<data.rows.length;i++){
 | 
											
												
													
														|  | 
 |  | +		var entry=data.rows[i];
 | 
											
												
													
														|  | 
 |  | +		if (entry.crfRef!=crfRef) {
 | 
											
												
													
														|  | 
 |  | +			document.getElementById('formStatus').value+="\n Crfref mismatch: "+crfRef+"/"+entry[crfRef];
 | 
											
												
													
														|  | 
 |  | +			continue;
 | 
											
												
													
														|  | 
 |  | +		}	
 | 
											
												
													
														|  | 
 |  | +		break;
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	var tb=document.createElement('table');
 | 
											
												
													
														|  | 
 |  | +	tb.className="t2";
 | 
											
												
													
														|  | 
 |  | +	document.getElementById(divName).appendChild(tb);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	var fields=data.metaData.fields;
 | 
											
												
													
														|  | 
 |  | +	for (f in fields){
 | 
											
												
													
														|  | 
 |  | +		if (fields[f].hidden) continue;
 | 
											
												
													
														|  | 
 |  | +		
 | 
											
												
													
														|  | 
 |  | +		var vName=fields[f].name;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (vName=="crfRef") continue;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		var vType=fields[f].type;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		let row=tb.insertRow();
 | 
											
												
													
														|  | 
 |  | +		let cell=row.insertCell();
 | 
											
												
													
														|  | 
 |  | +		let text = document.createTextNode(fields[f].shortCaption);
 | 
											
												
													
														|  | 
 |  | +		cell.appendChild(text);
 | 
											
												
													
														|  | 
 |  | +		cell=row.insertCell();
 | 
											
												
													
														|  | 
 |  | +		var cellClass="input";
 | 
											
												
													
														|  | 
 |  | +		var cellType="text";
 | 
											
												
													
														|  | 
 |  | +		if ("lookup" in fields[f]){
 | 
											
												
													
														|  | 
 |  | +			cellClass="select";
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if (vType=="string"){
 | 
											
												
													
														|  | 
 |  | +			;
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if (vType=="date"){
 | 
											
												
													
														|  | 
 |  | +			cellType="date";
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		
 | 
											
												
													
														|  | 
 |  | +		var input = document.createElement(cellClass);
 | 
											
												
													
														|  | 
 |  | +		input.type = cellType;
 | 
											
												
													
														|  | 
 |  | +		input.id = vName;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (vType=="string" ){
 | 
											
												
													
														|  | 
 |  | +			if (vName in entry) { input.value=entry[vName];}
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (vType=="date"){
 | 
											
												
													
														|  | 
 |  | +			if (vName in entry) {input.valueAsDate=new Date(entry[vName]);}
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if ("lookup" in fields[f]){
 | 
											
												
													
														|  | 
 |  | +			var lookup=fields[f]["lookup"];
 | 
											
												
													
														|  | 
 |  | +			var config=new Object();
 | 
											
												
													
														|  | 
 |  | +			document.getElementById('formStatus').value+="\n Query: "+lookup.queryName;
 | 
											
												
													
														|  | 
 |  | +			config.schemaName=lookup.schemaName;
 | 
											
												
													
														|  | 
 |  | +			config.queryName=lookup.queryName;
 | 
											
												
													
														|  | 
 |  | +			var parameters={"elementId":input.id,"keyColumn":lookup.keyColumn,"displayColumn":lookup.displayColumn};
 | 
											
												
													
														|  | 
 |  | +			if (vName in entry) parameters.selectedKey=entry[vName];
 | 
											
												
													
														|  | 
 |  | +			config.success=function(data){populateSelect(data,parameters)};
 | 
											
												
													
														|  | 
 |  | +			LABKEY.Query.selectRows(config);
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		cell.appendChild(input); 
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	var row=tb.insertRow();
 | 
											
												
													
														|  | 
 |  | +	let cell=row.insertCell();
 | 
											
												
													
														|  | 
 |  | +	cell.setAttribute("colspan","2");
 | 
											
												
													
														|  | 
 |  | +	var input=document.createElement("input");	
 | 
											
												
													
														|  | 
 |  | +	input.type="button";
 | 
											
												
													
														|  | 
 |  | +	input.value="Add";
 | 
											
												
													
														|  | 
 |  | +	input.onclick=function(){saveData(data.queryName,unique)};
 | 
											
												
													
														|  | 
 |  | +	cell.appendChild(input);
 | 
											
												
													
														|  | 
 |  | +		
 | 
											
												
													
														|  | 
 |  | +}	
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +function populateSelect(data,parameters){
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n Data: "+data;
 | 
											
												
													
														|  | 
 |  | +	var elementId=parameters.elementId;
 | 
											
												
													
														|  | 
 |  | +	var keyColumn=parameters.keyColumn;
 | 
											
												
													
														|  | 
 |  | +	var displayColumn=parameters.displayColumn;
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n ElementId: "+elementId;
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n keyColumn: "+keyColumn;
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n displayColumn: "+displayColumn;
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +	if ("selectedKey" in parameters){
 | 
											
												
													
														|  | 
 |  | +		document.getElementById('formStatus').value+="\n SelectedKey: "+parameters["selectedKey"];
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	var el = document.getElementById(elementId);
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n Element: "+el;
 | 
											
												
													
														|  | 
 |  | +   	for(i = el.options.length; i >= 0; i--) {
 | 
											
												
													
														|  | 
 |  | +		el.remove(i);
 | 
											
												
													
														|  | 
 |  | +   	}
 | 
											
												
													
														|  | 
 |  | +	var opt = document.createElement("option");
 | 
											
												
													
														|  | 
 |  | +	opt.text = "<Select>";
 | 
											
												
													
														|  | 
 |  | +	opt.value = -1;
 | 
											
												
													
														|  | 
 |  | +	el.options[0] = opt;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	for (var i = 0; i < data.rows.length; i++) {
 | 
											
												
													
														|  | 
 |  | +		var opt = document.createElement("option");
 | 
											
												
													
														|  | 
 |  | +		opt.text = data.rows[i][displayColumn];
 | 
											
												
													
														|  | 
 |  | +		opt.value = data.rows[i][keyColumn];
 | 
											
												
													
														|  | 
 |  | +		document.getElementById('formStatus').value+="\n Adding: "+opt.value+" : "+opt.text;
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +		el.options[el.options.length] = opt;
 | 
											
												
													
														|  | 
 |  | +		if ("selectedKey" in parameters){
 | 
											
												
													
														|  | 
 |  | +			document.getElementById('formStatus').value+="\n Comparing: " + opt.value  + "/" + 
 | 
											
												
													
														|  | 
 |  | +				parameters["selectedKey"];
 | 
											
												
													
														|  | 
 |  | +			
 | 
											
												
													
														|  | 
 |  | +           		if (opt.value==parameters["selectedKey"]){
 | 
											
												
													
														|  | 
 |  | +				el.selectedIndex=el.options.length-1;
 | 
											
												
													
														|  | 
 |  | +				document.getElementById('formStatus').value+="\n Equal; "+el.selectedIndex;
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +	   	}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +}	
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +function failureSelect(errorInfo,resp,opt){
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n Error: ";
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +function saveData(queryName,unique){
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n saveData: ";
 | 
											
												
													
														|  | 
 |  | +	var config=new Object();
 | 
											
												
													
														|  | 
 |  | +	config.schemaName='lists';//could be made more generic
 | 
											
												
													
														|  | 
 |  | +	config.queryName=queryName;
 | 
											
												
													
														|  | 
 |  | +	var crfRef=document.getElementById("crfRefId").innerHTML;
 | 
											
												
													
														|  | 
 |  | +	config.filterArray=[ LABKEY.Filter.create('crfRef',crfRef)];
 | 
											
												
													
														|  | 
 |  | +	config.success=function(data){saveDataToList(data,unique)};
 | 
											
												
													
														|  | 
 |  | +	LABKEY.Query.selectRows(config);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +function saveDataToList(data,unique){
 | 
											
												
													
														|  | 
 |  | +	document.getElementById('formStatus').value+="\n saveDataToList: ";
 | 
											
												
													
														|  | 
 |  | +	var update=false;
 | 
											
												
													
														|  | 
 |  | +	if (unique && data.rows.length>0){
 | 
											
												
													
														|  | 
 |  | +		var entry=data.rows[0]
 | 
											
												
													
														|  | 
 |  | +		update=true;
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	else{
 | 
											
												
													
														|  | 
 |  | +		var entry=new Object();
 | 
											
												
													
														|  | 
 |  | +		entry.crfRef=document.getElementById("crfRefId").innerHTML;
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +	var config=new Object();
 | 
											
												
													
														|  | 
 |  | +	config.schemaName=data.schemaName;//could be made more generic
 | 
											
												
													
														|  | 
 |  | +	config.queryName=data.queryName;
 | 
											
												
													
														|  | 
 |  | +	//entry.crfRef=document.getElementById("crfRefId").innerHTML;
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +	var fields=data.metaData.fields;
 | 
											
												
													
														|  | 
 |  | +	for (f in fields){
 | 
											
												
													
														|  | 
 |  | +		if (fields[f].hidden) continue;
 | 
											
												
													
														|  | 
 |  | +		
 | 
											
												
													
														|  | 
 |  | +		var vName=fields[f].name;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (vName=="crfRef") continue;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		var el=document.getElementById(vName);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if (!el) continue;
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  | 
 |  | +		var vType=fields[f].type;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		if ("lookup" in fields[f]){
 | 
											
												
													
														|  | 
 |  | +			entry[vName]=el.options[el.selectedIndex].value;
 | 
											
												
													
														|  | 
 |  | +			continue;
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if (vType=="date"){
 | 
											
												
													
														|  | 
 |  | +			var date=el.valueAsDate;
 | 
											
												
													
														|  | 
 |  | +			if (date==="null") continue;
 | 
											
												
													
														|  | 
 |  | +			date.setUTCHours(12);
 | 
											
												
													
														|  | 
 |  | +			entry[vName]=date.toString();
 | 
											
												
													
														|  | 
 |  | +		}	
 | 
											
												
													
														|  | 
 |  | +		if (vType=="string"){
 | 
											
												
													
														|  | 
 |  | +			entry[vName]=el.value;
 | 
											
												
													
														|  | 
 |  | +		}	
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	config.rows=[entry];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	if (update) 
 | 
											
												
													
														|  | 
 |  | +		LABKEY.Query.updateRows(config);
 | 
											
												
													
														|  | 
 |  | +	else 
 | 
											
												
													
														|  | 
 |  | +		LABKEY.Query.insertRows(config); 
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +exports.generateTable=generateTable;
 | 
											
												
													
														|  | 
 |  | +exports.saveData=saveData;
 |