1 | <%@ page |
---|
2 | pageEncoding="UTF-8" |
---|
3 | session="false" |
---|
4 | import="net.sf.basedb.core.Application" |
---|
5 | import="net.sf.basedb.core.User" |
---|
6 | import="net.sf.basedb.core.Role" |
---|
7 | import="net.sf.basedb.core.Group" |
---|
8 | import="net.sf.basedb.core.DbControl" |
---|
9 | import="net.sf.basedb.core.SessionControl" |
---|
10 | import="net.sf.basedb.core.SystemItems" |
---|
11 | import="net.sf.basedb.core.ItemQuery" |
---|
12 | import="net.sf.basedb.core.query.Expressions" |
---|
13 | import="net.sf.basedb.core.query.Hql" |
---|
14 | import="net.sf.basedb.core.query.Restrictions" |
---|
15 | import="net.sf.basedb.clients.web.Base" |
---|
16 | import="net.sf.basedb.clients.web.util.HTML" |
---|
17 | import="net.sf.basedb.clients.web.extensions.ExtensionsControl" |
---|
18 | import="net.sf.basedb.util.Values" |
---|
19 | import="java.util.List" |
---|
20 | %> |
---|
21 | <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %> |
---|
22 | <%@ taglib prefix="p" uri="/WEB-INF/path.tld" %> |
---|
23 | <% |
---|
24 | final SessionControl sc = Base.getExistingSessionControl(request, true); |
---|
25 | final String ID = sc.getId(); |
---|
26 | final float scale = Base.getScale(sc); |
---|
27 | final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie"); |
---|
28 | DbControl dc = null; |
---|
29 | try |
---|
30 | { |
---|
31 | dc = sc.newDbControl(); |
---|
32 | final User user = User.getById(dc, sc.getLoggedInUserId()); |
---|
33 | |
---|
34 | boolean isAdmin = user.getId() == SystemItems.getId(User.ROOT); |
---|
35 | boolean isPatientCurator = false; |
---|
36 | if (!isAdmin) |
---|
37 | { |
---|
38 | try |
---|
39 | { |
---|
40 | Role admin = Role.getById(dc, SystemItems.getId(Role.ADMINISTRATOR)); |
---|
41 | isAdmin = sc.isMemberOf(admin); |
---|
42 | } |
---|
43 | catch (RuntimeException ex) |
---|
44 | {} |
---|
45 | } |
---|
46 | try |
---|
47 | { |
---|
48 | ItemQuery<Group> query = Group.getQuery(); |
---|
49 | query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string("PatientCurator"))); |
---|
50 | List<Group> result = query.list(dc); |
---|
51 | if (result.size() == 1) |
---|
52 | { |
---|
53 | isPatientCurator = sc.isMemberOf(result.get(0)); |
---|
54 | } |
---|
55 | } |
---|
56 | catch (RuntimeException ex) |
---|
57 | {} |
---|
58 | |
---|
59 | final String caseName = request.getParameter("caseName"); |
---|
60 | final String pageType = Values.getString(request.getParameter("pageType"), "default"); |
---|
61 | |
---|
62 | boolean iframe = "iframe".equals(pageType); |
---|
63 | boolean popup = "popup".equals(pageType); |
---|
64 | boolean fullPage = !iframe && !popup; |
---|
65 | %> |
---|
66 | <base:page type="<%=pageType %>" > |
---|
67 | <base:head scripts="ajax.js" styles="path.css"> |
---|
68 | <link rel="stylesheet" type="text/css" href="../css/reggie.css"> |
---|
69 | <link rel="stylesheet" type="text/css" href="../css/case_summary.css"> |
---|
70 | <script language="JavaScript" src="../reggie.js" type="text/javascript" charset="UTF-8"></script> |
---|
71 | |
---|
72 | <script language="JavaScript"> |
---|
73 | |
---|
74 | var debug = false; |
---|
75 | var ID = '<%=ID%>'; |
---|
76 | |
---|
77 | var TRUNCATE_SIZE = [-1, 30, 20, 15]; |
---|
78 | |
---|
79 | // Style the message as a warning message |
---|
80 | function asWarning(message) |
---|
81 | { |
---|
82 | message = '<span class="warning">' + message + '</span>'; |
---|
83 | return message; |
---|
84 | } |
---|
85 | |
---|
86 | // Style the message as a 'no information' message |
---|
87 | function asNoInfo(message) |
---|
88 | { |
---|
89 | message = '<span class="no-info">' + message + '</span>'; |
---|
90 | return message; |
---|
91 | } |
---|
92 | |
---|
93 | // Generte a 'Missing' warning if the value is missing |
---|
94 | function warnIfMissing(value) |
---|
95 | { |
---|
96 | var message = value ? value : asWarning('Missing'); |
---|
97 | return message; |
---|
98 | } |
---|
99 | |
---|
100 | // Style the message as a 'flag information' message |
---|
101 | function asFlagInfo(message, icon) |
---|
102 | { |
---|
103 | message = '<span class="flag-info">' + message + ' ' + '<img src="../images/'+icon+'"></span>'; |
---|
104 | return message; |
---|
105 | } |
---|
106 | |
---|
107 | // Style the message as a 'fail information' message |
---|
108 | function asFailInfo(message, icon) |
---|
109 | { |
---|
110 | message = '<span class="fail-info">' + message + ' ' + '<img src="../images/'+icon+'"></span>'; |
---|
111 | return message; |
---|
112 | } |
---|
113 | |
---|
114 | function asConsent(consent, consentDate) |
---|
115 | { |
---|
116 | var warn = !consent || !consentDate; |
---|
117 | var message; |
---|
118 | if (!consent) |
---|
119 | { |
---|
120 | message = 'Missing' + (consentDate ? ', ' + consentDate : ''); |
---|
121 | } |
---|
122 | else |
---|
123 | { |
---|
124 | message = consent + ', ' + (consentDate ? consentDate : 'Missing date'); |
---|
125 | |
---|
126 | } |
---|
127 | return warn ? asWarning(message) : message |
---|
128 | } |
---|
129 | |
---|
130 | function asBioPlateLocation(well) |
---|
131 | { |
---|
132 | if (!well) return ''; |
---|
133 | var plate = well.bioPlate; |
---|
134 | var text = makeLink('BIOPLATE', plate) + ' ' + well.location; |
---|
135 | if (plate.storage) |
---|
136 | { |
---|
137 | var storage = plate.storage; |
---|
138 | var tmp = []; |
---|
139 | if (storage.name) tmp[tmp.length] = storage.name; |
---|
140 | if (storage.section) tmp[tmp.length] = 'section: ' +storage.section; |
---|
141 | if (storage.tray) tmp[tmp.length] = 'tray: ' +storage.tray; |
---|
142 | if (storage.position) tmp[tmp.length] = 'position: ' +storage.position; |
---|
143 | |
---|
144 | text = '<span class="more-info" title="' + tmp.join('; ')+'">' + text + ' </span>'; |
---|
145 | } |
---|
146 | return text; |
---|
147 | } |
---|
148 | |
---|
149 | // Set the content of the element 'id' to the value |
---|
150 | function setValue(id, value) |
---|
151 | { |
---|
152 | setInnerHTML(id, value); |
---|
153 | } |
---|
154 | |
---|
155 | function truncate(value, maxLength) |
---|
156 | { |
---|
157 | if (!value) return value; |
---|
158 | if (maxLength > 2 && value.length > maxLength) |
---|
159 | { |
---|
160 | var tmp = '<span class="truncated" title="'+value+'">'+value.substring(0, maxLength-2) + '...</span>'; |
---|
161 | value = tmp; |
---|
162 | } |
---|
163 | return value; |
---|
164 | } |
---|
165 | |
---|
166 | function addColumn(id, value) |
---|
167 | { |
---|
168 | var tr = document.getElementById(id); |
---|
169 | var td = document.createElement('td'); |
---|
170 | if (tr.hasAddedColumns) |
---|
171 | { |
---|
172 | td.className = 'extra-column'; |
---|
173 | tr.childNodes[tr.childNodes.length-1].className += ' fixed-column'; |
---|
174 | } |
---|
175 | tr.hasAddedColumns = true; |
---|
176 | if (value != null) |
---|
177 | { |
---|
178 | td.innerHTML = value == '' ? ' ' : value; |
---|
179 | if (tr.className.indexOf('dynamic-column') >= 0) |
---|
180 | { |
---|
181 | tr.style.display = 'table-row'; |
---|
182 | } |
---|
183 | } |
---|
184 | else |
---|
185 | { |
---|
186 | td.innerHTML = ' '; |
---|
187 | } |
---|
188 | tr.appendChild(td); |
---|
189 | } |
---|
190 | |
---|
191 | function makeLink(itemType, item, maxLength) |
---|
192 | { |
---|
193 | var link = ''; |
---|
194 | if (item) |
---|
195 | { |
---|
196 | var name = truncate(item.name, maxLength); |
---|
197 | if (item.id) |
---|
198 | { |
---|
199 | link = '<span class="link" onclick="Main.itemOnClick(event, ID, \''+itemType+'\', '+item.id+', '+item.editable+')">'; |
---|
200 | link += name + '</span>'; |
---|
201 | } |
---|
202 | else |
---|
203 | { |
---|
204 | link = name; |
---|
205 | } |
---|
206 | } |
---|
207 | return link; |
---|
208 | } |
---|
209 | |
---|
210 | function asFileLink(file, icon) |
---|
211 | { |
---|
212 | var link = ''; |
---|
213 | if (file) |
---|
214 | { |
---|
215 | link = '<span class="link filelink" onclick="Main.viewFile(ID,'+file.id+')"><img src="../images/'+icon+'"></span>'; |
---|
216 | } |
---|
217 | return link; |
---|
218 | } |
---|
219 | |
---|
220 | function asCaseList(allCases, mainCase) |
---|
221 | { |
---|
222 | var html = ''; |
---|
223 | for (var i = 0; i < allCases.length; i++) |
---|
224 | { |
---|
225 | var cse = allCases[i]; |
---|
226 | if (html != '') html += ', '; |
---|
227 | if (cse != mainCase) |
---|
228 | { |
---|
229 | html += '<span class="link" onclick="caseSummary(\''+cse + '\')" title="Show summary of case #'+cse+'">'+cse+'</span>'; |
---|
230 | } |
---|
231 | else |
---|
232 | { |
---|
233 | html += '<b>' + cse + '</b>'; |
---|
234 | } |
---|
235 | } |
---|
236 | return allCases.length > 1 ? html : null; |
---|
237 | } |
---|
238 | |
---|
239 | function formatDate(value) |
---|
240 | { |
---|
241 | if (!value) return ''; |
---|
242 | if (value.length == 8) |
---|
243 | { |
---|
244 | value = value.substr(0, 4) + '-' + value.substr(4, 2) + '-' + value.substr(6, 2); |
---|
245 | } |
---|
246 | return value; |
---|
247 | } |
---|
248 | |
---|
249 | |
---|
250 | function formatDateTime(value, compareToDate) |
---|
251 | { |
---|
252 | if (!value) return ''; |
---|
253 | if (value.length == 8) |
---|
254 | { |
---|
255 | value = formatDate(value); |
---|
256 | } |
---|
257 | else if (value.length == 13) |
---|
258 | { |
---|
259 | // If the compareToDate is the same day as the 'value' date, skip the date and replace with white-space |
---|
260 | if (compareToDate && value.substr(0, 8) == compareToDate.substr(0, 8)) |
---|
261 | { |
---|
262 | value = '<span class="invisible">'+formatDate(value.substr(0, 8)) + '</span> ' + value.substr(9, 2) + ':'+value.substr(11, 2) |
---|
263 | } |
---|
264 | else |
---|
265 | { |
---|
266 | value = formatDate(value.substr(0, 8)) + ' ' + value.substr(9, 2) + ':'+value.substr(11, 2); |
---|
267 | } |
---|
268 | } |
---|
269 | return value; |
---|
270 | } |
---|
271 | |
---|
272 | function formatQuantity(value, scale, unit) |
---|
273 | { |
---|
274 | var result = ''; |
---|
275 | if (value != null) |
---|
276 | { |
---|
277 | if (scale) value = value / scale; |
---|
278 | result = formatNumber(value, unit, 2); |
---|
279 | } |
---|
280 | return result; |
---|
281 | } |
---|
282 | |
---|
283 | function init() |
---|
284 | { |
---|
285 | var frm = document.forms['reggie']; |
---|
286 | if (frm.caseName) frm.caseName.focus(); |
---|
287 | |
---|
288 | var caseName = '<%=HTML.javaScriptEncode(caseName)%>'; |
---|
289 | var isAdmin = <%=isAdmin ? "true" : "false"%>; |
---|
290 | var isPatientCurator = <%=isPatientCurator ? "true" : "false"%>; |
---|
291 | |
---|
292 | var url = '../CaseSummary.servlet?ID=<%=ID%>&cmd=GetCaseInfo'; |
---|
293 | url += '&caseName=<%=HTML.urlEncode(caseName)%>'; |
---|
294 | var request = Ajax.getXmlHttpRequest(); |
---|
295 | request.open("GET", url, false); |
---|
296 | request.send(null); |
---|
297 | |
---|
298 | if (debug) Main.debug(request.responseText); |
---|
299 | |
---|
300 | var response = JSON.parse(request.responseText); |
---|
301 | if (response.status != 'ok') |
---|
302 | { |
---|
303 | setFatalError(response.message); |
---|
304 | return false; |
---|
305 | } |
---|
306 | |
---|
307 | Main.show('all-info'); |
---|
308 | |
---|
309 | var caseInfo = response.caseInfo; |
---|
310 | var site = response.site; |
---|
311 | var consentOk = true; |
---|
312 | |
---|
313 | if (caseInfo) |
---|
314 | { |
---|
315 | consentOk = !caseInfo.consent || caseInfo.consent == 'Yes'; |
---|
316 | addColumn('case.name', makeLink('SAMPLE', caseInfo)); |
---|
317 | addColumn('case.registrationDate', formatDate(caseInfo.registrationDate)); |
---|
318 | addColumn('case.site', site ? site.name : null); |
---|
319 | addColumn('case.consent', asConsent(caseInfo.consent, formatDate(caseInfo.consentDate))); |
---|
320 | addColumn('case.laterality', consentOk ? warnIfMissing(caseInfo.laterality) : null); |
---|
321 | addColumn('case.comment', caseInfo.comment); |
---|
322 | } |
---|
323 | else |
---|
324 | { |
---|
325 | addColumn('case.name', asNoInfo('No case information has been registered')); |
---|
326 | Main.hide('case-details'); |
---|
327 | } |
---|
328 | |
---|
329 | var patient = response.patient; |
---|
330 | if (patient) |
---|
331 | { |
---|
332 | if (consentOk) |
---|
333 | { |
---|
334 | addColumn('patient.name', makeLink('BIOSOURCE', patient)); |
---|
335 | addColumn('patient.registrationDate', formatDate(patient.registrationDate)); |
---|
336 | addColumn('patient.personalNumber', warnIfMissing(patient.personalNumber)); |
---|
337 | addColumn('patient.allFirstNames', warnIfMissing(patient.allFirstNames)); |
---|
338 | addColumn('patient.familyName', warnIfMissing(patient.familyName)); |
---|
339 | addColumn('patient.gender', patient.gender); |
---|
340 | addColumn('patient.allCases', asCaseList(patient.allCases, caseName)); |
---|
341 | } |
---|
342 | else |
---|
343 | { |
---|
344 | Main.hide('patient-info'); |
---|
345 | } |
---|
346 | } |
---|
347 | else |
---|
348 | { |
---|
349 | addColumn('patient.name', asNoInfo('No patient information has been registered')); |
---|
350 | Main.hide('patient-details'); |
---|
351 | } |
---|
352 | |
---|
353 | var blood = consentOk ? response.blood : null; |
---|
354 | if (blood && blood.length > 0) |
---|
355 | { |
---|
356 | for (var i = 0; i < blood.length; i++) |
---|
357 | { |
---|
358 | var b = blood[i]; |
---|
359 | addColumn('blood.name', makeLink('SAMPLE', b)); |
---|
360 | addColumn('blood.registrationDate', formatDate(b.registrationDate)); |
---|
361 | addColumn('blood.consent', asConsent(b.consent, formatDate(b.consentDate))); |
---|
362 | addColumn('blood.bloodSample', b.bloodSample); |
---|
363 | addColumn('blood.samplingDate', warnIfMissing(formatDateTime(b.samplingDate))); |
---|
364 | addColumn('blood.freezerDate', warnIfMissing(formatDateTime(b.freezerDate, b.samplingDate))); |
---|
365 | addColumn('blood.serum', b.serum); |
---|
366 | addColumn('blood.comment', b.comment); |
---|
367 | } |
---|
368 | } |
---|
369 | else |
---|
370 | { |
---|
371 | if (consentOk) |
---|
372 | { |
---|
373 | addColumn('blood.name', asNoInfo('No blood information has been registered')); |
---|
374 | Main.hide('blood-details'); |
---|
375 | } |
---|
376 | else |
---|
377 | { |
---|
378 | Main.hide('blood-info'); |
---|
379 | } |
---|
380 | } |
---|
381 | |
---|
382 | var specimen = consentOk ? response.specimen : null; |
---|
383 | var noSpecimen = consentOk ? response.noSpecimen : null; |
---|
384 | var numSpecimenOrNoSpecimen = 0; |
---|
385 | if (specimen && specimen.length > 0) |
---|
386 | { |
---|
387 | var truncateAt = TRUNCATE_SIZE[Math.min(specimen.length-1, TRUNCATE_SIZE.length)]; |
---|
388 | for (var i = 0; i < specimen.length; i++) |
---|
389 | { |
---|
390 | var s = specimen[i]; |
---|
391 | addColumn('specimen.name', makeLink('SAMPLE', s)); |
---|
392 | addColumn('specimen.registrationDate', formatDate(s.registrationDate)); |
---|
393 | addColumn('specimen.storageBox', asBioPlateLocation(s.bioWell)); |
---|
394 | addColumn('specimen.laterality', warnIfMissing(s.laterality)); |
---|
395 | addColumn('specimen.samplingDate', warnIfMissing(formatDateTime(s.samplingDate))); |
---|
396 | addColumn('specimen.rnaLaterDate', warnIfMissing(formatDateTime(s.rnaLaterDate, s.samplingDate))); |
---|
397 | addColumn('specimen.pad', warnIfMissing(s.pad)); |
---|
398 | addColumn('specimen.biopsyType', s.biopsyType); |
---|
399 | addColumn('specimen.remainingQuantity', formatQuantity(s.remainingQuantity, 1000, ' mg')); |
---|
400 | addColumn('specimen.originalQuantity', formatQuantity(s.originalQuantity, 1000, ' mg')); |
---|
401 | addColumn('specimen.nofPieces', s.nofPieces); |
---|
402 | addColumn('specimen.partitionComment', truncate(s.partitionComment, truncateAt)); |
---|
403 | addColumn('specimen.comment', truncate(s.comment, truncateAt)); |
---|
404 | numSpecimenOrNoSpecimen++; |
---|
405 | } |
---|
406 | if (!noSpecimen || noSpecimen.length == 0) |
---|
407 | { |
---|
408 | Main.hide('nospecimen-info'); |
---|
409 | } |
---|
410 | } |
---|
411 | if (noSpecimen && noSpecimen.length > 0) |
---|
412 | { |
---|
413 | for (var i = 0; i < noSpecimen.length; i++) |
---|
414 | { |
---|
415 | var s = noSpecimen[i]; |
---|
416 | addColumn('nospecimen.name', makeLink('SAMPLE', s)); |
---|
417 | addColumn('nospecimen.registrationDate', formatDate(s.registrationDate)); |
---|
418 | addColumn('nospecimen.laterality', warnIfMissing(s.laterality)); |
---|
419 | addColumn('nospecimen.samplingDate', warnIfMissing(formatDate(s.samplingDate))); |
---|
420 | addColumn('nospecimen.pad', warnIfMissing(s.pad)); |
---|
421 | addColumn('nospecimen.reasonIfNoSpecimen', s.reasonIfNoSpecimen); |
---|
422 | addColumn('nospecimen.comment', truncate(s.comment, truncateAt)); |
---|
423 | numSpecimenOrNoSpecimen++; |
---|
424 | } |
---|
425 | if (!specimen || specimen.length == 0) |
---|
426 | { |
---|
427 | addColumn('specimen.name', asNoInfo('No specimen received; see below for details')); |
---|
428 | Main.hide('specimen-details'); |
---|
429 | } |
---|
430 | } |
---|
431 | if (numSpecimenOrNoSpecimen == 0) |
---|
432 | { |
---|
433 | if (consentOk) |
---|
434 | { |
---|
435 | addColumn('specimen.name', asNoInfo('No specimen information has been registered')); |
---|
436 | Main.hide('specimen-details'); |
---|
437 | } |
---|
438 | else |
---|
439 | { |
---|
440 | Main.hide('specimen-info'); |
---|
441 | } |
---|
442 | Main.hide('nospecimen-info'); |
---|
443 | } |
---|
444 | |
---|
445 | var histology = consentOk ? response.histology : null; |
---|
446 | if (histology && histology.length > 0) |
---|
447 | { |
---|
448 | var truncateAt = TRUNCATE_SIZE[Math.min(histology.length-1, TRUNCATE_SIZE.length)]; |
---|
449 | for (var i = 0; i < histology.length; i++) |
---|
450 | { |
---|
451 | var h = histology[i]; |
---|
452 | addColumn('histology.name', makeLink('SAMPLE', h)); |
---|
453 | addColumn('histology.registrationDate', formatDate(h.registrationDate)); |
---|
454 | addColumn('histology.partitionDate', formatDate(h.partitionDate)); |
---|
455 | addColumn('histology.usedQuantity', formatQuantity(h.originalQuantity, 1000, ' mg')); |
---|
456 | |
---|
457 | var embedded = h.embedDate ? true : false; |
---|
458 | addColumn('histology.embedded', embedded ? formatDate(h.embedDate) : 'No'); |
---|
459 | addColumn('histology.embedProtocol', embedded ? makeLink('PROTOCOL', h.embedProtocol, truncateAt) : null); |
---|
460 | addColumn('histology.paraffinBlock', embedded ? asBioPlateLocation(h.bioWell) : null); |
---|
461 | addColumn('histology.storageBox', embedded ? null : asBioPlateLocation(h.bioWell)); |
---|
462 | |
---|
463 | var stained = h.stainDate ? true : false; |
---|
464 | addColumn('histology.stained', stained ? formatDate(h.stainDate) : 'No'); |
---|
465 | addColumn('histology.nofSlides', stained ? h.numStains : null); |
---|
466 | addColumn('histology.heGlass', stained ? asBioPlateLocation(h.bestStain) : null); |
---|
467 | addColumn('histology.stainProtocol', stained ? makeLink('PROTOCOL', h.stainProtocol, truncateAt) : null); |
---|
468 | } |
---|
469 | } |
---|
470 | else |
---|
471 | { |
---|
472 | if (consentOk) |
---|
473 | { |
---|
474 | addColumn('histology.name', asNoInfo('No histology information has been registered')); |
---|
475 | Main.hide('histology-details'); |
---|
476 | } |
---|
477 | else |
---|
478 | { |
---|
479 | Main.hide('histology-info'); |
---|
480 | } |
---|
481 | } |
---|
482 | |
---|
483 | |
---|
484 | var lysate = consentOk ? response.lysate : null; |
---|
485 | if (lysate && lysate.length > 0) |
---|
486 | { |
---|
487 | var truncateAt = TRUNCATE_SIZE[Math.min(lysate.length-1, TRUNCATE_SIZE.length)]; |
---|
488 | for (var i = 0; i < lysate.length; i++) |
---|
489 | { |
---|
490 | var lys = lysate[i]; |
---|
491 | addColumn('lysate.name', makeLink('EXTRACT', lys)); |
---|
492 | addColumn('lysate.registrationDate', formatDate(lys.registrationDate)); |
---|
493 | addColumn('lysate.partitionDate', formatDate(lys.partitionDate)); |
---|
494 | addColumn('lysate.usedQuantity', formatQuantity(lys.usedQuantity, 1000, ' mg')); |
---|
495 | addColumn('lysate.multiplePieces', lys.multiplePieces ? 'Yes' : 'No'); |
---|
496 | addColumn('lysate.comment', truncate(lys.comment, truncateAt)); |
---|
497 | |
---|
498 | var lysis = lys.lysisDate ? true : false; |
---|
499 | addColumn('lysate.lysisDate', lysis ? formatDate(lys.lysisDate) : 'No'); |
---|
500 | addColumn('lysate.storageBox', lysis ? asBioPlateLocation(lys.bioWell) : null); |
---|
501 | addColumn('lysate.lysisProtocol', lysis ? makeLink('PROTOCOL', lys.lysisProtocol, truncateAt) : null); |
---|
502 | addColumn('lysate.remainingQuantity', lysis ? formatQuantity(lys.remainingQuantity, null, ' µg') : null); |
---|
503 | addColumn('lysate.originalQuantity', lysis ? formatQuantity(lys.originalQuantity, null, ' µg') : null); |
---|
504 | } |
---|
505 | } |
---|
506 | else |
---|
507 | { |
---|
508 | if (consentOk) |
---|
509 | { |
---|
510 | addColumn('lysate.name', asNoInfo('No lysate information has been registered')); |
---|
511 | Main.hide('lysate-details'); |
---|
512 | } |
---|
513 | else |
---|
514 | { |
---|
515 | Main.hide('lysate-info'); |
---|
516 | } |
---|
517 | } |
---|
518 | |
---|
519 | |
---|
520 | var rna = consentOk ? response.rna : null; |
---|
521 | if (rna && rna.length > 0) |
---|
522 | { |
---|
523 | var truncateAt = TRUNCATE_SIZE[Math.min(rna.length-1, TRUNCATE_SIZE.length)]; |
---|
524 | for (var i = 0; i < rna.length; i++) |
---|
525 | { |
---|
526 | var r = rna[i]; |
---|
527 | addColumn('rna.name', makeLink('EXTRACT', r)); |
---|
528 | addColumn('rna.flag', r.flag ? asFlagInfo(r.flag, 'flag.png') : null); |
---|
529 | addColumn('rna.registrationDate', formatDate(r.registrationDate)); |
---|
530 | addColumn('rna.storageBox', asBioPlateLocation(r.bioWell)); |
---|
531 | addColumn('rna.usedQuantity', formatQuantity(r.usedQuantity, null, ' µg')); |
---|
532 | addColumn('rna.extractionDate', formatDate(r.extractionDate)); |
---|
533 | addColumn('rna.extractionProtocol', makeLink('PROTOCOL', r.extractionProtocol, truncateAt)); |
---|
534 | addColumn('rna.remainingQuantity', formatQuantity(r.remainingQuantity, null, ' µg')); |
---|
535 | addColumn('rna.originalQuantity', formatQuantity(r.originalQuantity, null, ' µg')); |
---|
536 | addColumn('rna.ndConc', formatQuantity(r.ndConc, null, ' ng/µl')); |
---|
537 | addColumn('rna.comment', truncate(r.comment, truncateAt)); |
---|
538 | |
---|
539 | var hasQc = r.nofQc ? true : false; |
---|
540 | addColumn('rna.qc', hasQc ? (r.qcDate ? formatDate(r.qcDate) : asNoInfo('Waiting for Caliper...')) : 'No'); |
---|
541 | addColumn('rna.nofQc', hasQc ? r.nofQc : null); |
---|
542 | addColumn('rna.qcProtocol', hasQc ? makeLink('PROTOCOL', r.qcProtocol, truncateAt) : null); |
---|
543 | addColumn('rna.qcPlate', hasQc ? asBioPlateLocation(r.qcPlate)+asFileLink(r.qcPdf, 'pdffile.png') : null); |
---|
544 | addColumn('rna.qcRqs', hasQc && r.qcRqs ? formatNumber(r.qcRqs, null, 1) : null); |
---|
545 | addColumn('rna.qcRin', hasQc && r.qcRin ? formatNumber(r.qcRin, null, 1) : null); |
---|
546 | addColumn('rna.qcComment', hasQc ? truncate(r.qcComment, truncateAt) : null); |
---|
547 | } |
---|
548 | } |
---|
549 | else |
---|
550 | { |
---|
551 | if (consentOk) |
---|
552 | { |
---|
553 | addColumn('rna.name', asNoInfo('No RNA information has been registered')); |
---|
554 | Main.hide('rna-details'); |
---|
555 | } |
---|
556 | else |
---|
557 | { |
---|
558 | Main.hide('rna-info'); |
---|
559 | } |
---|
560 | } |
---|
561 | |
---|
562 | var dna = consentOk ? response.dna : null; |
---|
563 | if (dna && dna.length > 0) |
---|
564 | { |
---|
565 | var truncateAt = TRUNCATE_SIZE[Math.min(dna.length-1, TRUNCATE_SIZE.length)]; |
---|
566 | for (var i = 0; i < dna.length; i++) |
---|
567 | { |
---|
568 | var d = dna[i]; |
---|
569 | addColumn('dna.name', makeLink('EXTRACT', d)); |
---|
570 | addColumn('dna.registrationDate', formatDate(d.registrationDate)); |
---|
571 | addColumn('dna.storageBox', asBioPlateLocation(d.bioWell)); |
---|
572 | addColumn('dna.extractionDate', formatDate(d.extractionDate)); |
---|
573 | addColumn('dna.extractionProtocol', makeLink('PROTOCOL', d.extractionProtocol, truncateAt)); |
---|
574 | addColumn('dna.remainingQuantity', formatQuantity(d.remainingQuantity, null, ' µg')); |
---|
575 | addColumn('dna.originalQuantity', formatQuantity(d.originalQuantity, null, ' µg')); |
---|
576 | addColumn('dna.ndConc', formatQuantity(d.ndConc, null, ' ng/µl')); |
---|
577 | addColumn('dna.comment', truncate(d.comment, truncateAt)); |
---|
578 | } |
---|
579 | } |
---|
580 | else |
---|
581 | { |
---|
582 | if (consentOk) |
---|
583 | { |
---|
584 | addColumn('dna.name', asNoInfo('No DNA information has been registered')); |
---|
585 | Main.hide('dna-details'); |
---|
586 | } |
---|
587 | else |
---|
588 | { |
---|
589 | Main.hide('dna-info'); |
---|
590 | } |
---|
591 | } |
---|
592 | |
---|
593 | var ft = consentOk ? response.flowThrough : null; |
---|
594 | if (ft && ft.length > 0) |
---|
595 | { |
---|
596 | var truncateAt = TRUNCATE_SIZE[Math.min(ft.length-1, TRUNCATE_SIZE.length)]; |
---|
597 | for (var i = 0; i < ft.length; i++) |
---|
598 | { |
---|
599 | var f = ft[i]; |
---|
600 | addColumn('ft.name', makeLink('EXTRACT', f)); |
---|
601 | addColumn('ft.registrationDate', formatDate(f.registrationDate)); |
---|
602 | addColumn('ft.storageBox', asBioPlateLocation(f.bioWell)); |
---|
603 | addColumn('ft.extractionDate', formatDate(f.extractionDate)); |
---|
604 | addColumn('ft.extractionProtocol', makeLink('PROTOCOL', f.extractionProtocol, truncateAt)); |
---|
605 | addColumn('ft.remainingQuantity', formatQuantity(f.remainingQuantity, null, ' µg')); |
---|
606 | addColumn('ft.originalQuantity', formatQuantity(f.originalQuantity, null, ' µg')); |
---|
607 | addColumn('ft.comment', truncate(f.comment, truncateAt)); |
---|
608 | } |
---|
609 | } |
---|
610 | else |
---|
611 | { |
---|
612 | if (consentOk) |
---|
613 | { |
---|
614 | addColumn('ft.name', asNoInfo('No FlowThrough information has been registered')); |
---|
615 | Main.hide('ft-details'); |
---|
616 | } |
---|
617 | else |
---|
618 | { |
---|
619 | Main.hide('ft-info'); |
---|
620 | } |
---|
621 | } |
---|
622 | |
---|
623 | |
---|
624 | var mrna = consentOk ? response.mrna : null; |
---|
625 | if (mrna && mrna.length > 0) |
---|
626 | { |
---|
627 | var truncateAt = TRUNCATE_SIZE[Math.min(mrna.length-1, TRUNCATE_SIZE.length)]; |
---|
628 | for (var i = 0; i < mrna.length; i++) |
---|
629 | { |
---|
630 | var r = mrna[i]; |
---|
631 | addColumn('mrna.name', makeLink('EXTRACT', r)); |
---|
632 | addColumn('mrna.registrationDate', formatDate(r.registrationDate)); |
---|
633 | addColumn('mrna.storageBox', asBioPlateLocation(r.bioWell)+asFileLink(r.platePdf, 'pdffile.png')); |
---|
634 | addColumn('mrna.result', (r.result && r.result != 'Successful') ? asFailInfo(r.result, 'error.png') : null); |
---|
635 | addColumn('mrna.extractionDate', formatDate(r.extractionDate)); |
---|
636 | addColumn('mrna.usedQuantity', formatQuantity(r.usedQuantity, null, ' µg')); |
---|
637 | } |
---|
638 | } |
---|
639 | else |
---|
640 | { |
---|
641 | if (consentOk) |
---|
642 | { |
---|
643 | addColumn('mrna.name', asNoInfo('No mRNA information has been registered')); |
---|
644 | Main.hide('mrna-details'); |
---|
645 | } |
---|
646 | else |
---|
647 | { |
---|
648 | Main.hide('mrna-info'); |
---|
649 | } |
---|
650 | } |
---|
651 | |
---|
652 | |
---|
653 | var cdna = consentOk ? response.cdna : null; |
---|
654 | if (cdna && cdna.length > 0) |
---|
655 | { |
---|
656 | var truncateAt = TRUNCATE_SIZE[Math.min(cdna.length-1, TRUNCATE_SIZE.length)]; |
---|
657 | for (var i = 0; i < cdna.length; i++) |
---|
658 | { |
---|
659 | var r = cdna[i]; |
---|
660 | addColumn('cdna.name', makeLink('EXTRACT', r)); |
---|
661 | addColumn('cdna.registrationDate', formatDate(r.registrationDate)); |
---|
662 | addColumn('cdna.storageBox', asBioPlateLocation(r.bioWell)); |
---|
663 | addColumn('cdna.result', (r.result && r.result != 'Successful') ? asFailInfo(r.result, 'error.png') : null); |
---|
664 | addColumn('cdna.extractionDate', formatDate(r.extractionDate)); |
---|
665 | } |
---|
666 | } |
---|
667 | else |
---|
668 | { |
---|
669 | if (consentOk) |
---|
670 | { |
---|
671 | addColumn('cdna.name', asNoInfo('No cDNA information has been registered')); |
---|
672 | Main.hide('cdna-details'); |
---|
673 | } |
---|
674 | else |
---|
675 | { |
---|
676 | Main.hide('cdna-info'); |
---|
677 | } |
---|
678 | } |
---|
679 | |
---|
680 | |
---|
681 | var lib = consentOk ? response.lib : null; |
---|
682 | if (lib && lib.length > 0) |
---|
683 | { |
---|
684 | var truncateAt = TRUNCATE_SIZE[Math.min(lib.length-1, TRUNCATE_SIZE.length)]; |
---|
685 | for (var i = 0; i < lib.length; i++) |
---|
686 | { |
---|
687 | var r = lib[i]; |
---|
688 | addColumn('lib.name', makeLink('EXTRACT', r)); |
---|
689 | addColumn('lib.registrationDate', formatDate(r.registrationDate)); |
---|
690 | addColumn('lib.storageBox', asBioPlateLocation(r.bioWell)); |
---|
691 | addColumn('lib.result', (r.result && r.result != 'Successful') ? asFailInfo(r.result, 'error.png') : null); |
---|
692 | addColumn('lib.extractionDate', formatDate(r.extractionDate)); |
---|
693 | addColumn('lib.remainingQuantity', formatQuantity(r.remainingQuantity, 0.001, ' ng')); |
---|
694 | addColumn('lib.originalQuantity', formatQuantity(r.originalQuantity, 0.001, ' ng')); |
---|
695 | addColumn('lib.barcode.name', r.barcode.name); |
---|
696 | addColumn('lib.ca_size', formatQuantity(r.ca_size, null, '')); |
---|
697 | addColumn('lib.ca_molarity', formatQuantity(r.ca_molarity, null, ' nM')); |
---|
698 | addColumn('lib.qubitconc', formatQuantity(r.qubitconc, null, ' ng/µl')); |
---|
699 | } |
---|
700 | } |
---|
701 | else |
---|
702 | { |
---|
703 | if (consentOk) |
---|
704 | { |
---|
705 | addColumn('lib.name', asNoInfo('No library information has been registered')); |
---|
706 | Main.hide('lib-details'); |
---|
707 | } |
---|
708 | else |
---|
709 | { |
---|
710 | Main.hide('lib-info'); |
---|
711 | } |
---|
712 | } |
---|
713 | |
---|
714 | |
---|
715 | var pooledLib = consentOk ? response.pooledlib : null; |
---|
716 | if (pooledLib && pooledLib.length > 0) |
---|
717 | { |
---|
718 | var truncateAt = TRUNCATE_SIZE[Math.min(pooledLib.length-1, TRUNCATE_SIZE.length)]; |
---|
719 | for (var i = 0; i < pooledLib.length; i++) |
---|
720 | { |
---|
721 | var r = pooledLib[i]; |
---|
722 | addColumn('pooledlib.name', makeLink('EXTRACT', r)); |
---|
723 | addColumn('pooledlib.registrationDate', formatDate(r.registrationDate)); |
---|
724 | addColumn('pooledlib.extractionDate', formatDate(r.extractionDate)); |
---|
725 | addColumn('pooledlib.remainingQuantity', formatQuantity(r.remainingQuantity, 0.001, ' ng')); |
---|
726 | addColumn('pooledlib.originalQuantity', formatQuantity(r.originalQuantity, 0.001, ' ng')); |
---|
727 | addColumn('pooledlib.poolmolarity', formatQuantity(r.poolmolarity, null, ' nM')); |
---|
728 | addColumn('pooledlib.poolconc', formatQuantity(r.poolconc, null, ' ng/µl')); |
---|
729 | } |
---|
730 | } |
---|
731 | else |
---|
732 | { |
---|
733 | if (consentOk) |
---|
734 | { |
---|
735 | addColumn('pooledlib.name', asNoInfo('No pooled library information has been registered')); |
---|
736 | Main.hide('pooledlib-details'); |
---|
737 | } |
---|
738 | else |
---|
739 | { |
---|
740 | Main.hide('pooledlib-info'); |
---|
741 | } |
---|
742 | } |
---|
743 | } |
---|
744 | |
---|
745 | function caseSummary(caseName) |
---|
746 | { |
---|
747 | var frm = document.forms['reggie']; |
---|
748 | if (!caseName) |
---|
749 | { |
---|
750 | caseName = frm.caseName.value; |
---|
751 | if (!caseName) |
---|
752 | { |
---|
753 | alert('Please enter a 7-digit case id'); |
---|
754 | return; |
---|
755 | } |
---|
756 | } |
---|
757 | location.href = 'case_summary.jsp?ID=<%=ID%>&caseName='+encodeURIComponent(caseName); |
---|
758 | } |
---|
759 | |
---|
760 | function showConfidentialOnChange() |
---|
761 | { |
---|
762 | var frm = document.forms['reggie']; |
---|
763 | if (frm.showConfidential.checked) |
---|
764 | { |
---|
765 | Main.removeClass(document.getElementById('all-info'), 'hide-confidential'); |
---|
766 | } |
---|
767 | else |
---|
768 | { |
---|
769 | Main.addClass(document.getElementById('all-info'), 'hide-confidential'); |
---|
770 | } |
---|
771 | } |
---|
772 | |
---|
773 | function goPrint() |
---|
774 | { |
---|
775 | var printNote = '<b>Note!</b> For better printing set page orientation to <i>portrait</i>.<br>'; |
---|
776 | printNote += ' You may have to <i>scale down</i> to fit everything on the width of the page.'; |
---|
777 | openPrintWindow('<%=ID%>', 'all-content', 'Case summary - <%=HTML.encodeTags(caseName)%>', 'portrait', printNote, '../', 'case_summary.css'); |
---|
778 | } |
---|
779 | |
---|
780 | </script> |
---|
781 | <style> |
---|
782 | |
---|
783 | </style> |
---|
784 | </base:head> |
---|
785 | |
---|
786 | <base:body onload="init()"> |
---|
787 | <div id="all-content"> |
---|
788 | <% |
---|
789 | if (fullPage) |
---|
790 | { |
---|
791 | %> |
---|
792 | <p:path><p:pathelement id="path-reggie" clazz="noprint" |
---|
793 | title="Reggie" href="<%="../index.jsp?ID="+ID%>" |
---|
794 | /><p:pathelement id="path-case-summary" title="<%="Case summary - " + HTML.encodeTags(caseName)%>" |
---|
795 | /></p:path> |
---|
796 | <% |
---|
797 | } |
---|
798 | else if (popup) |
---|
799 | { |
---|
800 | %> |
---|
801 | <h1>Case summary - <%= HTML.encodeTags(caseName)%></h1> |
---|
802 | <% |
---|
803 | } |
---|
804 | %> |
---|
805 | <div class="content"> |
---|
806 | <form name="reggie" onsubmit="return false;"> |
---|
807 | <% |
---|
808 | if (fullPage || popup) |
---|
809 | { |
---|
810 | %> |
---|
811 | <div class="filled noprint" id="toolbar"> |
---|
812 | <table> |
---|
813 | <tr> |
---|
814 | <th style="padding: 0.5em 0.75em 0.5em 0.75em;">Find another case</th> |
---|
815 | <td><input type="text" class="text" style="width: 25em;" |
---|
816 | name="caseName" title="Please enter a 7-digit case id" |
---|
817 | onkeypress="if (event.keyCode==13 && this.value) caseSummary()"></td> |
---|
818 | <td style="padding-left: 0.5em; padding-right: 0.5em; border-right: 1px dotted #A0A0A0; "><base:icon image="<%=home+"/images/gonext.png"%>" onclick="caseSummary()"></base:icon></td> |
---|
819 | <% |
---|
820 | if (isAdmin || isPatientCurator) |
---|
821 | { |
---|
822 | %> |
---|
823 | <th style="padding-left: 0.5em; padding-right: 0.5em; border-right: 1px dotted #A0A0A0;"> |
---|
824 | <label for="showConfidential">Show confidential information</label> |
---|
825 | <input type="checkbox" id="showConfidential" name="showConfidential" onchange="showConfidentialOnChange()"> |
---|
826 | </th> |
---|
827 | <% |
---|
828 | } |
---|
829 | %> |
---|
830 | <th style="padding-left: 0.5em; padding-right: 0.5em; border-right: 1px dotted #A0A0A0;"> |
---|
831 | <span id="printButton" class="link" onclick="goPrint()"><img src="../images/print.png" style="padding-right: 0.5em;">Print version…</span> |
---|
832 | </th> |
---|
833 | </tr> |
---|
834 | </table> |
---|
835 | </div> |
---|
836 | <% |
---|
837 | } |
---|
838 | %> |
---|
839 | <div class="hide-confidential" id="all-info" style="display: none;"> |
---|
840 | <div id="left-column"> |
---|
841 | <div> |
---|
842 | <% |
---|
843 | if (sc.getActiveProjectId() == 0) |
---|
844 | { |
---|
845 | %> |
---|
846 | <div class="messagecontainer note" style="margin-bottom: 20px; font-weight: bold; color: #cc0000;"> |
---|
847 | No project has been selected. You may not be able to see all registered information. |
---|
848 | </div> |
---|
849 | <% |
---|
850 | } |
---|
851 | %> |
---|
852 | <div class="info-section" id="case-info"> |
---|
853 | <div> |
---|
854 | <table class="info-table"> |
---|
855 | <thead> |
---|
856 | <tr id="case.name"> |
---|
857 | <th>Case</th> |
---|
858 | </tr> |
---|
859 | </thead> |
---|
860 | <tbody id="case-details"> |
---|
861 | <tr id="case.registrationDate"> |
---|
862 | <th>Registration date</th> |
---|
863 | </tr> |
---|
864 | <tr id="case.site"> |
---|
865 | <th>Site</th> |
---|
866 | </tr> |
---|
867 | <tr id="case.laterality" class="dynamic-column"> |
---|
868 | <th>Laterality</th> |
---|
869 | </tr> |
---|
870 | <tr id="case.consent"> |
---|
871 | <th>Consent</th> |
---|
872 | </tr> |
---|
873 | <tr id="case.comment" class="comment dynamic-column"> |
---|
874 | <th>Comment</th> |
---|
875 | </tr> |
---|
876 | </tbody> |
---|
877 | </table> |
---|
878 | </div> |
---|
879 | </div> |
---|
880 | |
---|
881 | <div class="info-section" id="patient-info"> |
---|
882 | <div> |
---|
883 | <table class="info-table"> |
---|
884 | <thead> |
---|
885 | <tr id="patient.name"> |
---|
886 | <th>Patient</th> |
---|
887 | </tr> |
---|
888 | </thead> |
---|
889 | <tbody id="patient-details"> |
---|
890 | <tr id="patient.registrationDate"> |
---|
891 | <th>Registration date</th> |
---|
892 | </tr> |
---|
893 | <tr id="patient.personalNumber" class="confidential"> |
---|
894 | <th>Personal number</th> |
---|
895 | </tr> |
---|
896 | <tr id="patient.allFirstNames" class="confidential"> |
---|
897 | <th>All first names</th> |
---|
898 | </tr> |
---|
899 | <tr id="patient.familyName" class="confidential"> |
---|
900 | <th>Family name</th> |
---|
901 | </tr> |
---|
902 | <tr id="patient.gender"> |
---|
903 | <th>Gender</th> |
---|
904 | </tr> |
---|
905 | <tr id="patient.allCases" class="dynamic-column"> |
---|
906 | <th>All cases</th> |
---|
907 | </tr> |
---|
908 | </tbody> |
---|
909 | </table> |
---|
910 | </div> |
---|
911 | </div> |
---|
912 | |
---|
913 | <div class="info-section" id="blood-info"> |
---|
914 | <div> |
---|
915 | <table class="info-table"> |
---|
916 | <thead> |
---|
917 | <tr id="blood.name"> |
---|
918 | <th>Blood</th> |
---|
919 | </tr> |
---|
920 | </thead> |
---|
921 | <tbody id="blood-details"> |
---|
922 | <tr id="blood.registrationDate"> |
---|
923 | <th>Registration date</th> |
---|
924 | </tr> |
---|
925 | <tr id="blood.consent"> |
---|
926 | <th>Consent</th> |
---|
927 | </tr> |
---|
928 | <tr id="blood.bloodSample"> |
---|
929 | <th>Blood sample</th> |
---|
930 | </tr> |
---|
931 | <tr id="blood.samplingDate"> |
---|
932 | <th>Sampling date</th> |
---|
933 | </tr> |
---|
934 | <tr id="blood.freezerDate"> |
---|
935 | <th>Freezer date</th> |
---|
936 | </tr> |
---|
937 | <tr id="blood.serum"> |
---|
938 | <th>Serum</th> |
---|
939 | </tr> |
---|
940 | <tr id="blood.comment" class="comment dynamic-column"> |
---|
941 | <th>Comment</th> |
---|
942 | </tr> |
---|
943 | </tbody> |
---|
944 | </table> |
---|
945 | </div> |
---|
946 | </div> |
---|
947 | |
---|
948 | <div class="info-section" id="specimen-info"> |
---|
949 | <div> |
---|
950 | <table class="info-table"> |
---|
951 | <thead> |
---|
952 | <tr id="specimen.name"> |
---|
953 | <th>Specimen</th> |
---|
954 | </tr> |
---|
955 | </thead> |
---|
956 | <tbody id="specimen-details"> |
---|
957 | <tr id="specimen.registrationDate"> |
---|
958 | <th>Registration date</th> |
---|
959 | </tr> |
---|
960 | <tr id="specimen.storageBox"> |
---|
961 | <th>Storage box</th> |
---|
962 | </tr> |
---|
963 | <tr id="specimen.laterality"> |
---|
964 | <th>Laterality</th> |
---|
965 | </tr> |
---|
966 | <tr id="specimen.samplingDate"> |
---|
967 | <th>Sampling date</th> |
---|
968 | </tr> |
---|
969 | <tr id="specimen.rnaLaterDate"> |
---|
970 | <th>RNA later date</th> |
---|
971 | </tr> |
---|
972 | <tr id="specimen.pad"> |
---|
973 | <th>PAD</th> |
---|
974 | </tr> |
---|
975 | <tr id="specimen.biopsyType"> |
---|
976 | <th>Biopsy type</th> |
---|
977 | </tr> |
---|
978 | <tr id="specimen.remainingQuantity"> |
---|
979 | <th>Remaining quantity</th> |
---|
980 | </tr> |
---|
981 | <tr id="specimen.originalQuantity"> |
---|
982 | <th>Original quantity</th> |
---|
983 | </tr> |
---|
984 | <tr id="specimen.nofPieces"> |
---|
985 | <th>No. pieces</th> |
---|
986 | </tr> |
---|
987 | <tr id="specimen.partitionComment"> |
---|
988 | <th>Partition comment</th> |
---|
989 | </tr> |
---|
990 | <tr id="specimen.comment" class="comment dynamic-column"> |
---|
991 | <th>Comment</th> |
---|
992 | </tr> |
---|
993 | </tbody> |
---|
994 | </table> |
---|
995 | </div> |
---|
996 | </div> |
---|
997 | |
---|
998 | <div class="info-section" id="nospecimen-info"> |
---|
999 | <div> |
---|
1000 | <table class="info-table"> |
---|
1001 | <thead> |
---|
1002 | <tr id="nospecimen.name"> |
---|
1003 | <th>NoSpecimen</th> |
---|
1004 | </tr> |
---|
1005 | </thead> |
---|
1006 | <tbody id="nospecimen-details"> |
---|
1007 | <tr id="nospecimen.registrationDate"> |
---|
1008 | <th>Registration date</th> |
---|
1009 | </tr> |
---|
1010 | <tr id="nospecimen.laterality"> |
---|
1011 | <th>Laterality</th> |
---|
1012 | </tr> |
---|
1013 | <tr id="nospecimen.samplingDate"> |
---|
1014 | <th>Sampling date</th> |
---|
1015 | </tr> |
---|
1016 | <tr id="nospecimen.pad"> |
---|
1017 | <th>PAD</th> |
---|
1018 | </tr> |
---|
1019 | <tr id="nospecimen.reasonIfNoSpecimen" class="comment"> |
---|
1020 | <th>Reason</th> |
---|
1021 | </tr> |
---|
1022 | <tr id="nospecimen.comment" class="comment dynamic-column"> |
---|
1023 | <th>Comment</th> |
---|
1024 | </tr> |
---|
1025 | </tbody> |
---|
1026 | </table> |
---|
1027 | </div> |
---|
1028 | </div> |
---|
1029 | |
---|
1030 | </div> |
---|
1031 | </div> |
---|
1032 | <div id="right-column"> |
---|
1033 | <div> |
---|
1034 | <div class="info-section" id="histology-info"> |
---|
1035 | <div> |
---|
1036 | <table class="info-table"> |
---|
1037 | <thead> |
---|
1038 | <tr id="histology.name"> |
---|
1039 | <th>Histology</th> |
---|
1040 | </tr> |
---|
1041 | </thead> |
---|
1042 | <tbody id="histology-details"> |
---|
1043 | <tr id="histology.registrationDate"> |
---|
1044 | <th>Registration date</th> |
---|
1045 | </tr> |
---|
1046 | <tr id="histology.storageBox" class="dynamic-column"> |
---|
1047 | <th>Storage box</th> |
---|
1048 | </tr> |
---|
1049 | <tr id="histology.partitionDate"> |
---|
1050 | <th>Partition date</th> |
---|
1051 | </tr> |
---|
1052 | <tr id="histology.usedQuantity"> |
---|
1053 | <th>Used quantity</th> |
---|
1054 | </tr> |
---|
1055 | <tr id="histology.embedded" class="subtitle"> |
---|
1056 | <th>Embedded</th> |
---|
1057 | </tr> |
---|
1058 | <tr id="histology.paraffinBlock" class="dynamic-column"> |
---|
1059 | <th>Paraffin block</th> |
---|
1060 | </tr> |
---|
1061 | <tr id="histology.embedProtocol" class="dynamic-column"> |
---|
1062 | <th>Protocol</th> |
---|
1063 | </tr> |
---|
1064 | <tr id="histology.stained" class="subtitle"> |
---|
1065 | <th>Stained</th> |
---|
1066 | </tr> |
---|
1067 | <tr id="histology.nofSlides" class="dynamic-column"> |
---|
1068 | <th>No. slides</th> |
---|
1069 | </tr> |
---|
1070 | <tr id="histology.heGlass" class="dynamic-column"> |
---|
1071 | <th>Best slide</th> |
---|
1072 | </tr> |
---|
1073 | <tr id="histology.stainProtocol" class="dynamic-column"> |
---|
1074 | <th>Protocol</th> |
---|
1075 | </tr> |
---|
1076 | </tbody> |
---|
1077 | </table> |
---|
1078 | </div> |
---|
1079 | </div> |
---|
1080 | |
---|
1081 | <div class="info-section" id="lysate-info"> |
---|
1082 | <div> |
---|
1083 | <table class="info-table dynamic-columns"> |
---|
1084 | <thead> |
---|
1085 | <tr id="lysate.name"> |
---|
1086 | <th>Lysate</th> |
---|
1087 | </tr> |
---|
1088 | </thead> |
---|
1089 | <tbody id="lysate-details"> |
---|
1090 | <tr id="lysate.registrationDate"> |
---|
1091 | <th>Registration date</th> |
---|
1092 | </tr> |
---|
1093 | <tr id="lysate.partitionDate"> |
---|
1094 | <th>Partition date</th> |
---|
1095 | </tr> |
---|
1096 | <tr id="lysate.usedQuantity"> |
---|
1097 | <th>Used quantity</th> |
---|
1098 | </tr> |
---|
1099 | <tr id="lysate.multiplePieces"> |
---|
1100 | <th>Multiple pieces</th> |
---|
1101 | </tr> |
---|
1102 | <tr id="lysate.lysisDate" class="subtitle"> |
---|
1103 | <th>Lysis date</th> |
---|
1104 | </tr> |
---|
1105 | <tr id="lysate.storageBox" class="dynamic-column"> |
---|
1106 | <th>Storage box</th> |
---|
1107 | </tr> |
---|
1108 | <tr id="lysate.lysisProtocol" class="dynamic-column"> |
---|
1109 | <th>Protocol</th> |
---|
1110 | </tr> |
---|
1111 | <tr id="lysate.remainingQuantity" class="dynamic-column"> |
---|
1112 | <th>Remaining quantity</th> |
---|
1113 | </tr> |
---|
1114 | <tr id="lysate.originalQuantity" class="dynamic-column"> |
---|
1115 | <th>Original quantity</th> |
---|
1116 | </tr> |
---|
1117 | <tr id="lysate.comment" class="comment dynamic-column"> |
---|
1118 | <th>Comment</th> |
---|
1119 | </tr> |
---|
1120 | </tbody> |
---|
1121 | </table> |
---|
1122 | </div> |
---|
1123 | </div> |
---|
1124 | |
---|
1125 | <div class="info-section" id="rna-info"> |
---|
1126 | <div> |
---|
1127 | <table class="info-table dynamic-columns"> |
---|
1128 | <thead> |
---|
1129 | <tr id="rna.name"> |
---|
1130 | <th>RNA</th> |
---|
1131 | </tr> |
---|
1132 | </thead> |
---|
1133 | <tbody id="rna-details"> |
---|
1134 | <tr id="rna.flag" class="dynamic-column"> |
---|
1135 | <th>Flag</th> |
---|
1136 | </tr> |
---|
1137 | <tr id="rna.registrationDate"> |
---|
1138 | <th>Registration date</th> |
---|
1139 | </tr> |
---|
1140 | <tr id="rna.storageBox"> |
---|
1141 | <th>Storage box</th> |
---|
1142 | </tr> |
---|
1143 | <tr id="rna.extractionDate"> |
---|
1144 | <th>Extraction date</th> |
---|
1145 | </tr> |
---|
1146 | <tr id="rna.usedQuantity"> |
---|
1147 | <th>Used quantity</th> |
---|
1148 | </tr> |
---|
1149 | <tr id="rna.extractionProtocol"> |
---|
1150 | <th>Protocol</th> |
---|
1151 | </tr> |
---|
1152 | <tr id="rna.remainingQuantity"> |
---|
1153 | <th>Remaining quantity</th> |
---|
1154 | </tr> |
---|
1155 | <tr id="rna.originalQuantity"> |
---|
1156 | <th>Original quantity</th> |
---|
1157 | </tr> |
---|
1158 | <tr id="rna.ndConc"> |
---|
1159 | <th>ND Conc.</th> |
---|
1160 | </tr> |
---|
1161 | <tr id="rna.comment" class="comment dynamic-column"> |
---|
1162 | <th>Comment</th> |
---|
1163 | </tr> |
---|
1164 | <tr id="rna.qc" class="subtitle"> |
---|
1165 | <th>QC (last)</th> |
---|
1166 | </tr> |
---|
1167 | <tr id="rna.nofQc" class="dynamic-column"> |
---|
1168 | <th>No. QC</th> |
---|
1169 | </tr> |
---|
1170 | <tr id="rna.qcProtocol" class="dynamic-column"> |
---|
1171 | <th>Protocol</th> |
---|
1172 | </tr> |
---|
1173 | <tr id="rna.qcPlate" class="dynamic-column"> |
---|
1174 | <th>Plate</th> |
---|
1175 | </tr> |
---|
1176 | <tr id="rna.qcRqs" class="dynamic-column"> |
---|
1177 | <th>RQS</th> |
---|
1178 | </tr> |
---|
1179 | <tr id="rna.qcRin" class="dynamic-column"> |
---|
1180 | <th>RIN</th> |
---|
1181 | </tr> |
---|
1182 | <tr id="rna.qcComment" class="comment dynamic-column"> |
---|
1183 | <th>Comment</th> |
---|
1184 | </tr> |
---|
1185 | </tbody> |
---|
1186 | </table> |
---|
1187 | </div> |
---|
1188 | </div> |
---|
1189 | |
---|
1190 | <div class="info-section" id="dna-info"> |
---|
1191 | <div> |
---|
1192 | <table class="info-table dynamic-columns"> |
---|
1193 | <thead> |
---|
1194 | <tr id="dna.name"> |
---|
1195 | <th>DNA</th> |
---|
1196 | </tr> |
---|
1197 | </thead> |
---|
1198 | <tbody id="dna-details"> |
---|
1199 | <tr id="dna.registrationDate"> |
---|
1200 | <th>Registration date</th> |
---|
1201 | </tr> |
---|
1202 | <tr id="dna.storageBox"> |
---|
1203 | <th>Storage box</th> |
---|
1204 | </tr> |
---|
1205 | <tr id="dna.extractionDate"> |
---|
1206 | <th>Extraction date</th> |
---|
1207 | </tr> |
---|
1208 | <tr id="dna.extractionProtocol"> |
---|
1209 | <th>Protocol</th> |
---|
1210 | </tr> |
---|
1211 | <tr id="dna.remainingQuantity"> |
---|
1212 | <th>Remaining quantity</th> |
---|
1213 | </tr> |
---|
1214 | <tr id="dna.originalQuantity"> |
---|
1215 | <th>Original quantity</th> |
---|
1216 | </tr> |
---|
1217 | <tr id="dna.ndConc"> |
---|
1218 | <th>ND Conc.</th> |
---|
1219 | </tr> |
---|
1220 | <tr id="dna.comment" class="comment dynamic-column"> |
---|
1221 | <th>Comment</th> |
---|
1222 | </tr> |
---|
1223 | </tbody> |
---|
1224 | </table> |
---|
1225 | </div> |
---|
1226 | </div> |
---|
1227 | |
---|
1228 | <div class="info-section" id="ft-info"> |
---|
1229 | <div> |
---|
1230 | <table class="info-table dynamic-columns"> |
---|
1231 | <thead> |
---|
1232 | <tr id="ft.name"> |
---|
1233 | <th>FlowThrough</th> |
---|
1234 | </tr> |
---|
1235 | </thead> |
---|
1236 | <tbody id="ft-details"> |
---|
1237 | <tr id="ft.registrationDate"> |
---|
1238 | <th>Registration date</th> |
---|
1239 | </tr> |
---|
1240 | <tr id="ft.storageBox"> |
---|
1241 | <th>Storage box</th> |
---|
1242 | </tr> |
---|
1243 | <tr id="ft.extractionDate"> |
---|
1244 | <th>Extraction date</th> |
---|
1245 | </tr> |
---|
1246 | <tr id="ft.extractionProtocol"> |
---|
1247 | <th>Protocol</th> |
---|
1248 | </tr> |
---|
1249 | <tr id="ft.remainingQuantity"> |
---|
1250 | <th>Remaining quantity</th> |
---|
1251 | </tr> |
---|
1252 | <tr id="ft.originalQuantity"> |
---|
1253 | <th>Original quantity</th> |
---|
1254 | </tr> |
---|
1255 | <tr id="ft.comment" class="comment dynamic-column"> |
---|
1256 | <th>Comment</th> |
---|
1257 | </tr> |
---|
1258 | </tbody> |
---|
1259 | </table> |
---|
1260 | </div> |
---|
1261 | </div> |
---|
1262 | |
---|
1263 | <div class="info-section" id="mrna-info"> |
---|
1264 | <div> |
---|
1265 | <table class="info-table dynamic-columns"> |
---|
1266 | <thead> |
---|
1267 | <tr id="mrna.name"> |
---|
1268 | <th>mRNA</th> |
---|
1269 | </tr> |
---|
1270 | </thead> |
---|
1271 | <tbody id="mrna-details"> |
---|
1272 | <tr id="mrna.registrationDate"> |
---|
1273 | <th>Registration date</th> |
---|
1274 | </tr> |
---|
1275 | <tr id="mrna.storageBox"> |
---|
1276 | <th>Work plate</th> |
---|
1277 | </tr> |
---|
1278 | <tr id="mrna.result" class="dynamic-column"> |
---|
1279 | <th>Plate result</th> |
---|
1280 | </tr> |
---|
1281 | <tr id="mrna.extractionDate"> |
---|
1282 | <th>Cleanup date</th> |
---|
1283 | </tr> |
---|
1284 | <tr id="mrna.usedQuantity"> |
---|
1285 | <th>Used quantity</th> |
---|
1286 | </tr> |
---|
1287 | </tbody> |
---|
1288 | </table> |
---|
1289 | </div> |
---|
1290 | </div> |
---|
1291 | |
---|
1292 | <div class="info-section" id="cdna-info"> |
---|
1293 | <div> |
---|
1294 | <table class="info-table dynamic-columns"> |
---|
1295 | <thead> |
---|
1296 | <tr id="cdna.name"> |
---|
1297 | <th>cDNA</th> |
---|
1298 | </tr> |
---|
1299 | </thead> |
---|
1300 | <tbody id="cdna-details"> |
---|
1301 | <tr id="cdna.registrationDate"> |
---|
1302 | <th>Registration date</th> |
---|
1303 | </tr> |
---|
1304 | <tr id="cdna.storageBox"> |
---|
1305 | <th>Work plate</th> |
---|
1306 | </tr> |
---|
1307 | <tr id="cdna.result" class="dynamic-column"> |
---|
1308 | <th>Plate result</th> |
---|
1309 | </tr> |
---|
1310 | <tr id="cdna.extractionDate"> |
---|
1311 | <th>Synthesis date</th> |
---|
1312 | </tr> |
---|
1313 | </tbody> |
---|
1314 | </table> |
---|
1315 | </div> |
---|
1316 | </div> |
---|
1317 | |
---|
1318 | <div class="info-section" id="lib-info"> |
---|
1319 | <div> |
---|
1320 | <table class="info-table dynamic-columns"> |
---|
1321 | <thead> |
---|
1322 | <tr id="lib.name"> |
---|
1323 | <th>Library</th> |
---|
1324 | </tr> |
---|
1325 | </thead> |
---|
1326 | <tbody id="lib-details"> |
---|
1327 | <tr id="lib.registrationDate"> |
---|
1328 | <th>Registration date</th> |
---|
1329 | </tr> |
---|
1330 | <tr id="lib.storageBox"> |
---|
1331 | <th>Library plate</th> |
---|
1332 | </tr> |
---|
1333 | <tr id="lib.result" class="dynamic-column"> |
---|
1334 | <th>Plate result</th> |
---|
1335 | </tr> |
---|
1336 | <tr id="lib.extractionDate"> |
---|
1337 | <th>Cleanup date</th> |
---|
1338 | </tr> |
---|
1339 | <tr id="lib.remainingQuantity"> |
---|
1340 | <th>Remaining quantity</th> |
---|
1341 | </tr> |
---|
1342 | <tr id="lib.originalQuantity"> |
---|
1343 | <th>Original quantity</th> |
---|
1344 | </tr> |
---|
1345 | <tr id="lib.barcode.name"> |
---|
1346 | <th>Tag</th> |
---|
1347 | </tr> |
---|
1348 | <tr id="lib.ca_size"> |
---|
1349 | <th>CA_Size</th> |
---|
1350 | </tr> |
---|
1351 | <tr id="lib.ca_molarity"> |
---|
1352 | <th>CA_Molarity</th> |
---|
1353 | </tr> |
---|
1354 | <tr id="lib.qubitconc"> |
---|
1355 | <th>QubitConc</th> |
---|
1356 | </tr> |
---|
1357 | </tbody> |
---|
1358 | </table> |
---|
1359 | </div> |
---|
1360 | </div> |
---|
1361 | |
---|
1362 | <div class="info-section" id="pooledlib-info"> |
---|
1363 | <div> |
---|
1364 | <table class="info-table dynamic-columns"> |
---|
1365 | <thead> |
---|
1366 | <tr id="pooledlib.name"> |
---|
1367 | <th>Pooled Library</th> |
---|
1368 | </tr> |
---|
1369 | </thead> |
---|
1370 | <tbody id="pooledlib-details"> |
---|
1371 | <tr id="pooledlib.registrationDate"> |
---|
1372 | <th>Registration date</th> |
---|
1373 | </tr> |
---|
1374 | <tr id="pooledlib.extractionDate"> |
---|
1375 | <th>Pool date</th> |
---|
1376 | </tr> |
---|
1377 | <tr id="pooledlib.remainingQuantity"> |
---|
1378 | <th>Remaining quantity</th> |
---|
1379 | </tr> |
---|
1380 | <tr id="pooledlib.originalQuantity"> |
---|
1381 | <th>Original quantity</th> |
---|
1382 | </tr> |
---|
1383 | <tr id="pooledlib.poolmolarity"> |
---|
1384 | <th>PoolMolarity</th> |
---|
1385 | </tr> |
---|
1386 | <tr id="pooledlib.poolconc"> |
---|
1387 | <th>PoolConc</th> |
---|
1388 | </tr> |
---|
1389 | </tbody> |
---|
1390 | </table> |
---|
1391 | </div> |
---|
1392 | </div> |
---|
1393 | |
---|
1394 | </div> |
---|
1395 | </div> |
---|
1396 | </div> |
---|
1397 | </form> |
---|
1398 | |
---|
1399 | <div class="messagecontainer error" id="errorMessage" style="display: none; width: 950px; margin-left: 20px; margin-bottom: 0px;"></div> |
---|
1400 | |
---|
1401 | </div> |
---|
1402 | </div> |
---|
1403 | <% |
---|
1404 | if (popup) |
---|
1405 | { |
---|
1406 | %> |
---|
1407 | <base:buttongroup subclass="dialogbuttons topborder" id="dialogbuttons"> |
---|
1408 | <base:button onclick="window.close()" title="Close" /> |
---|
1409 | </base:buttongroup> |
---|
1410 | <% |
---|
1411 | } |
---|
1412 | %> |
---|
1413 | </base:body> |
---|
1414 | </base:page> |
---|
1415 | <% |
---|
1416 | } |
---|
1417 | finally |
---|
1418 | { |
---|
1419 | if (dc != null) dc.close(); |
---|
1420 | } |
---|
1421 | %> |
---|