extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/storage-box.js

Code
Comments
Other
Rev Date Author Line
4550 30 Jun 17 nicklas 1 var StorageBox = function()
4550 30 Jun 17 nicklas 2 {
4550 30 Jun 17 nicklas 3   var box = {};
4550 30 Jun 17 nicklas 4   var debug = 0;
4550 30 Jun 17 nicklas 5   
5340 29 Mar 19 nicklas 6   var nofBoxesIsValid = [];
5340 29 Mar 19 nicklas 7   
5340 29 Mar 19 nicklas 8   var lastSpBox;
5340 29 Mar 19 nicklas 9   var lastPSpBox;
7138 26 Apr 23 nicklas 10   var lastESpBox;
4550 30 Jun 17 nicklas 11   var newBoxes;
4550 30 Jun 17 nicklas 12   
4550 30 Jun 17 nicklas 13   // Page initialization
4550 30 Jun 17 nicklas 14   box.initPage = function()
4550 30 Jun 17 nicklas 15   {
4550 30 Jun 17 nicklas 16     // Step 1
4550 30 Jun 17 nicklas 17     Events.addEventHandler('step-1', 'wizard-validate', box.validateStep1);
5340 29 Mar 19 nicklas 18     Events.addEventHandler('numberOfSpBoxes', 'keypress', Events.integerOnly);
5340 29 Mar 19 nicklas 19     Events.addEventHandler('numberOfSpBoxes', 'blur', box.nofBoxesOnChange);
5340 29 Mar 19 nicklas 20     Events.addEventHandler('numberOfPSpBoxes', 'keypress', Events.integerOnly);
5340 29 Mar 19 nicklas 21     Events.addEventHandler('numberOfPSpBoxes', 'blur', box.nofBoxesOnChange);
7138 26 Apr 23 nicklas 22     Events.addEventHandler('numberOfESpBoxes', 'keypress', Events.integerOnly);
7138 26 Apr 23 nicklas 23     Events.addEventHandler('numberOfESpBoxes', 'blur', box.nofBoxesOnChange);
4550 30 Jun 17 nicklas 24
4550 30 Jun 17 nicklas 25     // Step 2
4550 30 Jun 17 nicklas 26     Events.addEventHandler('step-2', 'wizard-initialize', box.initializeStep2);
4550 30 Jun 17 nicklas 27     
4550 30 Jun 17 nicklas 28     // Navigation
4550 30 Jun 17 nicklas 29     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
4550 30 Jun 17 nicklas 30     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
4550 30 Jun 17 nicklas 31     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
4550 30 Jun 17 nicklas 32     Buttons.addClickHandler('goregister', Wizard.goRegister);
5308 15 Feb 19 nicklas 33     Buttons.addClickHandler('downloadLabelsCsv', box.downloadLabels);
5308 15 Feb 19 nicklas 34     Buttons.addClickHandler('downloadLabelsXlsx', box.downloadLabels);
4550 30 Jun 17 nicklas 35     
4550 30 Jun 17 nicklas 36     // Final registration
4550 30 Jun 17 nicklas 37     Events.addEventHandler('wizard', 'wizard-submit', box.submit);
4550 30 Jun 17 nicklas 38
7188 22 May 23 nicklas 39     Reggie.loadHardware('FREEZER', 'freezer');
7188 22 May 23 nicklas 40
4550 30 Jun 17 nicklas 41     // Load last storage box
4550 30 Jun 17 nicklas 42     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
5340 29 Mar 19 nicklas 43     url += '&cmd=GetLastExistingStorageBoxes'
5340 29 Mar 19 nicklas 44     Wizard.showLoadingAnimation('Loading existing storage boxes...');
4550 30 Jun 17 nicklas 45     Wizard.asyncJsonRequest(url, box.lastBoxLoaded);
4550 30 Jun 17 nicklas 46   }
4550 30 Jun 17 nicklas 47
4550 30 Jun 17 nicklas 48   box.lastBoxLoaded = function(response)
4550 30 Jun 17 nicklas 49   {
5340 29 Mar 19 nicklas 50     var frm = document.forms['reggie'];
5340 29 Mar 19 nicklas 51     lastSpBox = response.lastSpBox;
5340 29 Mar 19 nicklas 52     lastPSpBox = response.lastPSpBox;
7138 26 Apr 23 nicklas 53     lastESpBox = response.lastESpBox;
5340 29 Mar 19 nicklas 54     
4550 30 Jun 17 nicklas 55     var counts = response.counts;
5340 29 Mar 19 nicklas 56     var emptySpBoxes = counts['empty-storage-boxes'];
5340 29 Mar 19 nicklas 57     var emptyPSpBoxes = counts['empty-paused-storage-boxes'];
7138 26 Apr 23 nicklas 58     var emptyESpBoxes = counts['empty-external-storage-boxes'];
4550 30 Jun 17 nicklas 59     
7138 26 Apr 23 nicklas 60     var focus = null;
5340 29 Mar 19 nicklas 61     if (lastSpBox)
4550 30 Jun 17 nicklas 62     {
5340 29 Mar 19 nicklas 63       Doc.element('lastSpBox').innerHTML = Strings.encodeTags(lastSpBox.name) + ' (' + lastSpBox.freeWells + ' free wells)';
4550 30 Jun 17 nicklas 64     }
5340 29 Mar 19 nicklas 65     if (emptySpBoxes != null) 
5340 29 Mar 19 nicklas 66     {
5340 29 Mar 19 nicklas 67       Doc.element('emptySpBoxes').innerHTML = emptySpBoxes;
7138 26 Apr 23 nicklas 68       if (emptySpBoxes < 2) 
7138 26 Apr 23 nicklas 69       {
7138 26 Apr 23 nicklas 70         frm.numberOfSpBoxes.value = '8';
7138 26 Apr 23 nicklas 71         if (focus == null) focus = frm.numberOfSpBoxes;
7138 26 Apr 23 nicklas 72       }
5340 29 Mar 19 nicklas 73     }
4550 30 Jun 17 nicklas 74     
5340 29 Mar 19 nicklas 75     if (lastPSpBox)
5340 29 Mar 19 nicklas 76     {
5340 29 Mar 19 nicklas 77       Doc.element('lastPSpBox').innerHTML = Strings.encodeTags(lastPSpBox.name) + ' (' + lastPSpBox.freeWells + ' free wells)';
5340 29 Mar 19 nicklas 78     }
5340 29 Mar 19 nicklas 79     if (emptyPSpBoxes != null) 
5340 29 Mar 19 nicklas 80     {
5340 29 Mar 19 nicklas 81       Doc.element('emptyPSpBoxes').innerHTML = emptyPSpBoxes;
7138 26 Apr 23 nicklas 82       if (emptyPSpBoxes < 2) 
7138 26 Apr 23 nicklas 83       {
7138 26 Apr 23 nicklas 84         frm.numberOfPSpBoxes.value = '8';
7138 26 Apr 23 nicklas 85         if (focus == null) focus = frm.numberOfPSpBoxes;
7138 26 Apr 23 nicklas 86       }
5340 29 Mar 19 nicklas 87     }
5340 29 Mar 19 nicklas 88
7138 26 Apr 23 nicklas 89     if (lastESpBox)
7138 26 Apr 23 nicklas 90     {
7138 26 Apr 23 nicklas 91       Doc.element('lastESpBox').innerHTML = Strings.encodeTags(lastESpBox.name) + ' (' + lastESpBox.freeWells + ' free wells)';
7188 22 May 23 nicklas 92       if (lastESpBox.freezer) Forms.selectListOption('freezer', lastESpBox.freezer);
7138 26 Apr 23 nicklas 93     }
7138 26 Apr 23 nicklas 94     if (emptyESpBoxes != null) 
7138 26 Apr 23 nicklas 95     {
7138 26 Apr 23 nicklas 96       Doc.element('emptyESpBoxes').innerHTML = emptyESpBoxes;
7138 26 Apr 23 nicklas 97       if (emptyESpBoxes < 2) 
7138 26 Apr 23 nicklas 98       {
7138 26 Apr 23 nicklas 99         frm.numberOfESpBoxes.value = '8';
7138 26 Apr 23 nicklas 100         if (focus == null) focus = frm.numberOfESpBoxes;
7138 26 Apr 23 nicklas 101       }
7138 26 Apr 23 nicklas 102     }
7138 26 Apr 23 nicklas 103
5340 29 Mar 19 nicklas 104     nofBoxesIsValid['numberOfSpBoxes'] = true;
5340 29 Mar 19 nicklas 105     nofBoxesIsValid['numberOfPSpBoxes'] = true;
7138 26 Apr 23 nicklas 106     nofBoxesIsValid['numberOfESpBoxes'] = true;
5340 29 Mar 19 nicklas 107     
4550 30 Jun 17 nicklas 108     Doc.show('step-1');
4550 30 Jun 17 nicklas 109     Doc.show('gonext');
7138 26 Apr 23 nicklas 110     if (focus != null) focus.focus();
4550 30 Jun 17 nicklas 111   }
4550 30 Jun 17 nicklas 112   
4550 30 Jun 17 nicklas 113   box.validateStep1 = function(event)
4550 30 Jun 17 nicklas 114   {
4550 30 Jun 17 nicklas 115     var frm = document.forms['reggie'];
5340 29 Mar 19 nicklas 116     if (!nofBoxesIsValid['numberOfSpBoxes']) event.preventDefault();
5340 29 Mar 19 nicklas 117     if (!nofBoxesIsValid['numberOfPSpBoxes']) event.preventDefault();
7138 26 Apr 23 nicklas 118     if (!nofBoxesIsValid['numberOfESpBoxes']) event.preventDefault();
5340 29 Mar 19 nicklas 119     
5340 29 Mar 19 nicklas 120     var nofSpBoxes = parseInt(frm.numberOfSpBoxes.value);
5340 29 Mar 19 nicklas 121     var nofPSpBoxes = parseInt(frm.numberOfPSpBoxes.value);
7138 26 Apr 23 nicklas 122     var nofESpBoxes = parseInt(frm.numberOfESpBoxes.value);
7138 26 Apr 23 nicklas 123     if (nofSpBoxes == 0 && nofPSpBoxes == 0 && nofESpBoxes == 0)
5340 29 Mar 19 nicklas 124     {
5340 29 Mar 19 nicklas 125       Wizard.showGoNextConfirmation(false, 'No new boxes to create!');
5340 29 Mar 19 nicklas 126       event.preventDefault();
5340 29 Mar 19 nicklas 127     }
4550 30 Jun 17 nicklas 128   }
4550 30 Jun 17 nicklas 129   
5340 29 Mar 19 nicklas 130   box.nofBoxesOnChange = function(event)
4550 30 Jun 17 nicklas 131   {
5340 29 Mar 19 nicklas 132     var target = event.currentTarget;
5340 29 Mar 19 nicklas 133     
5340 29 Mar 19 nicklas 134     nofBoxesIsValid[target.id] = false;
5340 29 Mar 19 nicklas 135     Wizard.hideGoNextConfirmation();
5340 29 Mar 19 nicklas 136     
5340 29 Mar 19 nicklas 137     var errmsg = box.checkNofBoxes(target.value);
5340 29 Mar 19 nicklas 138     if (errmsg)
4550 30 Jun 17 nicklas 139     {
5340 29 Mar 19 nicklas 140       Wizard.setInputStatus(target.id, 'invalid', errmsg);
4550 30 Jun 17 nicklas 141       return;
4550 30 Jun 17 nicklas 142     }
5340 29 Mar 19 nicklas 143     Wizard.setInputStatus(target.id, 'valid');
5340 29 Mar 19 nicklas 144     nofBoxesIsValid[target.id] = true;
4550 30 Jun 17 nicklas 145   }
4550 30 Jun 17 nicklas 146
5340 29 Mar 19 nicklas 147   box.checkNofBoxes = function(nofBoxes)
5340 29 Mar 19 nicklas 148   {
5340 29 Mar 19 nicklas 149     if (nofBoxes == '') return 'Missing';
5340 29 Mar 19 nicklas 150     if (parseInt(nofBoxes) < 0) return 'Must not be less than 0';
5340 29 Mar 19 nicklas 151     if (parseInt(nofBoxes) > 99) return 'Must not be greater than 99';
5340 29 Mar 19 nicklas 152     return null;
5340 29 Mar 19 nicklas 153   }
5340 29 Mar 19 nicklas 154   
4550 30 Jun 17 nicklas 155   box.initializeStep2 = function()
4550 30 Jun 17 nicklas 156   {
4550 30 Jun 17 nicklas 157     var frm = document.forms['reggie'];
5340 29 Mar 19 nicklas 158     var nofSpBoxes = parseInt(frm.numberOfSpBoxes.value);
5340 29 Mar 19 nicklas 159     var nofPSpBoxes = parseInt(frm.numberOfPSpBoxes.value);
7138 26 Apr 23 nicklas 160     var nofESpBoxes = parseInt(frm.numberOfESpBoxes.value);
4550 30 Jun 17 nicklas 161     
7138 26 Apr 23 nicklas 162     if (nofSpBoxes == 0 && nofPSpBoxes == 0 && nofESpBoxes == 0)
5340 29 Mar 19 nicklas 163     {
5340 29 Mar 19 nicklas 164       Wizard.setFatalError('No new boxes to create!');
5340 29 Mar 19 nicklas 165       return;
5340 29 Mar 19 nicklas 166     }
4550 30 Jun 17 nicklas 167     
7138 26 Apr 23 nicklas 168     var endNo = Math.max(nofSpBoxes+nofESpBoxes, nofPSpBoxes);
7138 26 Apr 23 nicklas 169     var baseSpNo = 1+(lastSpBox ? parseInt(lastSpBox.name.substring(2)) : 0);
7138 26 Apr 23 nicklas 170     var basePSpNo = 1+(lastPSpBox ? parseInt(lastPSpBox.name.substring(3)) : 0);
7138 26 Apr 23 nicklas 171     var baseESpNo = 1+(lastESpBox ? parseInt(lastESpBox.name.substring(4)) : 0);
5340 29 Mar 19 nicklas 172     
4550 30 Jun 17 nicklas 173     var html = '';
7138 26 Apr 23 nicklas 174     var SpBoxPrefixes = ['Sp', 'PSp', 'Lys', 'RNA', 'DNA', 'FT'];
7138 26 Apr 23 nicklas 175     var ESpBoxPrefixes = ['E-Sp', 'PSp', 'E-Lys', 'E-RNA', 'E-DNA', 'E-FT'];
5340 29 Mar 19 nicklas 176
4550 30 Jun 17 nicklas 177     newBoxes = [];
7138 26 Apr 23 nicklas 178     var createdSpBoxes = 0;
7138 26 Apr 23 nicklas 179     var createdPSpBoxes = 0;
7138 26 Apr 23 nicklas 180     var createdESpBoxes = 0;
7138 26 Apr 23 nicklas 181     var maxPrefix = SpBoxPrefixes.length-1;
5340 29 Mar 19 nicklas 182     for (var index = 1; index <= endNo; index++)
7138 26 Apr 23 nicklas 183     {      
4550 30 Jun 17 nicklas 184       html += '<tr>';
7138 26 Apr 23 nicklas 185       for (var prefixNo = 0; prefixNo < SpBoxPrefixes.length; prefixNo++)
4550 30 Jun 17 nicklas 186       {
7138 26 Apr 23 nicklas 187         var boxName = null;
7138 26 Apr 23 nicklas 188         if (prefixNo == 1)
5340 29 Mar 19 nicklas 189         {
7138 26 Apr 23 nicklas 190           if (createdPSpBoxes < nofPSpBoxes)
7138 26 Apr 23 nicklas 191           {
7138 26 Apr 23 nicklas 192             boxName = SpBoxPrefixes[prefixNo]+box.zeroPad(createdPSpBoxes+basePSpNo);
7138 26 Apr 23 nicklas 193             createdPSpBoxes++;
7138 26 Apr 23 nicklas 194           }
7138 26 Apr 23 nicklas 195         }
7138 26 Apr 23 nicklas 196         else
7138 26 Apr 23 nicklas 197         {
7138 26 Apr 23 nicklas 198           if (createdSpBoxes < nofSpBoxes)
7138 26 Apr 23 nicklas 199           {
7138 26 Apr 23 nicklas 200             boxName = SpBoxPrefixes[prefixNo]+box.zeroPad(createdSpBoxes+baseSpNo);
7138 26 Apr 23 nicklas 201             if (prefixNo == maxPrefix) createdSpBoxes++;
7138 26 Apr 23 nicklas 202           }
7138 26 Apr 23 nicklas 203           else if (createdESpBoxes < nofESpBoxes)
7138 26 Apr 23 nicklas 204           {
7138 26 Apr 23 nicklas 205             boxName = ESpBoxPrefixes[prefixNo]+box.zeroPad(createdESpBoxes+baseESpNo);
7138 26 Apr 23 nicklas 206             if (prefixNo == maxPrefix) createdESpBoxes++;
7138 26 Apr 23 nicklas 207           }
7138 26 Apr 23 nicklas 208         }
7138 26 Apr 23 nicklas 209         if (boxName != null)
7138 26 Apr 23 nicklas 210         {
5340 29 Mar 19 nicklas 211           newBoxes[newBoxes.length] = boxName;
5340 29 Mar 19 nicklas 212           html += '<td>'+boxName+'</td>';
5340 29 Mar 19 nicklas 213         }
5340 29 Mar 19 nicklas 214         else
5340 29 Mar 19 nicklas 215         {
5340 29 Mar 19 nicklas 216           html += '<td></td>';
7138 26 Apr 23 nicklas 217         }        
4550 30 Jun 17 nicklas 218       }
4550 30 Jun 17 nicklas 219       html += '</tr>';
4550 30 Jun 17 nicklas 220     }
4550 30 Jun 17 nicklas 221     Doc.element('new-boxes').innerHTML = html;
4550 30 Jun 17 nicklas 222     
4550 30 Jun 17 nicklas 223     Wizard.setCurrentStep(2);
4550 30 Jun 17 nicklas 224     Doc.show('goregister');
4550 30 Jun 17 nicklas 225     Doc.show('gocancel');
4550 30 Jun 17 nicklas 226     Doc.show('godownload');
4550 30 Jun 17 nicklas 227     Wizard.showGoNextConfirmation(true, 'I have downloaded the label file');
4550 30 Jun 17 nicklas 228   }
4550 30 Jun 17 nicklas 229   
5340 29 Mar 19 nicklas 230   box.zeroPad = function(boxNo)
5340 29 Mar 19 nicklas 231   {
5340 29 Mar 19 nicklas 232     var zeroPad = '';
5340 29 Mar 19 nicklas 233     if (boxNo < 10) zeroPad = '00';
5340 29 Mar 19 nicklas 234     else if (boxNo < 100) zeroPad = '0';
5340 29 Mar 19 nicklas 235     return zeroPad+boxNo;
5340 29 Mar 19 nicklas 236   }
5340 29 Mar 19 nicklas 237   
5308 15 Feb 19 nicklas 238   box.downloadLabels = function(event)
4550 30 Jun 17 nicklas 239   {
5308 15 Feb 19 nicklas 240     var format = Data.get(event.currentTarget, 'format');
4550 30 Jun 17 nicklas 241     Wizard.hideGoNextConfirmation();
4550 30 Jun 17 nicklas 242     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
4550 30 Jun 17 nicklas 243     url += '&cmd=GetStorageBoxLabels';
4550 30 Jun 17 nicklas 244     url += '&boxes='+newBoxes.join(',');
5308 15 Feb 19 nicklas 245     url += '&format='+encodeURIComponent(format);
4550 30 Jun 17 nicklas 246     window.open(url);
4550 30 Jun 17 nicklas 247   }
4550 30 Jun 17 nicklas 248
4550 30 Jun 17 nicklas 249   box.submit = function()
4550 30 Jun 17 nicklas 250   {
4550 30 Jun 17 nicklas 251     var frm = document.forms['reggie'];
4550 30 Jun 17 nicklas 252     
4550 30 Jun 17 nicklas 253     var submitInfo = {};
5340 29 Mar 19 nicklas 254     
5340 29 Mar 19 nicklas 255     if (lastSpBox) submitInfo.lastSpBox = lastSpBox.id;
5340 29 Mar 19 nicklas 256     submitInfo.nofSpBoxes = parseInt(frm.numberOfSpBoxes.value);
4550 30 Jun 17 nicklas 257
5340 29 Mar 19 nicklas 258     if (lastPSpBox) submitInfo.lastPSpBox = lastPSpBox.id;
5340 29 Mar 19 nicklas 259     submitInfo.nofPSpBoxes = parseInt(frm.numberOfPSpBoxes.value);
7138 26 Apr 23 nicklas 260
7138 26 Apr 23 nicklas 261     if (lastESpBox) submitInfo.lastESpBox = lastESpBox.id;
7138 26 Apr 23 nicklas 262     submitInfo.nofESpBoxes = parseInt(frm.numberOfESpBoxes.value);
7188 22 May 23 nicklas 263     submitInfo.freezer = parseInt(frm.freezer.value);
5340 29 Mar 19 nicklas 264     
4550 30 Jun 17 nicklas 265     var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId();
4550 30 Jun 17 nicklas 266     url += '&cmd=CreateStorageBoxes';
4550 30 Jun 17 nicklas 267     Wizard.showLoadingAnimation('Performing registration...');
4550 30 Jun 17 nicklas 268     Wizard.asyncJsonRequest(url, box.submissionResults, 'POST', JSON.stringify(submitInfo));
4550 30 Jun 17 nicklas 269   }
4550 30 Jun 17 nicklas 270   
4550 30 Jun 17 nicklas 271   box.submissionResults = function(response)
4550 30 Jun 17 nicklas 272   {
4550 30 Jun 17 nicklas 273     Wizard.showFinalMessage(response.messages);
4550 30 Jun 17 nicklas 274     Doc.show('gorestart');
4550 30 Jun 17 nicklas 275   }
4550 30 Jun 17 nicklas 276
4550 30 Jun 17 nicklas 277
4550 30 Jun 17 nicklas 278   return box;
4550 30 Jun 17 nicklas 279 }();
4550 30 Jun 17 nicklas 280
4550 30 Jun 17 nicklas 281 Doc.onLoad(StorageBox.initPage);
4550 30 Jun 17 nicklas 282