Browse Source

Initial import

Eager Beaver 5 years ago
commit
f54d738094
5 changed files with 287 additions and 0 deletions
  1. 4 0
      META-INF/MANIFEST.MF
  2. 23 0
      config/module.xml
  3. 222 0
      scripts/tecant/generateTable.js
  4. 36 0
      views/smokingHabits.html
  5. 2 0
      views/smokingHabits.view.xml

+ 4 - 0
META-INF/MANIFEST.MF

@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.9.3
+Created-By: 1.7.0_51-b13 (Oracle Corporation)
+

+ 23 - 0
config/module.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+    <bean id="moduleBean" class="org.labkey.api.module.SimpleModule">
+        <property name="name" value="TECANT"/>
+        <property name="version" value="0.1"/>
+        <property name="requiredServerVersion" value="0.0"/>
+        <property name="moduleDependencies" value=""/>
+        <property name="svnRevision" value="0"/>
+        <property name="svnUrl" value="Not built from a source control working copy"/>
+        <property name="buildUser" value="astuden"/>
+        <property name="buildTime" value="March 5 2020, 11:43 AM"/>
+        <property name="buildOS" value="Ubuntu"/>
+        <property name="buildPath" value=""/>
+        <property name="sourcePath" value=""/>
+        <property name="supportedDatabases" value=""/>
+        <property name="resourcePath" value=""/>
+        <property name="buildNumber" value="0"/>
+        <property name="enlistmentId" value="e1388c4c-18ab-432b-a8e0-f9f5d8193eac"/>
+    </bean>
+</beans>

+ 222 - 0
scripts/tecant/generateTable.js

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

+ 36 - 0
views/smokingHabits.html

@@ -0,0 +1,36 @@
+<style>
+table {margin-bottom:20px;table-layout:fixed; border-collapse:collapse; border-spacing:10px}
+table.t1 {width:400px; border:1px solid black}
+table.t1 th {border:1px solid black;padding:4px;background-color:#e0e0e0}
+table.t1 td {text-align:center}
+table.t2 {width:800px; border:1px solid black;}
+table.t2 th {border:1px solid black;padding:4px;background-color:#e0e0e0}
+table.t2 td {border:1px solid black; text-align:center}
+
+div.d1 {text-align:center; width=400px; background-color:#e0e0e0;
+        font-size:      20px; margin-bottom:20px}
+</style>
+
+<table cellspacing="2" cellpadding="5" border="0">
+<tr><td>CRF ID: </td><td><strong id="crfRefId">1583163135258</strong></td></tr>
+</table>
+
+<form name="smokingHabitsForm" id="smokingHabitsForm">
+
+<div id="smokingHabitsDiv"></div>
+
+<textarea cols="30" rows="2" name="formStatus" id="formStatus">
+Loading
+</textarea>
+
+</form>
+
+<script type="text/javascript">
+
+
+window.onload = init();
+var generateTable=require("tecant/generateTable.js");
+function init(){
+	generateTable.generateTable("existingCondition","smokingHabitsDiv",true);
+}
+

+ 2 - 0
views/smokingHabits.view.xml

@@ -0,0 +1,2 @@
+<view xmlns="http://labkey.org/data/xml/view" title="Smoking Habits and Alcohol consumption">
+</view>