123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- function print(config, msg){
- config.document.getElementById(config.debugArea).value+="\n"+msg;
- }
- function clear(config){
- config.document.getElementById(config.debugArea).value="";
- }
- function getMode(config){
- if ("reviewMode" in config){
- return config.reviewMode;
- }
- return "EDIT";
- }
- function userName(formConfig,id){
- for (let i=0;i<formConfig.users.rows.length;i++){
- if (formConfig.users.rows[i].UserId!=id)
- continue;
- return formConfig.users.rows[i].DisplayName;
- }
- return "NONE";
- }
- function generateFormArray(config){
- print(config,"generateFormArray "+getMode(config));
- let formConfig=new Object();
- let qconfig=new Object();
- qconfig.schemaName="lists";
- qconfig.queryName="Forms";
- //qconfig.filterArray=[LABKEY.Filter.create('formStatus',1)]
- qconfig.success=function(data){afterPopulatingForms(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingForms(config,formConfig,data){
-
- formConfig.dataForms=data;
- print(config,"afterPopulatingForms");
- print(config,"Number of forms: "+formConfig.dataForms.rows.length);
-
- let qconfig=new Object();
- qconfig.schemaName="core";
- qconfig.queryName="users";
- qconfig.success=function(data){afterPopulatingUsers(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
-
- }
- function afterPopulatingUsers(config,formConfig,data){
-
- formConfig.users=data;
- print(config,"afterPopulatingUsers");
- print(config,"Number of users: "+formConfig.users.rows.length);
- let qconfig=new Object();
- qconfig.schemaName="lists";
- qconfig.queryName="inputLists";
- qconfig.success=function(data){afterPopulatingLists(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingLists(config,formConfig,data){
- formConfig.inputLists=data;
- print(config,"afterPopulatingLists");
- print(config,"Number of lists: "+formConfig.inputLists.rows.length);
-
- let qconfig=new Object();
- qconfig.schemaName="study";
- qconfig.queryName="Study";
- qconfig.success=function(data){afterPopulatingStudyData(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
-
- function afterPopulatingStudyData(config,formConfig,data){
- formConfig.studyData=data;
- print(config,"afterPopulatingStudyData");
- print(config,"Number of study data entries: "+formConfig.studyData.rows.length);
-
- let qconfig=new Object();
- qconfig.schemaName="study";
- let demographicDataId=formConfig.dataForms.rows[0].masterQuery;
- let demographicDataQuery="NONE";
- for (let i=0;i<formConfig.inputLists.rows.length;i++){
- let entry=formConfig.inputLists.rows[i];
- print(config,"inputList ["+i+"] ["+entry.Key+"] "+entry.queryName);
- if (entry.Key==demographicDataId){
- demographicDataQuery=entry.queryName;
- break;
- }
- }
- print(config,'Setting demographic query to '+demographicDataQuery);
- qconfig.queryName=demographicDataQuery;
- //qconfig.queryName="demographicData";
-
- qconfig.success=function(data){afterPopulatingDemographicData(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingDemographicData(config,formConfig,data){
- formConfig.demographicData=data;
- print(config,"afterPopulatingDemographic");
- print(config,"Number of patients: "+formConfig.demographicData.rows.length);
-
- let qconfig=new Object();
- qconfig.schemaName="lists";
- qconfig.queryName="crfEditors";
- qconfig.success=function(data){afterPopulatingCrfEditors(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingCrfEditors(config,formConfig,data){
- formConfig.crfEditors=data;
- print(config,"afterPopulatingCrfEditors");
- print(config,"Number of CRF editors: "+formConfig.crfEditors.rows.length);
-
- let qconfig=new Object();
- qconfig.schemaName="lists";
- qconfig.queryName="crfReviewers";
- qconfig.success=function(data){afterPopulatingCrfReviewers(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingCrfReviewers(config,formConfig,data){
- formConfig.crfReviewers=data;
- print(config,"afterPopulatingCrfReviewers");
- print(config,"Number of CRF reviewerrs: "+formConfig.crfReviewers.rows.length);
- 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");
- print(config,"Number of states in FormStatus: "+formConfig.formStatus.rows.length);
-
- formConfig.table=config.document.createElement("table");
- config.document.getElementById(config.div).appendChild(formConfig.table);
- let qconfig=new Object();
- qconfig.schemaName="lists";
- qconfig.queryName="crfEntry";
- let visibleLevel="crfEditor";
- if ("reviewMode" in config) {
- if (config.reviewMode=="REVIEW")
- visibleLevel="crfReviewer";
- else
- visibleLevel="crfManager";
- }
- let formStatusValue="";
- for (let i=0;i<formConfig.formStatus.rows.length;i++){
- if (formConfig.formStatus.rows[i].visibleLevel==visibleLevel){
- if (formStatusValue.length>0) formStatusValue+=";";
- formStatusValue+=String(formConfig.formStatus.rows[i].Key);
- }
- }
-
- //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 ("reviewMode" in config){
- let userList=formConfig.crfReviewers;
- if (config.reviewMode=="APPROVED")
- userList=formConfig.crfManagers;
- let reviewer=0;
- for (let i=0;i<userList.rows.length;i++){
- if (userList.rows[i].User!=currentUser)
- continue;
- reviewer=1;
- break;
- }
- print(config,"reviewer "+reviewer);
- if (reviewer==0) return;
- }
- else{
- //this only allows users to modify forms they have created
- //qconfig.filterArray.push(LABKEY.Filter.create('UserId',currentUser));
- //sometimes all people from reviewer list are allowed to complete each other's forms interchangeably
- let userListX="";
- for (let i=0;i<formConfig.crfEditors.rows.length;i++){
- userId=formConfig.crfEditors.rows[i]['User'];
- if (i>0) userListX+=";";
- userListX+=String(userId);
- }
- qconfig.filterArray.push(
- LABKEY.Filter.create('UserId',userListX,LABKEY.Filter.Types.IN));
-
- }
- qconfig.success=function(data){afterPopulatingEntries(config,formConfig,data)};
- LABKEY.Query.selectRows(qconfig);
- }
- function afterPopulatingEntries(config,formConfig,data){
-
- formConfig.formData=data;
- let dataForms=formConfig.dataForms;
- let table=formConfig.table;
- print(config,"afterPopulatingEntries");
- print(config,"Forms: "+dataForms.rows.length);
- print(config,"InProgress: "+data.rows.length);
-
- for (let i=0;i<dataForms.rows.length; i++){
-
- let formKey=dataForms.rows[i].Key;
- //print(config,"Key: "+formKey);
-
- //figure out master query name
- let masterQuery="NONE";
- let mID=dataForms.rows[i].masterQuery;
- print(config,"Setting master query: "+mID);
- for (let i2=0;i2<formConfig.inputLists.rows.length;i2++){
- //queryName
- if (formConfig.inputLists.rows[i2].Key!=mID)
- continue;
-
- masterQuery=formConfig.inputLists.rows[i2].queryName;
- print(config,"Setting master query "+masterQuery);
- break;
- }
-
- let row=table.insertRow(i);
- let formName=dataForms.rows[i].formName;
- let k=0;
- for (let j=0;j<data.rows.length;j++){
- let formId=data.rows[j].Form;
- //print(config,"Row["+j+"] formId: "+formId);
- if (formId!=formKey)
- continue;
- //insert form
- let fbox=config.document.createElement("div");
- fbox.classList.add("box","gold");
- let fp=config.document.createElement("p");
- let id=data.rows[j].entryId;
- fp.innerHTML=id;
- //it would be great if this were patientId if available
- //fp.classList.add("large","center");
- fp.classList.add("center");
- fbox.appendChild(fp);
-
- let fp1=config.document.createElement("p");
- let user="NONE";
- for (let ii=0;ii<formConfig.users.rows.length;ii++){
- if (formConfig.users.rows[ii].UserId!=data.rows[j].UserId)
- continue;
- user=formConfig.users.rows[ii].DisplayName;
- break;
- }
- fp1.innerHTML=user;
- fp1.classList.add("center");
- fbox.appendChild(fp1);
-
-
- let fp2=config.document.createElement("p");
- fp2.innerHTML=formName;
- fp2.classList.add("center");
- fbox.appendChild(fp2);
-
- let fp3=config.document.createElement("p");
- fp3.id="pid"+id;
- fp3.innerHTML="NONE";
- if (masterQuery!="NONE"){
- let qconfig=new Object();
- qconfig.schemaName='lists';
- qconfig.queryName=masterQuery;
- qconfig.filterArray=[LABKEY.Filter.create('crfRef',id)];
- qconfig.success=function(data){setPatientId(config,formConfig,data,fp3.id);}
- LABKEY.Query.selectRows(qconfig);
- }
- fp3.classList.add("center");
- fbox.appendChild(fp3);
-
-
- let cell=row.insertCell(k);
- cell.classList.add("stretch");
- cell.id="box"+data.rows[j].crfRef;
- let button=config.document.createElement("button");
- button.appendChild(fbox);
- button.onclick=function(){openForm(config,formConfig,id,undefined)};
- cell.appendChild(button);
- k++;
- }
- if ("reviewMode" in config) continue;
- let fbox=config.document.createElement("div");
- fbox.classList.add("box","red");
- let fp=config.document.createElement("p");
- fp.innerHTML="Create new";
- fbox.appendChild(fp);
-
-
-
- let fp2=config.document.createElement("p");
- fp2.innerHTML=formName;
- fp2.classList.add("center");
- fbox.appendChild(fp2);
-
- let cell=row.insertCell(k);
- cell.classList.add("stretch");
- let button=config.document.createElement("button");
- button.appendChild(fbox);
- button.onclick=function(){createForm(config,formConfig,formKey)};
- cell.appendChild(button);
- }
- }
- function setPatientId(config,formConfig,data,id){
- if (data.rows.length==0) return;
- let participantCode=data.rows[0].participantCode;
- for (let i=0;i<formConfig.demographicData.rows.length;i++){
- let entry=formConfig.demographicData.rows[i];
- let key=entry.lsid;
- if (key!=participantCode) continue;
- let participantId=entry.ParticipantId;
- config.document.getElementById(id).innerHTML=participantId;
- break;
- }
-
- }
- function openForm(config,formConfig,crfRef, crfEntry){
- print(config,"Clicked for "+crfRef);
- if (crfEntry==undefined){
- for (let i=0;i<formConfig.formData.rows.length;i++){
- if (formConfig.formData.rows[i].entryId!=crfRef) continue;
- print(config,"Setting "+formConfig.formData.rows[i].entryId);
- crfEntry=formConfig.formData.rows[i];
- break;
- }
- }
- if (crfEntry==undefined) return;
- let formEntry=undefined;
- let formId=crfEntry.Form;
- for (let i=0;i<formConfig.dataForms.rows.length;i++){
- if (formConfig.dataForms.rows[i].Key!=formId) continue;
- print(config,"Setting form "+formConfig.dataForms.rows[i].formName);
- formEntry=formConfig.dataForms.rows[i];
- break;
- }
- if (formEntry==undefined) return;
- //select between review and view
- //let formUrl=formEntry["formUrl"];
- //if ("reviewMode" in config) formUrl=formEntry["reviewFormUrl"];
- //print(config,"Setting url "+formUrl);
- //direct all to the same html
- let formUrl="visit";
- 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,
- "registrationQueryId":formEntry["masterQuery"],
- "reviewMode":reviewMode,
- "formId":formId,
- "formName":formEntry["formName"]
- };
- //"formSetupQuery":formEntry["setupQuery"],
- let containerPath= LABKEY.ActionURL.getContainer();
- // This changes the page after building the URL.
- //Note that the wiki page destination name is set in params.
- var wikiURL = LABKEY.ActionURL.buildURL("crf", formUrl , containerPath, params);
- print(config,"Redirecting to "+wikiURL);
-
- window.location = wikiURL;
- }
- function createForm(config,formConfig,formId){
- print(config,"Create form w/id "+formId);
-
- let crfEntry=new Object();
- crfEntry.entryId=Date.now();
- crfEntry["Date"]=new Date();
- crfEntry.formStatus=1;//In progress
- //set other variables
- //requires studyData as part of formConfig
- let studyData=formConfig.studyData.rows[0];
- crfEntry.EudraCTNumber=studyData.EudraCTNumber;
- crfEntry.StudyCoordinator=studyData.StudyCoordinator;
- crfEntry.StudySponsor=studyData.StudySponsor;
- crfEntry.RegulatoryNumber=studyData.RegulatoryNumber;
- crfEntry.UserId=LABKEY.Security.currentUser.id;
- //requires crfEditors as part of formConfig
- for (let i=0;i<formConfig.crfEditors.rows.length;i++){
- print(config,"Checking user "+formConfig.crfEditors.rows[i].User);
- if (formConfig.crfEditors.rows[i].User!=crfEntry.UserId) continue;
- print(config,"Found user");
- crfEntry.Site=formConfig.crfEditors.rows[i].Site;
- print(config,"Setting site to id="+crfEntry.Site);
- break;
- }
- //from argument list
- crfEntry.Form=formId;
- let qconfig=new Object();
- qconfig.schemaName='lists';
- qconfig.queryName='crfEntry';
- qconfig.success=function(data){openForm(config,formConfig,crfEntry.entryId,crfEntry)};
- qconfig.rows=[crfEntry];
- LABKEY.Query.insertRows(qconfig);
- }
|