3502 |
22 Sep 15 |
olle |
var ExtractionStartListRemoval = function() |
3502 |
22 Sep 15 |
olle |
2 |
{ |
3502 |
22 Sep 15 |
olle |
var exreg = {}; |
3502 |
22 Sep 15 |
olle |
var debug = 0; |
3502 |
22 Sep 15 |
olle |
5 |
|
3502 |
22 Sep 15 |
olle |
var extraItemsList = []; |
3502 |
22 Sep 15 |
olle |
var qiacubeSortedPrefixes = 'BCADEFGHIJKLMNOPQRSTUVWXYZ'; |
3502 |
22 Sep 15 |
olle |
var qiacubeDateIsAfterIsolationDate = true; |
3502 |
22 Sep 15 |
olle |
var qiacubeRunNoIsValid = false; |
3502 |
22 Sep 15 |
olle |
var qiacubePositionsAreValid = false; |
3502 |
22 Sep 15 |
olle |
var counterBalanceInfoRow = false; |
3502 |
22 Sep 15 |
olle |
var createdRna = []; |
3502 |
22 Sep 15 |
olle |
13 |
|
3502 |
22 Sep 15 |
olle |
// Page initialization |
3502 |
22 Sep 15 |
olle |
exreg.initPage = function() |
3502 |
22 Sep 15 |
olle |
16 |
{ |
3502 |
22 Sep 15 |
olle |
// Step 1 |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('step-1', 'wizard-validate', exreg.validateStep1); |
3502 |
22 Sep 15 |
olle |
19 |
|
3502 |
22 Sep 15 |
olle |
// Step 2 |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('step-2', 'wizard-initialize', exreg.initializeStep2); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('step-2', 'wizard-validate', exreg.validateStep2); |
3502 |
22 Sep 15 |
olle |
23 |
|
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('isolationDate', 'change', Wizard.validateDate); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('qiacubeDate', 'change', Wizard.validateDate); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('isolationDate', 'change', exreg.qiacubeDateOnChange); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('qiacubeDate', 'change', exreg.qiacubeDateOnChange); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('qiacubeRunNo', 'change', exreg.qiacubeRunNoOnChange); |
3502 |
22 Sep 15 |
olle |
29 |
|
3502 |
22 Sep 15 |
olle |
// Step 3 |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('step-3', 'wizard-initialize', exreg.initializeStep3); |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('step-3', 'wizard-validate', exreg.validateStep3); |
3502 |
22 Sep 15 |
olle |
33 |
|
3502 |
22 Sep 15 |
olle |
// Navigation |
3502 |
22 Sep 15 |
olle |
Buttons.addClickHandler('gocancel', Wizard.cancelWizard); |
3502 |
22 Sep 15 |
olle |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
3502 |
22 Sep 15 |
olle |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
3502 |
22 Sep 15 |
olle |
Buttons.addClickHandler('goregister', Wizard.goRegister); |
3502 |
22 Sep 15 |
olle |
39 |
|
3502 |
22 Sep 15 |
olle |
// Final registration |
3502 |
22 Sep 15 |
olle |
Events.addEventHandler('wizard', 'wizard-submit', exreg.submit); |
3502 |
22 Sep 15 |
olle |
42 |
|
3502 |
22 Sep 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3502 |
22 Sep 15 |
olle |
url += '&cmd=GetUnprocessedStartItemLists'; |
3502 |
22 Sep 15 |
olle |
url += '&orderDesc=true'; |
3502 |
22 Sep 15 |
olle |
Wizard.showLoadingAnimation('Loading unprocessed items...'); |
3502 |
22 Sep 15 |
olle |
Wizard.asyncJsonRequest(url, exreg.initializeStep1); |
3502 |
22 Sep 15 |
olle |
48 |
} |
3502 |
22 Sep 15 |
olle |
49 |
|
3502 |
22 Sep 15 |
olle |
exreg.initializeStep1 = function(response) |
3502 |
22 Sep 15 |
olle |
51 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var itemLists = response.itemLists; |
3502 |
22 Sep 15 |
olle |
54 |
|
3502 |
22 Sep 15 |
olle |
var startList = frm.startList; |
3502 |
22 Sep 15 |
olle |
if (itemLists.length > 0) |
3502 |
22 Sep 15 |
olle |
57 |
{ |
3502 |
22 Sep 15 |
olle |
for (var i=0; i < itemLists.length; i++) |
3502 |
22 Sep 15 |
olle |
59 |
{ |
3502 |
22 Sep 15 |
olle |
var itemList = itemLists[i]; |
3502 |
22 Sep 15 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(itemList.name); |
3502 |
22 Sep 15 |
olle |
if (itemList.sourceItemNames) |
3502 |
22 Sep 15 |
olle |
63 |
{ |
3502 |
22 Sep 15 |
olle |
name += ' -- ('; |
3502 |
22 Sep 15 |
olle |
name += itemList.numMeludiItems; |
3502 |
22 Sep 15 |
olle |
name += ' + ' + itemList.numExtraItems; |
3502 |
22 Sep 15 |
olle |
name += ')'; |
3502 |
22 Sep 15 |
olle |
68 |
} |
3502 |
22 Sep 15 |
olle |
if (itemList.extractionDate) |
3502 |
22 Sep 15 |
olle |
70 |
{ |
3502 |
22 Sep 15 |
olle |
name += ' -- [' + exreg.asDate(itemList.extractionDate) + ']'; |
3502 |
22 Sep 15 |
olle |
72 |
} |
3502 |
22 Sep 15 |
olle |
var selected = i == (itemLists.length - 1); |
3502 |
22 Sep 15 |
olle |
var option = new Option(name, itemList.id, selected, selected); |
3502 |
22 Sep 15 |
olle |
option.itemList = itemList; |
3502 |
22 Sep 15 |
olle |
startList.options[startList.length] = option; |
3502 |
22 Sep 15 |
olle |
77 |
} |
3502 |
22 Sep 15 |
olle |
startList.options[0].selected = true; |
3502 |
22 Sep 15 |
olle |
79 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
81 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setFatalError('No start lists available.'); |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
84 |
} |
3502 |
22 Sep 15 |
olle |
Doc.show('step-1'); |
3502 |
22 Sep 15 |
olle |
Doc.show('gonext'); |
3502 |
22 Sep 15 |
olle |
Doc.hide('extractSourceItems'); |
3502 |
22 Sep 15 |
olle |
88 |
} |
3502 |
22 Sep 15 |
olle |
89 |
|
3502 |
22 Sep 15 |
olle |
exreg.validateStep1 = function(event) |
3502 |
22 Sep 15 |
olle |
91 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var startList = null; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3502 |
22 Sep 15 |
olle |
95 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.startList[i].selected) |
3502 |
22 Sep 15 |
olle |
97 |
{ |
3502 |
22 Sep 15 |
olle |
startList = frm.startList[i]; |
3502 |
22 Sep 15 |
olle |
99 |
} |
3502 |
22 Sep 15 |
olle |
100 |
} |
3502 |
22 Sep 15 |
olle |
if (startList == null) |
3502 |
22 Sep 15 |
olle |
102 |
{ |
3502 |
22 Sep 15 |
olle |
event.preventDefault(); |
3502 |
22 Sep 15 |
olle |
104 |
} |
3502 |
22 Sep 15 |
olle |
105 |
} |
3502 |
22 Sep 15 |
olle |
106 |
|
3502 |
22 Sep 15 |
olle |
exreg.initializeStep2 = function() |
3502 |
22 Sep 15 |
olle |
108 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var startItemList = null; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3502 |
22 Sep 15 |
olle |
112 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.startList[i].selected) |
3502 |
22 Sep 15 |
olle |
114 |
{ |
3502 |
22 Sep 15 |
olle |
startItemList = frm.startList[i]; |
3502 |
22 Sep 15 |
olle |
116 |
} |
3502 |
22 Sep 15 |
olle |
117 |
} |
3502 |
22 Sep 15 |
olle |
if (startItemList == null) |
3502 |
22 Sep 15 |
olle |
119 |
{ |
3502 |
22 Sep 15 |
olle |
event.preventDefault(); |
3502 |
22 Sep 15 |
olle |
121 |
} |
3502 |
22 Sep 15 |
olle |
122 |
|
3502 |
22 Sep 15 |
olle |
frm.startList.disabled = true; |
3502 |
22 Sep 15 |
olle |
124 |
|
3502 |
22 Sep 15 |
olle |
Wizard.setCurrentStep(2); |
3502 |
22 Sep 15 |
olle |
Doc.show('gocancel'); |
3502 |
22 Sep 15 |
olle |
Doc.show('gonext'); |
3502 |
22 Sep 15 |
olle |
Doc.hide('extractionProtocolId'); |
3502 |
22 Sep 15 |
olle |
129 |
|
3502 |
22 Sep 15 |
olle |
frm.isolationDate.focus(); |
3502 |
22 Sep 15 |
olle |
Events.sendChangeEvent('isolationDate'); |
3502 |
22 Sep 15 |
olle |
Events.sendChangeEvent('qiacubeDate'); |
3502 |
22 Sep 15 |
olle |
133 |
|
3502 |
22 Sep 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3502 |
22 Sep 15 |
olle |
url += '&cmd=GetSourceItemListFromStartItemList'; |
3502 |
22 Sep 15 |
olle |
url += '&startItemListId='+startItemList.value; |
3502 |
22 Sep 15 |
olle |
Wizard.asyncJsonRequest(url, exreg.sourceItemListLoaded); |
3502 |
22 Sep 15 |
olle |
138 |
} |
3502 |
22 Sep 15 |
olle |
139 |
|
3502 |
22 Sep 15 |
olle |
exreg.sourceItemListLoaded = function(response) |
3502 |
22 Sep 15 |
olle |
141 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
143 |
|
3502 |
22 Sep 15 |
olle |
var startItemList = response.startitemlist; |
3502 |
22 Sep 15 |
olle |
var specimens = response.specimens; |
3502 |
22 Sep 15 |
olle |
var rnas = response.rnas; |
3502 |
22 Sep 15 |
olle |
var dnas = response.dnas; |
3502 |
22 Sep 15 |
olle |
var items = response.items; |
3502 |
22 Sep 15 |
olle |
var startListIsProcessed = false; |
3502 |
22 Sep 15 |
olle |
extraItemsList = response.extraitems; |
3502 |
22 Sep 15 |
olle |
151 |
|
3502 |
22 Sep 15 |
olle |
if (startItemList) |
3502 |
22 Sep 15 |
olle |
153 |
{ |
3502 |
22 Sep 15 |
olle |
// Extraction parameters |
3502 |
22 Sep 15 |
olle |
frm.startListName.value = startItemList.name; |
3502 |
22 Sep 15 |
olle |
// Extraction parameters |
3502 |
22 Sep 15 |
olle |
frm.isolationDate.value = startItemList.isolationDate; |
3502 |
22 Sep 15 |
olle |
frm.extractionOperator.value = startItemList.extractionOperator; |
3502 |
22 Sep 15 |
olle |
frm.extractionProtocolId.value = startItemList.extractionProtocolId; |
3502 |
22 Sep 15 |
olle |
frm.extractionProtocolName.value = startItemList.extractionProtocolName; |
3502 |
22 Sep 15 |
olle |
161 |
|
3502 |
22 Sep 15 |
olle |
// QIAcube parameters |
3502 |
22 Sep 15 |
olle |
frm.qiacubeDate.value = startItemList.qiacubeDate; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeOperator.value = startItemList.qiacubeOperator; |
3502 |
22 Sep 15 |
olle |
frm.qiacubePrimaryPrefix.value = startItemList.qiacubePrimaryPrefix; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeSecondaryPrefix.value = startItemList.qiacubeSecondaryPrefix; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeRunNo.value = startItemList.qiacubeRunNo; |
3502 |
22 Sep 15 |
olle |
168 |
|
3502 |
22 Sep 15 |
olle |
// Specimen reagents |
3502 |
22 Sep 15 |
olle |
frm.xyleneSpecimen.value = startItemList.xyleneSpecimen; |
3502 |
22 Sep 15 |
olle |
frm.etoh995Specimen.value = startItemList.etoh995Specimen; |
3502 |
22 Sep 15 |
olle |
frm.allPrepFfpeKit.value = startItemList.allPrepFfpeKit; |
3502 |
22 Sep 15 |
olle |
frm.bufferPkdSpecimen.value = startItemList.bufferPkdSpecimen; |
3502 |
22 Sep 15 |
olle |
frm.bufferAtlSpecimen.value = startItemList.bufferAtlSpecimen; |
3502 |
22 Sep 15 |
olle |
frm.proteinaseKSpecimen.value = startItemList.proteinaseKSpecimen; |
3502 |
22 Sep 15 |
olle |
frm.rnaseASpecimen.value = startItemList.rnaseASpecimen; |
3502 |
22 Sep 15 |
olle |
177 |
|
3502 |
22 Sep 15 |
olle |
// QIAcube reagents |
3502 |
22 Sep 15 |
olle |
frm.etoh995.value = startItemList.etoh995; |
3502 |
22 Sep 15 |
olle |
frm.bufferRlt.value = startItemList.bufferRlt; |
3502 |
22 Sep 15 |
olle |
frm.bufferFrn.value = startItemList.bufferFrn; |
3502 |
22 Sep 15 |
olle |
frm.bufferRpe.value = startItemList.bufferRpe; |
3502 |
22 Sep 15 |
olle |
frm.bufferAl.value = startItemList.bufferAl; |
3502 |
22 Sep 15 |
olle |
frm.bufferAw1.value = startItemList.bufferAw1; |
3502 |
22 Sep 15 |
olle |
frm.bufferAw2.value = startItemList.bufferAw2; |
3502 |
22 Sep 15 |
olle |
frm.bufferAte.value = startItemList.bufferAte; |
3502 |
22 Sep 15 |
olle |
frm.bufferRdd.value = startItemList.bufferRdd; |
3502 |
22 Sep 15 |
olle |
frm.rnaseFreeWater.value = startItemList.rnaseFreeWater; |
3502 |
22 Sep 15 |
olle |
frm.dnaseMix.value = startItemList.dnaseMix; |
3502 |
22 Sep 15 |
olle |
frm.rneasyMinEluteSpinColumn.value = startItemList.rneasyMinEluteSpinColumn; |
3502 |
22 Sep 15 |
olle |
frm.qiaampMinEluteSpinColumn.value = startItemList.qiaampMinEluteSpinColumn; |
3502 |
22 Sep 15 |
olle |
192 |
|
3502 |
22 Sep 15 |
olle |
// Quality control reagents |
3502 |
22 Sep 15 |
olle |
frm.kapaSybrFast.value = startItemList.kapaSybrFast; |
3502 |
22 Sep 15 |
olle |
frm.qualityControlPrimersQcpRgt.value = startItemList.qualityControlPrimersQcpRgt; |
3502 |
22 Sep 15 |
olle |
frm.qualityControlTemplateQct.value = startItemList.qualityControlTemplateQct; |
3502 |
22 Sep 15 |
olle |
frm.qubitDnaHighSens.value = startItemList.qubitDnaHighSens; |
3502 |
22 Sep 15 |
olle |
frm.qubitDnaBroadRange.value = startItemList.qubitDnaBroadRange; |
3502 |
22 Sep 15 |
olle |
199 |
|
3502 |
22 Sep 15 |
olle |
// Disable input fields |
3502 |
22 Sep 15 |
olle |
201 |
|
3502 |
22 Sep 15 |
olle |
// Extraction parameters |
3502 |
22 Sep 15 |
olle |
frm.startListName.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.isolationDate.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.extractionOperator.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.extractionProtocolName.disabled = true; |
3502 |
22 Sep 15 |
olle |
207 |
|
3502 |
22 Sep 15 |
olle |
// Specimen reagents |
3502 |
22 Sep 15 |
olle |
frm.xyleneSpecimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.etoh995Specimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.allPrepFfpeKit.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferPkdSpecimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferAtlSpecimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.proteinaseKSpecimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.rnaseASpecimen.disabled = true; |
3502 |
22 Sep 15 |
olle |
216 |
|
3502 |
22 Sep 15 |
olle |
// QIAcube parameters |
3502 |
22 Sep 15 |
olle |
frm.qiacubeDate.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeOperator.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qiacubePrimaryPrefix.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeSecondaryPrefix.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeRunNo.disabled = true; |
3502 |
22 Sep 15 |
olle |
223 |
|
3502 |
22 Sep 15 |
olle |
// QIAcube reagents |
3502 |
22 Sep 15 |
olle |
frm.etoh995.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferRlt.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferFrn.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferRpe.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferAl.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferAw1.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferAw2.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferAte.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.bufferRdd.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.rnaseFreeWater.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.dnaseMix.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.rneasyMinEluteSpinColumn.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qiaampMinEluteSpinColumn.disabled = true; |
3502 |
22 Sep 15 |
olle |
238 |
|
3502 |
22 Sep 15 |
olle |
// Quality control reagents |
3502 |
22 Sep 15 |
olle |
frm.kapaSybrFast.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qualityControlPrimersQcpRgt.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qualityControlTemplateQct.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qubitDnaHighSens.disabled = true; |
3502 |
22 Sep 15 |
olle |
frm.qubitDnaBroadRange.disabled = true; |
3502 |
22 Sep 15 |
olle |
245 |
} |
3502 |
22 Sep 15 |
olle |
246 |
|
3502 |
22 Sep 15 |
olle |
var sourceItemList = frm.extractSourceItems; |
3502 |
22 Sep 15 |
olle |
if (items.length > 0) |
3502 |
22 Sep 15 |
olle |
249 |
{ |
3502 |
22 Sep 15 |
olle |
var numItems = items.length; |
3502 |
22 Sep 15 |
olle |
for (var i=0; i < items.length; i++) |
3502 |
22 Sep 15 |
olle |
252 |
{ |
3502 |
22 Sep 15 |
olle |
var item = items[i]; |
3502 |
22 Sep 15 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(item.name); |
3502 |
22 Sep 15 |
olle |
if (item.bioWell) |
3502 |
22 Sep 15 |
olle |
256 |
{ |
3502 |
22 Sep 15 |
olle |
name += ' -- ' + Strings.encodeTags(item.bioWell.bioPlate.name + ' (' + item.bioWell.location+')'); |
3502 |
22 Sep 15 |
olle |
258 |
} |
3502 |
22 Sep 15 |
olle |
var selected = true; |
3502 |
22 Sep 15 |
olle |
// Identification of item via id works here as specimens and extracts |
3502 |
22 Sep 15 |
olle |
// are stored in the same database table using discriminators, and are |
3502 |
22 Sep 15 |
olle |
// therefore guaranteed to not have the same id value as another item in the table. |
3502 |
22 Sep 15 |
olle |
var option = new Option(name, item.id, selected, selected); |
3502 |
22 Sep 15 |
olle |
option.item = item; |
3502 |
22 Sep 15 |
olle |
sourceItemList.options[sourceItemList.length] = option; |
3502 |
22 Sep 15 |
olle |
266 |
} |
3502 |
22 Sep 15 |
olle |
267 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
269 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setFatalError('No items available for processing.'); |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
272 |
} |
3502 |
22 Sep 15 |
olle |
273 |
} |
3502 |
22 Sep 15 |
olle |
274 |
|
3502 |
22 Sep 15 |
olle |
exreg.qiacubeDateOnChange = function() |
3502 |
22 Sep 15 |
olle |
276 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
278 |
|
3502 |
22 Sep 15 |
olle |
var isolationDateIsValid = Wizard.isValid('isolationDate'); |
3502 |
22 Sep 15 |
olle |
var qiacubeDateIsValid = Wizard.isValid('qiacubeDate'); |
3502 |
22 Sep 15 |
olle |
281 |
|
3502 |
22 Sep 15 |
olle |
if (!isolationDateIsValid || !qiacubeDateIsValid) return; |
3502 |
22 Sep 15 |
olle |
283 |
|
3502 |
22 Sep 15 |
olle |
var isolationDate = Dates.parseString(frm.isolationDate.value, 'yyyyMMdd'); |
3502 |
22 Sep 15 |
olle |
var qiacubeDate = Dates.parseString(frm.qiacubeDate.value, 'yyyyMMdd'); |
3502 |
22 Sep 15 |
olle |
if (isolationDate > qiacubeDate) |
3502 |
22 Sep 15 |
olle |
287 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setInputStatus('qiacubeDate', 'invalid', 'QIAcube date is before isolation date'); |
3502 |
22 Sep 15 |
olle |
qiacubeDateIsAfterIsolationDate = false; |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
291 |
} |
3502 |
22 Sep 15 |
olle |
292 |
|
3502 |
22 Sep 15 |
olle |
qiacubeDateIsAfterIsolationDate = true; |
3502 |
22 Sep 15 |
olle |
294 |
|
3502 |
22 Sep 15 |
olle |
Wizard.setInputStatus('qiacubeDate', 'valid'); |
3502 |
22 Sep 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3502 |
22 Sep 15 |
olle |
url += '&cmd=GetNextQiacubeRunNo&qiacubeDate='+encodeURIComponent(frm.qiacubeDate.value); |
3502 |
22 Sep 15 |
olle |
Wizard.showLoadingAnimation('Loading Qiacube run number...'); |
3502 |
22 Sep 15 |
olle |
Wizard.asyncJsonRequest(url, exreg.gotNextRunNumber); |
3502 |
22 Sep 15 |
olle |
300 |
} |
3502 |
22 Sep 15 |
olle |
301 |
|
3502 |
22 Sep 15 |
olle |
exreg.gotNextRunNumber = function(response) |
3502 |
22 Sep 15 |
olle |
303 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
frm.qiacubeRunNo.value = response.nextQiacubeRunNo; |
3502 |
22 Sep 15 |
olle |
Events.sendChangeEvent('qiacubeRunNo'); |
3502 |
22 Sep 15 |
olle |
307 |
} |
3502 |
22 Sep 15 |
olle |
308 |
|
3502 |
22 Sep 15 |
olle |
exreg.qiacubeRunNoOnChange = function() |
3502 |
22 Sep 15 |
olle |
310 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var runNumber = frm.qiacubeRunNo.value; |
3502 |
22 Sep 15 |
olle |
qiacubeRunNoIsValid = false; |
3502 |
22 Sep 15 |
olle |
314 |
|
3502 |
22 Sep 15 |
olle |
if (runNumber == '') |
3502 |
22 Sep 15 |
olle |
316 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setInputStatus('qiacubeRunNo', 'invalid', 'Missing'); |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
319 |
} |
3502 |
22 Sep 15 |
olle |
if (!(parseInt(runNumber, 10) >= 1)) |
3502 |
22 Sep 15 |
olle |
321 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setInputStatus('qiacubeRunNo', 'invalid', 'Must be at least 1'); |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
324 |
} |
3502 |
22 Sep 15 |
olle |
325 |
|
3502 |
22 Sep 15 |
olle |
Wizard.setInputStatus('qiacubeRunNo', 'valid'); |
3502 |
22 Sep 15 |
olle |
qiacubeRunNoIsValid = true; |
3502 |
22 Sep 15 |
olle |
328 |
} |
3502 |
22 Sep 15 |
olle |
329 |
|
3502 |
22 Sep 15 |
olle |
exreg.validateStep2 = function(event) |
3502 |
22 Sep 15 |
olle |
331 |
{ |
3502 |
22 Sep 15 |
olle |
var valid = true; |
3502 |
22 Sep 15 |
olle |
valid &= Wizard.isValid('isolationDate'); |
3502 |
22 Sep 15 |
olle |
valid &= Wizard.isValid('qiacubeDate'); |
3502 |
22 Sep 15 |
olle |
valid &= qiacubeRunNoIsValid; |
3502 |
22 Sep 15 |
olle |
336 |
|
3502 |
22 Sep 15 |
olle |
if (!valid) event.preventDefault(); |
3502 |
22 Sep 15 |
olle |
338 |
} |
3502 |
22 Sep 15 |
olle |
339 |
|
3502 |
22 Sep 15 |
olle |
exreg.initializeStep3 = function() |
3502 |
22 Sep 15 |
olle |
341 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var startItemList = null; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3502 |
22 Sep 15 |
olle |
345 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.startList[i].selected) |
3502 |
22 Sep 15 |
olle |
347 |
{ |
3502 |
22 Sep 15 |
olle |
startItemList = frm.startList[i]; |
3502 |
22 Sep 15 |
olle |
349 |
} |
3502 |
22 Sep 15 |
olle |
350 |
} |
3502 |
22 Sep 15 |
olle |
if (startItemList == null) |
3502 |
22 Sep 15 |
olle |
352 |
{ |
3502 |
22 Sep 15 |
olle |
event.preventDefault(); |
3502 |
22 Sep 15 |
olle |
354 |
} |
3502 |
22 Sep 15 |
olle |
var startListName = frm.startListName.value; |
3502 |
22 Sep 15 |
olle |
Doc.element('detailsStartListName').innerHTML = '<b>Start list: ' + startListName + '</b>'; |
3502 |
22 Sep 15 |
olle |
qiacubeSortedPrefixes = exreg.getQiacubeSortedPrefixes(); |
3502 |
22 Sep 15 |
olle |
358 |
|
3502 |
22 Sep 15 |
olle |
var html = '<table id="detailsTable" class="step-form">'; |
3502 |
22 Sep 15 |
olle |
// First header row |
3502 |
22 Sep 15 |
olle |
html += '<thead>'; |
3502 |
22 Sep 15 |
olle |
html += '<tr>'; |
3502 |
22 Sep 15 |
olle |
html += '<th>Extract</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft">QIAcube</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th colspan="1" class="dottedleft"></th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th colspan="1" class="dottedleft">NanoDrop</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th colspan="1" class="dottedleft">RNA</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th colspan="1" class="dottedleft">DNA</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft comment">Comment</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th></th>'; |
3502 |
22 Sep 15 |
olle |
html += '</tr>'; |
3502 |
22 Sep 15 |
olle |
// Second header row |
3502 |
22 Sep 15 |
olle |
html += '<tr>'; |
3502 |
22 Sep 15 |
olle |
html += '<th>source item</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft">position</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft">Storage</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft">Plate Pos.</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft">Plate Pos.</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft">Plate Pos.</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft comment"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td></td>'; |
3502 |
22 Sep 15 |
olle |
html += '</tr>'; |
3502 |
22 Sep 15 |
olle |
// Third header row |
3502 |
22 Sep 15 |
olle |
html += '<tr>'; |
3502 |
22 Sep 15 |
olle |
html += '<th></th>'; |
3502 |
22 Sep 15 |
olle |
html += '<th class="dottedleft"></th>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft">box</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft comment"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td></td>'; |
3502 |
22 Sep 15 |
olle |
html += '</tr>'; |
3502 |
22 Sep 15 |
olle |
html += '</thead>'; |
3502 |
22 Sep 15 |
olle |
html += '<tbody>'; |
3502 |
22 Sep 15 |
olle |
396 |
|
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numSpecimenItems = exreg.getNumberOfSpecimenItems(); |
3502 |
22 Sep 15 |
olle |
var numRnaItems = exreg.getNumberOfRnaItems(); |
3502 |
22 Sep 15 |
olle |
var numDnaItems = exreg.getNumberOfDnaItems(); |
3502 |
22 Sep 15 |
olle |
var numNanoDropItems = numSpecimenItems + numRnaItems; |
3502 |
22 Sep 15 |
olle |
var numQiacubeItems = numSpecimenItems; |
3502 |
22 Sep 15 |
olle |
var totNumItems = numItems; |
3502 |
22 Sep 15 |
olle |
var itemNo = 0; |
3502 |
22 Sep 15 |
olle |
var qiacubeItemNo = 0; |
3502 |
22 Sep 15 |
olle |
// Set default values for DNA/RNA extraction |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3502 |
22 Sep 15 |
olle |
410 |
{ |
3502 |
22 Sep 15 |
olle |
itemNo++; |
3502 |
22 Sep 15 |
olle |
var item = null; |
3502 |
22 Sep 15 |
olle |
var storageBox = '-'; |
3502 |
22 Sep 15 |
olle |
var rnaStorageBox = '-'; |
3502 |
22 Sep 15 |
olle |
var dnaStorageBox = '-'; |
3502 |
22 Sep 15 |
olle |
item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
var qiacubePos = null; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
419 |
{ |
3502 |
22 Sep 15 |
olle |
qiacubeItemNo++; |
3502 |
22 Sep 15 |
olle |
qiacubePos = ExtractUtils.getDetailedQiaCubePosition(numQiacubeItems, qiacubeItemNo, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
422 |
} |
3502 |
22 Sep 15 |
olle |
item.qiacubePosition = qiacubePos; |
3502 |
22 Sep 15 |
olle |
item.originalQiacubePosition = qiacubePos; |
3502 |
22 Sep 15 |
olle |
425 |
|
3502 |
22 Sep 15 |
olle |
var rna = {}; |
3502 |
22 Sep 15 |
olle |
var dna = {}; |
3502 |
22 Sep 15 |
olle |
// RNA |
3502 |
22 Sep 15 |
olle |
rna.name = item.name + '.r'; |
3502 |
22 Sep 15 |
olle |
// DNA |
3502 |
22 Sep 15 |
olle |
dna.name = item.name + '.d'; |
3502 |
22 Sep 15 |
olle |
if (!item.rna) |
3502 |
22 Sep 15 |
olle |
433 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna = rna; |
3502 |
22 Sep 15 |
olle |
435 |
} |
3502 |
22 Sep 15 |
olle |
if (!item.dna) |
3502 |
22 Sep 15 |
olle |
437 |
{ |
3502 |
22 Sep 15 |
olle |
item.dna = dna; |
3502 |
22 Sep 15 |
olle |
439 |
} |
3502 |
22 Sep 15 |
olle |
440 |
|
3502 |
22 Sep 15 |
olle |
// Input extract source item specimen/RNA/DNA |
3502 |
22 Sep 15 |
olle |
if (item.bioWell != null) |
3502 |
22 Sep 15 |
olle |
443 |
{ |
3502 |
22 Sep 15 |
olle |
storageBox = Strings.encodeTags(item.bioWell.bioPlate.name + '[' + item.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
445 |
} |
3502 |
22 Sep 15 |
olle |
// RNA extract from specimen |
3502 |
22 Sep 15 |
olle |
if (item.rna && item.rna.bioWell) |
3502 |
22 Sep 15 |
olle |
448 |
{ |
3502 |
22 Sep 15 |
olle |
rnaStorageBox = Strings.encodeTags(item.rna.bioWell.bioPlate.name + '[' + item.rna.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
450 |
} |
3502 |
22 Sep 15 |
olle |
// DNA extract from specimen |
3502 |
22 Sep 15 |
olle |
if (item.dna && item.dna.bioWell) |
3502 |
22 Sep 15 |
olle |
453 |
{ |
3502 |
22 Sep 15 |
olle |
dnaStorageBox = Strings.encodeTags(item.dna.bioWell.bioPlate.name + '[' + item.dna.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
455 |
} |
3502 |
22 Sep 15 |
olle |
// Input RNA item storage location should be displayed in the RNA extract storage location column |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item) && item.bioWell != null) |
3502 |
22 Sep 15 |
olle |
458 |
{ |
3502 |
22 Sep 15 |
olle |
rnaStorageBox = Strings.encodeTags(item.bioWell.bioPlate.name + '[' + item.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
460 |
} |
3502 |
22 Sep 15 |
olle |
// Input DNA item storage location should be displayed in the DNA extract storage location column |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isDna(item) && item.bioWell != null) |
3502 |
22 Sep 15 |
olle |
463 |
{ |
3502 |
22 Sep 15 |
olle |
dnaStorageBox = Strings.encodeTags(item.bioWell.bioPlate.name + '[' + item.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
465 |
} |
3502 |
22 Sep 15 |
olle |
html += '<tr class="highlight">'; |
3502 |
22 Sep 15 |
olle |
html += '<th>' + Strings.encodeTags(item.name) + '</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="qiacubePosition'+i+'" class="dottedleft"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft">'+storageBox+'</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="rnaPos'+i+'" class="dottedleft"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="rnaPlatePos'+i+'" class="dottedleft">'+rnaStorageBox+'</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="dnaPlatePos'+i+'" class="dottedleft">'+dnaStorageBox+'</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="comments'+i+'" class="dottedleft comment"></td>'; |
3502 |
22 Sep 15 |
olle |
html += '</tr>'; |
3502 |
22 Sep 15 |
olle |
475 |
} |
3502 |
22 Sep 15 |
olle |
if (numQiacubeItems == 1 || numQiacubeItems == 11 || numQiacubeItems == 23) |
3502 |
22 Sep 15 |
olle |
477 |
{ |
3502 |
22 Sep 15 |
olle |
// Add extra row for counterbalance in QIAcube |
3502 |
22 Sep 15 |
olle |
counterBalanceInfoRow = true; |
3502 |
22 Sep 15 |
olle |
var i = numItems; |
3502 |
22 Sep 15 |
olle |
var qiacubePos = ExtractUtils.getDetailedQiaCubePosition(numQiacubeItems + 1, numQiacubeItems + 1, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
482 |
|
3502 |
22 Sep 15 |
olle |
html += '<tr class="highlight">'; |
3502 |
22 Sep 15 |
olle |
html += '<th>' + Strings.encodeTags('COUNTER-BALANCE') + '</th>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="qiacubePosition'+i+'" class="dottedleft">'+qiacubePos+'</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td class="dottedleft">-</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="rnaPos'+i+'" class="dottedleft">-</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="rnaPlatePos'+i+'" class="dottedleft">-</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="dnaPlatePos'+i+'" class="dottedleft">-</td>'; |
3502 |
22 Sep 15 |
olle |
html += '<td id="comments'+i+'" class="dottedleft comment">Reminder to use counterbalance</td>'; |
3502 |
22 Sep 15 |
olle |
html += '</tr>'; |
3502 |
22 Sep 15 |
olle |
492 |
} |
3502 |
22 Sep 15 |
olle |
html += '</tbody>'; |
3502 |
22 Sep 15 |
olle |
html += '</table>'; |
3502 |
22 Sep 15 |
olle |
Doc.element('detailsSection').innerHTML = html; |
3502 |
22 Sep 15 |
olle |
496 |
|
3502 |
22 Sep 15 |
olle |
Wizard.setCurrentStep(3); |
3502 |
22 Sep 15 |
olle |
498 |
|
3502 |
22 Sep 15 |
olle |
Doc.hide('sampleIdFilesSection'); |
3502 |
22 Sep 15 |
olle |
500 |
|
3502 |
22 Sep 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3502 |
22 Sep 15 |
olle |
url += '&cmd=GetSourceItemListFromStartItemList'; |
3502 |
22 Sep 15 |
olle |
url += '&startItemListId='+startItemList.value; |
3502 |
22 Sep 15 |
olle |
url += '&includeSpecimenExtracts=true'; |
3502 |
22 Sep 15 |
olle |
Wizard.asyncJsonRequest(url, exreg.initializeStep3b); |
3502 |
22 Sep 15 |
olle |
506 |
} |
3502 |
22 Sep 15 |
olle |
507 |
|
3502 |
22 Sep 15 |
olle |
exreg.initializeStep3b = function(response) |
3502 |
22 Sep 15 |
olle |
509 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var numQiacubeItems = exreg.getNumberOfSpecimenItems(); |
3502 |
22 Sep 15 |
olle |
qiacubeSortedPrefixes = exreg.getQiacubeSortedPrefixes(); |
3502 |
22 Sep 15 |
olle |
var qiacubeItemNo = 0; |
3502 |
22 Sep 15 |
olle |
514 |
|
3502 |
22 Sep 15 |
olle |
var itemNameNanoDropPosJson = exreg.createItemNameNanoDropPosJson(); |
3502 |
22 Sep 15 |
olle |
516 |
|
3502 |
22 Sep 15 |
olle |
// Re-load source item list, as items now have more info attached |
3502 |
22 Sep 15 |
olle |
var items = response.items; |
3502 |
22 Sep 15 |
olle |
var sourceItemList = frm.extractSourceItems; |
3502 |
22 Sep 15 |
olle |
if (items.length > 0) |
3502 |
22 Sep 15 |
olle |
521 |
{ |
3502 |
22 Sep 15 |
olle |
var numItems = items.length; |
3502 |
22 Sep 15 |
olle |
for (var i=0; i < items.length; i++) |
3502 |
22 Sep 15 |
olle |
524 |
{ |
3502 |
22 Sep 15 |
olle |
var item = items[i]; |
3502 |
22 Sep 15 |
olle |
if (!item.rna) |
3502 |
22 Sep 15 |
olle |
527 |
{ |
3502 |
22 Sep 15 |
olle |
var rna = {}; |
3502 |
22 Sep 15 |
olle |
// RNA |
3502 |
22 Sep 15 |
olle |
rna.name = item.name + '.r'; |
3502 |
22 Sep 15 |
olle |
rna.well = null; |
3502 |
22 Sep 15 |
olle |
item.rna = rna; |
3502 |
22 Sep 15 |
olle |
533 |
} |
3502 |
22 Sep 15 |
olle |
if (!item.dna) |
3502 |
22 Sep 15 |
olle |
535 |
{ |
3502 |
22 Sep 15 |
olle |
var dna = {}; |
3502 |
22 Sep 15 |
olle |
// DNA |
3502 |
22 Sep 15 |
olle |
dna.name = item.name + '.d'; |
3502 |
22 Sep 15 |
olle |
item.dna = dna; |
3502 |
22 Sep 15 |
olle |
540 |
} |
3502 |
22 Sep 15 |
olle |
// Set RNA well |
3502 |
22 Sep 15 |
olle |
item.rna.nanoDropWell = null; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item) || ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
544 |
{ |
3502 |
22 Sep 15 |
olle |
var nanoDropPos = itemNameNanoDropPosJson[item.name]; |
3502 |
22 Sep 15 |
olle |
if (nanoDropPos) |
3502 |
22 Sep 15 |
olle |
547 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna.nanoDropWell = nanoDropPos; |
3502 |
22 Sep 15 |
olle |
549 |
} |
3502 |
22 Sep 15 |
olle |
550 |
} |
3502 |
22 Sep 15 |
olle |
var selected = true; |
3502 |
22 Sep 15 |
olle |
// Identification of item via id works here as specimens and extracts |
3502 |
22 Sep 15 |
olle |
// are stored in the same database table using discriminators, and are |
3502 |
22 Sep 15 |
olle |
// therefore guaranteed to not have the same id value as another item in the table. |
3502 |
22 Sep 15 |
olle |
var option = new Option(name, item.id, selected, selected); |
3502 |
22 Sep 15 |
olle |
option.item = item; |
3502 |
22 Sep 15 |
olle |
sourceItemList.options[i] = option; |
3502 |
22 Sep 15 |
olle |
558 |
} |
3502 |
22 Sep 15 |
olle |
559 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
561 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.setFatalError('No items available for processing.'); |
3502 |
22 Sep 15 |
olle |
return; |
3502 |
22 Sep 15 |
olle |
564 |
} |
3502 |
22 Sep 15 |
olle |
565 |
|
3502 |
22 Sep 15 |
olle |
exreg.updateDetailsTable(); |
3502 |
22 Sep 15 |
olle |
567 |
|
3502 |
22 Sep 15 |
olle |
Wizard.setCurrentStep(3); |
3502 |
22 Sep 15 |
olle |
569 |
|
3502 |
22 Sep 15 |
olle |
Doc.show('gocancel'); |
3502 |
22 Sep 15 |
olle |
Doc.show('goregister'); |
3502 |
22 Sep 15 |
olle |
Wizard.showGoNextConfirmation(true, 'Check to verify removal of start list.'); |
3502 |
22 Sep 15 |
olle |
573 |
|
3502 |
22 Sep 15 |
olle |
Wizard.keepSessionAlive(); |
3502 |
22 Sep 15 |
olle |
575 |
} |
3502 |
22 Sep 15 |
olle |
576 |
|
3502 |
22 Sep 15 |
olle |
exreg.submit = function() |
3502 |
22 Sep 15 |
olle |
578 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
580 |
|
3502 |
22 Sep 15 |
olle |
var submitInfo = {}; |
3502 |
22 Sep 15 |
olle |
submitInfo.items = []; |
3502 |
22 Sep 15 |
olle |
submitInfo.extraItems = []; |
3502 |
22 Sep 15 |
olle |
584 |
|
3502 |
22 Sep 15 |
olle |
var startItemList = null; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3502 |
22 Sep 15 |
olle |
587 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.startList[i].selected) |
3502 |
22 Sep 15 |
olle |
589 |
{ |
3502 |
22 Sep 15 |
olle |
startItemList = frm.startList[i]; |
3502 |
22 Sep 15 |
olle |
591 |
} |
3502 |
22 Sep 15 |
olle |
592 |
} |
3502 |
22 Sep 15 |
olle |
593 |
|
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var totNumItems = numItems; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3502 |
22 Sep 15 |
olle |
599 |
{ |
3502 |
22 Sep 15 |
olle |
var item = null; |
3502 |
22 Sep 15 |
olle |
if (i < numItems) |
3502 |
22 Sep 15 |
olle |
602 |
{ |
3502 |
22 Sep 15 |
olle |
item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
submitInfo.items[submitInfo.items.length] = item; |
3502 |
22 Sep 15 |
olle |
605 |
} |
3502 |
22 Sep 15 |
olle |
606 |
} |
3502 |
22 Sep 15 |
olle |
607 |
|
3502 |
22 Sep 15 |
olle |
// Extraction |
3502 |
22 Sep 15 |
olle |
submitInfo.startListName = frm.startListName.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.isolationDate = frm.isolationDate.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.extractionOperator = frm.extractionOperator.value; |
3502 |
22 Sep 15 |
olle |
612 |
|
3502 |
22 Sep 15 |
olle |
// QIAcube |
3502 |
22 Sep 15 |
olle |
submitInfo.qiacubeDate = frm.qiacubeDate.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.qiacubeOperator = frm.qiacubeOperator.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.qiacubePrimaryPrefix = frm.qiacubePrimaryPrefix.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.qiacubeSecondaryPrefix = frm.qiacubeSecondaryPrefix.value; |
3502 |
22 Sep 15 |
olle |
submitInfo.qiacubeRunNo = parseInt(frm.qiacubeRunNo.value, 10); |
3502 |
22 Sep 15 |
olle |
submitInfo.allPrepFfpeKit = frm.allPrepFfpeKit.value; |
3502 |
22 Sep 15 |
olle |
620 |
|
3502 |
22 Sep 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3502 |
22 Sep 15 |
olle |
url += '&cmd=RemoveStartItemList'; |
3502 |
22 Sep 15 |
olle |
url += '&startItemListId='+startItemList.value; |
3502 |
22 Sep 15 |
olle |
Wizard.showLoadingAnimation('Performing registration...'); |
3502 |
22 Sep 15 |
olle |
Wizard.asyncJsonRequest(url, exreg.submissionResults, 'POST', JSON.stringify(submitInfo)); |
3502 |
22 Sep 15 |
olle |
626 |
} |
3502 |
22 Sep 15 |
olle |
627 |
|
3502 |
22 Sep 15 |
olle |
exreg.submissionResults = function(response) |
3502 |
22 Sep 15 |
olle |
629 |
{ |
3502 |
22 Sep 15 |
olle |
Wizard.showFinalMessage(response.messages); |
3502 |
22 Sep 15 |
olle |
Doc.show('gorestart'); |
3502 |
22 Sep 15 |
olle |
632 |
} |
3502 |
22 Sep 15 |
olle |
633 |
|
3502 |
22 Sep 15 |
olle |
exreg.createItemNameNanoDropPosJson = function() |
3502 |
22 Sep 15 |
olle |
635 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
637 |
|
3502 |
22 Sep 15 |
olle |
qiacubeSortedPrefixes = exreg.getQiacubeSortedPrefixes(); |
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numSpecimenItems = exreg.getNumberOfSpecimenItems(); |
3502 |
22 Sep 15 |
olle |
var numQiacubeItems = numSpecimenItems; |
3502 |
22 Sep 15 |
olle |
var totNumItems = numItems; |
3502 |
22 Sep 15 |
olle |
var itemNo = 0; |
3502 |
22 Sep 15 |
olle |
qiacubeItemNo = 0; |
3502 |
22 Sep 15 |
olle |
var nanoDropItemNo = 0; |
3502 |
22 Sep 15 |
olle |
var rnaItemNo = 0; |
3502 |
22 Sep 15 |
olle |
var intNanoDropPlatePosition = 0; |
3502 |
22 Sep 15 |
olle |
// Store NanoDrop positions as JSON object with item names as keys |
3502 |
22 Sep 15 |
olle |
var nanoDropJsonStr = '{'; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3502 |
22 Sep 15 |
olle |
653 |
{ |
3502 |
22 Sep 15 |
olle |
itemNo++; |
3502 |
22 Sep 15 |
olle |
var item = null; |
3502 |
22 Sep 15 |
olle |
var qiacubePos = null; |
3502 |
22 Sep 15 |
olle |
item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
659 |
{ |
3502 |
22 Sep 15 |
olle |
qiacubeItemNo++; |
3502 |
22 Sep 15 |
olle |
intNanoDropPlatePosition = qiacubeItemNo; |
3502 |
22 Sep 15 |
olle |
662 |
} |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
664 |
{ |
3502 |
22 Sep 15 |
olle |
rnaItemNo++; |
3502 |
22 Sep 15 |
olle |
intNanoDropPlatePosition = numSpecimenItems + rnaItemNo; |
3502 |
22 Sep 15 |
olle |
667 |
} |
3502 |
22 Sep 15 |
olle |
668 |
|
3502 |
22 Sep 15 |
olle |
// Calculate NanoDrop well from Qiacube position |
3502 |
22 Sep 15 |
olle |
var row; |
3502 |
22 Sep 15 |
olle |
var col; |
3502 |
22 Sep 15 |
olle |
// Specimens from up to two QIAcube instruments and input RNA items placed on one NanoDrop plate |
3502 |
22 Sep 15 |
olle |
if (intNanoDropPlatePosition > 16) |
3502 |
22 Sep 15 |
olle |
674 |
{ |
3502 |
22 Sep 15 |
olle |
// (17 - 24) NanoDrop plate for secondary QIAcube, positions A3 - H3 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 17; |
3502 |
22 Sep 15 |
olle |
col = 3; |
3502 |
22 Sep 15 |
olle |
678 |
} |
3502 |
22 Sep 15 |
olle |
else if (intNanoDropPlatePosition > 8) |
3502 |
22 Sep 15 |
olle |
680 |
{ |
3502 |
22 Sep 15 |
olle |
// ( 9 - 12) NanoDrop plate for primary QIAcube, positions A2 - D2 |
3502 |
22 Sep 15 |
olle |
// (13 - 16) NanoDrop plate for secondary QIAcube, positions E2 - H2 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 9; |
3502 |
22 Sep 15 |
olle |
col = 2; |
3502 |
22 Sep 15 |
olle |
685 |
} |
3502 |
22 Sep 15 |
olle |
else if (intNanoDropPlatePosition > 0) |
3502 |
22 Sep 15 |
olle |
687 |
{ |
3502 |
22 Sep 15 |
olle |
// ( 1 - 8) NanoDrop plate for primary QIAcube, positions A1 - H1 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 1; |
3502 |
22 Sep 15 |
olle |
col = 1; |
3502 |
22 Sep 15 |
olle |
691 |
} |
3502 |
22 Sep 15 |
olle |
var nanoDropWell = Meludi.wellToAlpha(row) + col; |
3502 |
22 Sep 15 |
olle |
// Store NanoDrop position as JSON object with item name as key |
3502 |
22 Sep 15 |
olle |
if (nanoDropItemNo > 0) |
3502 |
22 Sep 15 |
olle |
695 |
{ |
3502 |
22 Sep 15 |
olle |
nanoDropJsonStr += ','; |
3502 |
22 Sep 15 |
olle |
697 |
} |
3502 |
22 Sep 15 |
olle |
nanoDropJsonStr += '"' + item.name + '":"' + nanoDropWell + '"'; |
3502 |
22 Sep 15 |
olle |
nanoDropItemNo++; |
3502 |
22 Sep 15 |
olle |
700 |
} |
3502 |
22 Sep 15 |
olle |
nanoDropJsonStr += '}'; |
3502 |
22 Sep 15 |
olle |
return nanoDropJsonStr; |
3502 |
22 Sep 15 |
olle |
703 |
} |
3502 |
22 Sep 15 |
olle |
704 |
|
3502 |
22 Sep 15 |
olle |
exreg.getQiacubeSortedPrefixes = function() |
3502 |
22 Sep 15 |
olle |
706 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var primaryQiacubePrefix = frm.qiacubePrimaryPrefix.value; |
3502 |
22 Sep 15 |
olle |
var secondaryQiacubePrefix = frm.qiacubeSecondaryPrefix.value; |
3502 |
22 Sep 15 |
olle |
710 |
|
3502 |
22 Sep 15 |
olle |
// Get string of current QIAcube prefixes in order |
3502 |
22 Sep 15 |
olle |
var sortedPrefixes = ExtractUtils.getQiacubeSortedPrefixes(primaryQiacubePrefix, secondaryQiacubePrefix); |
3502 |
22 Sep 15 |
olle |
return sortedPrefixes; |
3502 |
22 Sep 15 |
olle |
714 |
} |
3502 |
22 Sep 15 |
olle |
715 |
|
3502 |
22 Sep 15 |
olle |
exreg.getSelectedItemsList = function() |
3502 |
22 Sep 15 |
olle |
717 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
719 |
|
3502 |
22 Sep 15 |
olle |
// Get number of selected extract source items |
3502 |
22 Sep 15 |
olle |
var numItems = 0; |
3502 |
22 Sep 15 |
olle |
var selItemsList = []; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < frm.extractSourceItems.length; i++) |
3502 |
22 Sep 15 |
olle |
724 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.extractSourceItems[i].selected) |
3502 |
22 Sep 15 |
olle |
726 |
{ |
3502 |
22 Sep 15 |
olle |
if (frm.extractSourceItems[i].item != null) |
3502 |
22 Sep 15 |
olle |
728 |
{ |
3502 |
22 Sep 15 |
olle |
selItemsList[numItems] = frm.extractSourceItems[i].item; |
3502 |
22 Sep 15 |
olle |
numItems++; |
3502 |
22 Sep 15 |
olle |
731 |
} |
3502 |
22 Sep 15 |
olle |
732 |
} |
3502 |
22 Sep 15 |
olle |
733 |
} |
3502 |
22 Sep 15 |
olle |
return selItemsList; |
3502 |
22 Sep 15 |
olle |
735 |
} |
3502 |
22 Sep 15 |
olle |
736 |
|
3502 |
22 Sep 15 |
olle |
exreg.getNumberOfSpecimenItems = function() |
3502 |
22 Sep 15 |
olle |
738 |
{ |
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numSpecimen = 0; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < numItems; i++) |
3502 |
22 Sep 15 |
olle |
744 |
{ |
3502 |
22 Sep 15 |
olle |
var item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
747 |
{ |
3502 |
22 Sep 15 |
olle |
numSpecimen++; |
3502 |
22 Sep 15 |
olle |
749 |
} |
3502 |
22 Sep 15 |
olle |
750 |
} |
3502 |
22 Sep 15 |
olle |
return numSpecimen; |
3502 |
22 Sep 15 |
olle |
752 |
} |
3502 |
22 Sep 15 |
olle |
753 |
|
3502 |
22 Sep 15 |
olle |
exreg.getNumberOfRnaItems = function() |
3502 |
22 Sep 15 |
olle |
755 |
{ |
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numRna = 0; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < numItems; i++) |
3502 |
22 Sep 15 |
olle |
761 |
{ |
3502 |
22 Sep 15 |
olle |
var item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
764 |
{ |
3502 |
22 Sep 15 |
olle |
numRna++; |
3502 |
22 Sep 15 |
olle |
766 |
} |
3502 |
22 Sep 15 |
olle |
767 |
} |
3502 |
22 Sep 15 |
olle |
return numRna; |
3502 |
22 Sep 15 |
olle |
769 |
} |
3502 |
22 Sep 15 |
olle |
770 |
|
3502 |
22 Sep 15 |
olle |
exreg.getNumberOfDnaItems = function() |
3502 |
22 Sep 15 |
olle |
772 |
{ |
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numDna = 0; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < numItems; i++) |
3502 |
22 Sep 15 |
olle |
778 |
{ |
3502 |
22 Sep 15 |
olle |
var item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isDna(item)) |
3502 |
22 Sep 15 |
olle |
781 |
{ |
3502 |
22 Sep 15 |
olle |
numDna++; |
3502 |
22 Sep 15 |
olle |
783 |
} |
3502 |
22 Sep 15 |
olle |
784 |
} |
3502 |
22 Sep 15 |
olle |
return numDna; |
3502 |
22 Sep 15 |
olle |
786 |
} |
3502 |
22 Sep 15 |
olle |
787 |
|
3502 |
22 Sep 15 |
olle |
exreg.updateDetailsTable = function() |
3502 |
22 Sep 15 |
olle |
789 |
{ |
3502 |
22 Sep 15 |
olle |
var frm = document.forms['meludi']; |
3502 |
22 Sep 15 |
olle |
var hasQiacubePosition = []; |
3502 |
22 Sep 15 |
olle |
var duplicatePosition = 0; |
3502 |
22 Sep 15 |
olle |
793 |
|
3502 |
22 Sep 15 |
olle |
qiacubeSortedPrefixes = exreg.getQiacubeSortedPrefixes(); |
3502 |
22 Sep 15 |
olle |
// Get list of selected extract source items |
3502 |
22 Sep 15 |
olle |
var selItemsList = exreg.getSelectedItemsList(); |
3502 |
22 Sep 15 |
olle |
var numItems = selItemsList.length; |
3502 |
22 Sep 15 |
olle |
var numSpecimenItems = exreg.getNumberOfSpecimenItems(); |
3502 |
22 Sep 15 |
olle |
var numRnaItems = exreg.getNumberOfRnaItems(); |
3502 |
22 Sep 15 |
olle |
var numDnaItems = exreg.getNumberOfDnaItems(); |
3502 |
22 Sep 15 |
olle |
var numNanoDropItems = numSpecimenItems + numRnaItems; |
3502 |
22 Sep 15 |
olle |
var numQiacubeItems = numSpecimenItems; |
3502 |
22 Sep 15 |
olle |
var totNumItems = numItems; |
3502 |
22 Sep 15 |
olle |
// Get sorted list of used integer QIAcube positions for specimens, generalized for more than one QIAcube |
3502 |
22 Sep 15 |
olle |
var specSortedIntQiacubePosition = []; |
3502 |
22 Sep 15 |
olle |
var qiacubeItemNo = 0; |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3502 |
22 Sep 15 |
olle |
808 |
{ |
3502 |
22 Sep 15 |
olle |
var item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
811 |
{ |
3502 |
22 Sep 15 |
olle |
var qiacubePos = ExtractUtils.getDetailedQiaCubePosition(numQiacubeItems, qiacubeItemNo + 1, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
item.qiacubePosition = qiacubePos; |
3502 |
22 Sep 15 |
olle |
var intQiacubePosition = ExtractUtils.getIntQiacubePosition(item.qiacubePosition, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
specSortedIntQiacubePosition[qiacubeItemNo] = intQiacubePosition; |
3502 |
22 Sep 15 |
olle |
qiacubeItemNo++; |
3502 |
22 Sep 15 |
olle |
817 |
} |
3502 |
22 Sep 15 |
olle |
818 |
} |
3502 |
22 Sep 15 |
olle |
// Sort for ascending integer values |
3502 |
22 Sep 15 |
olle |
specSortedIntQiacubePosition.sort(function(a,b){return a-b}); |
3502 |
22 Sep 15 |
olle |
var rnaItemNo = 0; |
3502 |
22 Sep 15 |
olle |
var qiacubeItemNo = 0; |
3502 |
22 Sep 15 |
olle |
// Set default values for DNA/RNA extraction |
3502 |
22 Sep 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3502 |
22 Sep 15 |
olle |
825 |
{ |
3502 |
22 Sep 15 |
olle |
var rnaStorageBox = '-'; |
3502 |
22 Sep 15 |
olle |
var dnaStorageBox = '-'; |
3502 |
22 Sep 15 |
olle |
var item = null; |
3502 |
22 Sep 15 |
olle |
item = selItemsList[i]; |
3502 |
22 Sep 15 |
olle |
var qiacubePos = null; |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
832 |
{ |
3502 |
22 Sep 15 |
olle |
qiacubeItemNo++; |
3502 |
22 Sep 15 |
olle |
qiacubePos = ExtractUtils.getDetailedQiaCubePosition(numQiacubeItems, qiacubeItemNo, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
item.qiacubePosition = qiacubePos; |
3502 |
22 Sep 15 |
olle |
836 |
} |
3502 |
22 Sep 15 |
olle |
item.originalQiacubePosition = qiacubePos; |
3502 |
22 Sep 15 |
olle |
838 |
|
3502 |
22 Sep 15 |
olle |
// RNA extract from specimen |
3502 |
22 Sep 15 |
olle |
if (item.rna && item.rna.bioWell) |
3502 |
22 Sep 15 |
olle |
841 |
{ |
3502 |
22 Sep 15 |
olle |
rnaStorageBox = Strings.encodeTags(item.rna.bioWell.bioPlate.name + '[' + item.rna.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
843 |
} |
3502 |
22 Sep 15 |
olle |
// DNA extract from specimen |
3502 |
22 Sep 15 |
olle |
if (item.dna && item.dna.bioWell) |
3502 |
22 Sep 15 |
olle |
846 |
{ |
3502 |
22 Sep 15 |
olle |
dnaStorageBox = Strings.encodeTags(item.dna.bioWell.bioPlate.name + '[' + item.dna.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
848 |
} |
3502 |
22 Sep 15 |
olle |
// Input RNA item storage location should be displayed in the RNA extract storage location column |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item) && item.bioWell != null) |
3502 |
22 Sep 15 |
olle |
851 |
{ |
3502 |
22 Sep 15 |
olle |
rnaStorageBox = Strings.encodeTags(item.bioWell.bioPlate.name + '[' + item.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
853 |
} |
3502 |
22 Sep 15 |
olle |
// Input DNA item storage location should be displayed in the DNA extract storage location column |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isDna(item) && item.bioWell != null) |
3502 |
22 Sep 15 |
olle |
856 |
{ |
3502 |
22 Sep 15 |
olle |
dnaStorageBox = Strings.encodeTags(item.bioWell.bioPlate.name + '[' + item.bioWell.location + ']'); |
3502 |
22 Sep 15 |
olle |
858 |
} |
3502 |
22 Sep 15 |
olle |
if (Doc.element('qiacubePosition'+i)) |
3502 |
22 Sep 15 |
olle |
860 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('qiacubePosition'+i).innerHTML = item.qiacubePosition; |
3502 |
22 Sep 15 |
olle |
Doc.addOrRemoveClass('qiacubePosition'+i, 'nondefault', item.qiacubePosition != item.originalQiacubePosition); |
3502 |
22 Sep 15 |
olle |
863 |
} |
3502 |
22 Sep 15 |
olle |
864 |
|
3502 |
22 Sep 15 |
olle |
var intQiacubePosition = ExtractUtils.getIntQiacubePosition(item.qiacubePosition, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
if (intQiacubePosition != null) |
3502 |
22 Sep 15 |
olle |
867 |
{ |
3502 |
22 Sep 15 |
olle |
if (hasQiacubePosition[intQiacubePosition]) |
3502 |
22 Sep 15 |
olle |
869 |
{ |
3502 |
22 Sep 15 |
olle |
duplicatePosition = intQiacubePosition; |
3502 |
22 Sep 15 |
olle |
871 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
873 |
{ |
3502 |
22 Sep 15 |
olle |
hasQiacubePosition[intQiacubePosition] = true; |
3502 |
22 Sep 15 |
olle |
875 |
} |
3502 |
22 Sep 15 |
olle |
876 |
} |
3502 |
22 Sep 15 |
olle |
var intNanoDropPlatePosition = intQiacubePosition; |
3502 |
22 Sep 15 |
olle |
// Get integer NanoDrop position for specimens from index in sorted list of used integer QIAcube positions |
3502 |
22 Sep 15 |
olle |
if (intQiacubePosition) |
3502 |
22 Sep 15 |
olle |
880 |
{ |
3502 |
22 Sep 15 |
olle |
var sortIndex = -1; |
3502 |
22 Sep 15 |
olle |
for (var j = 0; j < specSortedIntQiacubePosition.length; j++) |
3502 |
22 Sep 15 |
olle |
883 |
{ |
3502 |
22 Sep 15 |
olle |
if (intQiacubePosition == specSortedIntQiacubePosition[j]) |
3502 |
22 Sep 15 |
olle |
885 |
{ |
3502 |
22 Sep 15 |
olle |
sortIndex = j; |
3502 |
22 Sep 15 |
olle |
887 |
} |
3502 |
22 Sep 15 |
olle |
888 |
} |
3502 |
22 Sep 15 |
olle |
if (sortIndex > -1) |
3502 |
22 Sep 15 |
olle |
890 |
{ |
3502 |
22 Sep 15 |
olle |
intNanoDropPlatePosition = sortIndex + 1; |
3502 |
22 Sep 15 |
olle |
892 |
} |
3502 |
22 Sep 15 |
olle |
893 |
} |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
895 |
{ |
3502 |
22 Sep 15 |
olle |
rnaItemNo++; |
3502 |
22 Sep 15 |
olle |
intNanoDropPlatePosition = numSpecimenItems + rnaItemNo; |
3502 |
22 Sep 15 |
olle |
898 |
} |
3502 |
22 Sep 15 |
olle |
899 |
|
3502 |
22 Sep 15 |
olle |
// Calculate NanoDrop well from Qiacube position |
3502 |
22 Sep 15 |
olle |
var row; |
3502 |
22 Sep 15 |
olle |
var col; |
3502 |
22 Sep 15 |
olle |
// Specimens from up to two QIAcube instruments and input RNA items placed on one NanoDrop plate |
3502 |
22 Sep 15 |
olle |
if (intNanoDropPlatePosition > 16) |
3502 |
22 Sep 15 |
olle |
905 |
{ |
3502 |
22 Sep 15 |
olle |
// (17 - 24) NanoDrop plate for secondary QIAcube, positions A3 - H3 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 17; |
3502 |
22 Sep 15 |
olle |
col = 3; |
3502 |
22 Sep 15 |
olle |
909 |
} |
3502 |
22 Sep 15 |
olle |
else if (intNanoDropPlatePosition > 8) |
3502 |
22 Sep 15 |
olle |
911 |
{ |
3502 |
22 Sep 15 |
olle |
// ( 9 - 12) NanoDrop plate for primary QIAcube, positions A2 - D2 |
3502 |
22 Sep 15 |
olle |
// (13 - 16) NanoDrop plate for secondary QIAcube, positions E2 - H2 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 9; |
3502 |
22 Sep 15 |
olle |
col = 2; |
3502 |
22 Sep 15 |
olle |
916 |
} |
3502 |
22 Sep 15 |
olle |
else if (intNanoDropPlatePosition > 0) |
3502 |
22 Sep 15 |
olle |
918 |
{ |
3502 |
22 Sep 15 |
olle |
// ( 1 - 8) NanoDrop plate for primary QIAcube, positions A1 - H1 |
3502 |
22 Sep 15 |
olle |
row = intNanoDropPlatePosition - 1; |
3502 |
22 Sep 15 |
olle |
col = 1; |
3502 |
22 Sep 15 |
olle |
922 |
} |
3502 |
22 Sep 15 |
olle |
var nanoDropWell = Meludi.wellToAlpha(row) + col; |
3502 |
22 Sep 15 |
olle |
if (i < numItems) |
3502 |
22 Sep 15 |
olle |
925 |
{ |
3502 |
22 Sep 15 |
olle |
926 |
|
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item) || ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
928 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna.nanoDropWell = nanoDropWell; |
3502 |
22 Sep 15 |
olle |
930 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
932 |
{ |
3502 |
22 Sep 15 |
olle |
if (item.dna) |
3502 |
22 Sep 15 |
olle |
934 |
{ |
3502 |
22 Sep 15 |
olle |
//item.dna.well = null; |
3502 |
22 Sep 15 |
olle |
item.rna.nanoDropWell = null; |
3502 |
22 Sep 15 |
olle |
937 |
} |
3502 |
22 Sep 15 |
olle |
938 |
} |
3502 |
22 Sep 15 |
olle |
939 |
|
3502 |
22 Sep 15 |
olle |
if (Doc.element('rnaPlatePos'+i)) |
3502 |
22 Sep 15 |
olle |
941 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('rnaPlatePos'+i).innerHTML = rnaStorageBox; |
3502 |
22 Sep 15 |
olle |
943 |
} |
3502 |
22 Sep 15 |
olle |
if (Doc.element('dnaPlatePos'+i)) |
3502 |
22 Sep 15 |
olle |
945 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('dnaPlatePos'+i).innerHTML = dnaStorageBox; |
3502 |
22 Sep 15 |
olle |
947 |
} |
3502 |
22 Sep 15 |
olle |
if (item.rna) |
3502 |
22 Sep 15 |
olle |
949 |
{ |
3502 |
22 Sep 15 |
olle |
if (Doc.element('rnaPos'+i)) |
3502 |
22 Sep 15 |
olle |
951 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('rnaPos'+i).innerHTML = item.rna.nanoDropWell; |
3502 |
22 Sep 15 |
olle |
Doc.addOrRemoveClass('rnaPos'+i, 'nondefault', item.qiacubePosition != item.originalQiacubePosition); |
3502 |
22 Sep 15 |
olle |
954 |
} |
3502 |
22 Sep 15 |
olle |
955 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
957 |
{ |
3502 |
22 Sep 15 |
olle |
if (Doc.element('rnaPos'+i)) |
3502 |
22 Sep 15 |
olle |
959 |
{ |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
961 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('rnaPos'+i).innerHTML = nanoDropWell; |
3502 |
22 Sep 15 |
olle |
963 |
} |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isDna(item)) |
3502 |
22 Sep 15 |
olle |
965 |
{ |
3502 |
22 Sep 15 |
olle |
Doc.element('rnaPos'+i).innerHTML = null; |
3502 |
22 Sep 15 |
olle |
967 |
} |
3502 |
22 Sep 15 |
olle |
968 |
} |
3502 |
22 Sep 15 |
olle |
969 |
} |
3502 |
22 Sep 15 |
olle |
var cmnt = Doc.element('comments'+i); |
3502 |
22 Sep 15 |
olle |
var tooltip = []; |
3502 |
22 Sep 15 |
olle |
var comment = []; |
3502 |
22 Sep 15 |
olle |
// Update comment data with description data |
3502 |
22 Sep 15 |
olle |
if (item.description || item.dna.description || item.rna.description) |
3502 |
22 Sep 15 |
olle |
975 |
{ |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isSpecimen(item)) |
3502 |
22 Sep 15 |
olle |
977 |
{ |
3502 |
22 Sep 15 |
olle |
if (item.description) |
3502 |
22 Sep 15 |
olle |
979 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.comment) |
3502 |
22 Sep 15 |
olle |
981 |
{ |
3502 |
22 Sep 15 |
olle |
item.comment = item.description; |
3502 |
22 Sep 15 |
olle |
983 |
} |
3502 |
22 Sep 15 |
olle |
984 |
} |
3502 |
22 Sep 15 |
olle |
if (item.rna.description) |
3502 |
22 Sep 15 |
olle |
986 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.rna.comment) |
3502 |
22 Sep 15 |
olle |
988 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna.comment = item.rna.description; |
3502 |
22 Sep 15 |
olle |
990 |
} |
3502 |
22 Sep 15 |
olle |
991 |
} |
3502 |
22 Sep 15 |
olle |
if (item.dna.description) |
3502 |
22 Sep 15 |
olle |
993 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.dna.comment) |
3502 |
22 Sep 15 |
olle |
995 |
{ |
3502 |
22 Sep 15 |
olle |
item.dna.comment = item.dna.description; |
3502 |
22 Sep 15 |
olle |
997 |
} |
3502 |
22 Sep 15 |
olle |
998 |
} |
3502 |
22 Sep 15 |
olle |
999 |
} |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isRna(item)) |
3502 |
22 Sep 15 |
olle |
1001 |
{ |
3502 |
22 Sep 15 |
olle |
if (item.description) |
3502 |
22 Sep 15 |
olle |
1003 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.rna.comment) |
3502 |
22 Sep 15 |
olle |
1005 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna.comment = item.description; |
3502 |
22 Sep 15 |
olle |
1007 |
} |
3502 |
22 Sep 15 |
olle |
1008 |
} |
3502 |
22 Sep 15 |
olle |
if (item.rna.description) |
3502 |
22 Sep 15 |
olle |
1010 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.rna.comment) |
3502 |
22 Sep 15 |
olle |
1012 |
{ |
3502 |
22 Sep 15 |
olle |
item.rna.comment = item.rna.description; |
3502 |
22 Sep 15 |
olle |
1014 |
} |
3502 |
22 Sep 15 |
olle |
1015 |
} |
3502 |
22 Sep 15 |
olle |
1016 |
} |
3502 |
22 Sep 15 |
olle |
if (ExtractUtils.isDna(item)) |
3502 |
22 Sep 15 |
olle |
1018 |
{ |
3502 |
22 Sep 15 |
olle |
if (item.description) |
3502 |
22 Sep 15 |
olle |
1020 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.dna.comment) |
3502 |
22 Sep 15 |
olle |
1022 |
{ |
3502 |
22 Sep 15 |
olle |
item.dna.comment = item.description; |
3502 |
22 Sep 15 |
olle |
1024 |
} |
3502 |
22 Sep 15 |
olle |
1025 |
} |
3502 |
22 Sep 15 |
olle |
if (item.dna.description) |
3502 |
22 Sep 15 |
olle |
1027 |
{ |
3502 |
22 Sep 15 |
olle |
if (!item.dna.comment) |
3502 |
22 Sep 15 |
olle |
1029 |
{ |
3502 |
22 Sep 15 |
olle |
item.dna.comment = item.dna.description; |
3502 |
22 Sep 15 |
olle |
1031 |
} |
3502 |
22 Sep 15 |
olle |
1032 |
} |
3502 |
22 Sep 15 |
olle |
1033 |
} |
3502 |
22 Sep 15 |
olle |
1034 |
} |
3502 |
22 Sep 15 |
olle |
if (item.operatorDeliveryComment || item.comment || item.dna.comment || item.rna.comment) |
3502 |
22 Sep 15 |
olle |
1036 |
{ |
3502 |
22 Sep 15 |
olle |
// Display operator delivery comments directly in the comment field |
3502 |
22 Sep 15 |
olle |
if (item.operatorDeliveryComment) |
3502 |
22 Sep 15 |
olle |
1039 |
{ |
3502 |
22 Sep 15 |
olle |
comment[0] = item.operatorDeliveryComment; |
3502 |
22 Sep 15 |
olle |
tooltip[tooltip.length] = 'Op.Del.Cmt: ' + item.operatorDeliveryComment; |
3502 |
22 Sep 15 |
olle |
1042 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
1044 |
{ |
3502 |
22 Sep 15 |
olle |
comment[0] = 'Yes'; |
3502 |
22 Sep 15 |
olle |
1046 |
} |
3502 |
22 Sep 15 |
olle |
if (item.comment) tooltip[tooltip.length] = 'Specimen: ' + item.comment; |
3502 |
22 Sep 15 |
olle |
if (item.rna.comment) tooltip[tooltip.length] = 'RNA: ' + item.rna.comment; |
3502 |
22 Sep 15 |
olle |
if (item.dna.comment) tooltip[tooltip.length] = 'DNA: ' + item.dna.comment; |
3502 |
22 Sep 15 |
olle |
1050 |
} |
3502 |
22 Sep 15 |
olle |
1051 |
|
3502 |
22 Sep 15 |
olle |
if (cmnt) |
3502 |
22 Sep 15 |
olle |
1053 |
{ |
3502 |
22 Sep 15 |
olle |
if (tooltip.length > 0) |
3502 |
22 Sep 15 |
olle |
1055 |
{ |
3502 |
22 Sep 15 |
olle |
cmnt.innerHTML = comment.join(', '); |
3502 |
22 Sep 15 |
olle |
Doc.addClass(cmnt, 'nondefault'); |
3502 |
22 Sep 15 |
olle |
cmnt.title = tooltip.join('\n'); |
3502 |
22 Sep 15 |
olle |
1059 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
1061 |
{ |
3502 |
22 Sep 15 |
olle |
cmnt.innerHTML = ''; |
3502 |
22 Sep 15 |
olle |
Doc.removeClass(cmnt, 'nondefault'); |
3502 |
22 Sep 15 |
olle |
cmnt.title = null; |
3502 |
22 Sep 15 |
olle |
1065 |
} |
3502 |
22 Sep 15 |
olle |
1066 |
} |
3502 |
22 Sep 15 |
olle |
1067 |
} |
3502 |
22 Sep 15 |
olle |
1068 |
} |
3502 |
22 Sep 15 |
olle |
1069 |
|
3502 |
22 Sep 15 |
olle |
if (duplicatePosition) |
3502 |
22 Sep 15 |
olle |
1071 |
{ |
3502 |
22 Sep 15 |
olle |
var duplicatePositionStr = ExtractUtils.getDetailedQiacubePosition(duplicatePosition, qiacubeSortedPrefixes); |
3502 |
22 Sep 15 |
olle |
qiacubePositionsAreValid = false; |
3502 |
22 Sep 15 |
olle |
1074 |
} |
3502 |
22 Sep 15 |
olle |
else |
3502 |
22 Sep 15 |
olle |
1076 |
{ |
3502 |
22 Sep 15 |
olle |
qiacubePositionsAreValid = true; |
3502 |
22 Sep 15 |
olle |
1078 |
} |
3502 |
22 Sep 15 |
olle |
1079 |
} |
3502 |
22 Sep 15 |
olle |
1080 |
|
3502 |
22 Sep 15 |
olle |
exreg.validateStep3 = function(event) |
3502 |
22 Sep 15 |
olle |
1082 |
{ |
3502 |
22 Sep 15 |
olle |
var valid = true; |
3502 |
22 Sep 15 |
olle |
valid &= qiacubePositionsAreValid; |
3502 |
22 Sep 15 |
olle |
1085 |
|
3502 |
22 Sep 15 |
olle |
if (!valid) event.preventDefault(); |
3502 |
22 Sep 15 |
olle |
1087 |
} |
3502 |
22 Sep 15 |
olle |
1088 |
|
3502 |
22 Sep 15 |
olle |
// Format value as a date in format yyyy-mm-dd |
3502 |
22 Sep 15 |
olle |
exreg.asDate = function(value) |
3502 |
22 Sep 15 |
olle |
1091 |
{ |
3502 |
22 Sep 15 |
olle |
if (!value) return ''; |
3502 |
22 Sep 15 |
olle |
if (value.length == 8) |
3502 |
22 Sep 15 |
olle |
1094 |
{ |
3502 |
22 Sep 15 |
olle |
value = value.substr(0, 4) + '-' + value.substr(4, 2) + '-' + value.substr(6, 2); |
3502 |
22 Sep 15 |
olle |
1096 |
} |
3502 |
22 Sep 15 |
olle |
return value; |
3502 |
22 Sep 15 |
olle |
1098 |
} |
3502 |
22 Sep 15 |
olle |
1099 |
|
3502 |
22 Sep 15 |
olle |
return exreg; |
3502 |
22 Sep 15 |
olle |
1101 |
}(); |
3502 |
22 Sep 15 |
olle |
1102 |
|
3502 |
22 Sep 15 |
olle |
Doc.onLoad(ExtractionStartListRemoval.initPage); |
3502 |
22 Sep 15 |
olle |
1104 |
|