source: extensions/net.sf.basedb.reggie/branches/2.15-stable/resources/index.jsp @ 2504

Last change on this file since 2504 was 2504, checked in by Nicklas Nordborg, 9 years ago

References #604: New wizard "RNA dilution registration"

The lab protocol wizard now display dilution date and operator if it exists.

The mRNA registration wizard now only list plates that has a dilution date set and the dilution date/operator has been removed from that wizard.

Added link to the new wizard on the index page. The counters have been updated to count only plates with/without dilution date.

File size: 31.5 KB
Line 
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.Item"
10  import="net.sf.basedb.core.Permission"
11  import="net.sf.basedb.core.SessionControl"
12  import="net.sf.basedb.core.SystemItems"
13  import="net.sf.basedb.core.ItemQuery"
14  import="net.sf.basedb.core.query.Expressions"
15  import="net.sf.basedb.core.query.Hql"
16  import="net.sf.basedb.core.query.Restrictions"
17  import="net.sf.basedb.clients.web.Base"
18  import="net.sf.basedb.clients.web.util.HTML"
19  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
20  import="net.sf.basedb.util.Values"
21  import="java.util.List"
22%>
23<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
24<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
25<%
26final SessionControl sc = Base.getExistingSessionControl(request, true);
27final String ID = sc.getId();
28final float scale = Base.getScale(sc);
29final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
30DbControl dc = null;
31try
32{
33  dc = sc.newDbControl();
34  final User user = User.getById(dc, sc.getLoggedInUserId());
35 
36  boolean isAdmin = user.getId() == SystemItems.getId(User.ROOT);
37  boolean isPatientCurator = false;
38  if (!isAdmin)
39  {
40    try
41    {
42      Role admin = Role.getById(dc, SystemItems.getId(Role.ADMINISTRATOR));
43      isAdmin = sc.isMemberOf(admin);
44    }
45    catch (RuntimeException ex)
46    {}
47  }
48  try
49  {
50    ItemQuery<Group> query = Group.getQuery();
51    query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string("PatientCurator")));
52    List<Group> result = query.list(dc);
53    if (result.size() == 1)
54    {
55      isPatientCurator = sc.isMemberOf(result.get(0));
56    }
57  }
58  catch (RuntimeException ex)
59  {}
60%>
61<base:page type="default" >
62<base:head styles="path.css" scripts="ajax.js">
63  <script language="JavaScript" src="reggie.js" type="text/javascript" charset="UTF-8"></script>
64  <link rel="stylesheet" type="text/css" href="css/reggie.css">
65  <script language="JavaScript">
66 
67  var debug = false;
68  var myPermissions = {};
69  var allCounts = {};
70 
71  function init()
72  {
73    // Get permission information
74    var url = 'Install.servlet?ID=<%=ID%>&cmd=GetPermissions';
75    var request = Ajax.getXmlHttpRequest();
76    request.open("GET", url, false);
77    Ajax.setReadyStateHandler(request, onPermissions, onPermissions);
78    request.send(null);
79  }
80 
81  // Callback when permission information is ready
82  function onPermissions(request)
83  {
84    if (debug) Main.debug(Main.encodeTags(request.responseText));
85    var response;
86    var error = false;
87    try
88    {
89      response = JSON.parse(request.responseText);
90      if (response.status != 'ok')
91      {
92        error = response.message || response.stacktrace || 'Unexpected error';
93      }
94    }
95    catch (ex)
96    {
97      error = ex;
98    }
99   
100    if (error)
101    {
102      alert(error);
103      return;
104    }
105   
106    myPermissions = response.permissions;
107    var isAdmin = myPermissions['Administrator'] == 1;
108   
109    // Enable links based on the permission
110    var wizards = document.getElementsByClassName('require-permission');
111    // NOTE! Loop backwards since changing the classname
112    // of an element so that 'require-permission' no longer is included
113    // removes the element from the 'wizards' list
114    for (var wizardNo = wizards.length-1; wizardNo >= 0; wizardNo--)
115    {
116      var wizard = wizards[wizardNo];
117      if (wizard.className.indexOf('not-implemented') == -1)
118      {
119        var role = wizard.getAttribute('data-role');
120        if (myPermissions[role] == 1 || isAdmin)
121        {
122          wizard.className = 'link';
123          wizard.addEventListener('click', goWizard);
124        }
125        else
126        {
127          wizard.title = 'You do not have permission to user this wizard';
128        }
129      }
130    }
131   
132    // Start couting queued items
133    startCounting('specimen');
134  }
135 
136  function caseSummary()
137  {
138    var frm = document.forms['reggie'];
139   
140    var caseName = frm.caseName.value;
141    if (!caseName)
142    {
143      alert('Please enter a 7-digit case id');
144      return;
145    }
146    location.href = 'reports/case_summary.jsp?ID=<%=ID%>&caseName='+encodeURIComponent(caseName);
147  }
148 
149  var currentCount;
150  function startCounting(what)
151  {
152    var url;
153    currentCount = what;
154    if (what == 'specimen')
155    {
156      url = 'PartitionRegistration.servlet?ID=<%=ID%>&cmd=CountSpecimenTubes';
157    }
158    else if (what == 'histology-lists')
159    {
160      url = 'Histology.servlet?ID=<%=ID%>&cmd=CountHistologyWorkLists';
161    }
162    else if (what == 'paraffin-blocks')
163    {
164      url = 'Histology.servlet?ID=<%=ID%>&cmd=CountParaffinBlocks';
165    }
166    else if (what == 'paraffin-blocks-without-heglass')
167    {
168      url = 'Histology.servlet?ID=<%=ID%>&cmd=CountParaffinBlocksWithoutHeGlass';
169    }
170    else if (what == 'unscored-heglass')
171    {
172      url = 'Histology.servlet?ID=<%=ID%>&cmd=CountUnscoredHeGlass';
173    }
174    else if (what == 'lysate')
175    {
176      url = 'Extraction.servlet?ID=<%=ID%>&cmd=CountUnprocessedLysates';
177    }
178    else if (what == 'rnaqc')
179    {
180      url = 'RnaQc.servlet?ID=<%=ID%>&cmd=CountRnaExtractsWithoutQc';
181    }
182    else if (what == 'caliper-plates')
183    {
184      url = 'RnaQc.servlet?ID=<%=ID%>&cmd=CountActiveRnaQcBioPlates';
185    }
186    else if (what == 'rna-without-mrna')
187    {
188      url = 'MRna.servlet?ID=<%=ID%>&cmd=CountRnaWithoutMRna';
189    }
190    else if (what == 'undiluted-mrna-plates')
191    {
192      url = 'MRna.servlet?ID=<%=ID%>&cmd=CountUndilutedMRNAPlates';
193    }
194    else if (what == 'diluted-mrna-plates')
195    {
196      url = 'MRna.servlet?ID=<%=ID%>&cmd=CountDilutedMRNAPlates';
197    }
198    else if (what == 'cdna-plates')
199    {
200      url = 'MRna.servlet?ID=<%=ID%>&cmd=CountUnprocessedPlates&plateType=CDNA';
201    }
202    else if (what == 'cdna-plates-for-barcoding')
203    {
204      url = 'LibPrep.servlet?ID=<%=ID%>&cmd=CountCDNAPlatesForBarcoding';
205    }
206    else if (what == 'lib-plates')
207    {
208      url = 'LibPrep.servlet?ID=<%=ID%>&cmd=CountLibPlatesForLibPrep';
209    }
210    else if (what == 'lib-plates-for-pooling')
211    {
212      url = 'Pool.servlet?ID=<%=ID%>&cmd=CountLibraryPlatesForPooling';
213    }
214    else if (what == 'unregistered-pools')
215    {
216      url = 'Pool.servlet?ID=<%=ID%>&cmd=CountUnprocessedPools';
217    }
218    else if (what == 'unused-pools')
219    {
220      url = 'FlowCell.servlet?ID=<%=ID%>&cmd=CountUnusedPools';
221    }
222    else if (what == 'unregistered-flow-cells')
223    {
224      url = 'FlowCell.servlet?ID=<%=ID%>&cmd=CountUnprocessedFlowCells';
225    }
226    else if (what == 'clustered-flow-cells')
227    {
228      url = 'FlowCell.servlet?ID=<%=ID%>&cmd=CountClusteredFlowCells';
229    }
230    else if (what == 'active-sequencing-runs')
231    {
232      url = 'SequencingRun.servlet?ID=<%=ID%>&cmd=CountActiveSequencingRuns';
233    }
234    else if (what == 'unconfirmed-sequencing-runs')
235    {
236      url = 'SequencingRun.servlet?ID=<%=ID%>&cmd=CountUncomfirmedSequencingRuns';
237    }
238   
239    if (url)
240    {
241      var request = Ajax.getXmlHttpRequest();
242      request.open("GET", url, true);
243      Ajax.setReadyStateHandler(request, onCounted, onCounted);
244      request.send(null);
245    }
246  }
247 
248  function onCounted(request)
249  {
250    if (debug) Main.debug(currentCount +': ' + Main.encodeTags(request.responseText));
251    var response;
252    var error = false;
253    try
254    {
255      response = JSON.parse(request.responseText);
256      if (response.status != 'ok')
257      {
258        error = response.message || response.stacktrace || 'Unexpected error';
259      }
260    }
261    catch (ex)
262    {
263      error = ex;
264    }
265   
266    if (currentCount == 'specimen')
267    {
268      var msg = error || 'Number of unpartitioned specimen';
269      var count = error ? -1 : response.count;
270      setCount('count.specimen', count, 'specimens', msg);
271      startCounting('histology-lists');
272    }
273    else if (currentCount == 'histology-lists')
274    {
275      var msg = error || 'Number of active histology work lists';
276      var count = error ? -1 : response.count;
277      setCount('count.histology-lists', count, 'work lists', msg);
278      startCounting('paraffin-blocks');
279    }
280    else if (currentCount == 'paraffin-blocks')
281    {
282      var msg = error || 'Number of paraffin blocks waiting for registration';
283      var count = error ? -1 : response.count;
284      setCount('count.paraffin-blocks', count, 'paraffin blocks', msg);
285      startCounting('paraffin-blocks-without-heglass');
286    }
287    else if (currentCount == 'paraffin-blocks-without-heglass')
288    {
289      var msg = error || 'Number of paraffin blocks without HE glass';
290      var count = error ? -1 : response.count;
291      setCount('count.paraffin-blocks-without-heglass', count, 'paraffin blocks', msg);
292      startCounting('unscored-heglass');
293    }
294    else if (currentCount == 'unscored-heglass')
295    {
296      var msg = error || 'Number of unscored HE glass';
297      var count = error ? -1 : response.count;
298      setCount('count.unscored-heglass', count, 'HE glass', msg);
299      startCounting('lysate');
300    }
301    else if (currentCount == 'lysate')
302    {
303      var msg = error || 'Number of unprocessed lysates';
304      var count = error ? -1 : response.count;
305      setCount('count.lysate.1', count, 'lysates', msg);
306      setCount('count.lysate.2', count, 'lysates', msg);
307      startCounting('rnaqc');
308    }
309    else if (currentCount == 'rnaqc')
310    {
311      var msg = error || 'Number of RNA waiting for QC';
312      var count = error ? -1 : response.count;
313      setCount('count.rnaqc', count, 'RNA', msg);
314      startCounting('caliper-plates');
315    }
316    else if (currentCount == 'caliper-plates')
317    {
318      var msg = error || 'Number of active Caliper plates';
319      var count = error ? -1 : response.count;
320      setCount('count.caliper-plates.1', count, 'Caliper plates', msg);
321      setCount('count.caliper-plates.2', count, 'Caliper plates', msg);
322      startCounting('rna-without-mrna');
323    }
324    else if (currentCount == 'rna-without-mrna')
325    {
326      var msg = error || 'Number of RNA with no mRNA';
327      var count = error ? -1 : response.count;
328      setCount('count.rna-without-mrna', count, 'RNA', msg);
329      startCounting('undiluted-mrna-plates');
330    }
331    else if (currentCount == 'undiluted-mrna-plates')
332    {
333      var msg = error || 'Number of mRNA plates waiting for dilution';
334      var count = error ? -1 : response.count;
335      setCount('count.undiluted-mrna-plates', count, 'mRNA plates', msg);
336      startCounting('diluted-mrna-plates');
337    }
338    else if (currentCount == 'diluted-mrna-plates')
339    {
340      var msg = error || 'Number of mRNA plates waiting for registration';
341      var count = error ? -1 : response.count;
342      setCount('count.diluted-mrna-plates', count, 'mRNA plates', msg);
343      setCount('count.mrna-plates', count + allCounts['count.undiluted-mrna-plates'], 'mRNA plates', 'Number of mRNA plates waiting for processing');
344      startCounting('cdna-plates');
345    }
346    else if (currentCount == 'cdna-plates')
347    {
348      var msg = error || 'Number of cDNA plates waiting for registration';
349      var count = error ? -1 : response.count;
350      setCount('count.cdna-plates.1', count, 'cDNA plates', msg);
351      startCounting('cdna-plates-for-barcoding');
352    }
353    else if (currentCount == 'cdna-plates-for-barcoding')
354    {
355      var msg = error || 'Number of cDNA plates waiting for barcode layout';
356      var count = error ? -1 : response.count;
357      setCount('count.cdna-plates-for-barcoding', count, 'cDNA plates', msg);
358      startCounting('lib-plates')
359    }
360    else if (currentCount == 'lib-plates')
361    {
362      var msg = error || 'Number of Lib plates waiting for registration';
363      var count = error ? -1 : response.count;
364      setCount('count.lib-plates.1', count, 'Lib plates', msg);
365      setCount('count.lib-plates.2', count, 'Lib plates', msg);
366      setCount('count.lib-plates.3', count, 'Lib plates', msg);
367      startCounting('lib-plates-for-pooling');
368    }
369    else if (currentCount == 'lib-plates-for-pooling')
370    {
371      var msg = error || 'Number of Lib plates waiting for pooling';
372      var count = error ? -1 : response.count;
373      setCount('count.lib-plates-for-pooling', count, 'Lib plates', msg);
374      startCounting('unregistered-pools');
375    }
376    else if (currentCount == 'unregistered-pools')
377    {
378      var msg = error || 'Number of pools waiting for registration';
379      var count = error ? -1 : response.count;
380      setCount('count.pools.1', count, 'pools', msg);
381      setCount('count.pools.2', count, 'pools', msg);
382      startCounting('unused-pools');
383    }
384    else if (currentCount == 'unused-pools')
385    {
386      var msg = error || 'Number of pools waiting for sequencing';
387      var count = error ? -1 : response.count;
388      setCount('count.pools.3', count, 'pools', msg);
389      startCounting('unregistered-flow-cells');
390    }
391    else if (currentCount == 'unregistered-flow-cells')
392    {
393      var msg = error || 'Number of flow cells waiting for clustering';
394      var count = error ? -1 : response.count;
395      setCount('count.flow-cells.1', count, 'flow cells', msg);
396      setCount('count.flow-cells.2', count, 'flow cells', msg);
397      startCounting('clustered-flow-cells');
398    }
399    else if (currentCount == 'clustered-flow-cells')
400    {
401      var msg = error || 'Number of flow cells waiting for sequencing';
402      var count = error ? -1 : response.count;
403      setCount('count.flow-cells.3', count, 'flow cells', msg);
404      startCounting('active-sequencing-runs');
405    }
406    else if (currentCount == 'active-sequencing-runs')
407    {
408      var msg = error || 'Number of active sequencing runs';
409      var count = error ? -1 : response.count;
410      setCount('count.sequencing-run', count, 'sequencing runs', msg);
411      startCounting('unconfirmed-sequencing-runs');
412    }
413    else if (currentCount == 'unconfirmed-sequencing-runs')
414    {
415      var msg = error || 'Number of ended but not confirmed sequencing runs';
416      var count = error ? -1 : response.count;
417      setCount('count.unconfirmed-sequencing-run', count, 'sequencing runs', msg);
418    }
419   
420  }
421 
422  function setCount(id, count, unit, msg)
423  {
424    allCounts[id] = count;
425    var div = document.getElementById(id);
426    div.title = msg;
427    if (count == -1)
428    {
429      div.innerHTML = '(-)';
430    }
431    else
432    {
433      div.innerHTML = '(' + count + ')';
434    }
435  }
436 
437  function goWizard(event)
438  {
439    var role = event.currentTarget.getAttribute('data-role');
440    var isAdmin = myPermissions['Administrator'] == 1;
441    if (isAdmin || myPermissions[role] == 1)
442    {
443      var link = event.currentTarget.getAttribute('data-link');
444      location.href = link;
445    }
446    else
447    {
448      alert('You do not have permission to use this wizard!');
449    }
450  }
451 
452  </script>
453<style>
454dl
455{
456  margin-top: 0px;
457  padding: 3px;
458}
459dt
460{
461  margin-top: 0.5em;
462  margin-left: 0.5em;
463}
464dd
465{
466  margin-left: 0.5em;
467  margin-bottom: 0.5em;
468  padding-left: 3em;
469}
470ul
471{
472  margin-top: 0px;
473  margin-bottom: 0px;
474  margin-left: 0em;
475  padding-left: 0em;
476}
477li
478{
479  margin-left: 0em;
480}
481img
482{
483  vertical-align: text-bottom;
484}
485h3
486{
487  color: #333377;
488  background: #E8E8E8;
489  font-weight: bold;
490  margin-bottom: 0em;
491  padding: 1px 4px 1px 4px;
492  border: 1px solid #A0A0A0;
493  font-size: 1em;
494}
495.not-implemented
496{
497  filter: url(css/filters.svg#grayscale); /* Firfox, etc */
498  filter: gray; /* IE */
499  opacity: 0.75;
500  pointer-events: none;
501}
502
503.not-implemented:after
504{
505  content: ' -- coming soon';
506}
507.counter
508{
509  color: #999999;
510  font-style: italic;
511}
512
513.require-permission
514{
515  color: #999999;
516  font-style: italic;
517}
518
519</style>
520</base:head>
521<base:body onload="init()">
522
523  <p:path><p:pathelement title="Reggie" /></p:path>
524
525  <div class="content">
526    <form name="reggie" onsubmit="return false;">
527    <div class="absolutefull" style="width: 33%;">
528      <div class="absolutefull" style="left: 1em; right: 0.5em; ">
529     
530        <h3>Sample processing wizards</h3>
531        <dl class="leftborder rightborder bottomborder has-lib-prep">
532
533        <dt>
534          <base:icon image="<%=home+"/images/specimen.png" %>" />
535          <span class="require-permission" data-role="SamplePrep" data-link="sampleproc/specimentube.jsp?ID=<%=ID%>"
536            >Specimen tube registration</span>
537        </dt>
538        <dd>
539          <ul>
540          <li>Register new specimen tubes.
541          <li>Update existing specimen tubes.
542          </ul>
543        </dd>
544
545        <dt>
546          <base:icon image="<%=home+"/images/partition.png" %>" />
547          <span class="require-permission" data-role="SamplePrep" data-link="sampleproc/partitionform.jsp?ID=<%=ID%>"
548            >Partition wizard</span>
549        </dt>
550        <dd>
551          <ul>
552          <li>Register new partitions of existing specimens <span class="counter" id="count.specimen" title="Counting..."><img src="images/loading-small.gif"></span>
553          </ul>
554        </dd>
555         
556        <dt>
557          <base:icon image="<%=home+"/images/extraction.png" %>" />
558          DNA/RNA extraction wizards
559        </dt>
560        <dd>
561          <ul>
562          <li><span class="require-permission" data-role="SamplePrep" data-link="sampleproc/allprep_protocol.jsp?ID=<%=ID%>"
563            >Lab tracking protocol for Allprep isolation</span> <span class="counter" id="count.lysate.1" title="Counting..."><img src="images/loading-small.gif"></span>
564
565          <li><span class="require-permission" data-role="SamplePrep" data-link="sampleproc/extraction_registration.jsp?ID=<%=ID%>"
566            >DNA/RNA/FlowThrough registration</span> <span class="counter" id="count.lysate.2" title="Counting..."><img src="images/loading-small.gif"></span>
567          </ul>
568        </dd>
569        <dt>
570          <base:icon image="<%=home+"/images/rnaqc.png" %>" />
571          RNA quality control wizards
572        </dt>
573        <dd>
574          <ul>
575          <li><span class="require-permission" data-role="SamplePrep" data-link="sampleproc/rnaqc_aliquot.jsp?ID=<%=ID%>"
576            >Create aliquots on Bioanalyzer/Caliper plates</span> <span class="counter" id="count.rnaqc" title="Counting..."><img src="images/loading-small.gif"></span>
577         
578          <li><span class="require-permission" data-role="SamplePrep" data-link="sampleproc/rnaqc_plate_export.jsp?ID=<%=ID%>"
579            >Export Caliper sample names and run parameters</span> <span class="counter" id="count.caliper-plates.1" title="Counting..."><img src="images/loading-small.gif"></span>
580         
581          <li><span class="require-permission" data-role="SamplePrep" data-link="sampleproc/rnaqc_plate_import.jsp?ID=<%=ID%>"
582            >Import RQS scores from Caliper well table file</span> <span class="counter" id="count.caliper-plates.2" title="Counting..."><img src="images/loading-small.gif"></span>
583          </ul>
584        </dd>     
585        </dl>
586     
587        <h3>Histology wizards</h3>
588        <dl class="leftborder rightborder bottomborder">     
589        <dt>
590          <base:icon image="<%=home+"/images/histology.png" %>" />
591          Embedding and staining wizards
592        </dt>
593        <dd>
594          <ul>
595          <li><span class="require-permission" data-role="Histology" data-link="sampleproc/histology_protocol.jsp?ID=<%=ID%>"
596            >Lab tracking protocol for FFPE/HE</span> <span class="counter" id="count.histology-lists" title="Counting..."><img src="images/loading-small.gif"></span>
597         
598          <li><span class="require-permission" data-role="Histology" data-link="sampleproc/histology_block.jsp?ID=<%=ID%>"
599            >Register paraffin blocks</span> <span class="counter" id="count.paraffin-blocks" title="Counting..."><img src="images/loading-small.gif"></span>
600
601          <li><span class="require-permission" data-role="Histology" data-link="sampleproc/histology_labels.jsp?ID=<%=ID%>"
602            >Download HE glass labels</span>
603         
604          <li><span class="require-permission" data-role="Histology" data-link="sampleproc/histology_glass.jsp?ID=<%=ID%>"
605            >Register HE glass</span> <span class="counter" id="count.paraffin-blocks-without-heglass" title="Counting..."><img src="images/loading-small.gif"></span>
606        </dd>
607       
608        <dt>
609          <base:icon image="<%=home+"/images/microscope.png" %>" />
610          Scoring wizard
611        </dt>
612        <dd>
613          <li><span class="require-permission" data-role="Histology" data-link="sampleproc/histology_score.jsp?ID=<%=ID%>"
614            >Score HE glass</span> <span class="counter" id="count.unscored-heglass" title="Counting..."><img src="images/loading-small.gif"></span>
615          </ul>
616        </dd>
617        </dl>
618     
619     
620        <h3>Library preparation wizards</h3>
621        <dl class="leftborder rightborder bottomborder">
622     
623        <dt>
624          <base:icon image="<%=home+"/images/pipette.png" %>" />
625          RNA to cDNA wizards
626        </dt>
627        <dd>
628          <ul>
629          <li><span class="require-permission" data-role="LibraryPlateDesigner" data-link="libprep/select_rna.jsp?ID=<%=ID%>"
630            >Create new mRNA plate</span> <span class="counter" id="count.rna-without-mrna" title="Counting..."><img src="images/loading-small.gif"></span>
631         
632          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/mrna_protocol.jsp?ID=<%=ID%>"
633            >Lab protocols for mRNA and cDNA preparation</span> <span class="counter" id="count.mrna-plates" title="Counting..."><img src="images/loading-small.gif"></span>
634         
635          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/rna_dilution_registration.jsp?ID=<%=ID%>"
636            >RNA dilution registration</span> <span class="counter" id="count.undiluted-mrna-plates" title="Counting..."><img src="images/loading-small.gif"></span>
637
638          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/mrna_registration.jsp?ID=<%=ID%>"
639            >mRNA registration and quality control results</span> <span class="counter" id="count.diluted-mrna-plates" title="Counting..."><img src="images/loading-small.gif"></span>
640         
641          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/cdna_registration.jsp?ID=<%=ID%>"
642            >cDNA registration</span> <span class="counter" id="count.cdna-plates.1" title="Counting..."><img src="images/loading-small.gif"></span>
643          </ul>
644        </dd>
645       
646        <dt>
647          <base:icon image="<%=home+"/images/libprep.png" %>" />
648          Library preparation wizards
649        </dt>
650        <dd>
651          <ul>
652          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/assign_barcode.jsp?ID=<%=ID%>"
653            >Assign barcodes to cDNA plate</span> <span class="counter" id="count.cdna-plates-for-barcoding" title="Counting..."><img src="images/loading-small.gif"></span>
654         
655          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/libprep_protocol.jsp?ID=<%=ID%>"
656            >Lab protocols and files for library preparation</span> <span class="counter" id="count.lib-plates.1" title="Counting..."><img src="images/loading-small.gif"></span>
657         
658          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/libqc_registration.jsp?ID=<%=ID%>"
659            >Register quality control results</span> <span class="counter" id="count.lib-plates.2" title="Counting..."><img src="images/loading-small.gif"></span>
660         
661          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/lib_registration.jsp?ID=<%=ID%>"
662            >Library registration</span> <span class="counter" id="count.lib-plates.3" title="Counting..."><img src="images/loading-small.gif"></span>
663          </ul>
664        </dd>
665        <dt>
666          <base:icon image="<%=home+"/images/pool.png" %>" />
667          Pooling wizards
668        </dt>
669        <dd>
670          <ul>
671          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/create_pools.jsp?ID=<%=ID%>"
672            >Create pooled libraries</span> <span class="counter" id="count.lib-plates-for-pooling" title="Counting..."><img src="images/loading-small.gif"></span>
673         
674          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/pool_protocol.jsp?ID=<%=ID%>"
675            >Lab protocols for pooling</span> <span class="counter" id="count.pools.1" title="Counting..."><img src="images/loading-small.gif"></span>
676         
677          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/pool_registration.jsp?ID=<%=ID%>"
678            >Register pooled libraries</span> <span class="counter" id="count.pools.2" title="Counting..."><img src="images/loading-small.gif"></span>
679          </ul>
680        </dd>
681       
682        <dt>
683          <base:icon image="<%=home+"/images/flowcell.png" %>" />
684          Clustering and sequencing wizards
685        </dt>
686        <dd>
687          <ul>
688          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/create_flowcells.jsp?ID=<%=ID%>"
689            >Create flow cells</span> <span class="counter" id="count.pools.3" title="Counting..."><img src="images/loading-small.gif"></span>
690         
691          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/flowcell_protocol.jsp?ID=<%=ID%>"
692            >Lab protocol for clustering and sequencing</span> <span class="counter" id="count.flow-cells.1" title="Counting..."><img src="images/loading-small.gif"></span>
693         
694          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/flowcell_registration.jsp?ID=<%=ID%>"
695            >Register clustering</span> <span class="counter" id="count.flow-cells.2" title="Counting..."><img src="images/loading-small.gif"></span>
696
697          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/sequencing_started.jsp?ID=<%=ID%>"
698            >Register sequencing started</span> <span class="counter" id="count.flow-cells.3" title="Counting..."><img src="images/loading-small.gif"></span>
699
700          <li><span class="require-permission" data-role="LibraryPrep" data-link="libprep/sequencing_ended.jsp?ID=<%=ID%>"
701            >Register sequencing ended</span> <span class="counter" id="count.sequencing-run" title="Counting..."><img src="images/loading-small.gif"></span>
702          </ul>
703        </dd>
704       
705        </dl>
706      </div>
707    </div>
708   
709    <div class="absolutefull" style="width: 34%; left: 33%; right: auto;">
710      <div class="absolutefull" style="left: 0.5em; right: 0.5em;">
711        <h3>Secondary analysis wizards</h3>
712        <dl class="leftborder rightborder bottomborder">
713          <dt>
714            <base:icon image="<%=home+"/images/server.png" %>" />
715            Demux and merge wizards
716          </dt>
717          <dd>
718            <ul>
719            <li><span class="require-permission" data-role="SecondaryAnalysis" data-link="analysis/sequencing_confirm.jsp?ID=<%=ID%>"
720              >Confirm sequencing completed</span> <span class="counter" id="count.unconfirmed-sequencing-run" title="Counting..."><img src="images/loading-small.gif"></span>
721           
722            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/demux_start.jsp?ID=<%=ID%>"
723              >Start demux and merge</span> 
724            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/demux_end.jsp?ID=<%=ID%>"
725              >Register demux and merge completed</span> 
726            </ul>
727          </dd>
728         
729          <dt>
730            <base:icon image="<%=home+"/images/align.png" %>" />
731            Filter and alignment wizards
732          </dt>
733          <dd>
734            <ul>
735            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/filter_start.jsp?ID=<%=ID%>"
736              >Start filter and alignment</span> 
737            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/align_end.jsp?ID=<%=ID%>"
738              >Register filter and alignment completed</span> 
739            </ul>
740          </dd>
741          <dt>
742         
743            <base:icon image="<%=home+"/images/wizard.png" %>" />
744            Feature extraction wizards
745          </dt>
746          <dd>
747            <ul>
748            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/feature_start.jsp?ID=<%=ID%>"
749              >Start feature extraction</span> 
750            <li><span class="require-permission not-implemented" data-role="SecondaryAnalysis" data-link="analysis/feature_end.jsp?ID=<%=ID%>"
751              >Register feature extraction completed</span> 
752            </ul>
753          </dd>
754        </dl>
755      </div>
756    </div>
757   
758    <div class="absolutefull" style="width: 33%; left: auto;">
759      <div class="absolutefull" style="left: 0.5em; right: 1em;">
760        <%
761        if (isAdmin)
762        {
763          %>
764          <h3>Server administrator wizards</h3>
765          <dl class="leftborder rightborder bottomborder">
766          <dt>
767            <base:icon image="<%=home + "/images/install.png" %>" />
768            <span class="require-permission" data-role="Administrator" data-link="admin/install.jsp?ID=<%=ID%>">Installation wizard</span>
769          </dt>
770          <dd>
771            <ul>
772            <li>Check that annotation types and other items used by Reggie exists in BASE.
773            <li>Create missing items.
774            </ul>
775          </dd>
776          </dl>
777          <%
778        }
779        if (isPatientCurator || isAdmin)
780        {
781          %>
782          <h3>Personal information wizards</h3>
783          <dl class="leftborder rightborder bottomborder">
784          <dt>
785            <base:icon image="<%=home + "/images/personal.png" %>"/>
786            <span class="require-permission" data-role="PatientCurator" data-link="personal/persinfo.jsp?ID=<%=ID%>"
787              >Pathology referral form registration</span>
788          </dt>
789          <dd>
790            <ul>
791            <li>Register new cases and patients.
792            <li>Update existing cases and specimen tubes.
793            </ul>
794          </dd>
795         
796          <dt>
797            <base:icon image="<%=home + "/images/blood.png" %>"/>
798            Blood referral form registration
799          </dt>
800          <dd>
801            <ul>
802            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/bloodform.jsp?ID=<%=ID%>"
803              >Register new/updated blood referral forms and patients</span>
804             
805            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/bloodfollowupform.jsp?ID=<%=ID%>"
806              >Register new/updated follow-up blood referral forms</span>
807            </ul>
808          </dd>
809         
810          <dt>
811            <base:icon image="<%=home+"/images/consent.png" %>"/>
812            <span class="require-permission" data-role="PatientCurator" data-link="personal/consentform.jsp?ID=<%=ID%>"
813              >Consent form registration</span>
814          </dt>
815          <dd>
816            <ul>
817            <li>Register consent forms.
818            </ul>
819          </dd>
820         
821          <dt>
822            <base:icon image="<%=home+"/images/export_import.png" %>" />
823            Export/import information to/from external registers.
824          </dt>
825          <dd>
826            <ul>
827            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/export_monthly_oplist.jsp?ID=<%=ID%>"
828              >Export monthly operation list</span>
829             
830            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/export_inca.jsp?ID=<%=ID%>"
831              >INCA export</span>
832
833            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/export_missing_data_sample_list.jsp?ID=<%=ID%>"
834              >Export missing data sample list</span>
835
836            <li><span class="require-permission" data-role="PatientCurator" data-link="personal/export_missing_consent_data_sample_list.jsp?ID=<%=ID%>"
837              >Export missing consent data sample list</span>
838            </ul>
839          </dd>
840          </dl>
841          <%
842        }
843        %>
844       
845        <h3>Statistics and reporting wizards</h3>
846        <dl class="leftborder rightborder bottomborder">
847          <dt>
848            <base:icon image="<%=home+"/images/case_summary.png" %>" />
849            Case summary
850          </dt>
851          <dd>
852            <table>
853            <tr>
854              <td><input type="text" class="text" 
855                name="caseName" title="Please enter a 7-digit case id" 
856                style="width: 25em;"
857                onkeypress="if (event.keyCode==13 && this.value) caseSummary()"></td>
858              <td><base:button title="Go" image="<%=home+"/images/gonext.png"%>" onclick="caseSummary()"/></td>
859            </tr>
860            </table>
861          </dd>
862       
863          <dt>
864            <base:icon image="<%=home+"/images/report.png" %>" />
865            <a href="reports/samplereportgenerator.jsp?ID=<%=ID%>">Sample source report</a>
866          </dt>       
867          <dd>       
868            <ul>
869            <li>Sample count report</li> 
870            <li>Consent count report</li> 
871            <li>Patient count report</li> 
872            <li>Overview report</li> 
873            <li>Missing sample data report</li> 
874            </ul>
875          </dd>
876          <dt>
877            <base:icon image="<%=home+"/images/chart_bar.png" %>" />
878            <a href="reports/scanbquartermonthreportgenerator.jsp?ID=<%=ID%>">Sample processing statistics</a>
879          </dt>       
880          <dd>       
881            <ul>
882            <li>SCAN-B quarter/month report</li> 
883            </ul>
884          </dd>
885        </dl>
886      </div>
887    </div>
888    </form>
889  </div>
890 
891</base:body>
892</base:page>
893<%
894}
895finally
896{
897  if (dc != null) dc.close();
898}
899%>
Note: See TracBrowser for help on using the repository browser.