extensions/net.sf.basedb.meludi/trunk/resources/libprep/libprep_dilution_protocol.js

Code
Comments
Other
Rev Date Author Line
3590 11 Nov 15 olle 1 var LibPrepDilutionProtocol = function()
3590 11 Nov 15 olle 2 {
3590 11 Nov 15 olle 3   var lpdp = {};
3590 11 Nov 15 olle 4   var debug = 0;
3590 11 Nov 15 olle 5   
3590 11 Nov 15 olle 6   lpdp.TITLE = 'MeLuDI';
3684 08 Jan 16 olle 7   var MINIMAL_DNA_VOLUME = 1.0; //µl
3590 11 Nov 15 olle 8   var COLORS = ['blue', 'green', 'yellow', 'red'];
3590 11 Nov 15 olle 9   var nextColor = 0;
4129 26 Sep 16 olle 10   var projectName;
3590 11 Nov 15 olle 11   var meludiVersion;
3590 11 Nov 15 olle 12
3590 11 Nov 15 olle 13   // Page initialization
3590 11 Nov 15 olle 14   lpdp.initPage = function()
3590 11 Nov 15 olle 15   {
3590 11 Nov 15 olle 16     Buttons.addClickHandler('print-button', Wizard.goPrint);
3590 11 Nov 15 olle 17     var numItems = Data.get('page-data', 'numitems');
3590 11 Nov 15 olle 18     var submitInfoJsonStr = Data.get('page-data', 'submitinfo');
4129 26 Sep 16 olle 19     projectName = Data.get('page-data', 'projectname');
3590 11 Nov 15 olle 20     meludiVersion = Data.get('page-data', 'meludiversion');
3590 11 Nov 15 olle 21     lpdp.initializeProtocol(submitInfoJsonStr);
3590 11 Nov 15 olle 22   }
3590 11 Nov 15 olle 23
3590 11 Nov 15 olle 24   lpdp.initializeProtocol = function(submitInfoJsonStr)
3590 11 Nov 15 olle 25   {
3590 11 Nov 15 olle 26     var frm = document.forms['meludi'];
3590 11 Nov 15 olle 27
3590 11 Nov 15 olle 28     var submitInfo = JSON.parse(submitInfoJsonStr);
3590 11 Nov 15 olle 29     var docMode = submitInfo.docMode;
3590 11 Nov 15 olle 30     var itemInfo = submitInfo.items;
3590 11 Nov 15 olle 31     var startPlateName = submitInfo.startPlateName;
3590 11 Nov 15 olle 32     var dilutionProtocolDate = submitInfo.dilutionProtocolDate;
3590 11 Nov 15 olle 33
3590 11 Nov 15 olle 34     //var protocolVersionNo = submitInfo.protocolVersionNo;
3590 11 Nov 15 olle 35     var protocolVersionNo = '1.0';
3590 11 Nov 15 olle 36     var protocolPreviewFlag = submitInfo.protocolPreviewFlag;
3590 11 Nov 15 olle 37     var numQiacubeItems = itemInfo.length;
3590 11 Nov 15 olle 38
3590 11 Nov 15 olle 39     // Header data
3590 11 Nov 15 olle 40     var docModeText = 'Protocol';
3652 08 Dec 15 olle 41     if (docMode == null || docMode == '')
3652 08 Dec 15 olle 42     {
3652 08 Dec 15 olle 43       docMode = 'protocol';
3652 08 Dec 15 olle 44     }
3590 11 Nov 15 olle 45     if (docMode && docMode == 'report')
3590 11 Nov 15 olle 46     {
3590 11 Nov 15 olle 47       docModeText = 'Report';
3590 11 Nov 15 olle 48     }
3590 11 Nov 15 olle 49     if (protocolVersionNo == null || protocolVersionNo == '')
3590 11 Nov 15 olle 50     {
3590 11 Nov 15 olle 51       protocolVersionNo = '?';
3590 11 Nov 15 olle 52     }
3590 11 Nov 15 olle 53     var protocolPreviewText = '';
3590 11 Nov 15 olle 54     if (protocolPreviewFlag != null && protocolPreviewFlag == 'true')
3590 11 Nov 15 olle 55     {
3590 11 Nov 15 olle 56       protocolPreviewText = ' <i>(preview)</i>';
3590 11 Nov 15 olle 57     }
3590 11 Nov 15 olle 58     var headerText = 'Dilution ' + docModeText + ' for library preparation v' + protocolVersionNo + protocolPreviewText + ' <span class="meludi">' + LibPrepDilutionProtocol.TITLE + ' ' + meludiVersion + '</span>';
3652 08 Dec 15 olle 59     var protocolDateNameText = 'Dilution ' + docMode + ' date';
3590 11 Nov 15 olle 60     Doc.element('libraryPreparationDilutionProtocolHeader').innerHTML = headerText;
3652 08 Dec 15 olle 61     Doc.element('protocolDateName').innerHTML = protocolDateNameText;
3590 11 Nov 15 olle 62
3590 11 Nov 15 olle 63     Doc.element('startplateid').innerHTML = Strings.encodeTags(startPlateName);
3590 11 Nov 15 olle 64     Doc.element('dilutionProtocolDate').innerHTML = Strings.encodeTags(dilutionProtocolDate);
4129 26 Sep 16 olle 65     Doc.element('projectnameid').innerHTML = Strings.encodeTags(projectName);
3590 11 Nov 15 olle 66
3590 11 Nov 15 olle 67     // Item data
3590 11 Nov 15 olle 68     var accumItemNo = 0;
3590 11 Nov 15 olle 69     accumItemNo = tableRowsForItems(accumItemNo, itemInfo, 'Item', 'item');
3590 11 Nov 15 olle 70
3590 11 Nov 15 olle 71     Doc.show('all-protocol');
3590 11 Nov 15 olle 72   }
3590 11 Nov 15 olle 73   
3590 11 Nov 15 olle 74   function tableRowsForItems(
3590 11 Nov 15 olle 75     accumItemNo,
3590 11 Nov 15 olle 76     itemJsonArr,
3590 11 Nov 15 olle 77     itemType,
3590 11 Nov 15 olle 78     itemTypeVarName)
3590 11 Nov 15 olle 79   {
3590 11 Nov 15 olle 80     // Table item row
3590 11 Nov 15 olle 81     var html = '';
3590 11 Nov 15 olle 82     if (itemJsonArr && itemJsonArr.length > 0)
3590 11 Nov 15 olle 83     {
3590 11 Nov 15 olle 84       for (var i = 0; i < itemJsonArr.length; i++)
3590 11 Nov 15 olle 85       {
3590 11 Nov 15 olle 86         var item = itemJsonArr[i];
3590 11 Nov 15 olle 87         var dnaStorageBox = '-';
3590 11 Nov 15 olle 88         var fpaPos = '-';
3590 11 Nov 15 olle 89         var fpbPos = '-';
3590 11 Nov 15 olle 90         var dnaConc = null;
3590 11 Nov 15 olle 91         var dnaDeltaCt = null;
3590 11 Nov 15 olle 92         var dilutionFactor = null;
3590 11 Nov 15 olle 93         var volAliquotSolution = null;
3590 11 Nov 15 olle 94         var volDnaInSolution = null;
3590 11 Nov 15 olle 95         var waterInSolution = null;
3590 11 Nov 15 olle 96         var solutionVolume = null;
3590 11 Nov 15 olle 97         var dnaComment = null;
3590 11 Nov 15 olle 98         var comment = null;
3590 11 Nov 15 olle 99         if (item)
3590 11 Nov 15 olle 100         {
3590 11 Nov 15 olle 101           // DNA extract from specimen
3590 11 Nov 15 olle 102           var dna = item.info;
3590 11 Nov 15 olle 103           if (dna)
3590 11 Nov 15 olle 104           {
3667 15 Dec 15 olle 105             if (dna.origBioWell)
3590 11 Nov 15 olle 106             {
3667 15 Dec 15 olle 107               dnaStorageBox = Strings.encodeTags(dna.origBioWell.bioPlate.name + '[' + dna.origBioWell.location + ']');
3590 11 Nov 15 olle 108             }
3590 11 Nov 15 olle 109             fpaPos = item.fpaPos;
3590 11 Nov 15 olle 110             fpbPos = item.fpbPos;
3667 15 Dec 15 olle 111             dnaConc = dna.origQubitConc;
3667 15 Dec 15 olle 112             dnaDeltaCt = dna.origDeltaCt;
3679 18 Dec 15 olle 113             dnaComment = dna.origDescription;
3590 11 Nov 15 olle 114             dilutionFactor = dna.dilutionFactor;
3590 11 Nov 15 olle 115             //volAliquotSolution = dna.volAliquotSolution;
3590 11 Nov 15 olle 116             volDnaInSolution = 2 * dna.volDnaInSolution;
3590 11 Nov 15 olle 117             waterInSolution = 2 * dna.waterInSolution;
3590 11 Nov 15 olle 118             solutionVolume = 2 * dna.volAliquotSolution;
3590 11 Nov 15 olle 119           }
3590 11 Nov 15 olle 120
3590 11 Nov 15 olle 121           // Input DNA item storage location should be displayed in the DNA extract storage location column
3667 15 Dec 15 olle 122           if (lpdp.isDna(item) && item.origBioWell != null)
3590 11 Nov 15 olle 123           {
3667 15 Dec 15 olle 124             dnaStorageBox = Strings.encodeTags(item.origBioWell.bioPlate.name + '[' + item.origBioWell.location + ']');
3590 11 Nov 15 olle 125           }
3590 11 Nov 15 olle 126           comment = item.comment;
3590 11 Nov 15 olle 127         }
3590 11 Nov 15 olle 128         if (item.operatorDeliveryComment)
3590 11 Nov 15 olle 129         {
3590 11 Nov 15 olle 130           comment = item.operatorDeliveryComment;
3590 11 Nov 15 olle 131         }
3590 11 Nov 15 olle 132         if (dnaComment)
3590 11 Nov 15 olle 133         {
3590 11 Nov 15 olle 134           if (comment)
3590 11 Nov 15 olle 135           {
3590 11 Nov 15 olle 136             comment += ' ';
3590 11 Nov 15 olle 137           }
3590 11 Nov 15 olle 138           else
3590 11 Nov 15 olle 139           {
3590 11 Nov 15 olle 140             comment = '';
3590 11 Nov 15 olle 141           }
3590 11 Nov 15 olle 142           comment += 'DNA: ' + dnaComment;
3590 11 Nov 15 olle 143         }
3590 11 Nov 15 olle 144         var waterVolumeStr = '-';
3590 11 Nov 15 olle 145         if (waterInSolution > 0)
3590 11 Nov 15 olle 146         {
3590 11 Nov 15 olle 147           waterVolumeStr = lpdp.encodeFloatTags(Numbers.formatNumber(waterInSolution, 2));
3590 11 Nov 15 olle 148         }
3590 11 Nov 15 olle 149         // Insert item data in table columns
3667 15 Dec 15 olle 150         //Doc.element('extract.'+accumItemNo).innerHTML = Strings.encodeTags(item.info.name);
3667 15 Dec 15 olle 151         Doc.element('extract.'+accumItemNo).innerHTML = Strings.encodeTags(item.info.origName);
3590 11 Nov 15 olle 152         Doc.element('dnaStorageBox.'+accumItemNo).innerHTML = Strings.encodeTags(dnaStorageBox);
3590 11 Nov 15 olle 153         Doc.element('fpaPos.'+accumItemNo).innerHTML = Strings.encodeTags(fpaPos);
3590 11 Nov 15 olle 154         Doc.element('fpbPos.'+accumItemNo).innerHTML = Strings.encodeTags(fpbPos);
3684 08 Jan 16 olle 155         if (dna.volDnaInSolution < MINIMAL_DNA_VOLUME)
3684 08 Jan 16 olle 156         {
3684 08 Jan 16 olle 157           Doc.element('dnaVolume.'+accumItemNo).innerHTML = '<span class="lowvolume">' + lpdp.encodeFloatTags(Numbers.formatNumber(volDnaInSolution, 2)) + '</span>';
3684 08 Jan 16 olle 158           Doc.element('waterVolume.'+accumItemNo).innerHTML = '<span class="lowvolume">' + Strings.encodeTags(waterVolumeStr) + '</span>';
3684 08 Jan 16 olle 159           Doc.element('solutionVolume.'+accumItemNo).innerHTML = '<span class="lowvolume">' + lpdp.encodeFloatTags(Numbers.formatNumber(solutionVolume, 2)) + '</span>';
3684 08 Jan 16 olle 160         }
3684 08 Jan 16 olle 161         else
3684 08 Jan 16 olle 162         {
3684 08 Jan 16 olle 163           Doc.element('dnaVolume.'+accumItemNo).innerHTML = lpdp.encodeFloatTags(Numbers.formatNumber(volDnaInSolution, 2));
3684 08 Jan 16 olle 164           Doc.element('waterVolume.'+accumItemNo).innerHTML = Strings.encodeTags(waterVolumeStr);
3684 08 Jan 16 olle 165           Doc.element('solutionVolume.'+accumItemNo).innerHTML = lpdp.encodeFloatTags(Numbers.formatNumber(solutionVolume, 2));
3684 08 Jan 16 olle 166         }
3590 11 Nov 15 olle 167         Doc.element('dilutionFactor.'+accumItemNo).innerHTML = lpdp.encodeFloatTags(Numbers.formatNumber(dilutionFactor, 4));
3590 11 Nov 15 olle 168         Doc.element('deltaCt.'+accumItemNo).innerHTML = lpdp.encodeFloatTags(Numbers.formatNumber(dnaDeltaCt, 2));
3590 11 Nov 15 olle 169         Doc.element('dnaConc.'+accumItemNo).innerHTML = lpdp.encodeFloatTags(Numbers.formatNumber(dnaConc, 2));
3590 11 Nov 15 olle 170         Doc.element('remark.'+accumItemNo).innerHTML = Strings.encodeTags(comment);
3590 11 Nov 15 olle 171         
3590 11 Nov 15 olle 172         // Increment accumulated item number
3590 11 Nov 15 olle 173         accumItemNo++;
3590 11 Nov 15 olle 174       }
3590 11 Nov 15 olle 175     }
3590 11 Nov 15 olle 176     return accumItemNo;
3590 11 Nov 15 olle 177   }
3590 11 Nov 15 olle 178
3590 11 Nov 15 olle 179   lpdp.isDna = function(item)
3590 11 Nov 15 olle 180   {
3590 11 Nov 15 olle 181     var isDna = false;
3590 11 Nov 15 olle 182     if (item != null)
3590 11 Nov 15 olle 183     {
3590 11 Nov 15 olle 184       var name = item.name;
3590 11 Nov 15 olle 185       if (name != null)
3590 11 Nov 15 olle 186       {
3590 11 Nov 15 olle 187         // Check if item name ends with ".d"
3590 11 Nov 15 olle 188         if (name.indexOf('.d') == (name.length - 2))
3590 11 Nov 15 olle 189         {
3590 11 Nov 15 olle 190           isDna = true;
3590 11 Nov 15 olle 191         }
3590 11 Nov 15 olle 192       }
3590 11 Nov 15 olle 193     }
3590 11 Nov 15 olle 194     return isDna;
3590 11 Nov 15 olle 195   }
3590 11 Nov 15 olle 196
3590 11 Nov 15 olle 197   lpdp.encodeFloatTags = function(value)
3590 11 Nov 15 olle 198   {
3590 11 Nov 15 olle 199     var encodedValue = value;
3590 11 Nov 15 olle 200     if (!value)
3590 11 Nov 15 olle 201     {
3590 11 Nov 15 olle 202       encodedValue = Strings.encodeTags(value);
3590 11 Nov 15 olle 203     }
3590 11 Nov 15 olle 204     return encodedValue;
3590 11 Nov 15 olle 205   }
3590 11 Nov 15 olle 206
3590 11 Nov 15 olle 207   // A biowell as plate name
3590 11 Nov 15 olle 208   lpdp.asBioPlateName = function(well)
3590 11 Nov 15 olle 209   {
3590 11 Nov 15 olle 210     if (!well) return '';
3590 11 Nov 15 olle 211     var plate = well.bioPlate;
3590 11 Nov 15 olle 212     if (!plate) return '';
3590 11 Nov 15 olle 213     var text = plate.name;
3590 11 Nov 15 olle 214     return text;
3590 11 Nov 15 olle 215   }
3590 11 Nov 15 olle 216
3590 11 Nov 15 olle 217   // A biowell as the location
3590 11 Nov 15 olle 218   lpdp.asPureBioPlateLocation = function(well)
3590 11 Nov 15 olle 219   {
3590 11 Nov 15 olle 220     if (!well) return '';
3590 11 Nov 15 olle 221     var plate = well.bioPlate;
3590 11 Nov 15 olle 222     var text = well.location;
3590 11 Nov 15 olle 223     if (plate.storage)
3590 11 Nov 15 olle 224     {
3590 11 Nov 15 olle 225       var storage = plate.storage;
3590 11 Nov 15 olle 226       var tmp = [];
3590 11 Nov 15 olle 227       if (storage.name) tmp[tmp.length] = storage.name;
3590 11 Nov 15 olle 228       if (storage.section) tmp[tmp.length] = 'section: ' +storage.section;
3590 11 Nov 15 olle 229       if (storage.tray) tmp[tmp.length] = 'tray: ' +storage.tray;
3590 11 Nov 15 olle 230       if (storage.position) tmp[tmp.length] = 'position: ' +storage.position;
3590 11 Nov 15 olle 231       text = text + ' ' + tmp.join('; ');
3590 11 Nov 15 olle 232     }
3590 11 Nov 15 olle 233     return text;
3590 11 Nov 15 olle 234   }
3590 11 Nov 15 olle 235
3590 11 Nov 15 olle 236   return lpdp;
3590 11 Nov 15 olle 237 }();
3590 11 Nov 15 olle 238
3590 11 Nov 15 olle 239 Doc.onLoad(LibPrepDilutionProtocol.initPage);
3590 11 Nov 15 olle 240