/** * Método usado para adicionar a coluna que informa o autor do registro * * @param string $indice A coluna referente ao apontador da tabela * * @return Select Um objeto Select contendo a coluna e o alias * para o retorno do usuário */ protected function usrAutor() { $t = $this->tg->getTabela(); $select = new Select(' '); $sqlProf = new SqlProfessor(); $sqlCoord = new SqlCoordenador(); return $select->columns(array('afa_conceito_aluno_autor' => "(case when " . "{$t}.fk_usuario_coordenador=0 then (" . $sqlProf->select()->columnsReset()->columns("usuario||','||tipo_usuario||','||" . "funcao_usuario||','||usuario_professor")->where("pk_usuario_professor=public.aula.fk_usuario_professor " . "and public.tipo_usuario.pk_tipo_usuario=" . Perfil::PROFESSOR)->limit(1) . ") else (" . $sqlCoord->select()->columnsReset()->columns("usuario||','||tipo_usuario||','||" . "funcao_usuario||','||usuario_coordenador||','||coordenacao")->where("pk_usuario_coordenador=afa.afa_conceito_aluno.fk_usuario_coordenador " . "and public.tipo_usuario.pk_tipo_usuario=" . Perfil::COORDENADOR)->limit(1) . ") end)")); }
/** * Método que lista os professores de acordo com os filtros e * usuários logado * * @param Filtros $filtros Objeto do sistema de filtros * @param Usuario $usrFiltro Caso seja informado, usao o usuário como controle de acesso * * @return ResultSetHydrator Um objeto contendo os dados da resposta */ public function listar(Filtros $filtros, Usuario $usrFiltro = null) { $sqlProfessor = new SqlProfessor(); if ($usrFiltro instanceof Usuario) { $usuario = $usrFiltro; } else { $usuario = $this->usuarioLogado; } switch ($usuario->getPerfil()->getId()) { case Perfil::ADMIN: case Perfil::GESTOR: return $sqlProfessor->listarTodos($filtros); case Perfil::COORDENADOR: return $sqlProfessor->deCoordenador($usuario, $filtros); //Este trecho foi adicionado por causa de um problema de //disparidade entre coordenadores // return $sqlProfessor->listarTodos($filtros); //Este trecho foi adicionado por causa de um problema de //disparidade entre coordenadores // return $sqlProfessor->listarTodos($filtros); default: throw new UsuarioException("Você não tem acesso a estes dados"); } }
/** * Método que gera uma consulta genérica para so geral da classe. * * @return Select Uma consulta genérica */ public function select() { //Objetos responsáveis pelas consultas auxiliares $select = new Select(); //Definindo as subconsultas $ia = "(SELECT indicadorgeral_cat FROM fap.pes_process_indicadoresgerais_cat " . "WHERE fk_usuario_professor=pk_usuario_professor " . "order by (fk_pesquisa_cat) desc LIMIT 1)"; $ic = "(SELECT indicador_geral_professor FROM fap.par_respostas_indicadores_gerais " . "WHERE fk_usuario_professor=pk_usuario_professor " . "order by (fk_par_pesquisa) desc LIMIT 1)"; $ir = "(SELECT score FROM fap.fap_registro " . "WHERE fk_usuario_professor=pk_usuario_professor " . "and extract(year from data_evento)={$this->anoLetivo} " . "order by (fap.fap_registro.pk_fap_registro) desc LIMIT 1)"; $lastIa = "(SELECT max(fk_pesquisa_cat) FROM fap.pes_process_indicadoresgerais_cat " . "WHERE fap.pes_process_indicadoresgerais_cat.fk_usuario_professor=pk_usuario_professor )"; $materiaId = "(SELECT max(fk_materia_mae) FROM public.materia " . "INNER JOIN public.materia_vin on pk_materia=fk_materia " . "INNER JOIN public.grade on fk_materia_vin=pk_materia_vin " . "WHERE public.grade.fk_usuario_professor=pk_usuario_professor )"; $fapT = "SELECT count(pk_fap_registro) FROM fap.fap_registro " . "INNER JOIN fap.fap_subtipo on pk_fap_subtipo=fk_fap_subtipo " . "WHERE pk_usuario_professor=fk_usuario_professor " . "and fk_fap_tipo="; $fapS = "SELECT count(pk_fap_registro) FROM fap.fap_registro " . "WHERE pk_usuario_professor=fk_usuario_professor " . "and extract(year from data_evento)={$this->anoLetivo} " . "and fk_fap_subtipo="; $afa = "SELECT count(pk_afa_conceito_aluno) FROM afa.afa_conceito_aluno " . "INNER JOIN afa.afa_subtipo_anotacao on pk_afa_subtipo_anotacao=fk_afa_subtipo_anotacao " . "INNER JOIN public.aula on pk_aula=fk_aula " . "WHERE pk_usuario_professor=fk_usuario_professor " . "and extract(year from data_evento)={$this->anoLetivo} " . "and fk_afa_tipo_anotacao="; $aulaTmp = $select->reset()->from("public.aula")->columns("pk_aula"); $where = "pk_usuario_professor=fk_usuario_professor"; $aulaTmp->where($where); $aula = new Select(array("aula" => $aulaTmp->distinct("pk_aula"))); $aula->columns("count(pk_aula)"); //Objeto responsável pela consulta principal $selectProf = parent::select(); return $selectProf->distinct("pk_usuario")->columns(array("last_ia" => $lastIa, "materia_id" => $materiaId, "ia" => $ia, "ic" => $ic, "ir" => $ir, "aulas" => $aula, "afa_p" => "({$afa}" . TipoAfa::TIPO_POSITIVO . ")", "afa_n" => "({$afa}" . TipoAfa::TIPO_NEGATIVO . ")", "fap_aten" => "({$fapT}" . TipoFap::TIPO_ATENDIMENTO . ")", "fap_fj" => "({$fapS}" . SubtipoFap::SUB_TIPO_FALTA_JUSTIFICADA . ")", "fap_fnj" => "({$fapS}" . SubtipoFap::SUB_TIPO_FALTA_N_JUSTIFICADA . ")", "fap_fl" => "({$fapS}" . SubtipoFap::SUB_TIPO_LICENCA . ")", "fap_a" => "({$fapT}" . TipoFap::TIPO_ATRASO . ")")); }
/** * Método que retorna o professor infromado. Se o usuário logado * for professor, * retorna uma instância contendo os dados do usuário logado. * * @param int $id O código do professor pedido * @param Professor $especializacao Caso seja informada, usa a * classe como modelo de retorno * * @return Professor Um objeto contendo os dados do professor * * @throws UsuarioException */ public function getProgfessor($id, Professor $especializacao = null) { //Definindo o modelo de retorno $sqlUsuario = new SqlProfessor(); $professor = new Professor(); $profReturn = null; if (!is_null($especializacao)) { $professor = $especializacao; } $professor->setId($id); //Fazendo as consultas de acordo com usuário logado if ($this->perfilLogado == Perfil::ADMIN || $this->perfilLogado == Perfil::GESTOR) { //Fazendo a consulta para néveis de acesso mais alto $profReturn = $sqlUsuario->get($id, $professor); } elseif ($this->perfilLogado == Perfil::PROFESSOR) { //Fazendo a consulta para o proprio usuário logado $profReturn = $this->usuarioLogado(); } elseif ($this->perfilLogado == Perfil::COORDENADOR) { //Buscado levando em concideração o coordenador logado $coordenador = new Coordenador($this->idLogado); $profReturn = $sqlUsuario->getDeCoordenador($coordenador, $professor); } else { //O tipo logado não pode visualizar professores throw new UsuarioException('Você não tem acesso aos ' . 'dados deste usuário'); } return $profReturn; }