소스 검색

Adding approved form review

Andrej Studen @ ONKO-NIX 4 년 전
부모
커밋
7913713d93
4개의 변경된 파일63개의 추가작업 그리고 20개의 파일을 삭제
  1. 1 1
      views/reviewPortal.html
  2. 1 0
      views/reviewVisit0.html
  3. 30 11
      web/crf/crfVisit.js
  4. 31 8
      web/crf/formPortal.js

+ 1 - 1
views/reviewPortal.html

@@ -33,7 +33,7 @@ window.onload=init;
 function init(){
 	let config=new Object();
 	config.document=document;
-	config.review=1;
+	config.reviewMode="REVIEW";
 	config.div="formDiv";
 	config.debugArea="formStatus";
 	print(config,"Starting");

+ 1 - 0
views/reviewVisit0.html

@@ -58,6 +58,7 @@ function init(){
 	let config=new Object();
 	//will this change if we are in views?
 	config.review=true;
+	config.reviewMode=searchParams.get("reviewMode");
 	//where to get ParticipantId
 	config.registrationQueryId=registrationQueryId;
 	config.registrationParticipantIdField="participantCode";

+ 30 - 11
web/crf/crfVisit.js

@@ -143,9 +143,6 @@ function fullAccessSetup(config,listName){
 	setup.filters['crfRef']=getCRFref(config);
 	setup.getInputId=function(vName){return listName+"_"+vName;}
 	setup.addApply="Save";
-	//not neccesarily unique
-	//setup.unique=true;
-	//no addApply
 	return setup;
 
 }
@@ -289,21 +286,28 @@ function generateSection(config, sectionName, sectionTitle, listName, additional
 
 	}
 	if (debug) print(config,"generate master table");
+
 	
 	let setup=fullAccessSetup(config,listName);
+	if ("reviewMode" in config) 
+		setup=readonlySetup(config);
 	//master table is unique per visit
 	setup.unique=true;
-	if (config.review) 
-		setup=readonlySetup(config);
 	generateTable(config,listName,divTable.id,true,additionalData,setup);
 	
 	if (debug) print(config,"generate master table: done");
+
+	let generateSubTable=true;
+	if ("reviewMode" in config) generateSubTable=false;
+	if (! ("showFlag" in additionalData) ) generateSubTable=false;
 	
-	if ("showFlag" in additionalData){
+	if (generateSubTable){
 		let qName=additionalData.queryName;
 		let dName=additionalData.divName;
+		
+
 		let setup=fullAccessSetup(config,qName);
-		if (config.review)
+		if ("reviewMode" in config)
 			setup=readonlySetup(config);
 		generateTable(config,qName,dName,false,additionalData,setup);
 	}
@@ -351,6 +355,14 @@ function generateReview(config,data,divReviewId,divReviewListId, listName){
 		if (vName=="ModifiedBy") return true;
 		return false;};
 	reviewSetup.addApply="Add Review";
+
+	let generateTableFlag=true;
+	if ("reviewMode" in config && config.reviewMode == "APPROVED" ){
+		delete reviewSetup.addApply;
+		reviewSetup.readonlyFlag=function(vName){return false;}
+		generateTableFlag=false;
+	}
+	
 	reviewSetup.filters=new Object();
 	reviewSetup.filters["crfRef"]=getCRFref(config);
 	reviewSetup.filters["queryName"]=listId;//entry in reviewComments list is queryname, all in small caps
@@ -366,6 +378,9 @@ function generateReview(config,data,divReviewId,divReviewListId, listName){
 		print(config,msg);
 	}
 	updateListDisplay(config,divReviewListId,"reviewComments",reviewSetup.filters,true);
+	
+	if (! generateTableFlag) return;
+
 	generateTable(config,"reviewComments",divReviewId,false,new Object(),reviewSetup);
 }	
 
@@ -1452,6 +1467,8 @@ function generateMasterForm(config){
 	configSelectRows.containerPath=config.containerPath;
 	configSelectRows.schemaName='lists';
 	configSelectRows.queryName=config.setupQueryName;
+	//this is new
+	configSelectRows.formName=config.formName;
 	configSelectRows.success=function(data){generateForm(config,data);};
 	configSelectRows.failure=onFailure;//function(errorTxt){print(config,"generateForm fail" + errorTxt)};
 	LABKEY.Query.selectRows(configSelectRows);
@@ -1460,11 +1477,13 @@ function generateMasterForm(config){
 		print(config,"Generating buttons");
 
 	//requires onSubmit
-	if (config.review){
+	if ("reviewMode" in config){
+		if (config.reviewMode=="REVIEW"){
 	
-		generateButton(config,"submitDiv","Complete submission","Upload to database",onDatabaseUpload,config);
-		generateButton(config,"submitDiv","Review submission","Ask for further review",onUpdateForReview,config);
-		generateButton(config,"submitDiv","Remove submission","Remove CRF form",onRemoveCRF,config);
+			generateButton(config,"submitDiv","Complete submission","Upload to database",onDatabaseUpload,config);
+			generateButton(config,"submitDiv","Review submission","Ask for further review",onUpdateForReview,config);
+			generateButton(config,"submitDiv","Remove submission","Remove CRF form",onRemoveCRF,config);
+		}
 	}	
 	else{
 		generateButton(config,"submitDiv","Complete submission","Submit",onSubmit,config);

+ 31 - 8
web/crf/formPortal.js

@@ -129,12 +129,23 @@ function afterPopulatingCrfReviewers(config,formConfig,data){
 	let qconfig=new Object();
 
 	qconfig.schemaName="lists";
+	qconfig.queryName="crfManagers";
+	qconfig.success=function(data){afterPopulatingCrfManagers(config,formConfig,data)};
+	LABKEY.Query.selectRows(qconfig);
+}
+
+function afterPopulatingCrfManagers(config,formConfig,data){
+	formConfig.crfManagers=data;
+	print(config,"afterPopulatingCrfManagers");
+	print(config,"Number of CRF managers: "+formConfig.crfManagers.rows.length);
+	let qconfig=new Object();
+
+	qconfig.schemaName="lists";
 	qconfig.queryName="FormStatus";
 	qconfig.success=function(data){afterPopulatingFormStatus(config,formConfig,data)};
 	LABKEY.Query.selectRows(qconfig);
 }
 
-
 function afterPopulatingFormStatus(config,formConfig,data){
 	formConfig.formStatus=data;
 	print(config,"afterPopulatingFormStatus");
@@ -148,7 +159,12 @@ function afterPopulatingFormStatus(config,formConfig,data){
 	qconfig.queryName="crfEntry";
 
 	let visibleLevel="crfEditor";
-	if ("review" in config) visibleLevel="crfReviewer";
+	if ("reviewMode" in config) {
+		if (config.reviewMode=="REVIEW")
+			visibleLevel="crfReviewer";
+		else
+			visibleLevel="crfManager";
+	}
 
 
 	let formStatusValue="";
@@ -162,10 +178,14 @@ function afterPopulatingFormStatus(config,formConfig,data){
 	//if ("review" in config) formStatusValue="2";//Submitted
 	qconfig.filterArray=[LABKEY.Filter.create('formStatus',formStatusValue,LABKEY.Filter.Types.IN)];
 	let currentUser=LABKEY.Security.currentUser.id;
-	if ("review" in config){
+	if ("reviewMode" in config){
+		let userList=formConfig.crfReviewers;
+		if (config.reviewMode=="APPROVED")
+			userList=formConfig.crfManagers;
+
 		let reviewer=0;
-		for (let i=0;i<formConfig.crfReviewers.rows.length;i++){
-			if (formConfig.crfReviewers.rows[i].User!=currentUser)
+		for (let i=0;i<userList.rows.length;i++){
+			if (userList.rows[i].User!=currentUser)
 				continue;
 			reviewer=1;
 			break;
@@ -290,7 +310,7 @@ function afterPopulatingEntries(config,formConfig,data){
 			cell.appendChild(button);
 			k++;
 		}
-		if ("review" in config) continue;
+		if ("reviewMode" in config) continue;
 
 		let fbox=config.document.createElement("div");
 		fbox.classList.add("box","red");
@@ -360,16 +380,19 @@ function openForm(config,formConfig,crfRef, crfEntry){
 
 	//select between review and view
 	let formUrl=formEntry["formUrl"];
-	if ("review" in config) formUrl=formEntry["reviewFormUrl"];
+	if ("reviewMode" in config) formUrl=formEntry["reviewFormUrl"];
 	print(config,"Setting url "+formUrl);
 
+	reviewMode="EDIT";
+	if ("reviewMode" in config) reviewMode=config.reviewMode;
 	let params = {
 		"name": formUrl, 
 		// The destination wiki page. The name of this parameter is not arbitrary.
 		"userid": crfEntry.UserId, 
 		"entryId": crfRef,
 		"formSetupQuery":formEntry["setupQuery"],
-		"registrationQueryId":formEntry["masterQuery"]
+		"registrationQueryId":formEntry["masterQuery"],
+		"reviewMode":reviewMode
 	};
 
 	let containerPath= LABKEY.ActionURL.getContainer();