5044 |
19 Oct 18 |
olle |
var Ffpe_reg = function() |
5044 |
19 Oct 18 |
olle |
2 |
{ |
5044 |
19 Oct 18 |
olle |
var ffpe_reg = {}; |
5044 |
19 Oct 18 |
olle |
var consentToId = { "Yes": "consent.yes", "No" : "consent.no", "Not asked": "consent.notAsked" }; |
5044 |
19 Oct 18 |
olle |
var patientInfo = null; |
5044 |
19 Oct 18 |
olle |
var caseInfo = null; |
5044 |
19 Oct 18 |
olle |
var debug = 0; |
5044 |
19 Oct 18 |
olle |
8 |
|
5044 |
19 Oct 18 |
olle |
var sampleItemPrefix = ''; |
5044 |
19 Oct 18 |
olle |
var sampleItemNumDigits = 5; |
5044 |
19 Oct 18 |
olle |
var referralPrefix = ''; |
5044 |
19 Oct 18 |
olle |
var referralNumDigits = 5; |
5044 |
19 Oct 18 |
olle |
var ffpeBlockItemPrefix = ''; |
5044 |
19 Oct 18 |
olle |
var ffpeBlockItemNumDigits = 1; |
5044 |
19 Oct 18 |
olle |
15 |
|
5044 |
19 Oct 18 |
olle |
var pnrIsValid = false; |
5044 |
19 Oct 18 |
olle |
var pnrIsAcceptable = false; |
5044 |
19 Oct 18 |
olle |
18 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.initPage = function() |
5044 |
19 Oct 18 |
olle |
20 |
{ |
5044 |
19 Oct 18 |
olle |
21 |
|
5044 |
19 Oct 18 |
olle |
// Step 1 |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('step-1', 'wizard-validate', ffpe_reg.validateStep1); |
5237 |
16 Jan 19 |
olle |
Events.addEventHandler('extractSourceItems', 'change', ffpe_reg.sourceItemsOnChange); |
5265 |
24 Jan 19 |
olle |
Events.addEventHandler('personalNumber', 'keyup', ffpe_reg.personalNumberOnChange); |
5237 |
16 Jan 19 |
olle |
//Events.addEventHandler('personalNumber', 'keypress', Wizard.goNextOnTabOrEnter); |
5044 |
19 Oct 18 |
olle |
27 |
|
5044 |
19 Oct 18 |
olle |
// Step 2 |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('step-2', 'wizard-initialize', ffpe_reg.initializeStep2); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('step-2', 'wizard-validate', ffpe_reg.validateStep2); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('consentDate', 'blur', Wizard.validateDate); |
5044 |
19 Oct 18 |
olle |
32 |
|
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('consent.yes', 'change', ffpe_reg.consentOnChange); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('consent.no', 'change', ffpe_reg.consentOnChange); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('consent.notAsked', 'change', ffpe_reg.consentOnChange); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('otherReasonIfNotAsked', 'focus', ffpe_reg.onOtherReasonFocus); |
5044 |
19 Oct 18 |
olle |
37 |
|
5237 |
16 Jan 19 |
olle |
//Events.addEventHandler('personalNumber', 'keyup', ffpe_reg.personalNumberOnChange); |
5237 |
16 Jan 19 |
olle |
//Events.addEventHandler('personalNumber', 'keypress', Wizard.goNextOnTabOrEnter); |
5044 |
19 Oct 18 |
olle |
40 |
|
5044 |
19 Oct 18 |
olle |
// Step 3 |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('step-3', 'wizard-initialize', ffpe_reg.initializeStep3); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('step-3', 'wizard-validate', ffpe_reg.validateStep3); |
5541 |
05 Jul 19 |
olle |
//Events.addEventHandler('addGeneralCommentSelect', 'change', ffpe_reg.addCommentGeneral2); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('familyName', 'blur', ffpe_reg.nameOnChange); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('allFirstNames', 'blur', ffpe_reg.nameOnChange); |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('allFirstNames', 'keypress', Wizard.goNextOnTabOrEnter); |
5044 |
19 Oct 18 |
olle |
48 |
|
5044 |
19 Oct 18 |
olle |
// Navigation |
5044 |
19 Oct 18 |
olle |
Buttons.addClickHandler('gocancel', Wizard.cancelWizard); |
5044 |
19 Oct 18 |
olle |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
5044 |
19 Oct 18 |
olle |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
5044 |
19 Oct 18 |
olle |
Buttons.addClickHandler('goregister', Wizard.goRegister); |
5203 |
07 Jan 19 |
olle |
Buttons.addClickHandler('today', ffpe_reg.arrivalDateToday); |
5044 |
19 Oct 18 |
olle |
55 |
|
5044 |
19 Oct 18 |
olle |
// Final registration |
5044 |
19 Oct 18 |
olle |
Events.addEventHandler('wizard', 'wizard-submit', ffpe_reg.submit); |
5044 |
19 Oct 18 |
olle |
58 |
|
5044 |
19 Oct 18 |
olle |
// Load permissions |
5044 |
19 Oct 18 |
olle |
ffpe_reg.initPermissions(); |
5044 |
19 Oct 18 |
olle |
// Load configuration |
5044 |
19 Oct 18 |
olle |
ffpe_reg.loadConfiguration(); |
5044 |
19 Oct 18 |
olle |
63 |
|
5044 |
19 Oct 18 |
olle |
//Doc.show('step-1'); |
5044 |
19 Oct 18 |
olle |
//Doc.show('gonext'); |
5237 |
16 Jan 19 |
olle |
66 |
|
5237 |
16 Jan 19 |
olle |
// Get case items used for FFPE order forms |
5237 |
16 Jan 19 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
5237 |
16 Jan 19 |
olle |
url += '&cmd=GetCasesWithUnprocessedFfpeBlockOrders'; |
5237 |
16 Jan 19 |
olle |
Wizard.showLoadingAnimation('Loading processed items...'); |
5237 |
16 Jan 19 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.initializeStep1); |
5044 |
19 Oct 18 |
olle |
72 |
} |
5044 |
19 Oct 18 |
olle |
73 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.initPermissions = function() |
5044 |
19 Oct 18 |
olle |
75 |
{ |
5044 |
19 Oct 18 |
olle |
// Get permission information |
5044 |
19 Oct 18 |
olle |
var url = '../Install.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=GetPermissions'; |
5044 |
19 Oct 18 |
olle |
var request = Ajax.getXmlHttpRequest(); |
5044 |
19 Oct 18 |
olle |
request.open("GET", url, true); |
5044 |
19 Oct 18 |
olle |
Ajax.setReadyStateHandler(request, ffpe_reg.onPermissionsLoaded, ffpe_reg.onPermissionsLoaded); |
5044 |
19 Oct 18 |
olle |
request.send(null); |
5044 |
19 Oct 18 |
olle |
83 |
} |
5044 |
19 Oct 18 |
olle |
84 |
|
5044 |
19 Oct 18 |
olle |
// Callback when permission information is ready |
5044 |
19 Oct 18 |
olle |
ffpe_reg.onPermissionsLoaded = function(request) |
5044 |
19 Oct 18 |
olle |
87 |
{ |
5044 |
19 Oct 18 |
olle |
if (debug) App.debug(Strings.encodeTags(request.responseText)); |
5044 |
19 Oct 18 |
olle |
var response; |
5044 |
19 Oct 18 |
olle |
var error = false; |
5044 |
19 Oct 18 |
olle |
try |
5044 |
19 Oct 18 |
olle |
92 |
{ |
5044 |
19 Oct 18 |
olle |
response = JSON.parse(request.responseText); |
5044 |
19 Oct 18 |
olle |
if (response.status != 'ok') |
5044 |
19 Oct 18 |
olle |
95 |
{ |
5044 |
19 Oct 18 |
olle |
error = response.message || response.stacktrace || 'Unexpected error'; |
5044 |
19 Oct 18 |
olle |
97 |
} |
5044 |
19 Oct 18 |
olle |
98 |
} |
5044 |
19 Oct 18 |
olle |
catch (ex) |
5044 |
19 Oct 18 |
olle |
100 |
{ |
5044 |
19 Oct 18 |
olle |
error = ex; |
5044 |
19 Oct 18 |
olle |
102 |
} |
5044 |
19 Oct 18 |
olle |
103 |
|
5044 |
19 Oct 18 |
olle |
if (error) |
5044 |
19 Oct 18 |
olle |
105 |
{ |
5044 |
19 Oct 18 |
olle |
alert(error); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
108 |
} |
5044 |
19 Oct 18 |
olle |
109 |
|
5044 |
19 Oct 18 |
olle |
myPermissions = response.permissions; |
5044 |
19 Oct 18 |
olle |
//var isAdmin = myPermissions['Administrator'] == 1; |
5044 |
19 Oct 18 |
olle |
//var noProjectIsActive = !App.getActiveProjectId(); |
5044 |
19 Oct 18 |
olle |
113 |
} |
5044 |
19 Oct 18 |
olle |
114 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.loadConfiguration = function() |
5044 |
19 Oct 18 |
olle |
116 |
{ |
5044 |
19 Oct 18 |
olle |
var url = '../Session.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=GetConfiguration' |
5044 |
19 Oct 18 |
olle |
var request = Ajax.getXmlHttpRequest(); |
5044 |
19 Oct 18 |
olle |
request.open("GET", url, true); |
5044 |
19 Oct 18 |
olle |
Ajax.setReadyStateHandler(request, ffpe_reg.onConfiguration, ffpe_reg.onConfiguration); |
5044 |
19 Oct 18 |
olle |
request.send(null); |
5044 |
19 Oct 18 |
olle |
123 |
} |
5044 |
19 Oct 18 |
olle |
124 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.onConfiguration = function(request) |
5044 |
19 Oct 18 |
olle |
126 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
128 |
|
5044 |
19 Oct 18 |
olle |
if (debug) |
5044 |
19 Oct 18 |
olle |
130 |
{ |
5044 |
19 Oct 18 |
olle |
App.debug(Strings.encodeTags(request.responseText)); |
5044 |
19 Oct 18 |
olle |
132 |
} |
5044 |
19 Oct 18 |
olle |
133 |
|
5044 |
19 Oct 18 |
olle |
var response; |
5044 |
19 Oct 18 |
olle |
var error = false; |
5044 |
19 Oct 18 |
olle |
try |
5044 |
19 Oct 18 |
olle |
137 |
{ |
5044 |
19 Oct 18 |
olle |
response = JSON.parse(request.responseText); |
5044 |
19 Oct 18 |
olle |
if (response.status != 'ok') |
5044 |
19 Oct 18 |
olle |
140 |
{ |
5044 |
19 Oct 18 |
olle |
error = response.message || response.stacktrace || 'Unexpected error'; |
5044 |
19 Oct 18 |
olle |
142 |
} |
5044 |
19 Oct 18 |
olle |
143 |
} |
5044 |
19 Oct 18 |
olle |
catch (ex) |
5044 |
19 Oct 18 |
olle |
145 |
{ |
5044 |
19 Oct 18 |
olle |
error = ex; |
5044 |
19 Oct 18 |
olle |
147 |
} |
5044 |
19 Oct 18 |
olle |
if (error) App.debug(error); |
5044 |
19 Oct 18 |
olle |
149 |
|
5044 |
19 Oct 18 |
olle |
// Get configuration result |
5044 |
19 Oct 18 |
olle |
var conf = response.configuration; |
5044 |
19 Oct 18 |
olle |
// Check for uses site prefix flag |
5044 |
19 Oct 18 |
olle |
usesSitePrefix = conf.usesSitePrefix; |
5044 |
19 Oct 18 |
olle |
ffpeBlockItemPrefix = conf.ffpeBlockItemPrefix; |
5044 |
19 Oct 18 |
olle |
ffpeBlockItemNumDigits = conf.ffpeBlockItemNumDigits; |
5044 |
19 Oct 18 |
olle |
156 |
|
5044 |
19 Oct 18 |
olle |
// Continue with initializing info for case |
5044 |
19 Oct 18 |
olle |
var url = '../ConsentForm.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=CountCases'; |
5044 |
19 Oct 18 |
olle |
Wizard.showLoadingAnimation('Loading cases...'); |
5044 |
19 Oct 18 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.caseInfoLoadedStep1); |
5044 |
19 Oct 18 |
olle |
162 |
} |
5044 |
19 Oct 18 |
olle |
163 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.caseInfoLoadedStep1 = function(response) |
5044 |
19 Oct 18 |
olle |
165 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
167 |
|
5044 |
19 Oct 18 |
olle |
//sampleItemPrefix = response.sampleItemPrefix; |
5044 |
19 Oct 18 |
olle |
//sampleItemNumDigits = response.sampleItemNumDigits; |
5044 |
19 Oct 18 |
olle |
var nofCases = response.count; |
5044 |
19 Oct 18 |
olle |
referralPrefix = response.referralPrefix; |
5044 |
19 Oct 18 |
olle |
referralNumDigits = response.referralNumDigits; |
5044 |
19 Oct 18 |
olle |
//alert("ffpe_block_registration_alt_rec.js::caseInfoLoadedStep1(): referralPrefix = " + referralPrefix + " referralNumDigits = " + referralNumDigits + " nofCases = " + nofCases); |
5044 |
19 Oct 18 |
olle |
//Doc.element('referralIdText').innerHTML = 'The referral ID (barcode) associated with this specimen tube ("' + referralPrefix + '" + ' + referralNumDigits + ' digits).'; |
5044 |
19 Oct 18 |
olle |
175 |
/* |
5044 |
19 Oct 18 |
olle |
Doc.element('referralIdText').innerHTML = 'The referral ID (barcode) associated with this case ("' + referralPrefix + '" + ' + referralNumDigits + ' digits).'; |
5044 |
19 Oct 18 |
olle |
177 |
*/ |
5044 |
19 Oct 18 |
olle |
178 |
|
5044 |
19 Oct 18 |
olle |
Doc.show('step-1'); |
5044 |
19 Oct 18 |
olle |
Doc.show('gonext'); |
5044 |
19 Oct 18 |
olle |
181 |
|
5237 |
16 Jan 19 |
olle |
//frm.personalNumber.focus(); |
5044 |
19 Oct 18 |
olle |
183 |
} |
5044 |
19 Oct 18 |
olle |
184 |
|
5044 |
19 Oct 18 |
olle |
185 |
/** |
5044 |
19 Oct 18 |
olle |
Check that the case number is valid. |
5044 |
19 Oct 18 |
olle |
187 |
*/ |
5237 |
16 Jan 19 |
olle |
188 |
/* |
5044 |
19 Oct 18 |
olle |
ffpe_reg.validateStep1 = function(event) |
5044 |
19 Oct 18 |
olle |
190 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
192 |
|
5044 |
19 Oct 18 |
olle |
var pnr = frm.personalNumber.value; |
5044 |
19 Oct 18 |
olle |
var pnrIsValid = false; |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber'); |
5044 |
19 Oct 18 |
olle |
if (pnr == '') |
5044 |
19 Oct 18 |
olle |
197 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'invalid', 'Missing'); |
5044 |
19 Oct 18 |
olle |
frm.personalNumber.focus(); |
5044 |
19 Oct 18 |
olle |
200 |
} |
5044 |
19 Oct 18 |
olle |
else |
5044 |
19 Oct 18 |
olle |
202 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'valid'); |
5044 |
19 Oct 18 |
olle |
pnrIsValid = true; |
5044 |
19 Oct 18 |
olle |
205 |
} |
5044 |
19 Oct 18 |
olle |
206 |
|
5044 |
19 Oct 18 |
olle |
// If not valid, we prevent the wizard from moving to the next step |
5044 |
19 Oct 18 |
olle |
if (!pnrIsValid) event.preventDefault(); |
5044 |
19 Oct 18 |
olle |
209 |
} |
5237 |
16 Jan 19 |
olle |
210 |
*/ |
5237 |
16 Jan 19 |
olle |
211 |
|
5237 |
16 Jan 19 |
olle |
ffpe_reg.initializeStep1 = function(response) |
5237 |
16 Jan 19 |
olle |
213 |
{ |
5237 |
16 Jan 19 |
olle |
var frm = document.forms['meludi']; |
5237 |
16 Jan 19 |
olle |
var items = response.items; |
5265 |
24 Jan 19 |
olle |
var optPno = frm.personalNumber.value; |
5265 |
24 Jan 19 |
olle |
var optPnoLen = optPno.length; |
5265 |
24 Jan 19 |
olle |
if (optPnoLen == 13) |
5265 |
24 Jan 19 |
olle |
219 |
{ |
5265 |
24 Jan 19 |
olle |
// Remove hyphen |
5265 |
24 Jan 19 |
olle |
optPno = optPno.substr(0, 8) + optPno.substr(9, 4); |
5265 |
24 Jan 19 |
olle |
optPnoLen = optPno.length; |
5265 |
24 Jan 19 |
olle |
223 |
} |
5237 |
16 Jan 19 |
olle |
224 |
|
5237 |
16 Jan 19 |
olle |
var sourceItemList = frm.extractSourceItems; |
5265 |
24 Jan 19 |
olle |
sourceItemList.length = 0; |
5237 |
16 Jan 19 |
olle |
if (items.length) |
5237 |
16 Jan 19 |
olle |
228 |
{ |
5237 |
16 Jan 19 |
olle |
var numItems = items.length; |
5237 |
16 Jan 19 |
olle |
for (var i=0; i < items.length; i++) |
5237 |
16 Jan 19 |
olle |
231 |
{ |
5237 |
16 Jan 19 |
olle |
var item = items[i]; |
5237 |
16 Jan 19 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(item.name); |
5237 |
16 Jan 19 |
olle |
var referralId = ""; |
5237 |
16 Jan 19 |
olle |
if (item.referralId) |
5237 |
16 Jan 19 |
olle |
236 |
{ |
5237 |
16 Jan 19 |
olle |
referralId = item.referralId; |
5237 |
16 Jan 19 |
olle |
238 |
} |
5265 |
24 Jan 19 |
olle |
var pno = ""; |
5265 |
24 Jan 19 |
olle |
var pnoInList = ""; |
5237 |
16 Jan 19 |
olle |
if (item.personalNumber) |
5237 |
16 Jan 19 |
olle |
242 |
{ |
5265 |
24 Jan 19 |
olle |
pno = item.personalNumber; |
5265 |
24 Jan 19 |
olle |
pnoInList = "" + pno; |
5265 |
24 Jan 19 |
olle |
// Add hyphen "-" between birth date and rest of number, if not already there |
5265 |
24 Jan 19 |
olle |
if (pnoInList.length == 12) |
5265 |
24 Jan 19 |
olle |
247 |
{ |
5265 |
24 Jan 19 |
olle |
pnoInList = pnoInList.substr(0, 8) + '-' + pnoInList.substr(8, 4); |
5265 |
24 Jan 19 |
olle |
249 |
} |
5237 |
16 Jan 19 |
olle |
250 |
} |
5243 |
17 Jan 19 |
olle |
var ffpeBlockOrderDate = ""; |
5243 |
17 Jan 19 |
olle |
if (item.ffpeBlockOrderDate) |
5243 |
17 Jan 19 |
olle |
253 |
{ |
5243 |
17 Jan 19 |
olle |
ffpeBlockOrderDate = item.ffpeBlockOrderDate; |
5243 |
17 Jan 19 |
olle |
255 |
} |
5265 |
24 Jan 19 |
olle |
//name += ' -- (Referral-ID: ' + Strings.encodeTags(referralId) + ' Pno: ' + Strings.encodeTags(pno) + ')'; |
5265 |
24 Jan 19 |
olle |
name += ' -- (Pno: ' + Strings.encodeTags(pnoInList) + ' Order date: ' + Strings.encodeTags(ffpeBlockOrderDate) + ')'; |
5237 |
16 Jan 19 |
olle |
var selected = i < 1; |
5265 |
24 Jan 19 |
olle |
if (optPno) |
5265 |
24 Jan 19 |
olle |
260 |
{ |
5265 |
24 Jan 19 |
olle |
selected = false; |
5265 |
24 Jan 19 |
olle |
if (pno == optPno) |
5265 |
24 Jan 19 |
olle |
263 |
{ |
5265 |
24 Jan 19 |
olle |
selected = true; |
5265 |
24 Jan 19 |
olle |
265 |
} |
5265 |
24 Jan 19 |
olle |
//alert("ffpe_block_registration_alt_rec.js::initializeStep1(): optPno = '" + optPno + "' pno = '" + pno + "' selected = " + selected); |
5265 |
24 Jan 19 |
olle |
267 |
} |
5237 |
16 Jan 19 |
olle |
var option = new Option(name, item.id, selected, selected); |
5237 |
16 Jan 19 |
olle |
option.item = item; |
5237 |
16 Jan 19 |
olle |
sourceItemList.options[sourceItemList.length] = option; |
5237 |
16 Jan 19 |
olle |
271 |
} |
5237 |
16 Jan 19 |
olle |
ffpe_reg.sourceItemsOnChange(); |
5237 |
16 Jan 19 |
olle |
273 |
} |
5237 |
16 Jan 19 |
olle |
else |
5237 |
16 Jan 19 |
olle |
275 |
{ |
5237 |
16 Jan 19 |
olle |
Wizard.setFatalError('No case items available.'); |
5237 |
16 Jan 19 |
olle |
return; |
5237 |
16 Jan 19 |
olle |
278 |
} |
5265 |
24 Jan 19 |
olle |
if (!optPno) |
5265 |
24 Jan 19 |
olle |
280 |
{ |
5265 |
24 Jan 19 |
olle |
frm.personalNumber.focus(); |
5265 |
24 Jan 19 |
olle |
282 |
} |
5237 |
16 Jan 19 |
olle |
283 |
|
5237 |
16 Jan 19 |
olle |
Doc.show('step-1'); |
5237 |
16 Jan 19 |
olle |
Doc.show('gonext'); |
5237 |
16 Jan 19 |
olle |
286 |
} |
5237 |
16 Jan 19 |
olle |
287 |
|
5237 |
16 Jan 19 |
olle |
ffpe_reg.sourceItemsOnChange = function() |
5237 |
16 Jan 19 |
olle |
289 |
{ |
5237 |
16 Jan 19 |
olle |
sourceItemListIsValid = false; |
5237 |
16 Jan 19 |
olle |
Wizard.setInputStatus('extractSourceItems'); |
5237 |
16 Jan 19 |
olle |
292 |
|
5237 |
16 Jan 19 |
olle |
var frm = document.forms['meludi']; |
5237 |
16 Jan 19 |
olle |
var sourceItemList = frm.extractSourceItems; |
5237 |
16 Jan 19 |
olle |
295 |
|
5237 |
16 Jan 19 |
olle |
var numSelected = 0; |
5237 |
16 Jan 19 |
olle |
for (var i = 0; i < sourceItemList.length; i++) |
5237 |
16 Jan 19 |
olle |
298 |
{ |
5237 |
16 Jan 19 |
olle |
if (sourceItemList[i].selected) numSelected++; |
5237 |
16 Jan 19 |
olle |
300 |
} |
5237 |
16 Jan 19 |
olle |
301 |
|
5237 |
16 Jan 19 |
olle |
if (numSelected < 1) |
5237 |
16 Jan 19 |
olle |
303 |
{ |
5237 |
16 Jan 19 |
olle |
Wizard.setInputStatus('extractSourceItems', 'invalid', 'Must select a number of FFPE block items.'); |
5237 |
16 Jan 19 |
olle |
return; |
5237 |
16 Jan 19 |
olle |
306 |
} |
5237 |
16 Jan 19 |
olle |
307 |
|
5237 |
16 Jan 19 |
olle |
sourceItemListIsValid = true; |
5237 |
16 Jan 19 |
olle |
Wizard.setInputStatus('extractSourceItems', 'valid'); |
5237 |
16 Jan 19 |
olle |
310 |
} |
5237 |
16 Jan 19 |
olle |
311 |
|
5237 |
16 Jan 19 |
olle |
ffpe_reg.getSelectedItemsList = function() |
5237 |
16 Jan 19 |
olle |
313 |
{ |
5237 |
16 Jan 19 |
olle |
var frm = document.forms['meludi']; |
5237 |
16 Jan 19 |
olle |
315 |
|
5237 |
16 Jan 19 |
olle |
// Get number of selected extract source items |
5237 |
16 Jan 19 |
olle |
var numItems = 0; |
5237 |
16 Jan 19 |
olle |
var selItemsList = []; |
5237 |
16 Jan 19 |
olle |
for (var i = 0; i < frm.extractSourceItems.length; i++) |
5237 |
16 Jan 19 |
olle |
320 |
{ |
5237 |
16 Jan 19 |
olle |
if (frm.extractSourceItems[i].selected) |
5237 |
16 Jan 19 |
olle |
322 |
{ |
5237 |
16 Jan 19 |
olle |
if (frm.extractSourceItems[i].item != null) |
5237 |
16 Jan 19 |
olle |
324 |
{ |
5237 |
16 Jan 19 |
olle |
selItemsList[numItems] = frm.extractSourceItems[i].item; |
5237 |
16 Jan 19 |
olle |
numItems++; |
5237 |
16 Jan 19 |
olle |
327 |
} |
5237 |
16 Jan 19 |
olle |
328 |
} |
5237 |
16 Jan 19 |
olle |
329 |
} |
5237 |
16 Jan 19 |
olle |
return selItemsList; |
5237 |
16 Jan 19 |
olle |
331 |
} |
5237 |
16 Jan 19 |
olle |
332 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.referralIdOnChange = function() |
5044 |
19 Oct 18 |
olle |
334 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
var referralId = frm.referralId.value.toUpperCase(); |
5044 |
19 Oct 18 |
olle |
referralIsValid = false; |
5044 |
19 Oct 18 |
olle |
if (referralId == '') |
5044 |
19 Oct 18 |
olle |
339 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('referralId', 'invalid', 'Missing'); |
5044 |
19 Oct 18 |
olle |
frm.referralId.focus(); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
343 |
} |
5044 |
19 Oct 18 |
olle |
if (!Meludi.isValidCaseName2(referralId, referralPrefix, referralNumDigits)) |
5044 |
19 Oct 18 |
olle |
345 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('referralId', 'invalid', 'Only "' + referralPrefix + '" + ' + referralNumDigits + ' digits is allowed.'); |
5044 |
19 Oct 18 |
olle |
frm.referralId.focus(); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
349 |
} |
5044 |
19 Oct 18 |
olle |
350 |
|
5044 |
19 Oct 18 |
olle |
frm.referralId.value = referralId; |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('referralId', 'valid'); |
5044 |
19 Oct 18 |
olle |
referralIsValid = true; |
5044 |
19 Oct 18 |
olle |
354 |
|
5044 |
19 Oct 18 |
olle |
var url = '../ConsentForm.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=GetCaseInfo'; |
5044 |
19 Oct 18 |
olle |
url += '&referralId=' + encodeURIComponent(referralId); |
5044 |
19 Oct 18 |
olle |
url += '&caseName='; |
5044 |
19 Oct 18 |
olle |
Wizard.showLoadingAnimation('Loading information about case...'); |
5044 |
19 Oct 18 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.onCaseInfoLoaded); |
5044 |
19 Oct 18 |
olle |
361 |
} |
5044 |
19 Oct 18 |
olle |
362 |
|
5044 |
19 Oct 18 |
olle |
// Check that the date is valid |
5044 |
19 Oct 18 |
olle |
ffpe_reg.validateStep2 = function(event) |
5044 |
19 Oct 18 |
olle |
365 |
{ |
5541 |
05 Jul 19 |
olle |
366 |
/* |
5044 |
19 Oct 18 |
olle |
var consentDateIsValid = Wizard.isValid('consentDate'); |
5044 |
19 Oct 18 |
olle |
if (!consentDateIsValid) event.preventDefault(); |
5541 |
05 Jul 19 |
olle |
369 |
*/ |
5044 |
19 Oct 18 |
olle |
370 |
} |
5044 |
19 Oct 18 |
olle |
371 |
|
5044 |
19 Oct 18 |
olle |
372 |
/** |
5044 |
19 Oct 18 |
olle |
Load information about the given case. |
5044 |
19 Oct 18 |
olle |
374 |
*/ |
5044 |
19 Oct 18 |
olle |
ffpe_reg.initializeStep2 = function(event) |
5044 |
19 Oct 18 |
olle |
376 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5237 |
16 Jan 19 |
olle |
//var pnr = frm.personalNumber.value; |
5237 |
16 Jan 19 |
olle |
var caseList = ffpe_reg.getSelectedItemsList(); |
5237 |
16 Jan 19 |
olle |
var caseItem = caseList[0]; |
5237 |
16 Jan 19 |
olle |
var caseName = caseItem.name; |
5237 |
16 Jan 19 |
olle |
var pnr = caseItem.personalNumber; |
5044 |
19 Oct 18 |
olle |
383 |
|
5044 |
19 Oct 18 |
olle |
var url = '../ConsentForm.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=GetCaseInfo'; |
5237 |
16 Jan 19 |
olle |
//url += '&personalNumber=' + encodeURIComponent(pnr); |
5237 |
16 Jan 19 |
olle |
url += '&caseName=' + encodeURIComponent(caseName); |
5044 |
19 Oct 18 |
olle |
388 |
|
5044 |
19 Oct 18 |
olle |
Wizard.showLoadingAnimation('Loading case information...'); |
5044 |
19 Oct 18 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.caseInfoLoaded); |
5044 |
19 Oct 18 |
olle |
391 |
} |
5044 |
19 Oct 18 |
olle |
392 |
|
5044 |
19 Oct 18 |
olle |
393 |
/** |
5044 |
19 Oct 18 |
olle |
Initalize the second step based on the information we have about the case. |
5044 |
19 Oct 18 |
olle |
395 |
*/ |
5044 |
19 Oct 18 |
olle |
ffpe_reg.caseInfoLoaded = function(response) |
5044 |
19 Oct 18 |
olle |
397 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
caseInfo = response.caseInfo; |
5044 |
19 Oct 18 |
olle |
patientInfo = response.patientInfo; |
5044 |
19 Oct 18 |
olle |
var caseName = caseInfo.name; |
5044 |
19 Oct 18 |
olle |
var specimenInfo = response.specimenInfo; |
5044 |
19 Oct 18 |
olle |
403 |
|
5044 |
19 Oct 18 |
olle |
sampleItemPrefix = response.sampleItemPrefix; |
5044 |
19 Oct 18 |
olle |
sampleItemNumDigits = response.sampleItemNumDigits; |
5044 |
19 Oct 18 |
olle |
406 |
|
5044 |
19 Oct 18 |
olle |
frm.caseName.value = caseName; |
5044 |
19 Oct 18 |
olle |
408 |
|
5044 |
19 Oct 18 |
olle |
if (caseInfo) |
5044 |
19 Oct 18 |
olle |
410 |
{ |
5044 |
19 Oct 18 |
olle |
Doc.show('step-2'); |
5044 |
19 Oct 18 |
olle |
Doc.show('gonext'); |
5044 |
19 Oct 18 |
olle |
413 |
} |
5044 |
19 Oct 18 |
olle |
414 |
|
5044 |
19 Oct 18 |
olle |
Wizard.setCurrentStep(2); |
5044 |
19 Oct 18 |
olle |
416 |
} |
5044 |
19 Oct 18 |
olle |
417 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.personalNumberOnChange = function() |
5044 |
19 Oct 18 |
olle |
419 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
var pnr = frm.personalNumber.value; |
5044 |
19 Oct 18 |
olle |
pnrIsValid = false; |
5044 |
19 Oct 18 |
olle |
pnrIsAcceptable = true; |
5044 |
19 Oct 18 |
olle |
424 |
|
5044 |
19 Oct 18 |
olle |
var pnrLen = pnr.length; |
5265 |
24 Jan 19 |
olle |
if (pnrLen == 13) |
5265 |
24 Jan 19 |
olle |
427 |
{ |
5265 |
24 Jan 19 |
olle |
// Remove hyphen |
5265 |
24 Jan 19 |
olle |
pnr = pnr.substr(0, 8) + pnr.substr(9, 4); |
5265 |
24 Jan 19 |
olle |
pnrLen = pnr.length; |
5265 |
24 Jan 19 |
olle |
431 |
} |
5044 |
19 Oct 18 |
olle |
if (pnrLen != 12 && pnrLen != 10) |
5044 |
19 Oct 18 |
olle |
433 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'warning', pnrLen < 12 ? 'Too short' : 'Too long'); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
436 |
} |
5044 |
19 Oct 18 |
olle |
437 |
|
5044 |
19 Oct 18 |
olle |
if (!pnr.match(/^\d+$/)) |
5044 |
19 Oct 18 |
olle |
439 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'warning', 'Non-standard personal number'); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
442 |
} |
5044 |
19 Oct 18 |
olle |
443 |
|
5044 |
19 Oct 18 |
olle |
var datePart = pnr.substring(0, pnrLen - 4); // Remove last four digits |
5044 |
19 Oct 18 |
olle |
var dateFormat = pnrLen == 10 ? 'yyMMdd' : 'yyyyMMdd'; |
5044 |
19 Oct 18 |
olle |
var isValidDate = Dates.isDate(datePart, dateFormat); |
5044 |
19 Oct 18 |
olle |
if (!isValidDate) |
5044 |
19 Oct 18 |
olle |
448 |
{ |
5044 |
19 Oct 18 |
olle |
var dayInMonth = parseInt(datePart.substring(-2), 10); // Last two characters |
5044 |
19 Oct 18 |
olle |
if (dayInMonth > 60) |
5044 |
19 Oct 18 |
olle |
451 |
{ |
5044 |
19 Oct 18 |
olle |
// 'Samordningsnummer' has day-in-month + 60; check this |
5044 |
19 Oct 18 |
olle |
dayInMonth -= 60; |
5044 |
19 Oct 18 |
olle |
var tmpPnr = pnr.substring(0, pnrLen - 6); // First 4 or 6 digits is year+month |
5044 |
19 Oct 18 |
olle |
if (dayInMonth < 10) tmpPnr += '0'; |
5044 |
19 Oct 18 |
olle |
tmpPnr += dayInMonth; |
5044 |
19 Oct 18 |
olle |
isValidDate = Dates.isDate(tmpPnr, dateFormat); |
5044 |
19 Oct 18 |
olle |
458 |
} |
5044 |
19 Oct 18 |
olle |
459 |
} |
5044 |
19 Oct 18 |
olle |
if (!isValidDate) |
5044 |
19 Oct 18 |
olle |
461 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'warning', 'Not a valid date'); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
464 |
} |
5044 |
19 Oct 18 |
olle |
465 |
|
5044 |
19 Oct 18 |
olle |
if (!Meludi.personalNumberControlDigitCheck(pnr.substr(pnrLen == 10 ? 0 : 2))) |
5044 |
19 Oct 18 |
olle |
467 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'warning', 'Invalid control digit'); |
5044 |
19 Oct 18 |
olle |
return; |
5044 |
19 Oct 18 |
olle |
470 |
} |
5044 |
19 Oct 18 |
olle |
471 |
|
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('personalNumber', 'valid'); |
5044 |
19 Oct 18 |
olle |
pnrIsValid = true; |
5044 |
19 Oct 18 |
olle |
Wizard.hideGoNextConfirmation(); |
5265 |
24 Jan 19 |
olle |
475 |
|
5265 |
24 Jan 19 |
olle |
476 |
|
5265 |
24 Jan 19 |
olle |
// Get case items used for FFPE order forms |
5265 |
24 Jan 19 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
5265 |
24 Jan 19 |
olle |
url += '&cmd=GetCasesWithUnprocessedFfpeBlockOrders'; |
5265 |
24 Jan 19 |
olle |
Wizard.showLoadingAnimation('Loading processed items...'); |
5265 |
24 Jan 19 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.initializeStep1); |
5044 |
19 Oct 18 |
olle |
482 |
} |
5044 |
19 Oct 18 |
olle |
483 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.initializeStep3 = function() |
5044 |
19 Oct 18 |
olle |
485 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
//var tubeContentType = frm.tubeContentType.value; |
5044 |
19 Oct 18 |
olle |
//var tubeContentType = 'Specimen'; |
5044 |
19 Oct 18 |
olle |
var nofBlocks = parseInt(frm.nofBlocks.value); |
5044 |
19 Oct 18 |
olle |
//var storageBoxSuffix = streg.fetchStorageBoxSuffix(tubeContentType); |
5044 |
19 Oct 18 |
olle |
if (nofBlocks > 2) Doc.addClass('step-2', 'auto-hide'); |
5044 |
19 Oct 18 |
olle |
492 |
|
5044 |
19 Oct 18 |
olle |
var html = ''; |
5044 |
19 Oct 18 |
olle |
494 |
|
5044 |
19 Oct 18 |
olle |
// Add buttons for adding standard comments for all FFPE blocks |
5044 |
19 Oct 18 |
olle |
html += '<tr class="section-header">'; |
5044 |
19 Oct 18 |
olle |
html += '<td colspan="4">Standard comments</td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
499 |
|
5541 |
05 Jul 19 |
olle |
500 |
/* |
5044 |
19 Oct 18 |
olle |
html += '<tr class="align-top">'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="subprompt"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td><div class="button basicbutton interactable" id="addClinicalTcPctComment" style="font-weight: normal;">Add "Clinical TC (%)"</div></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="status" id="addClinicalTcPctComment.status"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="help"><span id="addClinicalTcPctComment.message" class="message"></span>Click button to add standard comment for all items.</td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5541 |
05 Jul 19 |
olle |
507 |
*/ |
5044 |
19 Oct 18 |
olle |
508 |
|
5044 |
19 Oct 18 |
olle |
html += '<tr class="align-top">'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="subprompt"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="input">' |
5541 |
05 Jul 19 |
olle |
html += '<select name="addGeneralCommentSelect" id="addGeneralCommentSelect" class="auto-init" data-auto-init="focus-on-enter" >' |
5541 |
05 Jul 19 |
olle |
html += '<option selected value="" >- No comment -' |
5541 |
05 Jul 19 |
olle |
html += '<option value="Clinical TC (%)" >Add "Clinical TC (%)"' |
5541 |
05 Jul 19 |
olle |
//html += '<option value="Another comment" >Add "Another comment"' |
5541 |
05 Jul 19 |
olle |
html += '</select>'; |
5541 |
05 Jul 19 |
olle |
html += '</td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="status" id="addGeneralCommentSelect.status"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="help"><span id="addGeneralCommentSelect.message" class="message"></span>Select optional standard comment for all items.</td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
521 |
|
5541 |
05 Jul 19 |
olle |
html += '<tr class="align-top">'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="subprompt"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td><div class="button basicbutton interactable" id="addGeneralComment" style="font-weight: normal;">Add general comment</div></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="status" id="addGeneralComment.status"></td>'; |
5541 |
05 Jul 19 |
olle |
html += '<td class="help"><span id="addGeneralComment.message" class="message"></span>Click button to add standard comment for all items.</td>'; |
5541 |
05 Jul 19 |
olle |
html += '</tr>'; |
5541 |
05 Jul 19 |
olle |
528 |
|
5044 |
19 Oct 18 |
olle |
for (var i=0; i < nofBlocks; i++) |
5044 |
19 Oct 18 |
olle |
530 |
{ |
5044 |
19 Oct 18 |
olle |
var tubeContentTypeName = 'FFPE block ' + i; |
5044 |
19 Oct 18 |
olle |
var tubeContentTypeNameInternal = 'FFPE block ' + (i + 1); |
5044 |
19 Oct 18 |
olle |
//var blockName = 'BlockName' + i; |
5044 |
19 Oct 18 |
olle |
var blockName = '' + (i + 1); |
5044 |
19 Oct 18 |
olle |
var tubeNo = i+caseInfo.specimenFirstIndex; |
5044 |
19 Oct 18 |
olle |
var tubeIdentifier = 'TubeId' + blockName + i; |
5044 |
19 Oct 18 |
olle |
html += '<tr class="section-header">'; |
5044 |
19 Oct 18 |
olle |
html += '<td colspan="4">FFPE block '+blockName+'</td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
540 |
|
5044 |
19 Oct 18 |
olle |
var padMsg = 'PAD number for '+tubeContentTypeNameInternal+'.'; |
5160 |
30 Nov 18 |
olle |
var materialNumberMsg = 'Material number for '+tubeContentTypeNameInternal+'.'; |
5160 |
30 Nov 18 |
olle |
var localisationMsg = 'Localisation for '+tubeContentTypeNameInternal+'.'; |
5044 |
19 Oct 18 |
olle |
var yellowLabelMsg = 'Assign yellow label for '+tubeContentTypeNameInternal+' (selected for processing).'; |
5044 |
19 Oct 18 |
olle |
var disabledAttribute = ''; |
5044 |
19 Oct 18 |
olle |
546 |
|
5044 |
19 Oct 18 |
olle |
// PAD number input field |
5044 |
19 Oct 18 |
olle |
html += '<tr>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="subprompt">PAD</td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="input">'; |
5044 |
19 Oct 18 |
olle |
html += '<input type="text" name="pad.'+i+'" id="pad.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
5044 |
19 Oct 18 |
olle |
html += '</td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="status" id="pad.'+i+'.status"></td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="help"><span id="pad.'+i+'.message" class="message"></span>'+padMsg+'<span id="pad.'+i+'.message" class="message"></span></td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
556 |
|
5074 |
06 Nov 18 |
olle |
// Material number input field |
5074 |
06 Nov 18 |
olle |
html += '<tr>'; |
5074 |
06 Nov 18 |
olle |
html += '<td class="subprompt">Material number</td>'; |
5074 |
06 Nov 18 |
olle |
html += '<td class="input">'; |
5160 |
30 Nov 18 |
olle |
html += '<input type="text" name="materialNumber.'+i+'" id="materialNumber.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
5074 |
06 Nov 18 |
olle |
html += '</td>'; |
5160 |
30 Nov 18 |
olle |
html += '<td class="status" id="materialNumber.'+i+'.status"></td>'; |
5160 |
30 Nov 18 |
olle |
html += '<td class="help"><span id="materialNumber.'+i+'.message" class="message"></span>'+materialNumberMsg+'<span id="materialNumber.'+i+'.message" class="message"></span></td>'; |
5074 |
06 Nov 18 |
olle |
html += '</tr>'; |
5074 |
06 Nov 18 |
olle |
566 |
|
5160 |
30 Nov 18 |
olle |
// Localisation input field |
5074 |
06 Nov 18 |
olle |
html += '<tr>'; |
5160 |
30 Nov 18 |
olle |
html += '<td class="subprompt">Localisation</td>'; |
5074 |
06 Nov 18 |
olle |
html += '<td class="input">'; |
5160 |
30 Nov 18 |
olle |
html += '<input type="text" name="localisation.'+i+'" id="localisation.'+i+'" style="width: 12em;" maxlength="12"'+disabledAttribute+'>'; |
5074 |
06 Nov 18 |
olle |
html += '</td>'; |
5160 |
30 Nov 18 |
olle |
html += '<td class="status" id="localisation.'+i+'.status"></td>'; |
5160 |
30 Nov 18 |
olle |
html += '<td class="help"><span id="localisation.'+i+'.message" class="message"></span>'+localisationMsg+'<span id="localisation.'+i+'.message" class="message"></span></td>'; |
5074 |
06 Nov 18 |
olle |
html += '</tr>'; |
5074 |
06 Nov 18 |
olle |
576 |
|
5044 |
19 Oct 18 |
olle |
// Yellow label check box |
5044 |
19 Oct 18 |
olle |
html += '<tr>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="subprompt">Select for processing</td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="input">'; |
5044 |
19 Oct 18 |
olle |
html += '<label id="yellowLabel.'+i+'"><input type="checkbox" name="yellowLabel.'+i+'" id="yellowLabel.'+i+'" '+disabledAttribute+'>Yellow label</label>'; |
5044 |
19 Oct 18 |
olle |
html += '</td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="status" id="yellowLabel.'+i+'.status"></td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="help"><span id="yellowLabel.'+i+'.message" class="message"></span>'+yellowLabelMsg+'<span id="yellowLabel.'+i+'.message" class="message"></span></td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
586 |
|
5044 |
19 Oct 18 |
olle |
// Operator delivery comment |
5044 |
19 Oct 18 |
olle |
html += '<tr class="align-top">'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="subprompt">Operator delivery comment</td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="input"><textarea rows="3" name="comment.'+i+'" id="comment.'+i+'"></textarea></td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="status" id="comment.'+i+'.status"></td>'; |
5044 |
19 Oct 18 |
olle |
html += '<td class="help"><span id="comment.'+i+'.message" class="message"></span>In this field, enter information specific for '+tubeContentTypeNameInternal+'.</td>'; |
5044 |
19 Oct 18 |
olle |
html += '</tr>'; |
5044 |
19 Oct 18 |
olle |
594 |
} |
5044 |
19 Oct 18 |
olle |
Doc.element('ffpe-blocks').innerHTML = html; |
5044 |
19 Oct 18 |
olle |
596 |
|
5044 |
19 Oct 18 |
olle |
// Add click handlers for buttons for adding standard comments for all specimens/RNA/DNA |
5541 |
05 Jul 19 |
olle |
var addGeneralCommentButton = Doc.element('addGeneralComment'); |
5541 |
05 Jul 19 |
olle |
Buttons.addClickHandler(addGeneralCommentButton, ffpe_reg.addCommentGeneral2, {'nofBlocks': nofBlocks, 'text-field': 'comment.', 'text': 'Not used'}); |
5541 |
05 Jul 19 |
olle |
600 |
/* |
5541 |
05 Jul 19 |
olle |
var addClinicalTcPctCommentGeneralButton = Doc.element('addClinicalTcPctComment'); |
5541 |
05 Jul 19 |
olle |
Buttons.addClickHandler(addClinicalTcPctCommentGeneralButton, ffpe_reg.addCommentGeneral, {'nofBlocks': nofBlocks, 'text-field': 'comment.', 'text': 'Clinical TC (%)'}); |
5541 |
05 Jul 19 |
olle |
603 |
*/ |
5044 |
19 Oct 18 |
olle |
604 |
|
5044 |
19 Oct 18 |
olle |
Wizard.setCurrentStep(3); |
5044 |
19 Oct 18 |
olle |
Doc.show('goregister'); |
5044 |
19 Oct 18 |
olle |
Doc.show('gocancel'); |
5044 |
19 Oct 18 |
olle |
frm['pad.0'].focus(); |
5044 |
19 Oct 18 |
olle |
609 |
} |
5044 |
19 Oct 18 |
olle |
610 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.addCommentGeneral = function(event) |
5044 |
19 Oct 18 |
olle |
612 |
{ |
5044 |
19 Oct 18 |
olle |
var nofBlocks = Data.get(event.currentTarget, 'nofBlocks', event.currentTarget.id); |
5044 |
19 Oct 18 |
olle |
var textFieldBase = Data.get(event.currentTarget, 'text-field', event.currentTarget.id); |
5044 |
19 Oct 18 |
olle |
// Get standard comment text to add |
5044 |
19 Oct 18 |
olle |
var text = Data.get(event.currentTarget, 'text', event.currentTarget.id); |
5541 |
05 Jul 19 |
olle |
//alert("ffpe_block_registration_alt_rec.js::addCommentGeneral(): text = '" + text + "'."); |
5044 |
19 Oct 18 |
olle |
// Loop over comment fields to update |
5044 |
19 Oct 18 |
olle |
for (var i=0; i < nofBlocks; i++) |
5044 |
19 Oct 18 |
olle |
620 |
{ |
5044 |
19 Oct 18 |
olle |
var textField = Doc.element(textFieldBase+i); |
5044 |
19 Oct 18 |
olle |
if (textField) |
5044 |
19 Oct 18 |
olle |
623 |
{ |
5044 |
19 Oct 18 |
olle |
if (text && text != '') |
5044 |
19 Oct 18 |
olle |
625 |
{ |
5044 |
19 Oct 18 |
olle |
// Check if current comment field already contains text |
5044 |
19 Oct 18 |
olle |
if (textField.value != '') |
5044 |
19 Oct 18 |
olle |
628 |
{ |
5044 |
19 Oct 18 |
olle |
// Add space to text in current comment field |
5044 |
19 Oct 18 |
olle |
textField.value += ' '; |
5044 |
19 Oct 18 |
olle |
631 |
} |
5044 |
19 Oct 18 |
olle |
// Add standard comment text |
5044 |
19 Oct 18 |
olle |
textField.value += text; |
5044 |
19 Oct 18 |
olle |
634 |
} |
5044 |
19 Oct 18 |
olle |
635 |
} |
5044 |
19 Oct 18 |
olle |
636 |
} |
5044 |
19 Oct 18 |
olle |
637 |
} |
5044 |
19 Oct 18 |
olle |
638 |
|
5541 |
05 Jul 19 |
olle |
ffpe_reg.addCommentGeneral2 = function(event) |
5541 |
05 Jul 19 |
olle |
640 |
{ |
5541 |
05 Jul 19 |
olle |
var nofBlocks = Data.get(event.currentTarget, 'nofBlocks', event.currentTarget.id); |
5541 |
05 Jul 19 |
olle |
var textFieldBase = Data.get(event.currentTarget, 'text-field', event.currentTarget.id); |
5541 |
05 Jul 19 |
olle |
// Get standard comment text to add |
5541 |
05 Jul 19 |
olle |
var frm = document.forms['meludi']; |
5541 |
05 Jul 19 |
olle |
var genCmtItemList = frm.addGeneralCommentSelect; |
5541 |
05 Jul 19 |
olle |
//alert("ffpe_block_registration_alt_rec.js::addCommentGeneral2(): genCmtItemList.length = " + genCmtItemList.length); |
5541 |
05 Jul 19 |
olle |
var text = ""; |
5541 |
05 Jul 19 |
olle |
var numSelected = 0; |
5541 |
05 Jul 19 |
olle |
var optSelected = -1; |
5541 |
05 Jul 19 |
olle |
for (var i = 0; i < genCmtItemList.length; i++) |
5541 |
05 Jul 19 |
olle |
651 |
{ |
5541 |
05 Jul 19 |
olle |
if (genCmtItemList[i].selected) |
5541 |
05 Jul 19 |
olle |
653 |
{ |
5541 |
05 Jul 19 |
olle |
text = genCmtItemList[i].value; |
5541 |
05 Jul 19 |
olle |
numSelected++; |
5541 |
05 Jul 19 |
olle |
optSelected = i; |
5541 |
05 Jul 19 |
olle |
657 |
} |
5541 |
05 Jul 19 |
olle |
658 |
} |
5541 |
05 Jul 19 |
olle |
//alert("ffpe_block_registration_alt_rec.js::addCommentGeneral2(): numSelected = " + numSelected + " optSelected = " + optSelected + " text = '" + text + "'."); |
5541 |
05 Jul 19 |
olle |
// Loop over comment fields to update |
5541 |
05 Jul 19 |
olle |
for (var i=0; i < nofBlocks; i++) |
5541 |
05 Jul 19 |
olle |
662 |
{ |
5541 |
05 Jul 19 |
olle |
var textField = Doc.element(textFieldBase+i); |
5541 |
05 Jul 19 |
olle |
if (textField) |
5541 |
05 Jul 19 |
olle |
665 |
{ |
5541 |
05 Jul 19 |
olle |
if (text && text != '') |
5541 |
05 Jul 19 |
olle |
667 |
{ |
5541 |
05 Jul 19 |
olle |
// Check if current comment field already contains text |
5541 |
05 Jul 19 |
olle |
if (textField.value != '') |
5541 |
05 Jul 19 |
olle |
670 |
{ |
5541 |
05 Jul 19 |
olle |
// Add space to text in current comment field |
5541 |
05 Jul 19 |
olle |
textField.value += ' '; |
5541 |
05 Jul 19 |
olle |
673 |
} |
5541 |
05 Jul 19 |
olle |
// Add standard comment text |
5541 |
05 Jul 19 |
olle |
textField.value += text; |
5541 |
05 Jul 19 |
olle |
676 |
} |
5541 |
05 Jul 19 |
olle |
677 |
} |
5541 |
05 Jul 19 |
olle |
678 |
} |
5541 |
05 Jul 19 |
olle |
679 |
} |
5541 |
05 Jul 19 |
olle |
680 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.patientInfoLoaded = function(response) |
5044 |
19 Oct 18 |
olle |
682 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setCurrentStep(3); |
5044 |
19 Oct 18 |
olle |
// Get patient information from the AJAX response |
5044 |
19 Oct 18 |
olle |
patientInfo = response.patientInfo; |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
687 |
|
5044 |
19 Oct 18 |
olle |
688 |
|
5044 |
19 Oct 18 |
olle |
frm.patientCode.value=patientInfo.name; |
5044 |
19 Oct 18 |
olle |
frm.familyName.value = patientInfo.familyName || ''; |
5044 |
19 Oct 18 |
olle |
frm.allFirstNames.value = patientInfo.allFirstNames || ''; |
5044 |
19 Oct 18 |
olle |
Doc.element('dateOfBirth').innerHTML = patientInfo.dateOfBirth ? Strings.encodeTags(patientInfo.dateOfBirth) : '---'; |
5044 |
19 Oct 18 |
olle |
Doc.element('gender').innerHTML = patientInfo.gender ? Strings.encodeTags(patientInfo.gender) : '---'; |
5044 |
19 Oct 18 |
olle |
frm.familyName.focus(); |
5044 |
19 Oct 18 |
olle |
695 |
|
5044 |
19 Oct 18 |
olle |
if (!patientInfo.id) |
5044 |
19 Oct 18 |
olle |
697 |
{ |
5044 |
19 Oct 18 |
olle |
if (!pnrIsValid) |
5044 |
19 Oct 18 |
olle |
699 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('gender', 'warning', 'Gender and DateOfBirth can\'t be automatically generated for non-standard Personal number'); |
5044 |
19 Oct 18 |
olle |
701 |
} |
5044 |
19 Oct 18 |
olle |
702 |
} |
5044 |
19 Oct 18 |
olle |
else |
5044 |
19 Oct 18 |
olle |
704 |
{ |
5044 |
19 Oct 18 |
olle |
Doc.element('step-3-title').innerHTML = 'Existing patient: Verify names'; |
5044 |
19 Oct 18 |
olle |
frm.patientCode.disabled = true; |
5044 |
19 Oct 18 |
olle |
707 |
} |
5044 |
19 Oct 18 |
olle |
708 |
|
5044 |
19 Oct 18 |
olle |
//Doc.show('gonext'); |
5044 |
19 Oct 18 |
olle |
//Doc.show('gocancel'); |
5044 |
19 Oct 18 |
olle |
Doc.show('gocancel'); |
5044 |
19 Oct 18 |
olle |
Doc.show('goregister'); |
5044 |
19 Oct 18 |
olle |
713 |
} |
5044 |
19 Oct 18 |
olle |
714 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.validateStep3 = function(event) |
5044 |
19 Oct 18 |
olle |
716 |
{ |
5044 |
19 Oct 18 |
olle |
var valid = true; |
5044 |
19 Oct 18 |
olle |
var acceptable = true; |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
720 |
|
5044 |
19 Oct 18 |
olle |
// Check that all FFPE blocks have PAD numbers |
5044 |
19 Oct 18 |
olle |
var nofBlocks = parseInt(frm.nofBlocks.value); |
5044 |
19 Oct 18 |
olle |
for (var i = 0; i < nofBlocks; i++) |
5044 |
19 Oct 18 |
olle |
724 |
{ |
5044 |
19 Oct 18 |
olle |
if (frm['pad.'+i].value == '') |
5044 |
19 Oct 18 |
olle |
726 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.setInputStatus('pad.'+i, 'warning', 'Missing'); |
5044 |
19 Oct 18 |
olle |
valid = false; |
5044 |
19 Oct 18 |
olle |
729 |
} |
5044 |
19 Oct 18 |
olle |
730 |
} |
5044 |
19 Oct 18 |
olle |
731 |
|
5044 |
19 Oct 18 |
olle |
if (!valid) |
5044 |
19 Oct 18 |
olle |
733 |
{ |
5044 |
19 Oct 18 |
olle |
event.preventDefault(); |
5044 |
19 Oct 18 |
olle |
735 |
} |
5044 |
19 Oct 18 |
olle |
736 |
} |
5044 |
19 Oct 18 |
olle |
737 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.submit = function() |
5044 |
19 Oct 18 |
olle |
739 |
{ |
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
//var updateMode = caseInfo.id; |
5044 |
19 Oct 18 |
olle |
742 |
|
5044 |
19 Oct 18 |
olle |
var ffpeBlockInfo = {}; |
5044 |
19 Oct 18 |
olle |
var nofBlocks = parseInt(frm.nofBlocks.value); |
5044 |
19 Oct 18 |
olle |
ffpeBlockInfo.ffpeBlock = []; |
5044 |
19 Oct 18 |
olle |
for (var i = 0; i < nofBlocks; i++) |
5044 |
19 Oct 18 |
olle |
747 |
{ |
5044 |
19 Oct 18 |
olle |
var ffpeBlock ={}; |
5044 |
19 Oct 18 |
olle |
ffpeBlock.caseName = frm['caseName'].value; |
5044 |
19 Oct 18 |
olle |
//ffpeBlock.samplingDate = frm['samplingDate'].value; |
5044 |
19 Oct 18 |
olle |
ffpeBlock.arrivalDate = frm['arrivalDate'].value; |
5044 |
19 Oct 18 |
olle |
ffpeBlock.pad = frm['pad.'+i].value; |
5160 |
30 Nov 18 |
olle |
ffpeBlock.materialNumber = frm['materialNumber.'+i].value; |
5160 |
30 Nov 18 |
olle |
ffpeBlock.localisation = frm['localisation.'+i].value; |
5047 |
22 Oct 18 |
olle |
ffpeBlock.yellowLabel = null; |
5047 |
22 Oct 18 |
olle |
var yellowLabelCB = false; |
5047 |
22 Oct 18 |
olle |
yellowLabelCB = frm['yellowLabel.'+i].checked; |
5047 |
22 Oct 18 |
olle |
if (yellowLabelCB) |
5047 |
22 Oct 18 |
olle |
759 |
{ |
5047 |
22 Oct 18 |
olle |
ffpeBlock.yellowLabel = 'yellow'; |
5047 |
22 Oct 18 |
olle |
761 |
} |
5044 |
19 Oct 18 |
olle |
ffpeBlock.comment = frm['comment.'+i].value; |
5044 |
19 Oct 18 |
olle |
//ffpeBlock.operator = frm['operator'].value; |
5044 |
19 Oct 18 |
olle |
ffpeBlockInfo.ffpeBlock[i] = ffpeBlock; |
5044 |
19 Oct 18 |
olle |
765 |
} |
5044 |
19 Oct 18 |
olle |
var submitInfo = {}; |
5044 |
19 Oct 18 |
olle |
submitInfo.ffpeBlockInfo = ffpeBlockInfo; |
5044 |
19 Oct 18 |
olle |
768 |
|
5044 |
19 Oct 18 |
olle |
var url = '../BaseLineRegistration.servlet?ID='+App.getSessionId(); |
5044 |
19 Oct 18 |
olle |
url += '&cmd=RegisterFFPEBlocks'; |
5044 |
19 Oct 18 |
olle |
Wizard.showLoadingAnimation('Registering FFPE block[s]...'); |
5044 |
19 Oct 18 |
olle |
Wizard.asyncJsonRequest(url, ffpe_reg.submissionResults, 'POST', JSON.stringify(submitInfo)); |
5044 |
19 Oct 18 |
olle |
773 |
} |
5044 |
19 Oct 18 |
olle |
774 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.submissionResults = function(response) |
5044 |
19 Oct 18 |
olle |
776 |
{ |
5044 |
19 Oct 18 |
olle |
Wizard.showFinalMessage(response.messages); |
5044 |
19 Oct 18 |
olle |
Doc.show('gorestart'); |
5044 |
19 Oct 18 |
olle |
//Doc.show('downloadformbatch2'); |
5044 |
19 Oct 18 |
olle |
780 |
} |
5044 |
19 Oct 18 |
olle |
781 |
|
5044 |
19 Oct 18 |
olle |
782 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.enableConsentOption = function(option, checkIt) |
5044 |
19 Oct 18 |
olle |
784 |
{ |
5044 |
19 Oct 18 |
olle |
option = Doc.element(option); // The radio button |
5044 |
19 Oct 18 |
olle |
option.disabled = false; |
5044 |
19 Oct 18 |
olle |
if (checkIt) option.checked = true; |
5044 |
19 Oct 18 |
olle |
788 |
|
5044 |
19 Oct 18 |
olle |
var label = Doc.element(option.id + '.label'); // The label |
5044 |
19 Oct 18 |
olle |
Doc.removeClass(label, 'disabled'); |
5044 |
19 Oct 18 |
olle |
791 |
} |
5044 |
19 Oct 18 |
olle |
792 |
|
5044 |
19 Oct 18 |
olle |
793 |
|
5044 |
19 Oct 18 |
olle |
794 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.consentOnChange = function() |
5044 |
19 Oct 18 |
olle |
796 |
{ |
5044 |
19 Oct 18 |
olle |
// If "Not asked" is selected we must enable the second question |
5044 |
19 Oct 18 |
olle |
var isAsked = !Doc.element('consent.notAsked').checked; |
5044 |
19 Oct 18 |
olle |
799 |
|
5044 |
19 Oct 18 |
olle |
var frm = document.forms['meludi']; |
5044 |
19 Oct 18 |
olle |
var reasonIfNotAsked = frm.reasonIfNotAsked; |
5044 |
19 Oct 18 |
olle |
for (var i = 0; i < reasonIfNotAsked.length; i++) |
5044 |
19 Oct 18 |
olle |
803 |
{ |
5044 |
19 Oct 18 |
olle |
reasonIfNotAsked[i].disabled = isAsked; |
5044 |
19 Oct 18 |
olle |
Doc.addOrRemoveClass(reasonIfNotAsked[i].id + '.label', 'disabled', isAsked); |
5044 |
19 Oct 18 |
olle |
806 |
} |
5044 |
19 Oct 18 |
olle |
frm.otherReasonIfNotAsked.disabled = isAsked; |
5044 |
19 Oct 18 |
olle |
808 |
} |
5044 |
19 Oct 18 |
olle |
809 |
|
5044 |
19 Oct 18 |
olle |
ffpe_reg.onOtherReasonFocus = function() |
5044 |
19 Oct 18 |
olle |
811 |
{ |
5044 |
19 Oct 18 |
olle |
Doc.element('notAsked.other').checked = true; |
5044 |
19 Oct 18 |
olle |
813 |
} |
5044 |
19 Oct 18 |
olle |
814 |
|
5203 |
07 Jan 19 |
olle |
Date.prototype.yyyymmdd = function() |
5203 |
07 Jan 19 |
olle |
816 |
{ |
5203 |
07 Jan 19 |
olle |
var mm = this.getMonth() + 1; // getMonth() is zero-based |
5203 |
07 Jan 19 |
olle |
var dd = this.getDate(); |
5203 |
07 Jan 19 |
olle |
819 |
|
5203 |
07 Jan 19 |
olle |
return [this.getFullYear(), |
5203 |
07 Jan 19 |
olle |
(mm>9 ? '' : '0') + mm, |
5203 |
07 Jan 19 |
olle |
(dd>9 ? '' : '0') + dd |
5203 |
07 Jan 19 |
olle |
].join(''); |
5203 |
07 Jan 19 |
olle |
824 |
}; |
5203 |
07 Jan 19 |
olle |
825 |
|
5203 |
07 Jan 19 |
olle |
ffpe_reg.arrivalDateToday = function() |
5203 |
07 Jan 19 |
olle |
827 |
{ |
5203 |
07 Jan 19 |
olle |
var frm = document.forms['meludi']; |
5203 |
07 Jan 19 |
olle |
829 |
|
5203 |
07 Jan 19 |
olle |
// Get today's date and insert into date field |
5203 |
07 Jan 19 |
olle |
var date = new Date(); |
5203 |
07 Jan 19 |
olle |
frm['arrivalDate'].value = date.yyyymmdd(); |
5203 |
07 Jan 19 |
olle |
833 |
} |
5203 |
07 Jan 19 |
olle |
834 |
|
5044 |
19 Oct 18 |
olle |
return ffpe_reg; |
5044 |
19 Oct 18 |
olle |
836 |
}(); |
5044 |
19 Oct 18 |
olle |
837 |
|
5044 |
19 Oct 18 |
olle |
Doc.onLoad(Ffpe_reg.initPage); |
5044 |
19 Oct 18 |
olle |
839 |
|