@RoleAdmin
 @RoleAdminMissao
 @RoleAdminMissaoComplexo
 public static void excluir(Long id) {
   Afastamento afastamento = Afastamento.findById(id);
   afastamento.delete();
   listarPorCondutor(afastamento.condutor.id);
 }
 @RoleAdmin
 @RoleAdminMissao
 @RoleAdminMissaoComplexo
 public static void incluir(Long idCondutor) {
   Condutor condutor = Condutor.findById(idCondutor);
   Afastamento afastamento = new Afastamento();
   afastamento.condutor = condutor;
   render(afastamento);
 }
 @RoleAdmin
 @RoleAdminMissao
 @RoleAdminMissaoComplexo
 public static void editar(Long id) {
   Afastamento afastamento = Afastamento.findById(id);
   render(afastamento);
 }
  @RoleAdmin
  @RoleAdminMissao
  @RoleAdminMissaoComplexo
  public static void salvar(@Valid Afastamento afastamento) throws Exception {
    String template;

    if ((afastamento.dataHoraInicio != null)
        && (afastamento.dataHoraFim != null)
        && (!afastamento.descricao.equals(""))) {
      if (!afastamento.ordemDeDatasCorreta()) {
        Validation.addError("dataHoraInicio", "afastamentos.dataHoraInicio.validation");
      }
    }

    template = afastamento.id > 0 ? "Afastamentos/editar.html" : "Afastamentos/incluir.html";

    if (Validation.hasErrors()) {
      List<Condutor> condutores = Condutor.listarTodos(AutorizacaoGI.titular().getOrgaoUsuario());
      renderTemplate(template, afastamento, condutores);
    } else {
      List<Missao> missoes =
          Missao.retornarMissoes(
              "condutor.id",
              afastamento.condutor.id,
              afastamento.condutor.cpOrgaoUsuario.getId(),
              afastamento.dataHoraInicio,
              afastamento.dataHoraFim);
      String listaMissoes = "";
      String delimitador = "";

      for (Missao item : missoes) {
        listaMissoes += delimitador;
        listaMissoes += item.getSequence();
        delimitador = ",";
      }

      if (missoes.size() > 0) {
        Validation.addError("LinkErroCondutor", listaMissoes);
        renderTemplate(template, afastamento);
      } else {
        afastamento.save();
        listarPorCondutor(afastamento.condutor.id);
      }
    }
  }
  public static void listarAgendaPorCondutor(
      @As(
              lang = {"*"},
              value = {"dd/MM/yyyy"})
          Calendar dataPesquisa,
      Long idCondutor)
      throws ParseException {

    String registros = "";

    Calendar dataHoraPesquisa = Calendar.getInstance();
    SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    String strDataPesquisa = null;

    if (dataPesquisa != null) {
      dataHoraPesquisa = dataPesquisa;
    }

    strDataPesquisa =
        String.format("%02d", dataHoraPesquisa.get(Calendar.DAY_OF_MONTH))
            + "/"
            + String.format("%02d", dataHoraPesquisa.get(Calendar.MONTH) + 1)
            + "/"
            + String.format("%04d", dataHoraPesquisa.get(Calendar.YEAR));
    dataHoraPesquisa.setTime(formatar.parse(strDataPesquisa + " 00:00"));

    List<EscalaDeTrabalho> escalas =
        EscalaDeTrabalho.buscarPorCondutores(idCondutor, strDataPesquisa);
    List<EscalaDeTrabalho> escalasFiltradas = filtrarPorOrgao(escalas, EscalaDeTrabalho.class);

    List<Afastamento> afastamentos = Afastamento.buscarPorCondutores(idCondutor, strDataPesquisa);
    List<Afastamento> afastamentosFiltrados = filtrarPorOrgao(afastamentos, Afastamento.class);

    List<Plantao> plantoes = Plantao.buscarPorCondutores(idCondutor, strDataPesquisa);
    List<Plantao> plantoesFiltrados = filtrarPorOrgao(plantoes, Plantao.class);

    List<Missao> missoes = Missao.buscarPorCondutores(idCondutor, strDataPesquisa);
    List<Missao> missoesFiltradas = filtrarPorOrgao(missoes, Missao.class);

    String delim = "";
    // for (EscalaDeTrabalho escala : escalas) {
    for (EscalaDeTrabalho escala : escalasFiltradas) {

      SimpleDateFormat formatar1 = new SimpleDateFormat("dd/MM/yyyy HH:mm");
      String srtDataPesquisa = formatar1.format(dataHoraPesquisa.getTime());

      DiaDaSemana diaDePesquisa = DiaDaSemana.getDiaDaSemana(srtDataPesquisa);

      SimpleDateFormat formatoData1 = new SimpleDateFormat("yyyy,M,d,H,m,s");

      Calendar dataHoraInicioTemp = Calendar.getInstance();
      Calendar dataHoraFimTemp =
          recuperarDataEHora(
              escala.dataVigenciaInicio, HORA_FINAL_DIA, MINUTO_FINAL_DIA, SEGUNDO_FINAL_DIA);

      for (DiaDeTrabalho dia : escala.diasDeTrabalho) {
        if (diaDePesquisa.equals(dia.diaEntrada)) {
          dataHoraInicioTemp =
              recuperarDataEHora(
                  dataHoraPesquisa,
                  dia.horaEntrada.get(Calendar.HOUR_OF_DAY),
                  dia.horaEntrada.get(Calendar.MINUTE),
                  dia.horaEntrada.get(Calendar.SECOND));
          if (diaDePesquisa.equals(dia.diaSaida)) {
            dataHoraFimTemp =
                recuperarDataEHora(
                    dataHoraPesquisa,
                    dia.horaSaida.get(Calendar.HOUR_OF_DAY),
                    dia.horaSaida.get(Calendar.MINUTE),
                    dia.horaSaida.get(Calendar.SECOND));
          } else {
            dataHoraFimTemp =
                recuperarDataEHora(
                    dataHoraPesquisa,
                    HORA_FINAL_EXPEDIENTE,
                    MINUTO_FINAL_EXPEDIENTE,
                    SEGUNDO_FINAL_EXPEDIENTE);
          }

          registros += delim;
          registros +=
              "[ \'"
                  + "Escalas"
                  + "\', \'"
                  + escala.condutor.getNome()
                  + "\', new Date("
                  + formatoData1.format(dataHoraInicioTemp.getTime())
                  + "), new Date(";
          registros += formatoData1.format(dataHoraFimTemp.getTime()) + ") ]";
          delim = ", ";
        }
      }
    }

    String registrosEscala = registros;
    // registros = gerarTimeLine(dataHoraPesquisa,registrosEscala, afastamentos, plantoes, missoes,
    // new ArrayList<ServicoVeiculo>(), "condutor");
    registros =
        gerarTimeLine(
            dataHoraPesquisa,
            registrosEscala,
            afastamentosFiltrados,
            plantoesFiltrados,
            missoesFiltradas,
            new ArrayList<ServicoVeiculo>(),
            "condutor");

    renderArgs.put("dataPesquisa", dataHoraPesquisa);

    render(registros, idCondutor);
  }
 public static void listarPorCondutor(Long idCondutor) {
   Condutor condutor = Condutor.findById(idCondutor);
   List<Afastamento> afastamentos = Afastamento.buscarTodosPorCondutor(condutor);
   MenuMontador.instance().RecuperarMenuCondutores(idCondutor, ItemMenu.AFASTAMENTOS);
   render(afastamentos, condutor);
 }