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

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

Fixes #419. Added menu for manual selection of view type for the table.

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