/** * Método com a consulta especifica para a página "distribuicao_de_registros". * Devido a um erro no auto load do sistema as constantes do afa só devem ser * cahamadas após a inclusão da classe em método anterior. * @param public_usuario_aluno $aluno Um objeto referente ao aluno dos registros * @param FiltrosSistema $filtrosSistema Objeto referente aos filtros do sistema * @return stdClass|boolean Retorna um objeto contendo os dados da resposta * ou FALSE em caso de erro */ public function distribuicaoDeRegistros(Kernel_Models_Aluno $aluno, FiltrosSistema $filtrosSistema) { $periodo = $this->stringFiltroPeriodo($filtrosSistema); //A média não foi colocada na consulta por não haver um serial na tabela //e por não ser preciso modificar a tabela para esta busca $query = "SELECT " . "(select score " . "from afa.afa_conceito_aluno " . "where fk_usuario_aluno=pk_usuario_aluno " . "order by(pk_afa_conceito_aluno)desc limit 1) " . "as afa_ult_conceito, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_subtipo_anotacao=" . Kernel_Models_Afa::SUB_TIPO_SOEP . $periodo . "and fk_usuario=" . $aluno->getId() . ") " . "as aten_peda, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join afa.afa_subtipo_anotacao on " . "afa.afa_subtipo_anotacao.pk_afa_subtipo_anotacao=" . "fk_afa_subtipo_anotacao " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_tipo_anotacao=" . Kernel_Models_Afa::TIPO_ACAO_PEDAGOGICA_FORMATIVA . $periodo . "and fk_usuario=" . $aluno->getId() . ") " . "as acao_peda, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join afa.afa_subtipo_anotacao on " . "afa.afa_subtipo_anotacao.pk_afa_subtipo_anotacao=" . "fk_afa_subtipo_anotacao " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_tipo_anotacao=" . Kernel_Models_Afa::TIPO_POSITIVO . $periodo . "and public.usuario_aluno.fk_usuario=" . $aluno->getId() . ") " . "as afa_pos, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join afa.afa_subtipo_anotacao on " . "afa.afa_subtipo_anotacao.pk_afa_subtipo_anotacao=" . "fk_afa_subtipo_anotacao " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_tipo_anotacao=" . Kernel_Models_Afa::TIPO_NEGATIVO . "{$periodo} " . "and fk_usuario=" . $aluno->getId() . ") " . "as afa_neg, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_subtipo_anotacao=" . Kernel_Models_Afa::SUB_TIPO_FALTA . "{$periodo} " . "and fk_usuario=" . $aluno->getId() . ") " . "as faltas, " . "(select count(pk_afa_conceito_aluno) " . "from afa.afa_conceito_aluno " . "inner join public.usuario_aluno on " . "fk_usuario_aluno=public.usuario_aluno.pk_usuario_aluno " . "WHERE fk_afa_subtipo_anotacao=" . Kernel_Models_Afa::SUB_TIPO_ATRASO . "{$periodo} " . "and fk_usuario=" . $aluno->getId() . ") " . "as atrasos " . "from public.usuario_aluno " . "WHERE fk_usuario=" . $aluno->getId() . " and status=1 limit 1"; $ret = $this->queryStatement($query); return $ret->fetchObject(); }
/** * Método que lista todos os registros de um aluno especifico do ano letivo atual * @param Kernel_Models_Aluno $aluno Um objeto do tipo aluno que determina o aluno de filtro da consulta * @param int|array|boolean O código do tipo do registro ou array de códigos. Informe FALSE para ignorar * @param int|array|boolean O código do subtipo do registro ou array de códigos. Informe FALSE para ignorar * @param FiltrosSistema $filtrosSistema Variavel para a filtragem dos registros. Informe FALSE para ignorar * @return PDOStatement|boolean Um objeto contendo todos os registros ou FALSE em caso de erro */ public function getAfaDeAluno(Kernel_Models_Aluno $aluno, $tipo = FALSE, $subTipo = FALSE, FiltrosSistema $filtrosSistema = NULL) { $coordenador = new Kernel_Models_Coordenador(); $query = "select afa.afa_conceito_aluno.*, " . "afa.afa_subtipo_anotacao.*, afa.afa_tipo_anotacao.*, " . "public.coordenacao.*, public.aula.fk_usuario_professor, " . "public.usuario_coordenador.tipo, " . "(case when pk_usuario_professor is not null then " . "(select public.usuario.nome from public.usuario " . "inner join public.usuario_professor on " . "public.usuario_professor.fk_usuario=" . "public.usuario.pk_usuario " . "where public.usuario_professor.pk_usuario_professor=" . "public.aula.fk_usuario_professor limit 1) " . "end) as nome_professor, " . "(case when fk_usuario_coordenador is not null then " . "(select public.usuario.nome from public.usuario " . "inner join public.usuario_coordenador on " . "public.usuario_coordenador.fk_usuario=" . "public.usuario.pk_usuario " . "where public.usuario_coordenador.pk_usuario_coordenador=" . "afa.afa_conceito_aluno.fk_usuario_coordenador limit 1) " . "end) as nome_coordenador, " . "(case "; //Adicionando a query todos os tipos de coordenação disponíveis foreach ($coordenador->getCoordTipos() as $cod => $tipoCoord) { $query .= "when tipo={$cod} then '{$tipoCoord}' "; } $query .= "end) as tipo_coordenador, " . "(select public.usuario.nome " . "from public.usuario WHERE " . "public.usuario.pk_usuario=" . "afa.afa_conceito_aluno.fk_usuario_inc limit 1) " . "as usuario_nome_insert, " . "(select public.tipo_usuario.tipo_usuario_nome " . "from public.tipo_usuario " . "inner join public.usuario_tipo_vin on " . "public.usuario_tipo_vin.fk_tipo_usuario=pk_tipo_usuario " . "WHERE " . "public.usuario_tipo_vin.fk_usuario=" . "afa.afa_conceito_aluno.fk_usuario_inc limit 1) " . "as usuario_grupo_insert " . "from afa.afa_conceito_aluno " . "inner join afa.afa_subtipo_anotacao on " . "afa.afa_subtipo_anotacao.pk_afa_subtipo_anotacao=" . "fk_afa_subtipo_anotacao " . "inner join afa.afa_tipo_anotacao on " . "afa.afa_tipo_anotacao.pk_afa_tipo_anotacao=" . "fk_afa_tipo_anotacao " . "left join public.coordenacao on " . "public.coordenacao.pk_coordenacao=" . "afa.afa_conceito_aluno.fk_coordenacao " . "inner join public.usuario_aluno on " . "public.usuario_aluno.pk_usuario_aluno=" . "afa.afa_conceito_aluno.fk_usuario_aluno " . "left join public.aula on public.aula.pk_aula=fk_aula " . "left join public.usuario_professor on " . "public.usuario_professor.pk_usuario_professor=" . "public.aula.fk_usuario_professor " . "left join public.usuario on " . "public.usuario.pk_usuario=" . "public.usuario_professor.fk_usuario " . "left join public.usuario_coordenador on " . "afa.afa_conceito_aluno.fk_usuario_coordenador=" . "public.usuario_coordenador.pk_usuario_coordenador " . "where " . "public.usuario_aluno.fk_usuario=" . $aluno->getId() . " "; //Filtrando por tipo e subtipo if (is_int($tipo)) { $query .= "and pk_afa_tipo_anotacao={$tipo} "; } elseif (is_array($tipo)) { if (Arrays::checarValores($tipo, FILTER_VALIDATE_INT)) { $query .= "and (pk_afa_tipo_anotacao=" . implode(" or pk_afa_tipo_anotacao=", $tipo) . ") "; } } if (is_int($subTipo)) { $query .= "and pk_afa_subtipo_anotacao={$subTipo} "; } elseif (is_array($subTipo)) { if (Arrays::checarValores($subTipo, FILTER_VALIDATE_INT)) { $query .= "and (pk_afa_subtipo_anotacao=" . implode(" or pk_afa_subtipo_anotacao=", $subTipo) . ") "; } } //Filtros do sistema de filtros if ($filtrosSistema instanceof FiltrosSistema) { //Filtragem por datas $query .= $filtrosSistema->validar(array("de")) ? "and afa.afa_conceito_aluno.data_evento>='" . $filtrosSistema->getDe() . "' " : ""; $query .= $filtrosSistema->validar(array("ate")) ? "and afa.afa_conceito_aluno.data_evento<='" . $filtrosSistema->getAte() . "' " : ""; if (!$filtrosSistema->validar(array("de")) || !$filtrosSistema->validar(array("ate"))) { $query .= "and extract(year from data_evento)=" . Loader::data("config", "site", "ano_letivo") . " "; } } else { $query .= "and extract(year from data_evento)=" . Loader::data("config", "site", "ano_letivo") . " "; } //Ordenando $query .= "order by(data_evento) desc"; return $this->queryStatement($query); }
/** * Método que retorna uma instância da classe Kernel_Models_Aluno de acorod com os dados informados * @param int $pkUsuario O código do aluno. Caso não seja informado, usa o código do usuário logado * @param string $objetoHerdado Caso seja informado, usa esa classe como classe de retorno. * Deve ser uma classe heredira da calsse Kernel_Models_Aluno * @return Kernel_Models_Aluno Um objeto contendo os dados do aluno informado * @throw Exception */ public function getAluno($pkUsuario = 0, $objetoHerdado = false) { $tipoUsuario = $this->usuarioLogado->get_tipoUsuarioAtivo()->get_idTipoUsuario(); //Caso o usuário logado seja do tipo "aluno" if ($tipoUsuario == Kernel_Models_TiposUsuario::TIPO_ALUNO) { $pkUsuario = $this->usuarioLogado->get_idUsuario(); } //Impedindo o acesso sem informar um aluno qualquer if (!(int) $pkUsuario) { throw new Exception("O aluno informado é inválido"); } //caso o usuário logado seja do tipo "responsavel" if ($tipoUsuario == Kernel_Models_TiposUsuario::TIPO_RESPONSAVEL) { $tmp = 0; //Impedindo o acesso a informações de dependentes de outros usuários $pers = $this->usuarioLogado->get_tipoUsuarioAtivo()->get_personalizacoes(); foreach ($pers as $row) { foreach ($row->get_dependentes() as $alunoPer) { if ($pkUsuario == $alunoPer->get_dep_pk_usuario()) { $tmp++; break; } } } if (!$tmp) { throw new Exception("O aluno informado não esta configurado como seu dependente"); } } //Criando instancia de aluno if (is_string($objetoHerdado)) { //Este trecho é executado quando um objeto especifico é informado //Verificando se a classe informada existe if (!class_exists($objetoHerdado)) { throw new Exception("Ocorreu um erro interno. Entre em contato com o administrador do sistema"); } if (!in_array("Kernel_Models_Aluno", array_keys(class_parents($objetoHerdado)))) { throw new Exception("Ocorreu um erro interno. Entre em contato com o administrador do sistema"); } //Verificando se a classe informada é herdeira de Kernel_Models_Aluno $alunoObj = new $objetoHerdado(); } else { $alunoObj = new Kernel_Models_Aluno(); } $aluno = $alunoObj->get((int) $pkUsuario); //Impedindo o acesso sem informar um aluno válido if (!$aluno) { throw new Exception("O aluno informado é inválido"); } return $aluno; }