4247 |
22 Nov 16 |
olle |
var SpecimenTubeReg = function() |
4247 |
22 Nov 16 |
olle |
2 |
{ |
4247 |
22 Nov 16 |
olle |
var streg = {}; |
4247 |
22 Nov 16 |
olle |
var debug = 0; |
4247 |
22 Nov 16 |
olle |
var myPermissions = {}; |
4247 |
22 Nov 16 |
olle |
6 |
|
4247 |
22 Nov 16 |
olle |
var caseInfo; |
4247 |
22 Nov 16 |
olle |
8 |
|
4247 |
22 Nov 16 |
olle |
var sampleItemPrefix = ''; |
4247 |
22 Nov 16 |
olle |
var sampleItemNumDigits = 5; |
4247 |
22 Nov 16 |
olle |
var nofTubesIsValid = false; |
4247 |
22 Nov 16 |
olle |
var samplingDateIsValid = true; |
4247 |
22 Nov 16 |
olle |
var viableTumourCellsPercentIsValid = true; |
4247 |
22 Nov 16 |
olle |
14 |
|
4247 |
22 Nov 16 |
olle |
// Well validation variable for input specimen, DNA, RNA |
4247 |
22 Nov 16 |
olle |
var wellIsValid = []; |
4247 |
22 Nov 16 |
olle |
// Well validation variables for extracts from specimen |
4247 |
22 Nov 16 |
olle |
var dnaWellIsValid = []; |
4247 |
22 Nov 16 |
olle |
var rnaWellIsValid = []; |
4247 |
22 Nov 16 |
olle |
20 |
|
4247 |
22 Nov 16 |
olle |
var restartTimer; |
4247 |
22 Nov 16 |
olle |
var restartAt; |
4247 |
22 Nov 16 |
olle |
23 |
|
4247 |
22 Nov 16 |
olle |
// Page initialization |
4247 |
22 Nov 16 |
olle |
streg.initPage = function() |
4247 |
22 Nov 16 |
olle |
26 |
{ |
4247 |
22 Nov 16 |
olle |
// Step 1 |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('step-1', 'wizard-validate', streg.validateStep1); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('caseName', 'keypress', Wizard.goNextOnTabOrEnter); |
4247 |
22 Nov 16 |
olle |
30 |
|
4247 |
22 Nov 16 |
olle |
// Step 2 |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('step-2', 'wizard-initialize', streg.initializeStep2); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('step-2', 'wizard-validate', streg.validateStep2); |
4247 |
22 Nov 16 |
olle |
34 |
|
4247 |
22 Nov 16 |
olle |
// Navigation |
4247 |
22 Nov 16 |
olle |
Buttons.addClickHandler('gocancel', Wizard.cancelWizard); |
4247 |
22 Nov 16 |
olle |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
4247 |
22 Nov 16 |
olle |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
4247 |
22 Nov 16 |
olle |
Buttons.addClickHandler('goregister', Wizard.goRegister); |
4247 |
22 Nov 16 |
olle |
Buttons.addClickHandler('gostop', streg.stopAutoRestart); |
4247 |
22 Nov 16 |
olle |
41 |
|
4247 |
22 Nov 16 |
olle |
// Final registration |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('wizard', 'wizard-submit', streg.submit); |
4247 |
22 Nov 16 |
olle |
44 |
|
4247 |
22 Nov 16 |
olle |
// Load configuration |
4247 |
22 Nov 16 |
olle |
streg.loadConfiguration(); |
4247 |
22 Nov 16 |
olle |
47 |
} |
4247 |
22 Nov 16 |
olle |
48 |
|
4247 |
22 Nov 16 |
olle |
streg.loadConfiguration = function() |
4247 |
22 Nov 16 |
olle |
50 |
{ |
4247 |
22 Nov 16 |
olle |
var url = '../Session.servlet?ID='+App.getSessionId(); |
4247 |
22 Nov 16 |
olle |
url += '&cmd=GetConfiguration' |
4247 |
22 Nov 16 |
olle |
var request = Ajax.getXmlHttpRequest(); |
4247 |
22 Nov 16 |
olle |
request.open("GET", url, true); |
4247 |
22 Nov 16 |
olle |
Ajax.setReadyStateHandler(request, streg.onConfiguration, streg.onConfiguration); |
4247 |
22 Nov 16 |
olle |
request.send(null); |
4247 |
22 Nov 16 |
olle |
57 |
} |
4247 |
22 Nov 16 |
olle |
58 |
|
4247 |
22 Nov 16 |
olle |
streg.onConfiguration = function(request) |
4247 |
22 Nov 16 |
olle |
60 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
62 |
|
4247 |
22 Nov 16 |
olle |
if (debug) |
4247 |
22 Nov 16 |
olle |
64 |
{ |
4247 |
22 Nov 16 |
olle |
App.debug(Strings.encodeTags(request.responseText)); |
4247 |
22 Nov 16 |
olle |
66 |
} |
4247 |
22 Nov 16 |
olle |
67 |
|
4247 |
22 Nov 16 |
olle |
var response; |
4247 |
22 Nov 16 |
olle |
var error = false; |
4247 |
22 Nov 16 |
olle |
try |
4247 |
22 Nov 16 |
olle |
71 |
{ |
4247 |
22 Nov 16 |
olle |
response = JSON.parse(request.responseText); |
4247 |
22 Nov 16 |
olle |
if (response.status != 'ok') |
4247 |
22 Nov 16 |
olle |
74 |
{ |
4247 |
22 Nov 16 |
olle |
error = response.message || response.stacktrace || 'Unexpected error'; |
4247 |
22 Nov 16 |
olle |
76 |
} |
4247 |
22 Nov 16 |
olle |
77 |
} |
4247 |
22 Nov 16 |
olle |
catch (ex) |
4247 |
22 Nov 16 |
olle |
79 |
{ |
4247 |
22 Nov 16 |
olle |
error = ex; |
4247 |
22 Nov 16 |
olle |
81 |
} |
4247 |
22 Nov 16 |
olle |
if (error) App.debug(error); |
4247 |
22 Nov 16 |
olle |
83 |
|
4247 |
22 Nov 16 |
olle |
// Get configuration result |
4247 |
22 Nov 16 |
olle |
var conf = response.configuration; |
4247 |
22 Nov 16 |
olle |
86 |
|
4247 |
22 Nov 16 |
olle |
// Get unprocessed items |
4247 |
22 Nov 16 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
4247 |
22 Nov 16 |
olle |
url += '&cmd=GetUnprocessedSpecimens'; |
4247 |
22 Nov 16 |
olle |
url += '&withExtracts=false'; |
4247 |
22 Nov 16 |
olle |
Wizard.showLoadingAnimation('Loading unprocessed items...'); |
4247 |
22 Nov 16 |
olle |
Wizard.asyncJsonRequest(url, streg.initializeStep1); |
4247 |
22 Nov 16 |
olle |
93 |
} |
4247 |
22 Nov 16 |
olle |
94 |
|
4247 |
22 Nov 16 |
olle |
streg.initializeStep1 = function(response) |
4247 |
22 Nov 16 |
olle |
96 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
var specimens = response.specimens; |
4247 |
22 Nov 16 |
olle |
99 |
|
4247 |
22 Nov 16 |
olle |
var sourceItemList = frm.extractSourceItems; |
4247 |
22 Nov 16 |
olle |
if (specimens.length) |
4247 |
22 Nov 16 |
olle |
102 |
{ |
4247 |
22 Nov 16 |
olle |
var numItems = specimens.length; |
4247 |
22 Nov 16 |
olle |
for (var i=0; i < specimens.length; i++) |
4247 |
22 Nov 16 |
olle |
105 |
{ |
4247 |
22 Nov 16 |
olle |
var item = specimens[i]; |
4247 |
22 Nov 16 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(item.name); |
4247 |
22 Nov 16 |
olle |
if (item.bioWell) |
4247 |
22 Nov 16 |
olle |
109 |
{ |
4247 |
22 Nov 16 |
olle |
name += ' -- ' + Strings.encodeTags(item.bioWell.bioPlate.name + ' (' + item.bioWell.location + ')'); |
4247 |
22 Nov 16 |
olle |
111 |
} |
4247 |
22 Nov 16 |
olle |
var selected = (i == 0); |
4247 |
22 Nov 16 |
olle |
var option = new Option(name, item.id, selected, selected); |
4247 |
22 Nov 16 |
olle |
option.item = item; |
4247 |
22 Nov 16 |
olle |
sourceItemList.options[sourceItemList.length] = option; |
4247 |
22 Nov 16 |
olle |
116 |
} |
4247 |
22 Nov 16 |
olle |
streg.sourceItemsOnChange(); |
4247 |
22 Nov 16 |
olle |
118 |
} |
4247 |
22 Nov 16 |
olle |
else |
4247 |
22 Nov 16 |
olle |
120 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setFatalError('No items available for processing.'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
123 |
} |
4247 |
22 Nov 16 |
olle |
124 |
|
4247 |
22 Nov 16 |
olle |
Doc.show('step-1'); |
4247 |
22 Nov 16 |
olle |
Doc.show('gonext'); |
4247 |
22 Nov 16 |
olle |
127 |
} |
4247 |
22 Nov 16 |
olle |
128 |
|
4247 |
22 Nov 16 |
olle |
streg.sourceItemsOnChange = function() |
4247 |
22 Nov 16 |
olle |
130 |
{ |
4247 |
22 Nov 16 |
olle |
sourceItemListIsValid = false; |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('extractSourceItems'); |
4247 |
22 Nov 16 |
olle |
133 |
|
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
var sourceItemList = frm.extractSourceItems; |
4247 |
22 Nov 16 |
olle |
136 |
|
4247 |
22 Nov 16 |
olle |
var numSelected = 0; |
4247 |
22 Nov 16 |
olle |
for (var i = 0; i < sourceItemList.length; i++) |
4247 |
22 Nov 16 |
olle |
139 |
{ |
4247 |
22 Nov 16 |
olle |
if (sourceItemList[i].selected) numSelected++; |
4247 |
22 Nov 16 |
olle |
141 |
} |
4247 |
22 Nov 16 |
olle |
142 |
|
4247 |
22 Nov 16 |
olle |
if (numSelected < 1) |
4247 |
22 Nov 16 |
olle |
144 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('extractSourceItems', 'invalid', 'Must select at least one specimen.'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
147 |
} |
4247 |
22 Nov 16 |
olle |
148 |
|
4247 |
22 Nov 16 |
olle |
sourceItemListIsValid = true; |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('extractSourceItems', 'valid'); |
4247 |
22 Nov 16 |
olle |
151 |
} |
4247 |
22 Nov 16 |
olle |
152 |
|
4247 |
22 Nov 16 |
olle |
153 |
/* |
4247 |
22 Nov 16 |
olle |
streg.caseInfoLoadedStep1 = function(response) |
4247 |
22 Nov 16 |
olle |
155 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
157 |
|
4247 |
22 Nov 16 |
olle |
// Disable PAD/CL input field if not Administrator or PatientCurator |
4247 |
22 Nov 16 |
olle |
var isAdmin = myPermissions['Administrator'] == 1; |
4247 |
22 Nov 16 |
olle |
var isPatCur = myPermissions['PatientCurator'] == 1; |
4247 |
22 Nov 16 |
olle |
if (!isAdmin && !isPatCur) |
4247 |
22 Nov 16 |
olle |
162 |
{ |
4247 |
22 Nov 16 |
olle |
frm.pad.disabled = true; |
4247 |
22 Nov 16 |
olle |
164 |
} |
4247 |
22 Nov 16 |
olle |
165 |
|
4247 |
22 Nov 16 |
olle |
sampleItemPrefix = response.sampleItemPrefix; |
4247 |
22 Nov 16 |
olle |
sampleItemNumDigits = response.sampleItemNumDigits; |
4247 |
22 Nov 16 |
olle |
var nofCases = response.count; |
4247 |
22 Nov 16 |
olle |
if (nofCases == null) |
4247 |
22 Nov 16 |
olle |
170 |
{ |
4247 |
22 Nov 16 |
olle |
nofCases = 0; |
4247 |
22 Nov 16 |
olle |
172 |
} |
4247 |
22 Nov 16 |
olle |
var startNum = nofCases + 1; |
4247 |
22 Nov 16 |
olle |
// Pad number with leading zeros to get right number of digits |
4247 |
22 Nov 16 |
olle |
startNum = String('0000000000' + startNum).slice(-sampleItemNumDigits); |
4247 |
22 Nov 16 |
olle |
var startCase = sampleItemPrefix + startNum; |
4247 |
22 Nov 16 |
olle |
frm.caseName.value = startCase; |
4247 |
22 Nov 16 |
olle |
Doc.element('caseNameText').innerHTML = 'The case name (barcode) associated with this specimen tube ("' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits).'; |
4247 |
22 Nov 16 |
olle |
179 |
|
4247 |
22 Nov 16 |
olle |
Doc.show('step-1'); |
4247 |
22 Nov 16 |
olle |
Doc.show('gonext'); |
4247 |
22 Nov 16 |
olle |
182 |
} |
4247 |
22 Nov 16 |
olle |
183 |
*/ |
4247 |
22 Nov 16 |
olle |
184 |
|
4247 |
22 Nov 16 |
olle |
streg.validateStep1 = function(event) |
4247 |
22 Nov 16 |
olle |
186 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
188 |
|
4247 |
22 Nov 16 |
olle |
189 |
/* |
4247 |
22 Nov 16 |
olle |
var caseName = frm.caseName.value; |
4247 |
22 Nov 16 |
olle |
var caseIsValid = false; |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('caseName'); |
4247 |
22 Nov 16 |
olle |
if (caseName == '') |
4247 |
22 Nov 16 |
olle |
194 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('caseName', 'invalid', 'Missing'); |
4247 |
22 Nov 16 |
olle |
frm.caseName.focus(); |
4247 |
22 Nov 16 |
olle |
197 |
} |
4247 |
22 Nov 16 |
olle |
else if (!Meludi.isValidCaseName2(caseName, sampleItemPrefix, sampleItemNumDigits)) |
4247 |
22 Nov 16 |
olle |
199 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('caseName', 'invalid', 'Only name = "' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits is allowed.'); |
4247 |
22 Nov 16 |
olle |
frm.caseName.focus(); |
4247 |
22 Nov 16 |
olle |
202 |
} |
4247 |
22 Nov 16 |
olle |
else |
4247 |
22 Nov 16 |
olle |
204 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('caseName', 'valid'); |
4247 |
22 Nov 16 |
olle |
caseIsValid = true; |
4247 |
22 Nov 16 |
olle |
207 |
} |
4247 |
22 Nov 16 |
olle |
208 |
|
4247 |
22 Nov 16 |
olle |
// If not valid, we prevent the wizard from moving to the next step |
4247 |
22 Nov 16 |
olle |
if (!caseIsValid) event.preventDefault(); |
4247 |
22 Nov 16 |
olle |
211 |
*/ |
4247 |
22 Nov 16 |
olle |
212 |
} |
4247 |
22 Nov 16 |
olle |
213 |
|
4247 |
22 Nov 16 |
olle |
streg.initializeStep2 = function() |
4247 |
22 Nov 16 |
olle |
215 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
217 |
|
4247 |
22 Nov 16 |
olle |
frm.extractSourceItems.disabled = true; |
4247 |
22 Nov 16 |
olle |
219 |
|
4247 |
22 Nov 16 |
olle |
// Get list of selected specimens |
4247 |
22 Nov 16 |
olle |
var selItemsList = streg.getSelectedItemsList(); |
4247 |
22 Nov 16 |
olle |
var numItems = selItemsList.length; |
4247 |
22 Nov 16 |
olle |
var tubeContentType = 'Specimen'; |
4247 |
22 Nov 16 |
olle |
var nofTubes = numItems; |
4247 |
22 Nov 16 |
olle |
var extractsFromFirstSpecimenOnly = false; |
4247 |
22 Nov 16 |
olle |
var storageBoxSuffix = streg.fetchStorageBoxSuffix(tubeContentType); |
4247 |
22 Nov 16 |
olle |
if (nofTubes > 2) Doc.addClass('step-1', 'auto-hide'); |
4247 |
22 Nov 16 |
olle |
228 |
|
4247 |
22 Nov 16 |
olle |
var html = ''; |
4247 |
22 Nov 16 |
olle |
230 |
|
4247 |
22 Nov 16 |
olle |
for (var i=0; i < nofTubes; i++) |
4247 |
22 Nov 16 |
olle |
232 |
{ |
4247 |
22 Nov 16 |
olle |
var item = selItemsList[i]; |
4247 |
22 Nov 16 |
olle |
var tubeContentTypeName = 'Specimen'; |
4247 |
22 Nov 16 |
olle |
var tubeContentTypeNameInternal = 'specimen'; |
4247 |
22 Nov 16 |
olle |
var tubeName = item.name; |
4247 |
22 Nov 16 |
olle |
html += '<tr class="section-header">'; |
4247 |
22 Nov 16 |
olle |
html += '<td colspan="4">'+tubeContentTypeName+' Tube '+tubeName+'</td>'; |
4247 |
22 Nov 16 |
olle |
html += '</tr>'; |
4247 |
22 Nov 16 |
olle |
240 |
|
4247 |
22 Nov 16 |
olle |
var boxMsg = 'Box-number and position where the '+tubeContentTypeNameInternal+' tube is located.'; |
4247 |
22 Nov 16 |
olle |
var dnaBoxMsg = 'Box-number and position where the DNA extract will be located.'; |
4247 |
22 Nov 16 |
olle |
var rnaBoxMsg = 'Box-number and position where the RNA extract will be located.'; |
4247 |
22 Nov 16 |
olle |
var disabledAttribute = ' disabled'; |
4247 |
22 Nov 16 |
olle |
245 |
|
4247 |
22 Nov 16 |
olle |
html += '<tr>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="subprompt">'+tubeContentTypeName+' '+tubeName+' '+'Box</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="input">'; |
4247 |
22 Nov 16 |
olle |
html += '<input type="text" name="box.'+i+'" id="box.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Row<input type="text" name="row.'+i+'" id="row.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Column<input type="text" name="column.'+i+'" id="column.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += '</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="status" id="box.'+i+'.status"></td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="help"><span id="box.'+i+'.message" class="message"></span>'+boxMsg+'<span id="position.'+i+'.message" class="message"></span></td>'; |
4247 |
22 Nov 16 |
olle |
html += '</tr>'; |
4247 |
22 Nov 16 |
olle |
256 |
|
4247 |
22 Nov 16 |
olle |
if (tubeContentType == 'Specimen') |
4247 |
22 Nov 16 |
olle |
258 |
{ |
4247 |
22 Nov 16 |
olle |
disabledAttribute = ''; |
4247 |
22 Nov 16 |
olle |
html += '<tr>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="subprompt">DNA extract'+' '+tubeName+'.d '+'Box</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="input">'; |
4247 |
22 Nov 16 |
olle |
html += '<input type="text" name="dnaBox.'+i+'" id="dnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Row<input type="text" name="dnaRow.'+i+'" id="dnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Column<input type="text" name="dnaColumn.'+i+'" id="dnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += '</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="status" id="dnaBox.'+i+'.status"></td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="help"><span id="dnaBox.'+i+'.message" class="message"></span>'+dnaBoxMsg+'<span id="dnaPosition.'+i+'.message" class="message"></span></td>'; |
4247 |
22 Nov 16 |
olle |
html += '</tr>'; |
4247 |
22 Nov 16 |
olle |
270 |
|
4247 |
22 Nov 16 |
olle |
html += '<tr>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="subprompt">RNA extract'+' '+tubeName+'.r '+'Box</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="input">'; |
4247 |
22 Nov 16 |
olle |
html += '<input type="text" name="rnaBox.'+i+'" id="rnaBox.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Row<input type="text" name="rnaRow.'+i+'" id="rnaRow.'+i+'" style="text-transform:uppercase; width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += ' Column<input type="text" name="rnaColumn.'+i+'" id="rnaColumn.'+i+'" style="width: 3em;" maxlength="2"'+disabledAttribute+'>'; |
4247 |
22 Nov 16 |
olle |
html += '</td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="status" id="rnaBox.'+i+'.status"></td>'; |
4247 |
22 Nov 16 |
olle |
html += '<td class="help"><span id="rnaBox.'+i+'.message" class="message"></span>'+rnaBoxMsg+'<span id="rnaPosition.'+i+'.message" class="message"></span></td>'; |
4247 |
22 Nov 16 |
olle |
html += '</tr>'; |
4247 |
22 Nov 16 |
olle |
281 |
|
4247 |
22 Nov 16 |
olle |
282 |
} |
4247 |
22 Nov 16 |
olle |
283 |
} |
4247 |
22 Nov 16 |
olle |
Doc.element('specimen-tubes').innerHTML = html; |
4247 |
22 Nov 16 |
olle |
285 |
|
4247 |
22 Nov 16 |
olle |
Wizard.setCurrentStep(2); |
4247 |
22 Nov 16 |
olle |
Doc.show('goregister'); |
4247 |
22 Nov 16 |
olle |
Doc.show('gocancel'); |
4247 |
22 Nov 16 |
olle |
289 |
|
4247 |
22 Nov 16 |
olle |
var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId(); |
4247 |
22 Nov 16 |
olle |
url += '&cmd=FindStoragePositions'; |
4247 |
22 Nov 16 |
olle |
url += '&nofTubes='+nofTubes; |
4247 |
22 Nov 16 |
olle |
url += '&storageBoxSuffix='+storageBoxSuffix; |
4247 |
22 Nov 16 |
olle |
url += '&extractsFromFirstSpecimenOnly='+extractsFromFirstSpecimenOnly; |
4247 |
22 Nov 16 |
olle |
295 |
|
4247 |
22 Nov 16 |
olle |
Wizard.showLoadingAnimation('Looking for empty box positions...'); |
4247 |
22 Nov 16 |
olle |
Wizard.asyncJsonRequest(url, streg.storagePositionsLoaded); |
4247 |
22 Nov 16 |
olle |
298 |
} |
4247 |
22 Nov 16 |
olle |
299 |
|
4247 |
22 Nov 16 |
olle |
streg.getSelectedItemsList = function() |
4247 |
22 Nov 16 |
olle |
301 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
303 |
|
4247 |
22 Nov 16 |
olle |
// Get number of selected extract source items |
4247 |
22 Nov 16 |
olle |
var numItems = 0; |
4247 |
22 Nov 16 |
olle |
var selItemsList = []; |
4247 |
22 Nov 16 |
olle |
for (var i = 0; i < frm.extractSourceItems.length; i++) |
4247 |
22 Nov 16 |
olle |
308 |
{ |
4247 |
22 Nov 16 |
olle |
if (frm.extractSourceItems[i].selected) |
4247 |
22 Nov 16 |
olle |
310 |
{ |
4247 |
22 Nov 16 |
olle |
if (frm.extractSourceItems[i].item != null) |
4247 |
22 Nov 16 |
olle |
312 |
{ |
4247 |
22 Nov 16 |
olle |
selItemsList[numItems] = frm.extractSourceItems[i].item; |
4247 |
22 Nov 16 |
olle |
numItems++; |
4247 |
22 Nov 16 |
olle |
315 |
} |
4247 |
22 Nov 16 |
olle |
316 |
} |
4247 |
22 Nov 16 |
olle |
317 |
} |
4247 |
22 Nov 16 |
olle |
return selItemsList; |
4247 |
22 Nov 16 |
olle |
319 |
} |
4247 |
22 Nov 16 |
olle |
320 |
|
4247 |
22 Nov 16 |
olle |
streg.caseInfoLoaded = function(response) |
4247 |
22 Nov 16 |
olle |
322 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
caseInfo = response.caseInfo; |
4247 |
22 Nov 16 |
olle |
325 |
|
4247 |
22 Nov 16 |
olle |
Wizard.setCurrentStep(2); |
4247 |
22 Nov 16 |
olle |
Doc.show('gocancel'); |
4247 |
22 Nov 16 |
olle |
Doc.show('gonext'); |
4247 |
22 Nov 16 |
olle |
329 |
|
4247 |
22 Nov 16 |
olle |
frm.arrivalDate.value = Dates.formatDate(new Date(), 'yyyyMMdd'); |
4247 |
22 Nov 16 |
olle |
331 |
|
4247 |
22 Nov 16 |
olle |
frm.nofTubes.focus(); |
4247 |
22 Nov 16 |
olle |
frm.nofTubes.setSelectionRange(0,1); |
4247 |
22 Nov 16 |
olle |
334 |
} |
4247 |
22 Nov 16 |
olle |
335 |
|
4247 |
22 Nov 16 |
olle |
streg.validateStep2 = function(event) |
4247 |
22 Nov 16 |
olle |
337 |
{ |
4247 |
22 Nov 16 |
olle |
var valid = true; |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
340 |
|
4247 |
22 Nov 16 |
olle |
valid &= nofTubesIsValid; |
4247 |
22 Nov 16 |
olle |
valid &= Wizard.isValid('arrivalDate'); |
4247 |
22 Nov 16 |
olle |
valid &= samplingDateIsValid; |
4247 |
22 Nov 16 |
olle |
valid &= viableTumourCellsPercentIsValid; |
4247 |
22 Nov 16 |
olle |
345 |
|
4247 |
22 Nov 16 |
olle |
if (!valid) event.preventDefault(); |
4247 |
22 Nov 16 |
olle |
347 |
} |
4247 |
22 Nov 16 |
olle |
348 |
|
4247 |
22 Nov 16 |
olle |
streg.storagePositionsLoaded = function(response) |
4247 |
22 Nov 16 |
olle |
350 |
{ |
4247 |
22 Nov 16 |
olle |
var freeWells = response.wells; |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
var tubeContentType = 'Specimen'; |
4247 |
22 Nov 16 |
olle |
var extractsFromFirstSpecimenOnly = false; |
4247 |
22 Nov 16 |
olle |
// Get list of selected specimens |
4247 |
22 Nov 16 |
olle |
var selItemsList = streg.getSelectedItemsList(); |
4247 |
22 Nov 16 |
olle |
var nofTubes = selItemsList.length; |
4247 |
22 Nov 16 |
olle |
358 |
|
4247 |
22 Nov 16 |
olle |
if (tubeContentType == 'Specimen') |
4247 |
22 Nov 16 |
olle |
360 |
{ |
4247 |
22 Nov 16 |
olle |
for (var i = 0; i < nofTubes; i++) |
4247 |
22 Nov 16 |
olle |
362 |
{ |
4247 |
22 Nov 16 |
olle |
// Get info on specimen well from stored info |
4247 |
22 Nov 16 |
olle |
var specimen = selItemsList[i]; |
4247 |
22 Nov 16 |
olle |
var specWell = specimen.bioWell; |
4247 |
22 Nov 16 |
olle |
366 |
|
4247 |
22 Nov 16 |
olle |
wellIndex = 3*i; |
4247 |
22 Nov 16 |
olle |
var dnaWell = null; |
4247 |
22 Nov 16 |
olle |
if (i == 0 || !extractsFromFirstSpecimenOnly) |
4247 |
22 Nov 16 |
olle |
370 |
{ |
4247 |
22 Nov 16 |
olle |
dnaWell = freeWells[wellIndex+1]; |
4247 |
22 Nov 16 |
olle |
if (!dnaWell || dnaWell == '') |
4247 |
22 Nov 16 |
olle |
373 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('dnaBox.'+i, 'invalid', 'Missing box'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
376 |
} |
4247 |
22 Nov 16 |
olle |
377 |
} |
4247 |
22 Nov 16 |
olle |
var rnaWell = null; |
4247 |
22 Nov 16 |
olle |
if (i == 0 || !extractsFromFirstSpecimenOnly) |
4247 |
22 Nov 16 |
olle |
380 |
{ |
4247 |
22 Nov 16 |
olle |
rnaWell = freeWells[wellIndex+2]; |
4247 |
22 Nov 16 |
olle |
if (!rnaWell || rnaWell == '') |
4247 |
22 Nov 16 |
olle |
383 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('rnaBox.'+i, 'invalid', 'Missing box'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
386 |
} |
4247 |
22 Nov 16 |
olle |
387 |
} |
4247 |
22 Nov 16 |
olle |
388 |
|
4247 |
22 Nov 16 |
olle |
// Update form fields for storage plates |
4247 |
22 Nov 16 |
olle |
if (specWell) |
4247 |
22 Nov 16 |
olle |
391 |
{ |
4247 |
22 Nov 16 |
olle |
frm['box.'+i].value = specWell.bioPlate.name; |
4247 |
22 Nov 16 |
olle |
frm['row.'+i].value = Meludi.wellToAlpha(specWell.row); |
4247 |
22 Nov 16 |
olle |
frm['column.'+i].value = specWell.column+1; |
4247 |
22 Nov 16 |
olle |
395 |
} |
4247 |
22 Nov 16 |
olle |
396 |
|
4247 |
22 Nov 16 |
olle |
if (dnaWell) |
4247 |
22 Nov 16 |
olle |
398 |
{ |
4247 |
22 Nov 16 |
olle |
frm['dnaBox.'+i].value = dnaWell.bioPlate.name; |
4247 |
22 Nov 16 |
olle |
frm['dnaRow.'+i].value = Meludi.wellToAlpha(dnaWell.row); |
4247 |
22 Nov 16 |
olle |
frm['dnaColumn.'+i].value = dnaWell.column+1; |
4247 |
22 Nov 16 |
olle |
402 |
} |
4247 |
22 Nov 16 |
olle |
403 |
|
4247 |
22 Nov 16 |
olle |
if (rnaWell) |
4247 |
22 Nov 16 |
olle |
405 |
{ |
4247 |
22 Nov 16 |
olle |
frm['rnaBox.'+i].value = rnaWell.bioPlate.name; |
4247 |
22 Nov 16 |
olle |
frm['rnaRow.'+i].value = Meludi.wellToAlpha(rnaWell.row); |
4247 |
22 Nov 16 |
olle |
frm['rnaColumn.'+i].value = rnaWell.column+1; |
4247 |
22 Nov 16 |
olle |
409 |
} |
4247 |
22 Nov 16 |
olle |
410 |
|
4247 |
22 Nov 16 |
olle |
// Move focus to next field |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('box.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'row.'+i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('row.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'column.'+i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('column.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaBox.'+i }); |
4247 |
22 Nov 16 |
olle |
415 |
|
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaBox.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaRow.'+i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaRow.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'dnaColumn.'+i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaColumn.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaBox.'+i }); |
4247 |
22 Nov 16 |
olle |
419 |
|
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaBox.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaRow.'+i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaRow.'+i, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rnaColumn.'+i }); |
4247 |
22 Nov 16 |
olle |
422 |
|
4247 |
22 Nov 16 |
olle |
// Form validation |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('column.'+i, 'keypress', Events.integerOnly); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('box.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('row.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('column.'+i, 'change', streg.wellOnChange, { 'boxtype': 'Specimen', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('box.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'Specimen'}); |
4247 |
22 Nov 16 |
olle |
429 |
|
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaColumn.'+i, 'keypress', Events.integerOnly); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaBox.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaRow.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaColumn.'+i, 'change', streg.wellOnChange, { 'boxtype': 'DNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('dnaBox.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'DNA'}); |
4247 |
22 Nov 16 |
olle |
435 |
|
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaColumn.'+i, 'keypress', Events.integerOnly); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaBox.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaRow.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaColumn.'+i, 'change', streg.wellOnChange, { 'boxtype': 'RNA', 'index': i }); |
4247 |
22 Nov 16 |
olle |
Events.addEventHandler('rnaBox.'+i, 'keyup', streg.boxOnKeyUp, { 'boxtype': 'RNA'}); |
4247 |
22 Nov 16 |
olle |
441 |
|
4247 |
22 Nov 16 |
olle |
wellIsValid[i] = true; |
4247 |
22 Nov 16 |
olle |
dnaWellIsValid[i] = true; |
4247 |
22 Nov 16 |
olle |
rnaWellIsValid[i] = true; |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('box.'+i, 'valid'); |
4247 |
22 Nov 16 |
olle |
if (i == 0 || !extractsFromFirstSpecimenOnly) |
4247 |
22 Nov 16 |
olle |
447 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('dnaBox.'+i, 'valid'); |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus('rnaBox.'+i, 'valid'); |
4247 |
22 Nov 16 |
olle |
450 |
} |
4247 |
22 Nov 16 |
olle |
451 |
} |
4247 |
22 Nov 16 |
olle |
452 |
} |
4247 |
22 Nov 16 |
olle |
453 |
} |
4247 |
22 Nov 16 |
olle |
454 |
|
4247 |
22 Nov 16 |
olle |
streg.fetchStorageBoxSuffix = function(tubeContentType) |
4247 |
22 Nov 16 |
olle |
456 |
{ |
4247 |
22 Nov 16 |
olle |
var storageBoxSuffix = null; |
4247 |
22 Nov 16 |
olle |
if (tubeContentType == 'Specimen') |
4247 |
22 Nov 16 |
olle |
459 |
{ |
4247 |
22 Nov 16 |
olle |
storageBoxSuffix = '_sp'; |
4247 |
22 Nov 16 |
olle |
461 |
} |
4247 |
22 Nov 16 |
olle |
else if (tubeContentType == 'DNA') |
4247 |
22 Nov 16 |
olle |
463 |
{ |
4247 |
22 Nov 16 |
olle |
storageBoxSuffix = '_dna'; |
4247 |
22 Nov 16 |
olle |
465 |
} |
4247 |
22 Nov 16 |
olle |
else if (tubeContentType == 'RNA') |
4247 |
22 Nov 16 |
olle |
467 |
{ |
4247 |
22 Nov 16 |
olle |
storageBoxSuffix = '_rna'; |
4247 |
22 Nov 16 |
olle |
469 |
} |
4247 |
22 Nov 16 |
olle |
else if (tubeContentType == 'DNA_RNA') |
4247 |
22 Nov 16 |
olle |
471 |
{ |
4247 |
22 Nov 16 |
olle |
storageBoxSuffix = '_dna_rna'; |
4247 |
22 Nov 16 |
olle |
473 |
} |
4247 |
22 Nov 16 |
olle |
return storageBoxSuffix; |
4247 |
22 Nov 16 |
olle |
475 |
} |
4247 |
22 Nov 16 |
olle |
476 |
|
4247 |
22 Nov 16 |
olle |
streg.boxOnKeyUp = function(event) |
4247 |
22 Nov 16 |
olle |
478 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
var tubeContentType = frm.tubeContentType.value; |
4247 |
22 Nov 16 |
olle |
481 |
|
4247 |
22 Nov 16 |
olle |
var boxType = Data.get(event.currentTarget, 'boxtype'); |
4247 |
22 Nov 16 |
olle |
var index = Data.int(event.currentTarget, 'index'); |
4247 |
22 Nov 16 |
olle |
484 |
|
4247 |
22 Nov 16 |
olle |
// Get box prefix, default is for input tubes |
4247 |
22 Nov 16 |
olle |
var boxPrefix = 'box.'; |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'DNA') |
4247 |
22 Nov 16 |
olle |
488 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'dnaBox.'; |
4247 |
22 Nov 16 |
olle |
490 |
} |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'RNA') |
4247 |
22 Nov 16 |
olle |
492 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'rnaBox.'; |
4247 |
22 Nov 16 |
olle |
494 |
} |
4247 |
22 Nov 16 |
olle |
495 |
|
4247 |
22 Nov 16 |
olle |
// Check box name |
4247 |
22 Nov 16 |
olle |
var boxIsValid = true; |
4247 |
22 Nov 16 |
olle |
var box = frm[boxPrefix+index].value; |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index); |
4247 |
22 Nov 16 |
olle |
// Check for prefix "ML_" |
4247 |
22 Nov 16 |
olle |
if (box.indexOf('ML_') != 0) |
4247 |
22 Nov 16 |
olle |
502 |
{ |
4247 |
22 Nov 16 |
olle |
boxIsValid = false; |
4247 |
22 Nov 16 |
olle |
504 |
} |
4247 |
22 Nov 16 |
olle |
var suffix = '_sp'; |
4247 |
22 Nov 16 |
olle |
if (tubeContentType == 'DNA' || (boxType && boxType == 'DNA')) |
4247 |
22 Nov 16 |
olle |
507 |
{ |
4247 |
22 Nov 16 |
olle |
suffix = '_dna'; |
4247 |
22 Nov 16 |
olle |
509 |
} |
4247 |
22 Nov 16 |
olle |
else if (tubeContentType == 'RNA' || (boxType && boxType == 'RNA')) |
4247 |
22 Nov 16 |
olle |
511 |
{ |
4247 |
22 Nov 16 |
olle |
suffix = '_rna'; |
4247 |
22 Nov 16 |
olle |
513 |
} |
4247 |
22 Nov 16 |
olle |
// Check for suffix |
4247 |
22 Nov 16 |
olle |
if (box.indexOf(suffix) != (box.length - suffix.length)) |
4247 |
22 Nov 16 |
olle |
516 |
{ |
4247 |
22 Nov 16 |
olle |
boxIsValid = false; |
4247 |
22 Nov 16 |
olle |
518 |
} |
4247 |
22 Nov 16 |
olle |
519 |
|
4247 |
22 Nov 16 |
olle |
if (!boxIsValid) |
4247 |
22 Nov 16 |
olle |
521 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Box name must start with "ML_" and end with "'+suffix+'"'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
524 |
} |
4247 |
22 Nov 16 |
olle |
525 |
} |
4247 |
22 Nov 16 |
olle |
526 |
|
4247 |
22 Nov 16 |
olle |
streg.wellOnChange = function(event) |
4247 |
22 Nov 16 |
olle |
528 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
var target = event.currentTarget; |
4247 |
22 Nov 16 |
olle |
531 |
|
4247 |
22 Nov 16 |
olle |
var boxType = Data.get(target, 'boxtype'); |
4247 |
22 Nov 16 |
olle |
var index = Data.int(target, 'index'); |
4247 |
22 Nov 16 |
olle |
534 |
|
4247 |
22 Nov 16 |
olle |
// Get well position prefixes, default is for input tubes |
4247 |
22 Nov 16 |
olle |
var boxPrefix = 'box.'; |
4247 |
22 Nov 16 |
olle |
var rowPrefix = 'row.'; |
4247 |
22 Nov 16 |
olle |
var columnPrefix = 'column.'; |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'DNA') |
4247 |
22 Nov 16 |
olle |
540 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'dnaBox.'; |
4247 |
22 Nov 16 |
olle |
rowPrefix = 'dnaRow.'; |
4247 |
22 Nov 16 |
olle |
columnPrefix = 'dnaColumn.'; |
4247 |
22 Nov 16 |
olle |
544 |
} |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'RNA') |
4247 |
22 Nov 16 |
olle |
546 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'rnaBox.'; |
4247 |
22 Nov 16 |
olle |
rowPrefix = 'rnaRow.'; |
4247 |
22 Nov 16 |
olle |
columnPrefix = 'rnaColumn.'; |
4247 |
22 Nov 16 |
olle |
550 |
} |
4247 |
22 Nov 16 |
olle |
var box = frm[boxPrefix+index].value; |
4247 |
22 Nov 16 |
olle |
var row = frm[rowPrefix+index].value; |
4247 |
22 Nov 16 |
olle |
var column = frm[columnPrefix+index].value; |
4247 |
22 Nov 16 |
olle |
554 |
|
4247 |
22 Nov 16 |
olle |
//wellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
if (!boxType || boxType == 'Specimen') |
4247 |
22 Nov 16 |
olle |
557 |
{ |
4247 |
22 Nov 16 |
olle |
wellIsValid[index] = false; |
4247 |
22 Nov 16 |
olle |
559 |
} |
4247 |
22 Nov 16 |
olle |
else if (boxType && boxType == 'DNA') |
4247 |
22 Nov 16 |
olle |
561 |
{ |
4247 |
22 Nov 16 |
olle |
dnaWellIsValid[index] = false; |
4247 |
22 Nov 16 |
olle |
563 |
} |
4247 |
22 Nov 16 |
olle |
else if (boxType && boxType == 'RNA') |
4247 |
22 Nov 16 |
olle |
565 |
{ |
4247 |
22 Nov 16 |
olle |
rnaWellIsValid[index] = false; |
4247 |
22 Nov 16 |
olle |
567 |
} |
4247 |
22 Nov 16 |
olle |
else |
4247 |
22 Nov 16 |
olle |
569 |
{ |
4247 |
22 Nov 16 |
olle |
wellIsValid[index] = false; |
4247 |
22 Nov 16 |
olle |
571 |
} |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index); |
4247 |
22 Nov 16 |
olle |
573 |
|
4247 |
22 Nov 16 |
olle |
if (box == '') |
4247 |
22 Nov 16 |
olle |
575 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing box'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
578 |
} |
4247 |
22 Nov 16 |
olle |
579 |
|
4247 |
22 Nov 16 |
olle |
// Position errors are reported on box message line |
4247 |
22 Nov 16 |
olle |
if (row == '') |
4247 |
22 Nov 16 |
olle |
582 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing row'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
585 |
} |
4247 |
22 Nov 16 |
olle |
586 |
|
4247 |
22 Nov 16 |
olle |
if (column == '') |
4247 |
22 Nov 16 |
olle |
588 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', 'Missing column'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
591 |
} |
4247 |
22 Nov 16 |
olle |
592 |
|
4247 |
22 Nov 16 |
olle |
// Check for duplicates |
4247 |
22 Nov 16 |
olle |
var nofTubes = parseInt(frm.nofTubes.value); |
4247 |
22 Nov 16 |
olle |
for (var i=0; i < nofTubes; i++) |
4247 |
22 Nov 16 |
olle |
596 |
{ |
4247 |
22 Nov 16 |
olle |
if (i != index) |
4247 |
22 Nov 16 |
olle |
598 |
{ |
4247 |
22 Nov 16 |
olle |
if (box == frm.elements[boxPrefix+i].value && row == frm[rowPrefix+i].value && column == frm[columnPrefix+i].value) |
4247 |
22 Nov 16 |
olle |
600 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', 'The position is already used once in this wizard'); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
603 |
} |
4247 |
22 Nov 16 |
olle |
604 |
} |
4247 |
22 Nov 16 |
olle |
605 |
} |
4247 |
22 Nov 16 |
olle |
606 |
|
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'checking', 'Checking...'); |
4247 |
22 Nov 16 |
olle |
608 |
|
4247 |
22 Nov 16 |
olle |
// Seems to be ok -- check if used by another sample |
4247 |
22 Nov 16 |
olle |
var request = Ajax.getXmlHttpRequest(); |
4247 |
22 Nov 16 |
olle |
var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId(); |
4247 |
22 Nov 16 |
olle |
url += '&cmd=ValidateWell'; |
4247 |
22 Nov 16 |
olle |
url += '&box=' + encodeURIComponent(box); |
4247 |
22 Nov 16 |
olle |
url += '&row=' + encodeURIComponent(row); |
4247 |
22 Nov 16 |
olle |
url += '&column=' + encodeURIComponent(column); |
4247 |
22 Nov 16 |
olle |
616 |
|
4247 |
22 Nov 16 |
olle |
Wizard.asyncJsonRequest(url, function(response) { streg.onBoxValidated(response, boxType, index) } ); |
4247 |
22 Nov 16 |
olle |
618 |
} |
4247 |
22 Nov 16 |
olle |
619 |
|
4247 |
22 Nov 16 |
olle |
streg.onBoxValidated = function(response, boxType, index) |
4247 |
22 Nov 16 |
olle |
621 |
{ |
4247 |
22 Nov 16 |
olle |
// Get well position prefixes, default is for input tubes |
4247 |
22 Nov 16 |
olle |
var boxPrefix = 'box.'; |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'DNA') |
4247 |
22 Nov 16 |
olle |
625 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'dnaBox.'; |
4247 |
22 Nov 16 |
olle |
627 |
} |
4247 |
22 Nov 16 |
olle |
if (boxType && boxType == 'RNA') |
4247 |
22 Nov 16 |
olle |
629 |
{ |
4247 |
22 Nov 16 |
olle |
boxPrefix = 'rnaBox.'; |
4247 |
22 Nov 16 |
olle |
631 |
} |
4247 |
22 Nov 16 |
olle |
632 |
|
4247 |
22 Nov 16 |
olle |
//Wizard.setInputStatus('position.'+index); |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index); |
4247 |
22 Nov 16 |
olle |
if (response.message) |
4247 |
22 Nov 16 |
olle |
636 |
{ |
4247 |
22 Nov 16 |
olle |
//Wizard.setInputStatus(response.box ? 'box.'+index : 'position.'+index, 'invalid', Strings.encodeTags(response.message)); |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'invalid', Strings.encodeTags(response.message)); |
4247 |
22 Nov 16 |
olle |
return; |
4247 |
22 Nov 16 |
olle |
640 |
} |
4247 |
22 Nov 16 |
olle |
641 |
|
4247 |
22 Nov 16 |
olle |
//wellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
if (!boxType || boxType == 'Specimen') |
4247 |
22 Nov 16 |
olle |
644 |
{ |
4247 |
22 Nov 16 |
olle |
wellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
646 |
} |
4247 |
22 Nov 16 |
olle |
else if (boxType && boxType == 'DNA') |
4247 |
22 Nov 16 |
olle |
648 |
{ |
4247 |
22 Nov 16 |
olle |
dnaWellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
650 |
} |
4247 |
22 Nov 16 |
olle |
else if (boxType && boxType == 'RNA') |
4247 |
22 Nov 16 |
olle |
652 |
{ |
4247 |
22 Nov 16 |
olle |
rnaWellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
654 |
} |
4247 |
22 Nov 16 |
olle |
else |
4247 |
22 Nov 16 |
olle |
656 |
{ |
4247 |
22 Nov 16 |
olle |
wellIsValid[index] = true; |
4247 |
22 Nov 16 |
olle |
658 |
} |
4247 |
22 Nov 16 |
olle |
Wizard.setInputStatus(boxPrefix+index, 'valid'); |
4247 |
22 Nov 16 |
olle |
660 |
} |
4247 |
22 Nov 16 |
olle |
661 |
|
4247 |
22 Nov 16 |
olle |
streg.submit = function() |
4247 |
22 Nov 16 |
olle |
663 |
{ |
4247 |
22 Nov 16 |
olle |
var frm = document.forms['meludi']; |
4247 |
22 Nov 16 |
olle |
665 |
|
4247 |
22 Nov 16 |
olle |
caseInfo = {}; |
4247 |
22 Nov 16 |
olle |
caseInfo.tubeContentType = 'Specimen'; |
4247 |
22 Nov 16 |
olle |
668 |
|
4247 |
22 Nov 16 |
olle |
// Get list of selected specimens |
4247 |
22 Nov 16 |
olle |
var selItemsList = streg.getSelectedItemsList(); |
4247 |
22 Nov 16 |
olle |
var nofTubes = selItemsList.length; |
4247 |
22 Nov 16 |
olle |
caseInfo.specimen = []; |
4247 |
22 Nov 16 |
olle |
for (var i = 0; i < nofTubes; i++) |
4247 |
22 Nov 16 |
olle |
674 |
{ |
4247 |
22 Nov 16 |
olle |
var item = selItemsList[i]; |
4247 |
22 Nov 16 |
olle |
var specimenTube ={}; |
4247 |
22 Nov 16 |
olle |
specimenTube.name = item.name; |
4247 |
22 Nov 16 |
olle |
specimenTube.box = frm['box.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.row = frm['row.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.column = frm['column.'+i].value; |
4247 |
22 Nov 16 |
olle |
681 |
|
4247 |
22 Nov 16 |
olle |
// Storage position for DNA extract from specimen |
4247 |
22 Nov 16 |
olle |
specimenTube.dnaBox = frm['dnaBox.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.dnaRow = frm['dnaRow.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.dnaColumn = frm['dnaColumn.'+i].value; |
4247 |
22 Nov 16 |
olle |
686 |
|
4247 |
22 Nov 16 |
olle |
// Storage position for RNA extract from specimen |
4247 |
22 Nov 16 |
olle |
specimenTube.rnaBox = frm['rnaBox.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.rnaRow = frm['rnaRow.'+i].value; |
4247 |
22 Nov 16 |
olle |
specimenTube.rnaColumn = frm['rnaColumn.'+i].value; |
4247 |
22 Nov 16 |
olle |
691 |
|
4247 |
22 Nov 16 |
olle |
caseInfo.specimen[i] = specimenTube; |
4247 |
22 Nov 16 |
olle |
693 |
} |
4247 |
22 Nov 16 |
olle |
694 |
|
4247 |
22 Nov 16 |
olle |
var submitInfo = {}; |
4247 |
22 Nov 16 |
olle |
submitInfo.caseInfo = caseInfo; |
4247 |
22 Nov 16 |
olle |
697 |
|
4247 |
22 Nov 16 |
olle |
var url = '../SpecimenTubeRegistration.servlet?ID='+App.getSessionId(); |
4247 |
22 Nov 16 |
olle |
url += '&cmd=CreateExtractsForExtraSpecimens'; |
4247 |
22 Nov 16 |
olle |
Wizard.showLoadingAnimation('Performing registration...'); |
4247 |
22 Nov 16 |
olle |
Wizard.asyncJsonRequest(url, streg.submissionResults, 'POST', JSON.stringify(submitInfo)); |
4247 |
22 Nov 16 |
olle |
702 |
} |
4247 |
22 Nov 16 |
olle |
703 |
|
4247 |
22 Nov 16 |
olle |
streg.submissionResults = function(response) |
4247 |
22 Nov 16 |
olle |
705 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.showFinalMessage(response.messages); |
4247 |
22 Nov 16 |
olle |
Doc.show('gorestart'); |
4247 |
22 Nov 16 |
olle |
Doc.show('gonext-message'); |
4247 |
22 Nov 16 |
olle |
709 |
} |
4247 |
22 Nov 16 |
olle |
710 |
|
4247 |
22 Nov 16 |
olle |
streg.countDownToRestart = function() |
4247 |
22 Nov 16 |
olle |
712 |
{ |
4247 |
22 Nov 16 |
olle |
var time = restartAt - (new Date()).getTime(); |
4247 |
22 Nov 16 |
olle |
if (time < 0) |
4247 |
22 Nov 16 |
olle |
715 |
{ |
4247 |
22 Nov 16 |
olle |
Wizard.restartWizard(); |
4247 |
22 Nov 16 |
olle |
717 |
} |
4247 |
22 Nov 16 |
olle |
else |
4247 |
22 Nov 16 |
olle |
719 |
{ |
4247 |
22 Nov 16 |
olle |
Doc.element('gonext-message').innerHTML = '<i>Wizard will restart automatically in ' + Math.ceil(time/1000) + ' seconds...</i>'; |
4247 |
22 Nov 16 |
olle |
721 |
} |
4247 |
22 Nov 16 |
olle |
722 |
} |
4247 |
22 Nov 16 |
olle |
723 |
|
4247 |
22 Nov 16 |
olle |
streg.stopAutoRestart = function() |
4247 |
22 Nov 16 |
olle |
725 |
{ |
4247 |
22 Nov 16 |
olle |
clearTimeout(restartTimer); |
4247 |
22 Nov 16 |
olle |
Doc.hide('gonext-message'); |
4247 |
22 Nov 16 |
olle |
Doc.hide('gostop'); |
4247 |
22 Nov 16 |
olle |
729 |
} |
4247 |
22 Nov 16 |
olle |
730 |
|
4247 |
22 Nov 16 |
olle |
return streg; |
4247 |
22 Nov 16 |
olle |
732 |
}(); |
4247 |
22 Nov 16 |
olle |
733 |
|
4247 |
22 Nov 16 |
olle |
Doc.onLoad(SpecimenTubeReg.initPage); |
4247 |
22 Nov 16 |
olle |
735 |
|