extensions/net.sf.basedb.reggie/trunk/resources/sequencing/sequencing_confirm.js

Code
Comments
Other
Rev Date Author Line
2639 08 Sep 14 nicklas 1 var Sequencing = function()
2639 08 Sep 14 nicklas 2 {
2639 08 Sep 14 nicklas 3   var sequencing = {};
2656 11 Sep 14 nicklas 4   var debug = 0;
2639 08 Sep 14 nicklas 5   
2639 08 Sep 14 nicklas 6
2639 08 Sep 14 nicklas 7   // Page initialization
2639 08 Sep 14 nicklas 8   sequencing.initPage = function()
2639 08 Sep 14 nicklas 9   {
2639 08 Sep 14 nicklas 10     // Step 1
2639 08 Sep 14 nicklas 11     Events.addEventHandler('seqRuns', 'change', sequencing.sequencingRunOnChange);
2641 09 Sep 14 nicklas 12     Buttons.addClickHandler('btnCheck', sequencing.checkDataFilesOnClick);
2639 08 Sep 14 nicklas 13     Events.addEventHandler('outcomeSuccess', 'click', sequencing.outcomeOnChange);
2639 08 Sep 14 nicklas 14     Events.addEventHandler('outcomeFailed', 'click', sequencing.outcomeOnChange);
2639 08 Sep 14 nicklas 15
2639 08 Sep 14 nicklas 16     // Step 2
2639 08 Sep 14 nicklas 17     Events.addEventHandler('step-2', 'wizard-initialize', sequencing.initializeStep2);
2639 08 Sep 14 nicklas 18     
2639 08 Sep 14 nicklas 19     // Navigation
2639 08 Sep 14 nicklas 20     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2639 08 Sep 14 nicklas 21     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2639 08 Sep 14 nicklas 22     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2639 08 Sep 14 nicklas 23     Buttons.addClickHandler('goregister', Wizard.goRegister);
2639 08 Sep 14 nicklas 24     
2639 08 Sep 14 nicklas 25     // Final registration
2639 08 Sep 14 nicklas 26     Events.addEventHandler('wizard', 'wizard-submit', sequencing.submit);
2639 08 Sep 14 nicklas 27
2639 08 Sep 14 nicklas 28     Wizard.showLoadingAnimation('Loading sequencing runs...');  
2639 08 Sep 14 nicklas 29     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5478 10 Jun 19 nicklas 30     url += '&cmd=GetUnconfirmedSequencingRuns&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));
2639 08 Sep 14 nicklas 31     Wizard.asyncJsonRequest(url, sequencing.initializeStep1);
2639 08 Sep 14 nicklas 32   }
2639 08 Sep 14 nicklas 33
2639 08 Sep 14 nicklas 34   sequencing.initializeStep1 = function(response)
2639 08 Sep 14 nicklas 35   {
2639 08 Sep 14 nicklas 36     var seqRuns = response.sequencingRuns;
2639 08 Sep 14 nicklas 37     var frm = document.forms['reggie'];  
2639 08 Sep 14 nicklas 38
2639 08 Sep 14 nicklas 39     if (seqRuns.length > 0)
2639 08 Sep 14 nicklas 40     {
2639 08 Sep 14 nicklas 41       for (var runNo=0; runNo < seqRuns.length; runNo++)
2639 08 Sep 14 nicklas 42       {
2639 08 Sep 14 nicklas 43         var seqRun = seqRuns[runNo];
2639 08 Sep 14 nicklas 44         var option = sequencing.getOptionForSeqRun(seqRun);
2639 08 Sep 14 nicklas 45         frm.seqRuns.options[frm.seqRuns.length] = option;
2639 08 Sep 14 nicklas 46       }
2639 08 Sep 14 nicklas 47     }
2639 08 Sep 14 nicklas 48     else
2639 08 Sep 14 nicklas 49     {
2639 08 Sep 14 nicklas 50       Wizard.setFatalError('No sequencing runs available for processing.');
2639 08 Sep 14 nicklas 51       return;
2639 08 Sep 14 nicklas 52     }
2639 08 Sep 14 nicklas 53     
2639 08 Sep 14 nicklas 54     Doc.show('step-1');
2639 08 Sep 14 nicklas 55     Doc.show('gonext');
2639 08 Sep 14 nicklas 56
2639 08 Sep 14 nicklas 57     sequencing.sequencingRunOnChange();
2639 08 Sep 14 nicklas 58     frm.seqRuns.focus();
2639 08 Sep 14 nicklas 59   }
2639 08 Sep 14 nicklas 60
2639 08 Sep 14 nicklas 61   sequencing.sequencingRunOnChange = function()
2639 08 Sep 14 nicklas 62   {
2639 08 Sep 14 nicklas 63     var frm = document.forms['reggie'];  
2639 08 Sep 14 nicklas 64     var seqRun = frm.seqRuns[frm.seqRuns.selectedIndex].seqRun;
2639 08 Sep 14 nicklas 65     
2639 08 Sep 14 nicklas 66     Doc.element('startDate').innerHTML =  Reggie.reformatDate(seqRun.SequencingStart);
2639 08 Sep 14 nicklas 67     Doc.element('endDate').innerHTML = Reggie.reformatDate(seqRun.SequencingEnd);
2639 08 Sep 14 nicklas 68     
2639 08 Sep 14 nicklas 69     Forms.checkRadio(frm.outcome, seqRun.SequencingResult || 'Successful');
2639 08 Sep 14 nicklas 70     sequencing.outcomeOnChange();
2639 08 Sep 14 nicklas 71       
2639 08 Sep 14 nicklas 72     var fc = seqRun.flowCell;
2639 08 Sep 14 nicklas 73     Doc.element('flowCellInRun').innerHTML = '<b>['+seqRun.HiSeqPosition+']</b> ' + Strings.encodeTags(fc.FlowCellID);
2639 08 Sep 14 nicklas 74     Doc.element('flowCellType').innerHTML = fc.FlowCellType || '';
2639 08 Sep 14 nicklas 75     
2639 08 Sep 14 nicklas 76     var pools = fc.pools;
5473 05 Jun 19 nicklas 77     var poolNames = [];
5473 05 Jun 19 nicklas 78     var libPlateNames = [];
2639 08 Sep 14 nicklas 79     for (var poolNo = 0; poolNo < pools.length; poolNo++)
2639 08 Sep 14 nicklas 80     {
2639 08 Sep 14 nicklas 81       var pool = pools[poolNo];
5473 05 Jun 19 nicklas 82       poolNames[poolNames.length] = pool.name;
5473 05 Jun 19 nicklas 83       if (pool.libPlates)
2639 08 Sep 14 nicklas 84       {
5473 05 Jun 19 nicklas 85         for (var plateNo = 0; plateNo < pool.libPlates.length; plateNo++)
5473 05 Jun 19 nicklas 86         {
5473 05 Jun 19 nicklas 87           var plateName = pool.libPlates[plateNo].name;
5473 05 Jun 19 nicklas 88           if (libPlateNames.indexOf(plateName) == -1)
5473 05 Jun 19 nicklas 89           {
5473 05 Jun 19 nicklas 90             libPlateNames[libPlateNames.length] = plateName;
5473 05 Jun 19 nicklas 91           }
5473 05 Jun 19 nicklas 92         }
2639 08 Sep 14 nicklas 93       }
2639 08 Sep 14 nicklas 94     }
5473 05 Jun 19 nicklas 95     Doc.element('pools').innerHTML = Strings.encodeTags(poolNames.join(', '));
5473 05 Jun 19 nicklas 96     Doc.element('libPlates').innerHTML = Strings.encodeTags(libPlateNames.join(', ')) || 'n/a';
2639 08 Sep 14 nicklas 97     Doc.element('comments').innerHTML = Strings.encodeTags(seqRun.comments);
2639 08 Sep 14 nicklas 98   }
2639 08 Sep 14 nicklas 99
2639 08 Sep 14 nicklas 100
2639 08 Sep 14 nicklas 101   sequencing.outcomeOnChange = function()
2639 08 Sep 14 nicklas 102   {
2639 08 Sep 14 nicklas 103     var frm = document.forms['reggie'];  
2639 08 Sep 14 nicklas 104     frm.flagPools.disabled = !Doc.element('outcomeFailed').checked;
2639 08 Sep 14 nicklas 105   }
2639 08 Sep 14 nicklas 106   
2639 08 Sep 14 nicklas 107   sequencing.getOptionForSeqRun = function(seqRun)
2639 08 Sep 14 nicklas 108   {
2639 08 Sep 14 nicklas 109     var flowCell = seqRun.flowCell;
2639 08 Sep 14 nicklas 110     var name = seqRun.name+': ';
2639 08 Sep 14 nicklas 111     var numPools = flowCell.pools.length;
2639 08 Sep 14 nicklas 112     var firstPoolNum = sequencing.getPoolNum(flowCell.pools[0].name);
2639 08 Sep 14 nicklas 113     var lastPoolNum = sequencing.getPoolNum(flowCell.pools[flowCell.pools.length-1].name);
2639 08 Sep 14 nicklas 114
2639 08 Sep 14 nicklas 115     if (lastPoolNum - firstPoolNum == numPools - 1)
2639 08 Sep 14 nicklas 116     {
2639 08 Sep 14 nicklas 117       if (numPools > 1)
2639 08 Sep 14 nicklas 118       {
2639 08 Sep 14 nicklas 119         // Display: PoolN -- PoolY
2639 08 Sep 14 nicklas 120         name += flowCell.pools[0].name + ' — ' + flowCell.pools[flowCell.pools.length-1].name;
2639 08 Sep 14 nicklas 121       }
2639 08 Sep 14 nicklas 122       else
2639 08 Sep 14 nicklas 123       {
2639 08 Sep 14 nicklas 124         name += flowCell.pools[0].name;
2639 08 Sep 14 nicklas 125       }
2639 08 Sep 14 nicklas 126     }
2639 08 Sep 14 nicklas 127     else
2639 08 Sep 14 nicklas 128     {
2639 08 Sep 14 nicklas 129       // Display: PoolN + x more...
2639 08 Sep 14 nicklas 130       name += flowCell.pools[0].name + ' + ' + (numPools-1) + ' more...';
2639 08 Sep 14 nicklas 131     }
2648 10 Sep 14 nicklas 132     
5478 10 Jun 19 nicklas 133     var opt = [];
5478 10 Jun 19 nicklas 134     if (flowCell.FlowCellType) opt[opt.length] = flowCell.FlowCellType;
5478 10 Jun 19 nicklas 135     opt[opt.length] = seqRun.pipeline;
5478 10 Jun 19 nicklas 136     name += ' [' + opt.join('; ') + ']';
2639 08 Sep 14 nicklas 137
2639 08 Sep 14 nicklas 138     // Tooltip is always all pools
2639 08 Sep 14 nicklas 139     var title = '';
2639 08 Sep 14 nicklas 140     for (var poolNo=0; poolNo < numPools; poolNo++)
2639 08 Sep 14 nicklas 141     {
2639 08 Sep 14 nicklas 142       var pool = flowCell.pools[poolNo];
2639 08 Sep 14 nicklas 143       if (poolNo > 0) title += ', ';
2639 08 Sep 14 nicklas 144       title += pool.name;
2639 08 Sep 14 nicklas 145     }
2639 08 Sep 14 nicklas 146
2639 08 Sep 14 nicklas 147     var option = new Option(name, seqRun.id);
2639 08 Sep 14 nicklas 148     option.title = title;
2639 08 Sep 14 nicklas 149     option.seqRun = seqRun;  
2639 08 Sep 14 nicklas 150     return option;
2639 08 Sep 14 nicklas 151   }
2639 08 Sep 14 nicklas 152
2639 08 Sep 14 nicklas 153   sequencing.getPoolNum = function(poolName)
2639 08 Sep 14 nicklas 154   {
2639 08 Sep 14 nicklas 155     var num = poolName.match(/Pool(\d+)/);
2639 08 Sep 14 nicklas 156     return num ? parseInt(num[1], 10) : null;
2639 08 Sep 14 nicklas 157   }
2639 08 Sep 14 nicklas 158
2641 09 Sep 14 nicklas 159   sequencing.checkDataFilesOnClick = function()
2641 09 Sep 14 nicklas 160   {
2641 09 Sep 14 nicklas 161     var frm = document.forms['reggie'];
5488 12 Jun 19 nicklas 162     var url = '../analysis/check_data_files.jsp?ID='+App.getSessionId();
2641 09 Sep 14 nicklas 163     url += '&seqrun='+frm.seqRuns.value;
2641 09 Sep 14 nicklas 164     Dialogs.openPopup(url, 'CheckDataFiles', 900, 600);
2641 09 Sep 14 nicklas 165   }
2641 09 Sep 14 nicklas 166   
2639 08 Sep 14 nicklas 167   sequencing.initializeStep2 = function()
2639 08 Sep 14 nicklas 168   {
2639 08 Sep 14 nicklas 169     var frm = document.forms['reggie'];
2639 08 Sep 14 nicklas 170     var seqRun = frm.seqRuns[frm.seqRuns.selectedIndex].seqRun;
2639 08 Sep 14 nicklas 171     var outcome = Forms.getCheckedRadio(frm, 'outcome').value;
2639 08 Sep 14 nicklas 172     
2639 08 Sep 14 nicklas 173     frm.sequencingComments.value = seqRun.comments;
2657 11 Sep 14 nicklas 174     Doc.element('step-2-title').innerHTML = Strings.encodeTags(frm.seqRuns[frm.seqRuns.selectedIndex].text);
2639 08 Sep 14 nicklas 175
2639 08 Sep 14 nicklas 176     var fc = seqRun.flowCell;
2639 08 Sep 14 nicklas 177     if (outcome != 'Successful')
2639 08 Sep 14 nicklas 178     {
2665 15 Sep 14 nicklas 179       Wizard.showGoNextConfirmation(true, 'Check to verify registration of failure.');
2639 08 Sep 14 nicklas 180       Doc.hide('failedLanesRow');
2639 08 Sep 14 nicklas 181     }
2639 08 Sep 14 nicklas 182     else
2639 08 Sep 14 nicklas 183     {
2639 08 Sep 14 nicklas 184       // Failed lanes
2639 08 Sep 14 nicklas 185       var html = '';
2639 08 Sep 14 nicklas 186       for (var laneNo = 1; laneNo <= fc.numLanes; laneNo++)
2639 08 Sep 14 nicklas 187       {
2639 08 Sep 14 nicklas 188         html += '<label><input type="checkbox" name="failedLanes" value="'+laneNo+'">'+laneNo+'</label> ';
2639 08 Sep 14 nicklas 189       }
2639 08 Sep 14 nicklas 190       Doc.element('failedLanes').innerHTML = html;
2639 08 Sep 14 nicklas 191       Doc.show('failedLanesRow');
2639 08 Sep 14 nicklas 192     }
2639 08 Sep 14 nicklas 193     
2639 08 Sep 14 nicklas 194     Wizard.setCurrentStep(2);
2639 08 Sep 14 nicklas 195     Doc.show('goregister');
2639 08 Sep 14 nicklas 196     Doc.show('gocancel');
2639 08 Sep 14 nicklas 197   }
2639 08 Sep 14 nicklas 198   
2639 08 Sep 14 nicklas 199   sequencing.submit = function()
2639 08 Sep 14 nicklas 200   {
2639 08 Sep 14 nicklas 201
2639 08 Sep 14 nicklas 202     var frm = document.forms['reggie'];
2639 08 Sep 14 nicklas 203     
2639 08 Sep 14 nicklas 204     var seqRun = frm.seqRuns[frm.seqRuns.selectedIndex].seqRun;
2639 08 Sep 14 nicklas 205     var outcome = Forms.getCheckedRadio(frm, 'outcome').value;
2639 08 Sep 14 nicklas 206
2639 08 Sep 14 nicklas 207     var submitInfo = {};
2639 08 Sep 14 nicklas 208     submitInfo.flagPools = frm.flagPools.checked ? true : false;
2639 08 Sep 14 nicklas 209
2639 08 Sep 14 nicklas 210     seqRun.comments = frm.sequencingComments.value;
2639 08 Sep 14 nicklas 211     seqRun.SequencingResult = outcome;
2639 08 Sep 14 nicklas 212     submitInfo.sequencingRun = seqRun;
2639 08 Sep 14 nicklas 213         
2639 08 Sep 14 nicklas 214     if (outcome == 'Successful')
2639 08 Sep 14 nicklas 215     {
2639 08 Sep 14 nicklas 216       var fc = seqRun.flowCell;
2639 08 Sep 14 nicklas 217       var failedLanes = [];
2639 08 Sep 14 nicklas 218       var checkboxes = frm['failedLanes'];
2639 08 Sep 14 nicklas 219       for (var i = 0; i < checkboxes.length; i++)
2639 08 Sep 14 nicklas 220       {
2639 08 Sep 14 nicklas 221         if (checkboxes[i].checked) failedLanes[failedLanes.length] = parseInt(checkboxes[i].value);
2639 08 Sep 14 nicklas 222       }
2639 08 Sep 14 nicklas 223       fc.failedLanes = failedLanes;
2639 08 Sep 14 nicklas 224     }
2639 08 Sep 14 nicklas 225       
2639 08 Sep 14 nicklas 226     var url = '../SequencingRun.servlet?ID='+App.getSessionId();
5488 12 Jun 19 nicklas 227     url += '&cmd=ConfirmSequencingEnded&pipeline='+encodeURIComponent(Data.get('page-data', 'pipeline'));
2639 08 Sep 14 nicklas 228       
2639 08 Sep 14 nicklas 229     Wizard.showLoadingAnimation('Performing registration...');
2639 08 Sep 14 nicklas 230     Wizard.asyncJsonRequest(url, sequencing.submissionResults, 'POST', JSON.stringify(submitInfo));
2639 08 Sep 14 nicklas 231   }
2639 08 Sep 14 nicklas 232   
2639 08 Sep 14 nicklas 233   sequencing.submissionResults = function(response)
2639 08 Sep 14 nicklas 234   {
2639 08 Sep 14 nicklas 235     Wizard.showFinalMessage(response.messages);
2639 08 Sep 14 nicklas 236     Doc.show('gorestart');
2639 08 Sep 14 nicklas 237   }
2639 08 Sep 14 nicklas 238
2639 08 Sep 14 nicklas 239   return sequencing;
2639 08 Sep 14 nicklas 240 }();
2639 08 Sep 14 nicklas 241
2639 08 Sep 14 nicklas 242 Doc.onLoad(Sequencing.initPage);
2639 08 Sep 14 nicklas 243