source: extensions/net.sf.basedb.reggie/trunk/resources/samplereportgenerator.jsp @ 1641

Last change on this file since 1641 was 1641, checked in by Nicklas Nordborg, 10 years ago

Fixes #391: The 'Sample report' wizard should use the new Site information

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 22.7 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.core.Application"
8  import="net.sf.basedb.clients.web.Base" 
9  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
10%>
11<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
12<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
13<%
14final SessionControl sc = Base.getExistingSessionControl(request, true);
15final String ID = sc.getId();
16final float scale = Base.getScale(sc);
17final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
18DbControl dc = null;
19try
20{
21  dc = sc.newDbControl();
22  final User user = User.getById(dc, sc.getLoggedInUserId());
23  %>
24<base:page type="default" >
25<base:head scripts="ajax.js" styles="path.css">
26  <link rel="stylesheet" type="text/css" href="css/reggie.css">
27  <script language="JavaScript" src="reggie.js" type="text/javascript" charset="UTF-8"></script>
28   
29   
30  <script language="JavaScript">
31  var currentStep = 1;
32  var debug = false;
33  var sitesCombined;
34  var numCols;
35  var unknownSite = 0;
36  var unknownCreation;
37 
38  var month=new Array(12);
39    month[0]="Jan";
40    month[1]="Feb";
41    month[2]="Mar";
42    month[3]="Apr";
43    month[4]="May";
44    month[5]="Jun";
45    month[6]="Jul";
46    month[7]="Aug";
47    month[8]="Sep";
48    month[9]="Oct";
49    month[10]="Nov";
50    month[11]="Dec";
51 
52  var intervalIsValid = true;
53 
54  function goNext()
55  {
56    if (currentStep == 1)
57    {
58      gotoStep2();
59    }
60  }
61 
62  function gotoStep2()
63  {
64    var frm = document.forms['reggie'];
65    frm.reporttype.disabled = true;
66    if (frm.reporttype[frm.reporttype.selectedIndex].value == 'samplecount')
67    {
68      Main.show('sampleCountSection');
69    }
70       
71    Main.show('gocreate');   
72    Main.hide('gonext');
73    frm.fromdate.focus();
74    currentStep = 2;
75  }
76 
77  function dateOnChange()
78  {
79    var frm = document.forms['reggie'];   
80    var fdate;
81    var tdate;
82   
83    intervalIsValid = false;
84    setInputStatus('displayInterval','','valid');
85    if (frm.fromdate.value != null && frm.fromdate.value != '')
86    {
87      frm.fromdate.value = autoFillDate(frm.fromdate.value);     
88      if (!Dates.isDate(frm.fromdate.value, 'yyyyMMdd'))
89      {
90        setInputStatus('displayInterval','Not a valid from-date', 'invalid');
91        return;
92      }
93      else
94      {
95        fdate = frm.fromdate.value;
96        fdate = new Date(fdate.substr(0,4), parseInt(fdate.substr(4,2))-1, fdate.substr(6,2));
97      }
98    }
99   
100    if (frm.todate.value != null && frm.todate.value != '')
101    {
102      frm.todate.value = autoFillDate(frm.todate.value);
103      if (!Dates.isDate(frm.todate.value, 'yyyyMMdd'))
104      {
105        setInputStatus('displayInterval', 'Not a valid to-date', 'invalid');
106        return;
107      }
108      else
109      {
110        tdate = frm.todate.value;
111        tdate = new Date(tdate.substr(0,4), parseInt(tdate.substr(4,2))-1, tdate.substr(6,2));
112      }
113    }
114   
115    if (tdate != null && fdate != null)
116    {
117      if (fdate > tdate)
118      {
119        setInputStatus('displayInterval', 'Invalid period', 'invalid')
120        return;
121      }     
122    }
123    intervalIsValid = true;
124  }
125 
126  function goCreate()
127  {
128    if (!intervalIsValid) return;
129    var cellElement = document.getElementById('reportcell');
130    var frm = document.forms['reggie'];   
131    frm.fromdate.disabled = true;
132    frm.todate.disabled = true;
133    Main.hide('gocreate');
134    Main.show('reportSection');
135    var reportType = frm.reporttype[frm.reporttype.selectedIndex].value;   
136    var url = 'SampleReport.servlet?ID=<%=ID%>&cmd='+reportType;   
137   
138    if (reportType == 'samplecount')
139    {     
140      if (frm.fromdate.value != null) url += '&fdate='+frm.fromdate.value;
141      if (frm.todate.value != null) url += '&tdate='+frm.todate.value;
142    }
143    var request = Ajax.getXmlHttpRequest();
144    request.open("GET", url, false);
145    request.send(null);
146   
147    if (debug) Main.debug(request.responseText);   
148    var response = JSON.parse(request.responseText); 
149    if (response.status != 'ok')
150    {
151      setFatalError(response.message);
152      return false;
153    }
154    var report = response.report;
155    var reportTable;
156   
157    if (report != null)
158    {
159      if ('samplecount' == reportType)
160      {     
161        reportTable = createSampleCountReport(report);
162      }
163    }
164    else
165    {
166      var messageCell = getTableCellElement('No values could be found during given period', 'reportheader');
167      var messageRow = document.createElement('tr');
168      messageRow.appendChild(messageCell);     
169      var messageTable = getReportTable();
170      messageTable.appendChild(messageRow);
171      reportTable = messageTable;     
172    }
173    setInnerHTML('reportcell', '');
174    cellElement.appendChild(reportTable);
175    var summaryList = document.createElement('ul');
176    if (unknownSite == null) unknownSite = 0;
177    if (unknownCreation == null) unknownCreation = 0;
178    summaryList.appendChild(getListElement(unknownSite + ' specimens registered to unknown sites.'));
179    summaryList.appendChild(getListElement(unknownCreation + ' specimens without creation date.'));
180    cellElement.appendChild(summaryList);
181    Main.show('gorestart');   
182  }
183 
184  function createSampleCountReport(report)
185  {
186    var reportTable = getReportTable();
187    var sdString = report.beginDate;
188    var edString = report.endDate;
189    var ldString = report.latestDate;
190    var startDate = new Date();
191    startDate.setYear(sdString.substr(0,4));
192    startDate.setMonth(sdString.substr(4,2)-1);
193    startDate.setDate(sdString.substr(6));
194    var endDate = new Date();
195    endDate.setYear(edString.substr(0,4));
196    endDate.setMonth(edString.substr(4,2)-1);
197    endDate.setDate(edString.substr(6));
198    var latestDate;
199    if (ldString != null)
200    {
201      latestDate = new Date();
202      latestDate.setYear(ldString.substr(0,4));
203      latestDate.setMonth(ldString.substr(4,2)-1);
204      latestDate.setDate(ldString.substr(6));
205    }   
206   
207    var viewType = report.viewType;   
208 
209    var headerRow = document.createElement('tr');   
210    var subHeaderRowYear = document.createElement('tr');
211    var columnHeaderRow = document.createElement('tr');
212   
213    var headerText = '# Specimen by ';
214    if (viewType == 'WEEK')
215    {
216      var startWeek = getWeekByDate(startDate);
217      var endWeek = getWeekByDate(endDate);
218      var tempDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()-startDate.getDay()+1);
219      numCols = 0;
220      while (tempDate < endDate)
221      {
222        numCols++;
223        tempDate.setDate(tempDate.getDate()+7);
224      }
225      headerText += 'week';
226    }
227    else if (viewType == 'MONTH')
228    {
229      numCols = (endDate.getFullYear()-startDate.getFullYear())*12 + endDate.getMonth()-startDate.getMonth()+1;
230      headerText += 'month';
231    }
232    else if (viewType == 'QUARTER')
233    {
234      //First year
235      numCols = 4 - Math.floor(startDate.getMonth()/3);
236      numCols += Math.floor(endDate.getMonth()/3)+1;
237      if((endDate.getFullYear() - startDate.getFullYear()) > 1) numCols += 4 * (endDate.getFullYear() - startDate.getFullYear()-1);
238      headerText += 'quarter';
239    }
240    else
241    {
242      numCols = endDate.getFullYear() - startDate.getFullYear() + 1;
243      headerText += 'year';
244    }
245    sitesCombined = Array(numCols);
246     
247    // Set table header
248    headerText += ' (between ' + startDate.getFullYear()+'-';
249    if ((startDate.getMonth()+1) < 10) headerText += '0' + (startDate.getMonth()+1);
250    else headerText += (startDate.getMonth()+1);
251    headerText += '-';
252    if (startDate.getDate() < 10) headerText += '0' + startDate.getDate();
253    else headerText += startDate.getDate();
254    headerText += ' and ';
255    headerText += endDate.getFullYear()+'-';
256    if ((endDate.getMonth()+1) < 10) headerText += '0' + (endDate.getMonth()+1);
257    else headerText += (endDate.getMonth()+1);
258    headerText += '-';
259    if (endDate.getDate() < 10) headerText += '0' + endDate.getDate();
260    else headerText += endDate.getDate();
261    headerText += ')';
262    if (latestDate != null)
263    {
264      headerText += '\nLast registration ' + latestDate.getFullYear();
265      headerText += '-';
266      if ((latestDate.getMonth()+1) < 10) headerText += '0';
267      headerText += (latestDate.getMonth()+1);
268      headerText += '-';
269      if (latestDate.getDate()<10) headerText += '0';
270      headerText += latestDate.getDate();
271    }   
272    headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+3)));
273   
274    // Sub headers
275    // Only if each datacol is less then a year
276    if (viewType != 'YEAR')
277    {
278      subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader', 2));
279      addYearSubHeaders(startDate, endDate, subHeaderRowYear, viewType);     
280      subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader'));
281    }   
282         
283    // Columnsheader   
284    var siteHeader = getTableCellElement('Site', 'reportsubheader');     
285    var startDateHeader = getTableCellElement('Start date','reportsubheader');
286    columnHeaderRow.appendChild(siteHeader);
287    columnHeaderRow.appendChild(startDateHeader); 
288   
289    if (viewType == 'MONTH') addMonthColumnHeaders(columnHeaderRow, startDate);
290    else if (viewType == 'WEEK') addWeekColumnHeaders(columnHeaderRow, startDate);
291    else if (viewType == 'QUARTER') addQuarterColumnHeaders(columnHeaderRow, startDate);
292    else if (viewType == 'YEAR') addYearSubHeaders(startDate, endDate, columnHeaderRow, viewType);
293   
294   
295    columnHeaderRow.appendChild(getTableCellElement('Grand\ntotal', 'reportsubheader'));
296
297    // Build table     
298    reportTable.appendChild(headerRow);
299    reportTable.appendChild(subHeaderRowYear);
300    reportTable.appendChild(columnHeaderRow);
301         
302    // Data rows     
303    addDataRowsToTable(report, reportTable);
304     
305    // Add a row with the combined number of each month-column
306    var sitesCombinedRow = document.createElement('tr');
307    sitesCombinedRow.appendChild(getTableCellElement('Sites combined', 'colsummary'));
308    sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary'));
309    var gt = 0;
310    for (key in sitesCombined)
311    {
312      sitesCombinedRow.appendChild(getTableCellElement(sitesCombined[key],'colsummary'));
313      if (sitesCombined[key] != '') gt += sitesCombined[key];
314    }
315    sitesCombinedRow.appendChild(getTableCellElement(gt, 'colsummary'));
316    reportTable.appendChild(sitesCombinedRow); 
317    return reportTable;
318  }
319 
320  function addQuarterColumnHeaders(columnHeaderRow, startDate)
321  {
322    var currentDate = startDate;
323    for (var i=0;i<numCols;i++)
324    {
325      var quarter = Math.floor(currentDate.getMonth()/3)+1;
326      var columnText = 'Q'+quarter;
327      var quarterHeader = getTableCellElement(columnText, 'reportsubheader');
328      columnHeaderRow.appendChild(quarterHeader); 
329      currentDate.setMonth(currentDate.getMonth()+3);     
330    }
331  }
332 
333  function addWeekColumnHeaders(columnHeaderRow, startDate)
334  {
335    var currentDate = startDate;
336    var day = currentDate.getDay()-1;
337    day = day>=0 ? day: day + 7;
338    currentDate.setDate(currentDate.getDate()-day);
339    for (var i=0;i<numCols;i++)
340    {     
341      var weekNum = getWeekByDate(currentDate);
342      var columnText = weekNum;
343      if (weekNum < 10) columnText = '0'+columnText;     
344      columnHeaderRow.appendChild(getTableCellElement(columnText, 'reportsubheader'));
345      currentDate.setDate(currentDate.getDate()+7);     
346    }
347  }
348 
349  function addMonthColumnHeaders(columnHeaderRow, startDate)
350  {   
351    var currentDate = new Date(startDate.getFullYear(), startDate.getMonth());
352    for (var i=0;i<numCols;i++)
353    {             
354      var monthHeader = getTableCellElement(month[currentDate.getMonth()], 'reportsubheader');
355      columnHeaderRow.appendChild(monthHeader);       
356      currentDate.setMonth(currentDate.getMonth() +1);
357    }   
358  }
359 
360  function addYearSubHeaders(startDate, endDate, subHeaderRowYear, vt)
361  {   
362    var currentYear = startDate.getFullYear(); 
363   
364    var columnCounter = 0;   
365    do
366    {
367      var colspan;
368      var headerText = currentYear;
369      if (vt == "MONTH")
370      {
371        if (currentYear == startDate.getFullYear())
372        {
373          colspan =  11-parseInt(startDate.getMonth())+1;
374          if (endDate.getFullYear() == currentYear)
375          {
376            colspan = colspan - (11-parseInt(endDate.getMonth()));
377          }
378        }
379        else if (currentYear == endDate.getFullYear()) 
380          colspan = parseInt(endDate.getMonth()+1);
381        else
382          colspan = 12;
383      }
384      else if (vt == "WEEK")
385      { 
386        if (startDate.getFullYear() == endDate.getFullYear())
387        {
388          colspan = numCols;
389        }
390        else if (currentYear == startDate.getFullYear())
391        {
392          var startWeek = getWeekByDate(startDate);
393          var lastDay = new Date(startDate.getFullYear(), 11, 31);
394          var endWeek = getWeekByDate(lastDay);
395          if (endWeek == 1) endWeek = getWeekByDate(lastDay.setDate(lastDay.getDate()-7));
396          colspan = endWeek - startWeek +1;
397        }
398        else if (currentYear == endDate.getFullYear())
399        {
400          var endWeek = getWeekByDate(endDate);
401          colspan = endWeek;
402        }
403        else
404        {
405          var dateInLastWeek = new Date(currentYear, 11, 31);
406          var endWeek = getWeekByDate(dateInLastWeek);
407          if (endWeek == 1) endWeek = getWeekByDate(dateInLastWeek.setDate(dateInLastWeek.getDate()-7));
408          colspan = endWeek;
409        }               
410      }
411      else if (vt == "QUARTER")
412      {
413        if (currentYear == startDate.getFullYear())
414        {
415          if (startDate.getFullYear() == endDate.getFullYear())
416          {
417            colspan = Math.floor((endDate.getMonth()-startDate.getMonth())/3)+1;
418          }
419          else
420          {
421            colspan = Math.floor((11-startDate.getMonth())/3) +1;
422          }
423        }
424        else if(currentYear == endDate.getFullYear())
425        {
426          colspan = Math.floor(endDate.getMonth()/3)+1;
427        }
428        else 
429        {
430          colspan = 4;
431        }
432      }
433      else if (vt == "YEAR")
434      {
435        colspan = 1;       
436      }
437      columnCounter += colspan;           
438      subHeaderRowYear.appendChild(getTableCellElement(headerText, 'reportsubheader', colspan));
439    }while(!(++currentYear>endDate.getFullYear()));
440  }
441 
442  function addDataRowsToTable(report, reportTable)
443  {
444    var fdString = report.beginDate;
445    var ldString = report.endDate;
446    var startDate = new Date();
447    startDate.setYear(fdString.substr(0,4));
448    startDate.setMonth(fdString.substr(4,2)-1);
449    startDate.setDate(fdString.substr(6));
450    var endDate = new Date();
451    endDate.setYear(ldString.substr(0,4));
452    endDate.setMonth(ldString.substr(4,2)-1);
453    endDate.setDate(ldString.substr(6));
454    var viewType = report.viewType;   
455    var sites = report.sites;   
456    var statistics = report.statistics;
457    unknownCreation = statistics.noDate;
458    unknownSite = statistics.unknownSite;
459    for (namePrefix in sites)
460    {
461      if (!sites.hasOwnProperty(namePrefix)) continue;       
462      var site = sites[namePrefix];
463      var siteName = site.name;       
464      var year = site.startDate.substr(0,4);
465      var month = site.startDate.substr(5,2);
466      var date = site.startDate.substr(8,2);     
467      var siteStartDate = new Date(year, month-1, date);
468     
469      var siteData = statistics[namePrefix];     
470      var tableRow = document.createElement('tr');
471      var tableCol = getTableCellElement(siteName, 'rowtitle');
472      tableRow.appendChild(tableCol);
473      tableRow.appendChild(getTableCellElement(year+'-'+(month)+'-'+date, 'reportdata'));
474      var currentDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());     
475      var grandTotal = 0;
476      var columnCounter = 0;
477      do
478      {
479        var data = 0;
480        var keyIndex;
481        var yearIndex = currentDate.getFullYear();
482       
483        if (viewType == 'YEAR')
484        {
485          keyIndex = yearIndex;
486          if (siteData != null)
487          {
488            if (siteData[keyIndex] != null) data = siteData[keyIndex];
489          }
490          grandTotal += data;         
491          if ( (currentDate.getFullYear() <= siteStartDate.getFullYear()))
492          {
493            data = '';
494            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
495          }
496          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
497          else sitesCombined[keyIndex] += data;
498          currentDate.setFullYear(currentDate.getFullYear()+1);
499        }
500        else if (viewType == 'QUARTER')
501        {
502          var qIndex = Math.floor(currentDate.getMonth()/3) + 1;
503          var startQuarter = Math.floor(siteStartDate.getMonth()/3)+1;
504          keyIndex = yearIndex + '' + qIndex;
505          if (siteData != null)
506          {
507            if (siteData[keyIndex] != null) data = siteData[keyIndex];           
508          }         
509          grandTotal += data;
510          if ( (currentDate.getFullYear() <= siteStartDate.getFullYear()) && qIndex<startQuarter)
511          {
512            data = '';
513            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
514          }
515          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
516          else sitesCombined[keyIndex] += data;
517          currentDate.setMonth(currentDate.getMonth()+3);         
518        }
519        else if (viewType == 'MONTH')
520        {
521          var monthIndex = currentDate.getMonth()+1;
522          var rowFill = monthIndex < 10 ? '0' : '';
523          keyIndex = yearIndex + rowFill + monthIndex;
524          if (siteData != null)
525          {
526            if (siteData[keyIndex] != null) data = siteData[keyIndex];
527          }
528          grandTotal += data;         
529          if (currentDate.getFullYear() <= siteStartDate.getFullYear() && (monthIndex-1) < siteStartDate.getMonth())
530          {
531            data = '';
532            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
533          }
534          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
535          else sitesCombined[keyIndex] += data;
536         
537         
538          currentDate.setMonth(currentDate.getMonth()+1);
539        }
540        else if (viewType == 'WEEK')
541        {
542          var weekIndex = getWeekByDate(currentDate);
543          keyIndex = yearIndex + '' + weekIndex;
544          if (siteData != null)
545          {
546            if (siteData[keyIndex] != null) data = siteData[keyIndex];
547          }
548          grandTotal += data;         
549          if (currentDate.getFullYear() <= siteStartDate.getFullYear() && getWeekByDate(currentDate) < getWeekByDate(siteStartDate))
550          {
551            data = '';
552            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
553          }
554          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
555          else sitesCombined[keyIndex] += data;
556          currentDate.setDate(currentDate.getDate()+7);
557        }
558       
559        tableRow.appendChild(getTableCellElement(data, 'reportdata'));
560        columnCounter++;       
561      }while (columnCounter< numCols)     
562      tableRow.appendChild(getTableCellElement(parseInt(grandTotal), 'rowsummary'));
563      reportTable.appendChild(tableRow);
564    }
565  }
566 
567  function getReportTable()
568  {
569      var reportTable = document.createElement('table');
570      reportTable.setAttribute('class','reporttable');
571      reportTable.setAttribute('border','1');     
572      return reportTable;
573  }
574 
575  function getTableCellElement(text, clazz, colspan, rowspan)
576  {
577    var cellElement = document.createElement('td');
578    text = new String(text);   
579    var textArray = text.split("\n");   
580    if (textArray.length > 1)
581    {
582      for (var i=0;i<textArray.length;i++)
583      {       
584        if (i>0)cellElement.appendChild(document.createElement('br'));
585        cellElement.appendChild(document.createTextNode(textArray[i]));
586      }     
587    }
588    else
589    {
590      cellElement.appendChild(document.createTextNode(text));
591    }
592    cellElement.setAttribute('class', clazz);
593    if (colspan != null) cellElement.setAttribute('colspan', colspan);
594    if (rowspan != null) cellElement.setAttribute('rowspan', rowspan);
595   
596    return cellElement;
597  }
598 
599  function getListElement(itemText)
600  {
601    var listElement = document.createElement('li');
602    var textNode = document.createTextNode(itemText);
603    listElement.appendChild(textNode);
604    return listElement;
605  }
606  </script>
607 
608 
609  </base:head>
610  <base:body onload="init()">
611    <p:path><p:pathelement 
612      title="Reggie" href="<%="index.jsp?ID="+ID%>" 
613      /><p:pathelement title="Report generator" 
614      /></p:path>
615    <div class="content">
616    <%
617    if (sc.getActiveProjectId() == 0)
618    {
619      %>
620      <div class="messagecontainer note" style="width: 800px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
621        No project has been selected. You may proceed with the report generation but
622        only your own items will be included in the report.
623      </div>
624      <%
625    }
626    %>
627 
628    <form name="reggie" onsubmit="return false;">
629      <!-- 1. Report type-->
630      <table border="0" cellspacing="0" cellpadding="0" class="stepform">
631      <tr>
632        <td rowspan="3" class="stepno">1</td>
633        <td class="steptitle">Report type</td>
634      </tr>
635      <tr>
636        <td class="stepfields">
637          <table border="0" cellspacing="0" cellpadding="0" width="100%">
638          <tr valign="top">
639            <td class="prompt">Report</td>
640            <td class="input">
641              <select name="reporttype">
642                <option value="samplecount">Sample count report</option>
643              </select>
644            </td>
645            <td class="status" id="report.status"></td>
646            <td class="help">
647              <span id="report.message" class="message" style="display: none;"></span>
648              Select which report to generate.
649            </td>
650          </tr>
651          </table>
652        </td>
653      </tr>
654      </table>
655     
656      <div id="sampleCountSection" style="display:none;">
657        <p></p>
658        <!-- 2. Report parameters-->
659        <table border="0" cellspacing="0" cellpadding="0" class="stepform">
660        <tr>
661          <td rowspan="3" class="stepno">2</td>
662          <td class="steptitle">Report parameters</td>
663        </tr>
664        <tr>
665          <td class="stepfields">
666            <table border="0" cellspacing="0" cellpadding="0" width="100%">           
667            <tr>
668              <td valign="top" class="prompt">Report period</td>
669              <td valign="top" class="input">
670                From<input type="text" onChange="dateOnChange()" size=7 name="fromdate"/>&nbsp;
671                To<input type="text" onChange="dateOnChange()" size=7 name="todate" />
672              </td>
673              <td valign="top" class="status" id="displayInterval.status"></td>
674              <td class="help">
675                <span id="displayInterval.message" class="message" style="display: none;"></span>
676                Define which period the report should cover. Empty fields will include all tubes.<br>
677                The report will adjust itself depending on the size of the period.
678                <ul>
679                  <li>Period shorter then 3 months - specimens per week</li>
680                  <li>Period shorter then 13 months - specimens per month</li>
681                  <li>Period shorter then 3 year - specimens per quarter</li>
682                  <li>Period is 3 year or greater - specimens per year</li>
683                </ul>                 
684              </td>
685            </tr>           
686            </table>
687          </td>
688        </tr>
689        </table>
690      </div>
691     
692      <div id="reportSection" style="display:none;">
693        <p></p>
694        <table border="0" cellspacing="0" cellpadding="0" class="stepform">
695        <tr>
696          <td rowspan="3" class="stepno">3</td>
697          <td class="steptitle">Generated report</td>
698        </tr>
699        <tr>
700          <td id="reportcell" class="stepfields">
701            <i>Generating report...</i>
702          </td>
703        </tr>
704        </table>
705      </div> 
706     
707      <div class="messagecontainer error" id="errorMessage" style="display: none; width: 800px; margin-left: 20px; margin-bottom: 0px;"></div>   
708       
709      <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
710        <tr>
711          <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
712          <td><base:button id="gonext" title="Next" image="<%=home+"/images/gonext.png"%>" onclick="goNext(true)" /></td>
713          <td><base:button id="gocreate" title="Generate" image="<%=home+"/images/gonext.png"%>" onclick="goCreate()" style="display: none;"/></td>         
714          <td><base:button id="gorestart" title="Restart" image="<%=home+"/images/goback.png"%>" onclick="goRestart(true)" style="display: none;"/></td>
715          <td id="gonext.message" class="message"></td>
716        </tr>
717      </table>     
718    </form>
719    </div>
720   
721  </base:body>
722  </base:page>
723  <%
724}
725finally
726{
727  if (dc != null) dc.close();
728}
729%>
Note: See TracBrowser for help on using the repository browser.