@RequestMapping(method = RequestMethod.GET) @PreAuthorize("(hasRole('ROLE_REPORT_READ') and hasRole('ROLE_ACCOMMODATION_READ'))") @ResponseBody public void getDisabilityServicesReport( final HttpServletResponse response, final @RequestParam(required = false) ObjectStatus status, final @RequestParam(required = true) UUID coachId, final @RequestParam(required = true) UUID watcherId, final @RequestParam(required = false) UUID odsCoachId, final @RequestParam(required = false) UUID disabilityStatusId, final @RequestParam(required = false) UUID disabilityTypeId, final @RequestParam(required = false) UUID programStatus, final @RequestParam(required = false) List<UUID> specialServiceGroupIds, final @RequestParam(required = false) List<UUID> referralSourcesIds, final @RequestParam(required = false) List<UUID> studentTypeIds, final @RequestParam(required = false) List<UUID> serviceReasonIds, final @RequestParam(required = false) Integer anticipatedStartYear, final @RequestParam(required = false) String anticipatedStartTerm, final @RequestParam(required = false) Integer actualStartYear, final @RequestParam(required = false) String actualStartTerm, final @RequestParam(required = false) Date createDateFrom, final @RequestParam(required = false) Date createDateTo, final @RequestParam(required = false) String termCode, final @RequestParam(required = false) String homeDepartment, final @RequestParam(required = false) String rosterStatus, final @RequestParam(required = false, defaultValue = DEFAULT_REPORT_TYPE) String reportType) throws ObjectNotFoundException, IOException { final Map<String, Object> parameters = Maps.newHashMap(); final PersonSearchFormTO personSearchForm = new PersonSearchFormTO(); SearchParameters.addCoach( coachId, parameters, personSearchForm, personService, personTOFactory); SearchParameters.addOdsCoach( odsCoachId, parameters, personSearchForm, personService, personTOFactory); SearchParameters.addWatcher( watcherId, parameters, personSearchForm, personService, personTOFactory); SearchParameters.addReferenceLists( studentTypeIds, specialServiceGroupIds, referralSourcesIds, serviceReasonIds, parameters, personSearchForm, studentTypeService, ssgService, referralSourcesService, serviceReasonService); SearchParameters.addDateRange( createDateFrom, createDateTo, termCode, parameters, personSearchForm, termService); SearchParameters.addReferenceTypes( programStatus, disabilityStatusId, disabilityTypeId, true, rosterStatus, homeDepartment, parameters, personSearchForm, programStatusService, disabilityStatusService, disabilityTypeService); SearchParameters.addAnticipatedAndActualStartTerms( anticipatedStartTerm, anticipatedStartYear, actualStartTerm, actualStartYear, parameters, personSearchForm); // TODO Specifying person name sort fields in the SaP doesn't seem to // work... end up with empty results need to dig into actual query // building final PagingWrapper<DisabilityServicesReportTO> people = personService.getDisabilityReport( personSearchForm, SearchParameters.getReportPersonSortingAndPagingAll(status)); List<DisabilityServicesReportTO> compressedReports = this.processStudentReportTOs(people); SearchParameters.addStudentCount(compressedReports, parameters); renderReport( response, parameters, compressedReports, REPORT_TYPE_PDF.equals(reportType) ? REPORT_URL_PDF : null, reportType, REPORT_FILE_TITLE); }