123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- var participantOverview={};
- participantOverview.init=
- function(cb=null){
- let that=this;
- let action=function(){that.scriptsLoaded(cb);};
- LABKEY.Utils.requiresScript(["crfDORA/crfSetup.js","crfDORA/crfData.js","crfDORA/crfHTML.js"],action);
- }
- participantOverview.scriptsLoaded=
- function(cb=null){
- //if other script need init, just stack the init scripts
- //let action=function(){runQuery.init(cb);}
- crfData.setSetup(crfSetup);
- crfHTML.init();
- let initData=function(){crfData.init(cb);};
- crfSetup.init(initData);
- }
- participantOverview.print=
- function(msg){
- console.log(msg);
- }
- participantOverview.addObjectToIdFormMap=
- function(object,map,id,form){
- if (!(id in map))
- map[id]=new Object();
- let fMap=map[id];
- if (!(form in fMap))
- fMap[form]=new Array();
- fMap[form].push(object);
- }
- participantOverview.generateParticipantArray=
- function(){
- let fName='generateParticipantArray';
- this.print(fName);
- let that=this;
- let makeArray=function(){that.makeArray();};
- let setRegistration=function(){crfData.setRegistration(makeArray);};
- let action=function(){crfSetup.parseSetup(setRegistration);}
- crfSetup.setContainers(action);
- }
- participantOverview.matchRegistration=
- function(entry){
- let fName='matchRegistration';
- let sF='participantStudyId';
- let studyRegMap=crfData.getRegistrationEntryMap(sF);//should be unique for registration
- let nS=Object.keys(studyRegMap).length;
- //this.print(fName+' study registration entries '+nS);
- let lF='participantLocalId';
- let localRegMap=crfData.getRegistrationEntryMap(lF);//should be unique for registration
- let nL=Object.keys(localRegMap).length;
- //this.print(fName+' local registration entries '+nL);
- if (entry[sF]){
- if (entry[sF] in studyRegMap){
- return studyRegMap[entry[sF]];
- }
- //failed to match study id
- }
- if (entry[lF]){
- if (entry[lF] in localRegMap){
- return localRegMap[entry[lF]];
- }
- //failed to match local id
- }
- return null;
- }
- participantOverview.makeArray=
- function(){
- let fName='makeArray';
- let entries=crfSetup.getEntryMap('crfEntries');
- let n=Object.keys(entries).length;
- this.print(fName+' entries '+n);
-
- let idField='participantStudyId';
- let entryMap=new Object();
- let statusMap=crfSetup.getEntryMap('formStatusAll');
- let i=0;
- let site=-1;
- if (this.searchParams.has("site")){
- site=this.searchParams.get("site");
- }
- for (let key in entries){
-
- let entry=entries[key];
- let formStatus=statusMap[entry['FormStatus']]['formStatus'];
-
- if (formStatus=='Deleted'){
- continue;
- }
-
- if (site!=-1 && entry['Site']!=site)
- continue;
- let regEntry=this.matchRegistration(entry);
- if (!regEntry){
- //skip mismatched crfEntry
- this.print(fName+' ['+entry['Key']+'] no match found ');
- i++;
- continue;
- }
- //link crfEntry to registration row
- let idLabel=crfSetup.getParticipantLabel(regEntry);
- let form=entry['Form'];
- this.addObjectToIdFormMap(entry,entryMap,idLabel,form);
- }
- this.print('Found '+(n-i)+'/'+n+' participants');
- this.showArray(entryMap);
- //for (let idLabel in entryMap){
-
- }
- participantOverview.showArray=
- function(entryMap){
- let table=crfHTML.createTable('formDiv');
- crfHTML.addStyle(table,"tOverview");
- let formRows=crfSetup.getRows('dataForms');
- let row=table.insertRow();
- let cell=row.insertCell();
- let stMap=crfSetup.getEntryMap('formStatusAll');
- let that=this;
- for (let i=0;i<formRows.length;i++){
- let formName=formRows[i]['formName'];
- cell=row.insertCell();
- let tNode=crfHTML.createTextNode(formName,null,cell);
- crfHTML.addStyle(cell,'small');
- }
- for (let idLabel in entryMap){
- row=table.insertRow();
- let cell=crfHTML.createTblHeader(null,row);
- crfHTML.createTextNode(idLabel,null,cell);
- cell.onclick=function(){that.openParticipant(idLabel);};
- for (let i=0;i<formRows.length;i++){
- let form=formRows[i]['Key'];
- let count=new Object();
- if (form in entryMap[idLabel]){
- let ar=entryMap[idLabel][form];
- for (let i=0;i<ar.length;i++){
- let entry=ar[i];
- let st=entry['FormStatus'];
- if (!(st in count)) count[st]=0;
- count[st]+=1;
- }
- }
- let label="";
- for (let s in count)
- label+=stMap[s]['formStatus']+':'+count[s]+" ";
- cell=row.insertCell();
- crfHTML.createTextNode(label,null,cell);
- crfHTML.addStyle(cell,'small');
- }
- }
- }
- participantOverview.openParticipant=
- function(idLabel){
- let formUrl="participantPortal";
- let params=new Object();
- params.name=formUrl;
- params['participantLabel']=idLabel;
- //params.pageId="CRF";
- //points to crf container
- let containerPath=crfSetup.getContainer('CRF');
-
- // This changes the page after building the URL.
- //Note that the wiki page destination name is set in params.
-
- //let homeURL = LABKEY.ActionURL.buildURL("project", formUrl , containerPath, params);
- let homeURL = LABKEY.ActionURL.buildURL("crf_dora", formUrl , containerPath, params);
- this.print("Redirecting to "+homeURL);
- window.location = homeURL;
- }
|