@RequestMapping(
     value = "staff/{id}/{type}",
     method = RequestMethod.GET,
     produces = "application/pdf")
 public void getReport(
     @PathVariable("id") Integer id,
     @RequestParam("start") String s,
     @RequestParam("end") String e,
     @PathVariable("type") String type,
     HttpServletResponse response)
     throws IOException {
   DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   if (type.equals("pdf")) gen = new PDFGenerator();
   else gen = new SheetGenerator();
   try {
     Date start = formatter.parse(s);
     Date end = formatter.parse(e);
     String dateHeader = start + " - " + end;
     Collection<Activity> acts =
         activityRepository.findByDateBetweenAndEmplIdAndSubmittedTrue(start, end, id);
     InputStream is = new FileInputStream(gen.getDocumentByStaff(acts, dateHeader));
     if (type.equals("pdf")) response.setContentType("application/pdf");
     else
       response.setContentType(
           "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
     OutputStream os = response.getOutputStream();
     int n = 0;
     byte[] byteBuffer = new byte[16384];
     while ((n = is.read(byteBuffer)) > -1) {
       os.write(byteBuffer, 0, n); // Don't allow any extra bytes to creep in, final write
     }
     response.flushBuffer();
   } catch (Exception ex) {
   }
 }
 @RequestMapping(value = "projects/{id}/{type}")
 public void getProjectReport(
     @PathVariable("id") Integer id,
     @RequestParam(value = "start", required = false) String b,
     @RequestParam(value = "end", required = false) String e,
     @PathVariable("type") String type,
     HttpServletResponse response)
     throws IOException {
   if (type.equals("pdf")) gen = new PDFGenerator();
   else gen = new SheetGenerator();
   if (b != null && e != null) {
     DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
     try {
       Date begin = formatter.parse(b);
       Date end = formatter.parse(e);
       Collection<Activity> col = activityRepository.findByDateBetweenAndProjId(begin, end, id);
       InputStream is = new FileInputStream(gen.getDocumentByProject(col, begin + "-" + end));
       if (type.equals("pdf")) response.setContentType("application/pdf");
       else
         response.setContentType(
             "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
       OutputStream os = response.getOutputStream();
       int n = 0;
       byte[] byteBuffer = new byte[16384];
       while ((n = is.read(byteBuffer)) > -1) {
         os.write(byteBuffer, 0, n); // Don't allow any extra bytes to creep in, final write
       }
       response.flushBuffer();
     } catch (Exception ex) {
     }
   } else {
     try {
       Collection<Activity> col = activityRepository.findByProjId(id);
       InputStream is = new FileInputStream(gen.getDocumentByProject(col, "Whole period"));
       response.setContentType("application/pdf");
       OutputStream os = response.getOutputStream();
       int n = 0;
       byte[] byteBuffer = new byte[16384];
       while ((n = is.read(byteBuffer)) > -1) {
         os.write(byteBuffer, 0, n); // Don't allow any extra bytes to creep in, final write
       }
       response.flushBuffer();
     } catch (Exception ex) {
     }
   }
 }
 @RequestMapping(
     value = "staff/{id}/{m}/{type}",
     method = RequestMethod.GET,
     produces = "application/xls")
 public void getStaffReportByMonth(
     @PathVariable("id") Integer id,
     @PathVariable("m") Integer month,
     @PathVariable("type") String type,
     HttpServletResponse response)
     throws IOException {
   String dateHeader = new DateFormatSymbols().getMonths()[month];
   if (type.equals("pdf")) gen = new PDFGenerator();
   else gen = new SheetGenerator();
   Calendar cal = Calendar.getInstance();
   cal.set(Calendar.MONTH, month);
   cal.set(Calendar.DAY_OF_MONTH, 1);
   Date beginDate = new Date(cal.getTime().getTime());
   cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
   Date endDate = new Date(cal.getTime().getTime());
   Collection<Activity> list =
       activityRepository.findByDateBetweenAndEmplIdAndSubmittedTrue(beginDate, endDate, id);
   try {
     InputStream is = new FileInputStream(gen.getDocumentByStaff(list, dateHeader));
     if (type.equals("pdf")) response.setContentType("application/pdf");
     else
       response.setContentType(
           "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
     OutputStream os = response.getOutputStream();
     int n = 0;
     byte[] byteBuffer = new byte[16384];
     while ((n = is.read(byteBuffer)) > -1) {
       os.write(byteBuffer, 0, n); // Don't allow any extra bytes to creep in, final write
     }
     response.flushBuffer();
   } catch (Exception ex) {
   }
 }