@RolesAllowed({ALUNO, PROFESSOR})
  public List<Atividade> consultarAtividadesMensaisDaMonitoria(
      Monitoria monitoria, Date dataInicialMes, Date dataFinalMes) {

    Integer mes = Util.getMonthOfDate(dataInicialMes, dataFinalMes);
    System.out.println("Mes: " + mes);
    return this.consultarAtividadesMensaisDaMonitoria(monitoria, mes);
  }
 @RolesAllowed({ALUNO, PROFESSOR})
 public byte[] obterRelatorioFrequencia(
     Monitoria monitoria, Date dataInicialMes, Date dataFinalMes) {
   Integer mes = Util.getMonthOfDate(dataInicialMes, dataFinalMes);
   List<Atividade> atividades = this.consultarAtividadesMensaisDaMonitoria(monitoria, mes);
   List<RelatorioDTO> dadosRelatorio = converterAtividadesEmRelatorio(monitoria, atividades, mes);
   try {
     return RelatorioUtil.gerarRelatorioPDF(dadosRelatorio, null, RELATORIO_JASPER_ATIVIDADE);
   } catch (JRException ex) {
     Logger.getLogger(AtividadeService.class.getName()).log(Level.SEVERE, null, ex);
   }
   return null;
 }
  @RolesAllowed({ALUNO, PROFESSOR})
  public List<RelatorioDTO> converterAtividadesEmRelatorio(
      Monitoria monitoria, List<Atividade> atividades, Integer mes) {

    RelatorioDTO relatorio = new RelatorioDTO();

    relatorio.setAno(monitoria.getAnoMonitoria());
    relatorio.setEdital(monitoria.getEditalMonitoria());
    relatorio.setDisciplina(monitoria.getDisciplina().getComponenteCurricular().getDescricao());
    relatorio.setMatricula(monitoria.getAluno().getMatricula());
    relatorio.setCurso(monitoria.getAluno().getCurso().getDescricao());
    relatorio.setNome(monitoria.getNomeMonitor());
    relatorio.setOrientador(monitoria.getNomeOrientador());
    relatorio.setMes(Util.obterNomeMes(mes));
    StringBuilder descricaoAcumulada = new StringBuilder();
    StringBuilder observacaoAcumulada = new StringBuilder();

    List<SemanaDTO> semanas = new ArrayList<>();

    List<DiaDTO> dias = new ArrayList<>();

    SimpleDateFormat format = new SimpleDateFormat("HH:mm");

    SemanaDTO semana = new SemanaDTO();

    int quantidadeAtividades = 0;
    for (Atividade atividade : atividades) {

      DiaDTO dia = new DiaDTO();

      String horarioInicial = format.format(atividade.getDataInicio());
      String horarioFinal = format.format(atividade.getDataFim());

      dia.setHorario(horarioInicial + " - " + horarioFinal);
      dia.setData(atividade.getDataInicio());
      dias.add(dia);

      if (!StringUtils.isEmpty(atividade.getDescricao())) {
        descricaoAcumulada.append(atividade.getDescricao());
        descricaoAcumulada.append("; ");
      }
      if (!StringUtils.isEmpty(atividade.getObservacoes())) {
        observacaoAcumulada.append(atividade.getObservacoes());
        observacaoAcumulada.append("; ");
      }

      quantidadeAtividades += 1;
      if (((quantidadeAtividades % 5) == 0) || quantidadeAtividades == atividades.size()) {
        semana.setDias(dias);
        semana.setDescricao(descricaoAcumulada.toString());
        semana.setObservacao(observacaoAcumulada.toString());
        dias = new ArrayList<>();
        semanas.add(semana);
        semana = new SemanaDTO();
        descricaoAcumulada.delete(0, descricaoAcumulada.capacity());
        observacaoAcumulada.delete(0, observacaoAcumulada.capacity());
      }
    }

    relatorio.setSemanas(semanas);

    List<RelatorioDTO> relatorios = new ArrayList<>();
    relatorios.add(relatorio);

    return relatorios;
  }