Olá pessoal.
Alguem da Portabilis pode me esclarecer a seguinte dúvida por favor:
O campo “Professor Regente” só lista professores que estejam alocados e com o campo “Componentes curriculares” de sua função preenchidos. A consulta referente a busca do campo é a seguinte:
Rota do arquivo: ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php
Classe: clsPmieducarServidor
Método: lista_professor
Informações do método:
public function lista_professor($cod_instituicao, $cod_escola, $str_nome_servidor)
{
$this->_campos_lista = 's.cod_servidor, p.nome, func.matricula, s.ref_cod_instituicao';
$this->_schema = 'pmieducar.';
$tabela_compl = '
LEFT JOIN cadastro.pessoa p ON (s.cod_servidor = p.idpes)
LEFT JOIN portal.funcionario func ON (s.cod_servidor = func.ref_cod_pessoa_fj)
LEFT JOIN pmieducar.servidor_funcao as sf ON s.cod_servidor = sf.ref_cod_servidor';
$filtros = "
WHERE s.ativo = '1'
AND s.ref_cod_instituicao = $cod_instituicao
AND (s.cod_servidor IN (
SELECT
a.ref_cod_servidor
FROM
pmieducar.servidor_alocacao a
WHERE
a.ativo = 1
AND
a.ref_ref_cod_instituicao = $cod_instituicao
AND
ref_cod_escola = $cod_escola)
)
AND EXISTS (
SELECT
1
FROM
pmieducar.servidor_funcao sf,
pmieducar.funcao f,
pmieducar.servidor_disciplina sd
WHERE
f.cod_funcao = sf.ref_cod_funcao
AND
f.professor = 1
AND
sf.ref_ref_cod_instituicao = s.ref_cod_instituicao
AND
s.cod_servidor = sf.ref_cod_servidor
AND
s.cod_servidor = sd.ref_cod_servidor
AND
s.ref_cod_instituicao = sd.ref_ref_cod_instituicao)
";
if ($str_nome_servidor != '') {
$str_nome_servidor_escaped = str_replace("'", "''", $str_nome_servidor);
$filtros .= " AND translate(upper(p.nome),'ÅÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇÝÑ','AAAAAAEEEEIIIIOOOOOUUUUCYN') LIKE translate(upper('%{$str_nome_servidor_escaped}%'),'ÅÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇÝÑ','AAAAAAEEEEIIIIOOOOOUUUUCYN')";
}
$sql = "SELECT {$this->_campos_lista} FROM {$this->_schema}servidor s {$tabela_compl} {$filtros} GROUP BY {$this->_campos_lista}" . $this->getOrderby();
$db = new clsBanco();
$countCampos = count(explode(',', $this->_campos_lista));
$resultado = [];
$this->_total = $db->CampoUnico("SELECT COUNT(0) FROM {$this->_schema}servidor s {$tabela_compl} {$filtros}");
$db->Consulta($sql);
if ($countCampos > 1) {
while ($db->ProximoRegistro()) {
$tupla = $db->Tupla();
$tupla['_total'] = $this->_total;
$resultado[] = $tupla;
}
} else {
while ($db->ProximoRegistro()) {
$tupla = $db->Tupla();
$resultado[] = $tupla[$this->_campos_lista];
}
}
if (count($resultado)) {
return $resultado;
}
return false;
}
Consulta:
SELECT
s.cod_servidor,
p.nome,
func.matricula,
s.ref_cod_instituicao
FROM
pmieducar.servidor s
LEFT JOIN
cadastro.pessoa p ON (s.cod_servidor = p.idpes)
LEFT JOIN
portal.funcionario func ON (s.cod_servidor = func.ref_cod_pessoa_fj)
LEFT JOIN
pmieducar.servidor_funcao as sf ON s.cod_servidor = sf.ref_cod_servidor
WHERE
s.ativo = '1'
AND
s.ref_cod_instituicao = $cod_inst
AND (
s.cod_servidor IN (
SELECT
a.ref_cod_servidor
FROM
pmieducar.servidor_alocacao a
WHERE
a.ativo = 1
AND
a.ref_ref_cod_instituicao = $cod_inst
AND
ref_cod_escola = $cod_escola
)
)
AND EXISTS (
SELECT
1
FROM
pmieducar.servidor_funcao sf,
pmieducar.funcao f,
pmieducar.servidor_disciplina sd
WHERE
f.cod_funcao = sf.ref_cod_funcao
AND
f.professor = $cod_prof
AND
sf.ref_ref_cod_instituicao = s.ref_cod_instituicao
AND
s.cod_servidor = sf.ref_cod_servidor
AND
s.cod_servidor = sd.ref_cod_servidor
AND
s.ref_cod_instituicao = sd.ref_ref_cod_instituicao
)
GROUP BY
s.cod_servidor, p.nome, func.matricula, s.ref_cod_instituicao
ORDER BY
nome ASC
Gostaria de saber o motivo do campo fazer essa consulta e se tem algum impacto negativo remover essa validação. Desde já agradeço!