extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/lysate_reextraction.js

Code
Comments
Other
Rev Date Author Line
4089 08 Sep 16 nicklas 1 var LysateReExtract = function()
4089 08 Sep 16 nicklas 2 {
4089 08 Sep 16 nicklas 3   var extract = {};
4089 08 Sep 16 nicklas 4   var debug = 0;
4089 08 Sep 16 nicklas 5   
4089 08 Sep 16 nicklas 6   var lysatesIsValid = false;
4089 08 Sep 16 nicklas 7   var selectedLysates;
4089 08 Sep 16 nicklas 8   
4089 08 Sep 16 nicklas 9   // Page initialization
4089 08 Sep 16 nicklas 10   extract.initPage = function()
4089 08 Sep 16 nicklas 11   {
4089 08 Sep 16 nicklas 12     // Step 1
4089 08 Sep 16 nicklas 13     Events.addEventHandler('step-1', 'wizard-validate', extract.validateStep1);
4089 08 Sep 16 nicklas 14
4089 08 Sep 16 nicklas 15     // Step 2
4089 08 Sep 16 nicklas 16     Events.addEventHandler('step-2', 'wizard-initialize', extract.initializeStep2);
4089 08 Sep 16 nicklas 17
4089 08 Sep 16 nicklas 18     // Navigation
4089 08 Sep 16 nicklas 19     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
4089 08 Sep 16 nicklas 20     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
4089 08 Sep 16 nicklas 21     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
4089 08 Sep 16 nicklas 22     Buttons.addClickHandler('goregister', Wizard.goRegister);
4089 08 Sep 16 nicklas 23     Buttons.addClickHandler('goprint', extract.printPickList);
4089 08 Sep 16 nicklas 24
4089 08 Sep 16 nicklas 25     // Final registration
4092 09 Sep 16 nicklas 26     Events.addEventHandler('wizard', 'wizard-submit', extract.submit);
4089 08 Sep 16 nicklas 27
4089 08 Sep 16 nicklas 28     var url = '../Extraction.servlet?ID='+App.getSessionId();
4089 08 Sep 16 nicklas 29     url += '&cmd=GetLysatesForPicking';    
4089 08 Sep 16 nicklas 30     Wizard.showLoadingAnimation('Loading Lysates selected for re-extraction...');
4089 08 Sep 16 nicklas 31     Wizard.asyncJsonRequest(url, extract.initializeStep1);
4089 08 Sep 16 nicklas 32   }
4089 08 Sep 16 nicklas 33   
4089 08 Sep 16 nicklas 34   extract.initializeStep1 = function(response)
4089 08 Sep 16 nicklas 35   {
4089 08 Sep 16 nicklas 36     var frm = document.forms['reggie'];
4089 08 Sep 16 nicklas 37     var lysates = response.lysates;
4089 08 Sep 16 nicklas 38     
4089 08 Sep 16 nicklas 39     var lysateList = frm.lysates;
4089 08 Sep 16 nicklas 40     if (lysates.length > 0)
4089 08 Sep 16 nicklas 41     {
4089 08 Sep 16 nicklas 42       for (var i=0; i < lysates.length; i++)
4089 08 Sep 16 nicklas 43       {
4089 08 Sep 16 nicklas 44         var lysate = lysates[i];
4089 08 Sep 16 nicklas 45         var isYellow = lysate.specimen.YellowLabel != null;
4089 08 Sep 16 nicklas 46         var name = (i+1) + ': ' + Strings.encodeTags(lysate.name);
4089 08 Sep 16 nicklas 47         if (lysate.bioWell)
4089 08 Sep 16 nicklas 48         {
4089 08 Sep 16 nicklas 49           name += ' -- ' + Strings.encodeTags(lysate.bioWell.bioPlate.name + ' (' + lysate.bioWell.location+')');
4089 08 Sep 16 nicklas 50         }
4089 08 Sep 16 nicklas 51
4089 08 Sep 16 nicklas 52         var option = new Option(name, lysate.id, true, true);
4089 08 Sep 16 nicklas 53         if (isYellow) option.className = 'yellow';
4089 08 Sep 16 nicklas 54         option.lysate = lysate;
4089 08 Sep 16 nicklas 55         lysateList.options[lysateList.length] = option;
4089 08 Sep 16 nicklas 56       }
4089 08 Sep 16 nicklas 57     }
4089 08 Sep 16 nicklas 58     else
4089 08 Sep 16 nicklas 59     {
4089 08 Sep 16 nicklas 60       Wizard.setFatalError('No Lysates available for re-extraction.');
4089 08 Sep 16 nicklas 61       return;
4089 08 Sep 16 nicklas 62     }
4089 08 Sep 16 nicklas 63
4089 08 Sep 16 nicklas 64     Doc.show('step-1');
4089 08 Sep 16 nicklas 65     Doc.show('gonext');
4089 08 Sep 16 nicklas 66   }
4089 08 Sep 16 nicklas 67   
4089 08 Sep 16 nicklas 68   extract.printPickList = function()
4089 08 Sep 16 nicklas 69   {
4089 08 Sep 16 nicklas 70     var frm = document.forms['reggie'];
4089 08 Sep 16 nicklas 71     var selected = [];
4089 08 Sep 16 nicklas 72     for (var i = 0; i < frm.lysates.length; i++)
4089 08 Sep 16 nicklas 73     {
4089 08 Sep 16 nicklas 74       if (frm.lysates[i].selected) 
4089 08 Sep 16 nicklas 75       {
4089 08 Sep 16 nicklas 76         selected[selected.length] = frm.lysates[i].value;
4089 08 Sep 16 nicklas 77       }
4089 08 Sep 16 nicklas 78     }
4089 08 Sep 16 nicklas 79     
4089 08 Sep 16 nicklas 80     var url = 'lysate_picklist.jsp?ID='+App.getSessionId();
4089 08 Sep 16 nicklas 81     url += '&lysates='+selected.join(',');
4089 08 Sep 16 nicklas 82     window.open(url, '_blank');
4089 08 Sep 16 nicklas 83     Wizard.hideGoNextConfirmation();
4089 08 Sep 16 nicklas 84   }
4089 08 Sep 16 nicklas 85
4089 08 Sep 16 nicklas 86   extract.validateStep1 = function(event)
4089 08 Sep 16 nicklas 87   {
4089 08 Sep 16 nicklas 88     var frm = document.forms['reggie'];
4089 08 Sep 16 nicklas 89     var lysateList = frm.lysates;
4089 08 Sep 16 nicklas 90     
4089 08 Sep 16 nicklas 91     selectedLysates = [];
4089 08 Sep 16 nicklas 92     for (var i=0; i < lysateList.length; i++)
4089 08 Sep 16 nicklas 93     {
4089 08 Sep 16 nicklas 94       if (lysateList[i].selected)
4089 08 Sep 16 nicklas 95       {
4089 08 Sep 16 nicklas 96         selectedLysates[selectedLysates.length] = lysateList[i].lysate;
4089 08 Sep 16 nicklas 97       }
4089 08 Sep 16 nicklas 98     }
4089 08 Sep 16 nicklas 99       
4089 08 Sep 16 nicklas 100     if (selectedLysates.length == 0)
4089 08 Sep 16 nicklas 101     {
4089 08 Sep 16 nicklas 102       Wizard.setInputStatus('lysates', 'invalid', 'Not selected', 'invalid');
4089 08 Sep 16 nicklas 103       event.preventDefault();
4089 08 Sep 16 nicklas 104     }
4089 08 Sep 16 nicklas 105     else
4089 08 Sep 16 nicklas 106     {
4089 08 Sep 16 nicklas 107       Wizard.setInputStatus('lysates', 'valid');
4089 08 Sep 16 nicklas 108     }
4089 08 Sep 16 nicklas 109   }
4089 08 Sep 16 nicklas 110   
4089 08 Sep 16 nicklas 111   extract.initializeStep2 = function()
4089 08 Sep 16 nicklas 112   {
4089 08 Sep 16 nicklas 113     
4089 08 Sep 16 nicklas 114     var url = '../Extraction.servlet?ID='+App.getSessionId();
4089 08 Sep 16 nicklas 115     url += '&cmd=GetNewLysateBoxPositions&numLysates='+selectedLysates.length;    
4089 08 Sep 16 nicklas 116     Wizard.showLoadingAnimation('Finding new box positions for lysates...');
4089 08 Sep 16 nicklas 117     Wizard.asyncJsonRequest(url, extract.newBoxPositionsLoaded);
4089 08 Sep 16 nicklas 118
4089 08 Sep 16 nicklas 119   }
4089 08 Sep 16 nicklas 120   
4089 08 Sep 16 nicklas 121   extract.newBoxPositionsLoaded = function(response)
4089 08 Sep 16 nicklas 122   {
4089 08 Sep 16 nicklas 123     var newWells = response.wells;
4089 08 Sep 16 nicklas 124     if (newWells.length < selectedLysates.length)
4089 08 Sep 16 nicklas 125     {
4089 08 Sep 16 nicklas 126       var msg;
4089 08 Sep 16 nicklas 127       if (!response.lastExtraLys)
4089 08 Sep 16 nicklas 128       {
4089 08 Sep 16 nicklas 129         msg = 'Could not find any extra storage boxes for';
4089 08 Sep 16 nicklas 130         msg += ' Lysate, RNA, DNA and FlowThrough.';
4089 08 Sep 16 nicklas 131         msg += ' Please prepare and register extra storage boxes before using this wizard.';
4089 08 Sep 16 nicklas 132       }
4089 08 Sep 16 nicklas 133       else
4089 08 Sep 16 nicklas 134       {
4089 08 Sep 16 nicklas 135         var msg = 'Could not find any empty space in <i>' + Strings.encodeTags(response.lastExtraLys) + '</i>';
4089 08 Sep 16 nicklas 136         msg += ' and related storage boxes for Lysate, RNA, DNA and FlowThrough.';
4089 08 Sep 16 nicklas 137         msg += ' Please prepare and register extra storage boxes before using this wizard.';
4089 08 Sep 16 nicklas 138       }
4089 08 Sep 16 nicklas 139       Wizard.setFatalError(msg);
4089 08 Sep 16 nicklas 140       return;
4089 08 Sep 16 nicklas 141     }
4089 08 Sep 16 nicklas 142     
6722 04 May 22 nicklas 143     var html = '';
4089 08 Sep 16 nicklas 144     var homeUrl = Data.get('page-data', 'home-url');
4089 08 Sep 16 nicklas 145     var yellowImg = '<img src="'+homeUrl+'/images/yellow-label.png">';
6722 04 May 22 nicklas 146     var numWithLabel = 0;
4089 08 Sep 16 nicklas 147     for (var i=0; i < selectedLysates.length; i++)
4089 08 Sep 16 nicklas 148     {
4089 08 Sep 16 nicklas 149       var lysate = selectedLysates[i];
4089 08 Sep 16 nicklas 150       var well = lysate.bioWell;
4089 08 Sep 16 nicklas 151       var plate = well.bioPlate;
4089 08 Sep 16 nicklas 152       var storage = plate.storage;
4089 08 Sep 16 nicklas 153       var isYellow = lysate.specimen && lysate.specimen.YellowLabel != null;
4089 08 Sep 16 nicklas 154       var newWell = newWells[i];
4092 09 Sep 16 nicklas 155       lysate.newWell = newWell;
6722 04 May 22 nicklas 156       if (lysate.label) numWithLabel++;
4089 08 Sep 16 nicklas 157       
6722 04 May 22 nicklas 158       var freezerLocation = [];
6722 04 May 22 nicklas 159       if (storage)
6722 04 May 22 nicklas 160       {
6722 04 May 22 nicklas 161         if (storage.section) freezerLocation[freezerLocation.length] = 'Section '+storage.section;
6722 04 May 22 nicklas 162         if (storage.tray) freezerLocation[freezerLocation.length] = 'Tray '+storage.tray;
6722 04 May 22 nicklas 163         if (storage.position) freezerLocation[freezerLocation.length] = 'Position '+storage.position;
6722 04 May 22 nicklas 164       }
4089 08 Sep 16 nicklas 165
4089 08 Sep 16 nicklas 166       var img = isYellow ? yellowImg : '';
4089 08 Sep 16 nicklas 167       html += '<tr class="highlight'+(isYellow ? ' yellow-specimen' : '')+'">';
4089 08 Sep 16 nicklas 168       html += '<td class="lysate if-yellow">'+img+Strings.encodeTags(lysate.name)+'</td>';
6722 04 May 22 nicklas 169       html += '<td class="label">'+Strings.encodeTags(lysate.label)+'</td>';
6722 04 May 22 nicklas 170       html += '<td class="location">';
6722 04 May 22 nicklas 171       if (storage)
6722 04 May 22 nicklas 172       {
6722 04 May 22 nicklas 173         html += Strings.encodeTags(storage.name)+'<br>'+Strings.encodeTags(freezerLocation.join(', '));
6722 04 May 22 nicklas 174       }
6722 04 May 22 nicklas 175       html += '</td>';
4089 08 Sep 16 nicklas 176       html += '<td class="box">'+Strings.encodeTags(plate.name+' '+well.location)+'</td>';
4089 08 Sep 16 nicklas 177       html += '<td class="newbox">'+Strings.encodeTags(newWell.bioPlate.name+' '+newWell.location)+'</td>';
4089 08 Sep 16 nicklas 178       html += '<td class="remain">'+ Numbers.formatNumber(lysate.remainingQuantity, 0, 'µl') + '</td>';
4089 08 Sep 16 nicklas 179       html += '<td class="remarks"></td>';
4089 08 Sep 16 nicklas 180       html += '</tr>'
4089 08 Sep 16 nicklas 181     }
4089 08 Sep 16 nicklas 182     
4089 08 Sep 16 nicklas 183     Doc.element('lysateList').innerHTML = html;
6722 04 May 22 nicklas 184     if (numWithLabel > 0) 
6722 04 May 22 nicklas 185     {
6722 04 May 22 nicklas 186       Doc.removeClass('protocol-table', 'nolabels');
6722 04 May 22 nicklas 187     }
4089 08 Sep 16 nicklas 188     
4089 08 Sep 16 nicklas 189     Wizard.setCurrentStep(2);
4089 08 Sep 16 nicklas 190     Doc.show('goregister');
4089 08 Sep 16 nicklas 191     Doc.show('goprint');
4089 08 Sep 16 nicklas 192     Doc.show('gocancel');
4092 09 Sep 16 nicklas 193     Wizard.showGoNextConfirmation(true, 'Print the lab protocol before continuing with the registration!');
4089 08 Sep 16 nicklas 194   }
4089 08 Sep 16 nicklas 195   
4089 08 Sep 16 nicklas 196   extract.printPickList = function()
4089 08 Sep 16 nicklas 197   {
4089 08 Sep 16 nicklas 198     Wizard.hideGoNextConfirmation();
4089 08 Sep 16 nicklas 199     Doc.removeClass('goregister', 'disabled');
4089 08 Sep 16 nicklas 200     var reportName = 'Pick-list protocol for lysate re-extraction';
4089 08 Sep 16 nicklas 201     var printNote = '<b>Note!</b> For better printing set page orientation to <i>portrait</i>.';
4089 08 Sep 16 nicklas 202     Reggie.openPrintWindow('full-protocol', reportName, 'portrait', printNote, '../', 'lysate_picklist.css');
4089 08 Sep 16 nicklas 203   }
4089 08 Sep 16 nicklas 204
4092 09 Sep 16 nicklas 205   extract.submit = function()
4092 09 Sep 16 nicklas 206   {
4092 09 Sep 16 nicklas 207     var submitInfo = {};
4092 09 Sep 16 nicklas 208     var lysates = [];
4092 09 Sep 16 nicklas 209     for (var i = 0; i < selectedLysates.length; i++)
4092 09 Sep 16 nicklas 210     {
4092 09 Sep 16 nicklas 211       var lysate = selectedLysates[i];
4092 09 Sep 16 nicklas 212       lysates[i] = { 'id': lysate.id, 'newWell': lysate.newWell.id };
4092 09 Sep 16 nicklas 213     }
4092 09 Sep 16 nicklas 214     submitInfo.lysates = lysates;
4092 09 Sep 16 nicklas 215     
4092 09 Sep 16 nicklas 216     var url = '../Extraction.servlet?ID='+App.getSessionId();
4092 09 Sep 16 nicklas 217     url += '&cmd=RegisterLysatesPickedForReextraction';
4092 09 Sep 16 nicklas 218     Wizard.showLoadingAnimation('Performing registration...');
4092 09 Sep 16 nicklas 219     Wizard.asyncJsonRequest(url, extract.submissionResults, 'POST', JSON.stringify(submitInfo));
4092 09 Sep 16 nicklas 220   }
4092 09 Sep 16 nicklas 221   
4092 09 Sep 16 nicklas 222   extract.submissionResults = function(response)
4092 09 Sep 16 nicklas 223   {
4092 09 Sep 16 nicklas 224     Wizard.showFinalMessage(response.messages);
4092 09 Sep 16 nicklas 225     Doc.show('gorestart');
4092 09 Sep 16 nicklas 226   }
4092 09 Sep 16 nicklas 227
4089 08 Sep 16 nicklas 228   return extract;
4089 08 Sep 16 nicklas 229 }();
4089 08 Sep 16 nicklas 230
4089 08 Sep 16 nicklas 231 Doc.onLoad(LysateReExtract.initPage);
4089 08 Sep 16 nicklas 232