source: extensions/net.sf.basedb.reggie/trunk/resources/specimentube.jsp @ 1372

Last change on this file since 1372 was 1372, checked in by Martin Svensson, 12 years ago

References #317. The installation wizzard install new annotations. The new specimentube form is almost complete, some background-functionality is still missing.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 8.4 KB
Line 
1<%@ page
2  pageEncoding="UTF-8"
3  session="false"
4  import="net.sf.basedb.core.User"
5  import="net.sf.basedb.core.DbControl"
6  import="net.sf.basedb.core.SessionControl"
7  import="net.sf.basedb.clients.web.Base" 
8%>
9<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
10<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
11<%
12final SessionControl sc = Base.getExistingSessionControl(request, true);
13final String ID = sc.getId();
14final float scale = Base.getScale(sc);
15DbControl dc = null;
16try
17{
18  dc = sc.newDbControl();
19  final User user = User.getById(dc, sc.getLoggedInUserId());
20%>
21<base:page type="default" >
22<base:head scripts="ajax.js" styles="path.css">
23  <link rel="stylesheet" type="text/css" href="reggie.css">
24  <script language="JavaScript" src="reggie.js" type="text/javascript" charset="UTF-8"></script>
25 
26 
27<script language="JavaScript">
28var caseIsValid = false;
29var tubeNumberIsValid = false;
30var arrivalDateIsValid = false;
31var nofDeliveredTubesIsValid = true;
32var nofTubesIsValid = false;
33var debug = false;
34var currentStep = 1;
35
36var specimenTubeInfo = null;
37
38function init()
39{
40  var frm = document.forms['reggie'];
41  frm.caseName.focus();
42}
43
44function caseNameOnBlur()
45{
46  var frm = document.forms['reggie'];
47  var caseName = frm.caseName.value;
48  if (caseName == '')
49  {
50    setInputStatus('case', 'Missing', 'invalid');
51    return;
52  }
53  setInputStatus('case', '', 'valid');
54  caseIsValid = true;
55}
56
57function tubeNumberOnBlur()
58{
59  var frm = document.forms['reggie'];
60  var tubeNumber = frm.tubeNumber.value;
61  if (tubeNumber == '')
62  {
63    setInputStatus('tnr', 'Missing', 'invalid');
64    return;
65  }
66  setInputStatus('tnr', '', 'valid');
67  tubeNumberIsValid = true;
68}
69
70function goNext(manual)
71{
72  setInnerHTML('gonext.message', '');
73  if (currentStep == 1)
74  {
75    if(step1IsValid())
76    {
77      gotoStep2();
78    }
79  }
80}
81
82function step2IsValid()
83{
84  var isValid = arrivalDateIsValid && nofDeliveredTubesIsValid;
85  return isValid;
86}
87
88function step1IsValid()
89{
90  return caseIsValid && tubeNumberIsValid;
91}
92
93function gotoStep2()
94{
95  var frm = document.forms['reggie'];
96  var caseName = frm.caseName.value;
97  var tubeNumber = frm.tubeNumber.value;
98  var request = Ajax.getXmlHttpRequest();
99  var url = 'SpecimenTubeRegistration.servlet?ID=<%=ID%>&cmd=GetSpecimenTubeInfo';
100  url += '&caseName=' + caseName;
101  url += '&specimenTubeNumber=' + tubeNumber;
102  request.open("GET", url, false);
103  request.send(null);
104
105  if (debug) Main.debug(request.responseText);
106
107  var response = JSON.parse(request.responseText);
108  if (response.status != 'ok')
109  {
110    setFatalError(response.message);
111    return false;
112  }
113 
114  // Get sample information from the AJAX response
115  specimenTubeInfo = response.specimenTubeInfo;
116
117  Main.show('gocancel');
118  if (!specimenTubeInfo.id)
119  {
120    Main.show('newSpecimenTubeSection');
121    frm.arrivalDate.focus();
122  }
123
124  currentStep == 2;
125  Main.hide('gonext');
126  Main.show('gocreate');
127}
128
129function arrivalDateOnChange()
130{
131  var frm = document.forms['reggie'];
132  arrivalDateIsValid = false;
133  setInputStatus('arrivalDate', '', '');
134
135  var arrivalDate = frm.arrivalDate.value;
136
137  if (arrivalDate != '')
138  {
139    arrivalDate = autoFillDate(arrivalDate);
140    frm.arrivalDate.value = arrivalDate;
141
142    if (!Dates.isDate(arrivalDate, 'yyyyMMdd'))
143    {
144      setInputStatus('arrivalDate', 'Not a valid date', 'invalid');
145      return;
146    }
147    setInputStatus('arrivalDate', '', 'valid');
148    arrivalDateIsValid = true;
149  }
150}
151
152function nofDeliveredTubesOnKeyup()
153{
154  var frm = document.forms['reggie'];
155  var nofTubes = frm.nofDeliveredTubes.value;
156  if (nofTubes != '')
157  {
158    if (isNaN(nofTubes))
159    {
160      setInputStatus('nofDeliveredTubes', 'Must be a number', 'invalid');
161      nofDeliveredTubesIsValid = false;
162      return;
163    }
164    setInputStatus('nofDeliveredTubes', '', 'valid');
165    nofDeliveredTubesIsValid = true;
166  }
167}
168
169function goCreate()
170{
171  if (!step2IsValid()) return;
172  Main.hide('gocreate');
173  Main.hide('gocancel');
174  var frm = document.forms['reggie'];
175
176  specimenTubeInfo.name = frm.caseName.value + '.' + frm.tubeNumber.value;
177  specimenTubeInfo.arrivalDate = frm.arrivalDate.value;
178  specimenTubeInfo.nofDeliveredTubes = frm.nofDeliveredTubes.value;
179
180  if (debug) Main.debug(JSON.stringify(specimentTubeInfo));
181
182  var request = Ajax.getXmlHttpRequest();
183  var url = 'SpecimenTubeRegistration.servlet?ID=<%=ID%>&cmd=';
184  url += 'CreateSpecimenTube';
185  request.open("POST", url, false);
186  request.setRequestHeader("Content-Type", "application/json");
187  request.send(JSON.stringify(specimenTubeInfo));
188
189  if (debug) Main.debug(request.responseText);
190
191  var response = JSON.parse(request.reponseText);
192  if(response.status != 'ok')
193  {
194    setFatalError(response.message);
195    return false;
196  }
197
198  var msg = '<ul>';
199  for (var i=0; i < resposne.messages.length; i++)
200  {
201    msg +='<li>' + reponse.messages[i];
202  }
203  msg += '</ul>';
204  setInnerHTML('done', msg);
205  Main.show('done');
206  Main.show('gorestart');
207}
208
209</script>
210
211</base:head>
212<base:body onload="init()">
213<p:path style="margin-top: 20px; margin-bottom: 10px;">
214    <p:pathelement title="Reggie" href="<%="index.jsp?ID="+ID%>" />
215    <p:pathelement title="Specimen tube registration" />
216  </p:path>
217
218  <%
219  if (sc.getActiveProjectId() == 0)
220  {
221    %>
222    <base:note type="warning" style="width: 800px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
223      No project has been selected. You may proceed with the registration but
224      created items will not be shared.
225    </base:note>
226    <%
227  }
228  %>
229
230  <form name="reggie" onsubmit="return false;">
231 
232  <!-- 1. Case and tube number-->
233  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
234  <tr>
235    <td rowspan="3" class="stepno">1</td>
236    <td class="steptitle">Enter Case Name and tube number</td>
237  </tr>
238  <tr>
239    <td class="stepfields">
240      <table border="0" cellspacing="0" cellpadding="0" width="100%">
241      <tr valign="top">
242        <td class="prompt">Case name</td>
243        <td class="input"><input type="text" name="caseName" 
244          size="18" maxlength="12" onblur="caseNameOnBlur()" onkeypress="focusOnEnter(event, 'tubeNumber')"></td>
245        <td class="status" id="case.status"></td>
246        <td class="help"><span id="case.message" class="message" style="display: none;"></span>The case (barcode) associated with this specimen tube.</td>
247      </tr>
248      <tr>
249        <td class="prompt">Tube number</td>
250        <td class="input"><input type="text" name="tubeNumber" 
251          size="18" maxlength="12" onblur="tubeNumberOnBlur()" onkeypress="doOnTabOrEnter(event, goNext)"></td>
252        <td class="status" id="tnr.status"></td>
253        <td class="help"><span id="tnr.message" class="message" style="display: none;"></span>The number associated with this specimen tube.</td>
254      </tr>
255      </table>
256    </td>
257  </tr>
258  </table>
259  <div id="newSpecimenTubeSection" style="display:none;">
260  <p>
261  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
262  <tr>
263    <td rowspan="2" class="stepno">2</td>
264    <td class="steptitle">New specimen tube: Enter specimen information</td>
265  </tr>
266  <tr>
267    <td class="stepfields">
268      <table border="0" cellspacing="0" cellpadding="0" width="100%">
269      <tr>
270        <td class="prompt">Arrival date</td>
271        <td class="input"><input type="text" name="arrivalDate" 
272          value="" size="18" maxlength="12" onblur="arrivalDateOnChange()"
273          onkeypress="focusOnEnter(event, 'arrivalDate')"></td>
274        <td class="status" id="arrivalDate.status"></td>
275        <td class="help"><span id="arrivalDate.message" class="message" style="display: none;"></span>Date(YYYYMMDD) when this specimen tube arrived.</td>
276      </tr>
277      <tr>
278        <td class="prompt">Number of delivered tubes</td>
279        <td class="input"><input type="text" name="nofDeliveredTubes" 
280          value="" size="18" maxlength="12" onkeyup="nofDeliveredTubesOnKeyup()"
281          onkeypress="focusOnEnter(event, 'nofDeliveredTubes')"></td>
282        <td class="status" id="nofDeliveredTubes.status"></td>
283        <td class="help"><span id="nofDeliveredTubes.message" class="message" style="display: none;"></span>Number of speciment tubes that were delivered.</td>
284      </tr>
285      </table>
286    </td>
287  </tr>
288  </table>
289  </div>
290 
291  <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
292    <tr>
293      <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
294      <td><base:button id="gonext" title="Next" image="gonext.gif" onclick="goNext(true)"/></td>
295      <td><base:button id="gocreate" title="Create" image="gonext.gif" onclick="goCreate()" style="display: none;"/></td>
296      <td><base:button id="gorestart" title="Restart" image="goback.gif" onclick="goRestart(true)" style="display: none;"/></td>
297      <td id="gonext.message" class="message"></td>
298    </tr>
299  </table>
300  </form>
301 
302</base:body>
303</base:page>
304<%
305}
306finally
307{
308  if (dc != null) dc.close();
309}
310%>
Note: See TracBrowser for help on using the repository browser.