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

Last change on this file since 1727 was 1727, checked in by olle, 9 years ago

Fixes #421. Bug fixes for problems with different period views.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 24.1 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), 10)-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), 10)-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 psdString = report.periodBeginDate;
190    var ldString = report.latestDate;
191    var startDate = new Date();
192    startDate.setYear(sdString.substr(0,4));
193    startDate.setMonth(sdString.substr(4,2)-1);
194    startDate.setDate(sdString.substr(6));
195    var endDate = new Date();
196    endDate.setYear(edString.substr(0,4));
197    endDate.setMonth(edString.substr(4,2)-1);
198    endDate.setDate(edString.substr(6));
199    var periodStartDate = new Date();
200    periodStartDate.setYear(psdString.substr(0,4));
201    periodStartDate.setMonth(psdString.substr(4,2)-1);
202    periodStartDate.setDate(psdString.substr(6));
203    var latestDate;
204    if (ldString != null)
205    {
206      latestDate = new Date();
207      latestDate.setYear(ldString.substr(0,4));
208      latestDate.setMonth(ldString.substr(4,2)-1);
209      latestDate.setDate(ldString.substr(6));
210    }   
211   
212    var viewType = report.viewType;   
213 
214    var headerRow = document.createElement('tr');   
215    var subHeaderRowYear = document.createElement('tr');
216    var columnHeaderRow = document.createElement('tr');
217   
218    var headerText = '# Specimen by ';
219    if (viewType == 'WEEK')
220    {
221      var startWeek = getISOWeekNumber(periodStartDate);
222      var endWeek = getISOWeekNumber(endDate);
223      var tempDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate()-periodStartDate.getDay()+1);
224      numCols = 0;
225      while (tempDate < endDate)
226      {
227        numCols++;
228        tempDate.setDate(tempDate.getDate()+7);
229      }
230      headerText += 'week';
231    }
232    else if (viewType == 'MONTH')
233    {
234      numCols = (endDate.getFullYear()-periodStartDate.getFullYear())*12 + endDate.getMonth()-periodStartDate.getMonth()+1;
235      headerText += 'month';
236    }
237    else if (viewType == 'QUARTER')
238    {
239      //First year
240      numCols = 4 - Math.floor(periodStartDate.getMonth()/3);
241      numCols += Math.floor(endDate.getMonth()/3)+1;
242      if((endDate.getFullYear() - periodStartDate.getFullYear()) > 1)
243      {
244        numCols += 4 * (endDate.getFullYear() - periodStartDate.getFullYear()-1);
245      }
246      headerText += 'quarter';
247    }
248    else
249    {
250      numCols = endDate.getFullYear() - periodStartDate.getFullYear() + 1;
251      headerText += 'year';
252    }
253    sitesCombined = Array(numCols);
254     
255    // Set table header
256    headerText += ' (between ' + startDate.getFullYear()+'-';
257    if ((startDate.getMonth()+1) < 10)
258    {
259      headerText += '0' + (startDate.getMonth()+1);
260    }
261    else
262    {
263      headerText += (startDate.getMonth()+1);
264    }
265    headerText += '-';
266    if (startDate.getDate() < 10)
267    {
268      headerText += '0' + startDate.getDate();
269    }
270    else
271    {
272      headerText += startDate.getDate();
273    }
274    headerText += ' and ';
275    headerText += endDate.getFullYear()+'-';
276    if ((endDate.getMonth()+1) < 10)
277    {
278      headerText += '0' + (endDate.getMonth()+1);
279    }
280    else
281    {
282      headerText += (endDate.getMonth()+1);
283    }
284    headerText += '-';
285    if (endDate.getDate() < 10)
286    {
287      headerText += '0' + endDate.getDate();
288    }
289    else
290    {
291      headerText += endDate.getDate();
292    }
293    headerText += ')';
294    if (latestDate != null)
295    {
296      headerText += '\nLast registration ' + latestDate.getFullYear();
297      headerText += '-';
298      if ((latestDate.getMonth()+1) < 10)
299      {
300        headerText += '0';
301      }
302      headerText += (latestDate.getMonth()+1);
303      headerText += '-';
304      if (latestDate.getDate()<10)
305      {
306        headerText += '0';
307      }
308      headerText += latestDate.getDate();
309    }   
310    headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+3)));
311   
312    // Sub headers
313    // Only if each datacol is less then a year
314    if (viewType != 'YEAR')
315    {
316      subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader', 2));
317      addYearSubHeaders(periodStartDate, endDate, subHeaderRowYear, viewType);     
318      subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader', 2));
319    }   
320         
321    // Columnsheader   
322    var siteHeader = getTableCellElement('Site', 'reportsubheader');     
323    var startDateHeader = getTableCellElement('Start date','reportsubheader');
324    columnHeaderRow.appendChild(siteHeader);
325    columnHeaderRow.appendChild(startDateHeader); 
326   
327    if (viewType == 'MONTH') addMonthColumnHeaders(columnHeaderRow, periodStartDate);
328    else if (viewType == 'WEEK') addWeekColumnHeaders(columnHeaderRow, periodStartDate);
329    else if (viewType == 'QUARTER') addQuarterColumnHeaders(columnHeaderRow, periodStartDate);
330    else if (viewType == 'YEAR') addYearSubHeaders(periodStartDate, endDate, columnHeaderRow, viewType);
331   
332   
333    columnHeaderRow.appendChild(getTableCellElement('Grand\ntotal', 'reportsubheader'));
334
335    // Build table     
336    reportTable.appendChild(headerRow);
337    reportTable.appendChild(subHeaderRowYear);
338    reportTable.appendChild(columnHeaderRow);
339         
340    // Data rows     
341    addDataRowsToTable(report, reportTable);
342     
343    // Add a row with the combined number of each month-column
344    var sitesCombinedRow = document.createElement('tr');
345    sitesCombinedRow.appendChild(getTableCellElement('Sites combined', 'colsummary'));
346    sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary'));
347    var gt = 0;
348    for (key in sitesCombined)
349    {
350      sitesCombinedRow.appendChild(getTableCellElement(sitesCombined[key],'colsummary'));
351      if (sitesCombined[key] != '') gt += sitesCombined[key];
352    }
353    sitesCombinedRow.appendChild(getTableCellElement(gt,'colsummary'));
354    reportTable.appendChild(sitesCombinedRow); 
355
356    return reportTable;
357  }
358 
359  function addQuarterColumnHeaders(columnHeaderRow, startDate)
360  {
361    var currentDate = startDate;
362    for (var i=0;i<numCols;i++)
363    {
364      var quarter = Math.floor(currentDate.getMonth()/3)+1;
365      var columnText = 'Q'+quarter;
366      var quarterHeader = getTableCellElement(columnText, 'reportsubheader');
367      columnHeaderRow.appendChild(quarterHeader); 
368      currentDate.setMonth(currentDate.getMonth()+3);     
369    }
370  }
371 
372  function addWeekColumnHeaders(columnHeaderRow, startDate)
373  {
374    var currentDate = startDate;
375    var day = currentDate.getDay()-1;
376    day = day>=0 ? day: day + 7;
377    currentDate.setDate(currentDate.getDate()-day);
378    for (var i=0;i<numCols;i++)
379    {     
380      var weekNum = getISOWeekNumber(currentDate);
381      var columnText = weekNum;
382      if (weekNum < 10) columnText = '0'+columnText;     
383      columnHeaderRow.appendChild(getTableCellElement(columnText, 'reportsubheader'));
384      currentDate.setDate(currentDate.getDate()+7);     
385    }
386  }
387 
388  function addMonthColumnHeaders(columnHeaderRow, startDate)
389  {   
390    var currentDate = new Date(startDate.getFullYear(), startDate.getMonth());
391    for (var i=0;i<numCols;i++)
392    {             
393      var monthHeader = getTableCellElement(month[currentDate.getMonth()], 'reportsubheader');
394      columnHeaderRow.appendChild(monthHeader);       
395      currentDate.setMonth(currentDate.getMonth() +1);
396    }   
397  }
398 
399  function addYearSubHeaders(startDate, endDate, subHeaderRowYear, vt)
400  {   
401    var currentYear = startDate.getFullYear(); 
402   
403    var columnCounter = 0;   
404    do
405    {
406      var colspan;
407      var headerText = currentYear;
408      if (vt == "MONTH")
409      {
410        if (currentYear == startDate.getFullYear())
411        {
412          colspan =  11-startDate.getMonth()+1;
413          if (endDate.getFullYear() == currentYear)
414          {
415            colspan = colspan - (11-endDate.getMonth());
416          }
417        }
418        else if (currentYear == endDate.getFullYear()) 
419          colspan = endDate.getMonth()+1;
420        else
421          colspan = 12;
422      }
423      else if (vt == "WEEK")
424      { 
425        if (startDate.getFullYear() == endDate.getFullYear())
426        {
427          colspan = numCols;
428        }
429        else if (currentYear == startDate.getFullYear())
430        {
431          var startWeek = getISOWeekNumber(startDate);
432          var lastDay = new Date(startDate.getFullYear(), 11, 31);
433          var endWeek = getISOWeekNumber(lastDay);
434          if (endWeek == 1)
435          {
436            lastDay.setDate(lastDay.getDate()-7);
437            endWeek = getISOWeekNumber(lastDay);
438          }
439          colspan = endWeek - startWeek +1;
440        }
441        else if (currentYear == endDate.getFullYear())
442        {
443          var endWeek = getISOWeekNumber(endDate);
444          colspan = endWeek;
445        }
446        else
447        {
448          var dateInLastWeek = new Date(currentYear, 11, 31);
449          var endWeek = getISOWeekNumber(dateInLastWeek);
450          if (endWeek == 1)
451          {
452            dateInLastWeek.setDate(dateInLastWeek.getDate()-7);
453            endWeek = getISOWeekNumber(dateInLastWeek);
454          }
455          colspan = endWeek;
456        }               
457      }
458      else if (vt == "QUARTER")
459      {
460        if (currentYear == startDate.getFullYear())
461        {
462          if (startDate.getFullYear() == endDate.getFullYear())
463          {
464            colspan = Math.floor((endDate.getMonth()-startDate.getMonth())/3)+1;
465          }
466          else
467          {
468            colspan = Math.floor((11-startDate.getMonth())/3) +1;
469          }
470        }
471        else if(currentYear == endDate.getFullYear())
472        {
473          colspan = Math.floor(endDate.getMonth()/3)+1;
474        }
475        else 
476        {
477          colspan = 4;
478        }
479      }
480      else if (vt == "YEAR")
481      {
482        colspan = 1;       
483      }
484      columnCounter += colspan;           
485      subHeaderRowYear.appendChild(getTableCellElement(headerText, 'reportsubheader', colspan));
486    }while(!(++currentYear>endDate.getFullYear()));
487  }
488 
489  function addDataRowsToTable(report, reportTable)
490  {
491    var fdString = report.beginDate;
492    var ldString = report.endDate;
493    var psdString = report.periodBeginDate;
494    var startDate = new Date();
495    startDate.setYear(fdString.substr(0,4));
496    startDate.setMonth(fdString.substr(4,2)-1);
497    startDate.setDate(fdString.substr(6));
498    var endDate = new Date();
499    endDate.setYear(ldString.substr(0,4));
500    endDate.setMonth(ldString.substr(4,2)-1);
501    endDate.setDate(ldString.substr(6));
502    var periodStartDate = new Date();
503    periodStartDate.setYear(psdString.substr(0,4));
504    periodStartDate.setMonth(psdString.substr(4,2)-1);
505    periodStartDate.setDate(psdString.substr(6));
506    var viewType = report.viewType;   
507    var sites = report.sites;   
508    var statistics = report.statistics;
509    unknownCreation = statistics.noDate;
510    unknownSite = statistics.unknownSite;
511    for (namePrefix in sites)
512    {
513      if (!sites.hasOwnProperty(namePrefix)) continue;       
514      var site = sites[namePrefix];
515      var siteName = site.name;       
516      var year = site.startDate.substr(0,4);
517      var month = site.startDate.substr(5,2);
518      var date = site.startDate.substr(8,2);     
519      var siteStartDate = new Date(year, month-1, date);
520     
521      var siteData = statistics[namePrefix];     
522      var tableRow = document.createElement('tr');
523      var tableCol = getTableCellElement(siteName, 'rowtitle');
524      tableRow.appendChild(tableCol);
525      tableRow.appendChild(getTableCellElement(year+'-'+(month)+'-'+date, 'reportdata'));
526      var grandTotal = 0;   
527      var currentDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate());     
528      var columnCounter = 0;
529      do
530      {
531        var data = 0;
532        var keyIndex;
533        var yearIndex = currentDate.getFullYear();
534       
535        if (viewType == 'YEAR')
536        {
537          keyIndex = yearIndex;
538          if (siteData != null)
539          {
540            if (siteData[keyIndex] != null) data = siteData[keyIndex];
541          }
542          grandTotal += data;         
543          if ( (currentDate.getFullYear() < siteStartDate.getFullYear()))
544          {
545            data = '';
546            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
547          }
548          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
549          else sitesCombined[keyIndex] += data;
550          currentDate.setFullYear(currentDate.getFullYear()+1);
551        }
552        else if (viewType == 'QUARTER')
553        {
554          var qIndex = Math.floor(currentDate.getMonth()/3) + 1;
555          var startQuarter = Math.floor(siteStartDate.getMonth()/3)+1;
556          keyIndex = yearIndex + '' + qIndex;
557          if (siteData != null)
558          {
559            if (siteData[keyIndex] != null) data = siteData[keyIndex];           
560          }         
561          grandTotal += data;
562          if ( (currentDate.getFullYear() <= siteStartDate.getFullYear()) && qIndex<startQuarter)
563          {
564            data = '';
565            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
566          }
567          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
568          else sitesCombined[keyIndex] += data;
569          currentDate.setMonth(currentDate.getMonth()+3);         
570        }
571        else if (viewType == 'MONTH')
572        {
573          var monthIndex = currentDate.getMonth()+1;
574          var rowFill = monthIndex < 10 ? '0' : '';
575          keyIndex = yearIndex + rowFill + monthIndex;
576          if (siteData != null)
577          {
578            if (siteData[keyIndex] != null) data = siteData[keyIndex];
579          }
580          grandTotal += data;         
581          if (currentDate.getFullYear() <= siteStartDate.getFullYear() && (monthIndex-1) < siteStartDate.getMonth())
582          {
583            data = '';
584            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
585          }
586          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
587          else sitesCombined[keyIndex] += data;
588         
589         
590          currentDate.setMonth(currentDate.getMonth()+1);
591        }
592        else if (viewType == 'WEEK')
593        {
594          var weekIndex = getISOWeekNumber(currentDate);
595          keyIndex = yearIndex + '' + weekIndex;
596          if (siteData != null)
597          {
598            if (siteData[keyIndex] != null) data = siteData[keyIndex];
599          }
600          grandTotal += data;         
601          if (currentDate.getFullYear() <= siteStartDate.getFullYear() && getISOWeekNumber(currentDate) < getISOWeekNumber(siteStartDate))
602          {
603            data = '';
604            if (sitesCombined[keyIndex] == null) sitesCombined[keyIndex] = data;
605          }
606          else if (sitesCombined[keyIndex] == null || sitesCombined[keyIndex] == '') sitesCombined[keyIndex] = data;
607          else sitesCombined[keyIndex] += data;
608          currentDate.setDate(currentDate.getDate()+7);
609        }
610       
611        tableRow.appendChild(getTableCellElement(data, 'reportdata'));
612        columnCounter++;       
613      } while (columnCounter < numCols)
614      tableRow.appendChild(getTableCellElement(grandTotal, 'rowsummary'));
615      reportTable.appendChild(tableRow);
616    }
617  }
618 
619  function getReportTable()
620  {
621      var reportTable = document.createElement('table');
622      reportTable.setAttribute('class','reporttable');
623      reportTable.setAttribute('border','1');     
624      return reportTable;
625  }
626 
627  function getTableCellElement(text, clazz, colspan, rowspan)
628  {
629    var cellElement = document.createElement('td');
630    text = new String(text);   
631    var textArray = text.split("\n");   
632    if (textArray.length > 1)
633    {
634      for (var i=0;i<textArray.length;i++)
635      {       
636        if (i>0)cellElement.appendChild(document.createElement('br'));
637        cellElement.appendChild(document.createTextNode(textArray[i]));
638      }     
639    }
640    else
641    {
642      cellElement.appendChild(document.createTextNode(text));
643    }
644    cellElement.setAttribute('class', clazz);
645    if (colspan != null) cellElement.setAttribute('colspan', colspan);
646    if (rowspan != null) cellElement.setAttribute('rowspan', rowspan);
647   
648    return cellElement;
649  }
650 
651  function getListElement(itemText)
652  {
653    var listElement = document.createElement('li');
654    var textNode = document.createTextNode(itemText);
655    listElement.appendChild(textNode);
656    return listElement;
657  }
658
659  /*
660   * Get the ISO week number for a given date
661   *
662   * Based on code at http://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
663   */
664  function getISOWeekNumber(date)
665  {
666    tmpDate = new Date(date);
667    tmpDate.setHours(0,0,0);
668    // Set to nearest Thursday: current date + 4 - current day number
669    // Make Sunday day number 7
670    tmpDate.setDate(tmpDate.getDate() + 4 - (tmpDate.getDay() || 7));
671    // Get first day of year
672    var yearStart = new Date(tmpDate.getFullYear(), 0, 1);
673    // Calculate full weeks to nearast Thursday (86400000 = 24*60*60*1000 number of ms in a day)
674    var weekNo = Math.ceil(( ( (tmpDate - yearStart) / 86400000) + 1)/7);
675    return weekNo;
676  }
677
678  </script>
679 
680 
681  </base:head>
682  <base:body onload="init()">
683    <p:path><p:pathelement 
684      title="Reggie" href="<%="index.jsp?ID="+ID%>" 
685      /><p:pathelement title="Report generator" 
686      /></p:path>
687    <div class="content">
688    <%
689    if (sc.getActiveProjectId() == 0)
690    {
691      %>
692      <div class="messagecontainer note" style="width: 950px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
693        No project has been selected. You may proceed with the report generation but
694        only your own items will be included in the report.
695      </div>
696      <%
697    }
698    %>
699 
700    <form name="reggie" onsubmit="return false;">
701      <!-- 1. Report type-->
702      <table border="0" cellspacing="0" cellpadding="0" class="stepform">
703      <tr>
704        <td rowspan="3" class="stepno">1</td>
705        <td class="steptitle">Report type</td>
706      </tr>
707      <tr>
708        <td class="stepfields">
709          <table border="0" cellspacing="0" cellpadding="0" width="100%">
710          <tr valign="top">
711            <td class="prompt">Report</td>
712            <td class="input">
713              <select name="reporttype">
714                <option value="samplecount">Sample count report</option>
715              </select>
716            </td>
717            <td class="status" id="report.status"></td>
718            <td class="help">
719              <span id="report.message" class="message" style="display: none;"></span>
720              Select which report to generate.
721            </td>
722          </tr>
723          </table>
724        </td>
725      </tr>
726      </table>
727     
728      <div id="sampleCountSection" style="display:none;">
729        <p></p>
730        <!-- 2. Report parameters-->
731        <table border="0" cellspacing="0" cellpadding="0" class="stepform">
732        <tr>
733          <td rowspan="3" class="stepno">2</td>
734          <td class="steptitle">Report parameters</td>
735        </tr>
736        <tr>
737          <td class="stepfields">
738            <table border="0" cellspacing="0" cellpadding="0" width="100%">           
739            <tr>
740              <td valign="top" class="prompt">Report period</td>
741              <td valign="top" class="input">
742                From<input type="text" onChange="dateOnChange()" size=7 name="fromdate"/>&nbsp;
743                To<input type="text" onChange="dateOnChange()" size=7 name="todate" />
744              </td>
745              <td valign="top" class="status" id="displayInterval.status"></td>
746              <td class="help">
747                <span id="displayInterval.message" class="message" style="display: none;"></span>
748                Define which period the report should cover. Empty fields will include all tubes.<br>
749                The report will adjust itself depending on the size of the period.
750                <ul>
751                  <li>Period shorter then 3 months - specimens per week</li>
752                  <li>Period shorter then 13 months - specimens per month</li>
753                  <li>Period shorter then 3 year - specimens per quarter</li>
754                  <li>Period is 3 year or greater - specimens per year</li>
755                </ul>                 
756              </td>
757            </tr>
758            </table>
759          </td>
760        </tr>
761        </table>
762      </div>
763     
764      <div id="reportSection" style="display:none;">
765        <p></p>
766        <table border="0" cellspacing="0" cellpadding="0" class="stepform">
767        <tr>
768          <td rowspan="3" class="stepno">3</td>
769          <td class="steptitle">Generated report</td>
770        </tr>
771        <tr>
772          <td id="reportcell" class="stepfields">
773            <i>Generating report...</i>
774          </td>
775        </tr>
776        </table>
777      </div> 
778     
779      <div class="messagecontainer error" id="errorMessage" style="display: none; width: 950px; margin-left: 20px; margin-bottom: 0px;"></div>   
780       
781      <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
782        <tr>
783          <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
784          <td><base:button id="gonext" title="Next" image="<%=home+"/images/gonext.png"%>" onclick="goNext(true)" /></td>
785          <td><base:button id="gocreate" title="Generate" image="<%=home+"/images/gonext.png"%>" onclick="goCreate()" style="display: none;"/></td>         
786          <td><base:button id="gorestart" title="Restart" image="<%=home+"/images/goback.png"%>" onclick="goRestart(true)" style="display: none;"/></td>
787          <td id="gonext.message" class="message"></td>
788        </tr>
789      </table>     
790    </form>
791    </div>
792   
793  </base:body>
794  </base:page>
795  <%
796}
797finally
798{
799  if (dc != null) dc.close();
800}
801%>
Note: See TracBrowser for help on using the repository browser.