diff --git a/ieducar/intranet/educar_aluno_lst.php b/ieducar/intranet/educar_aluno_lst.php index 0d34ae6b98..8ff4d58bec 100644 --- a/ieducar/intranet/educar_aluno_lst.php +++ b/ieducar/intranet/educar_aluno_lst.php @@ -3,6 +3,7 @@ use App\Models\DataSearch\StudentFilter; use App\Models\LegacyGeneralConfiguration; use App\Models\LegacyStudent; +use Illuminate\Pagination\LengthAwarePaginator; return new class extends clsListagem { @@ -125,10 +126,12 @@ public function Gerar() $this->nome_pai = $this->cleanNameSearch(name: $this->nome_pai); $this->nome_mae = $this->cleanNameSearch(name: $this->nome_mae); + $cpf = preg_replace(pattern: '/\D/', replacement: '', subject: $this->cpf_aluno); + $dataFilter = [ 'rg' => preg_replace(pattern: '/\D/', replacement: '', subject: $this->rg_aluno), 'year' => $this->ano, - 'cpf' => preg_replace(pattern: '/\D/', replacement: '', subject: $this->cpf_aluno), + 'cpf' => $cpf, 'inep' => $this->cod_inep, 'grade' => $this->ref_cod_serie, 'school' => $this->ref_cod_escola, @@ -148,31 +151,10 @@ public function Gerar() $this->limite = 20; $this->offset = ($_GET["pagina_{$this->nome}"]) ? $_GET["pagina_{$this->nome}"] * $this->limite - $this->limite : 0; - $studentFilter = new StudentFilter(...$dataFilter); - $students = LegacyStudent::query()->findStudentWithMultipleSearch(studentFilter: $studentFilter); + $students = $this->searchStudents(cpf: $cpf, dataFilter: $dataFilter); foreach ($students as $student) { - $nomeAluno = $student->person->name; - $nomeSocial = $student->individual->nome_social; - - if ($nomeSocial) { - $nomeAluno = $nomeSocial . '
Nome de registro: ' . $nomeAluno; - } - - $nomeResponsavel = mb_strtoupper(string: $student->getGuardianName() ?? '-'); - $cpfResponsavel = ucfirst(string: $student->getGuardianCpf()); - $nomeMae = mb_strtoupper(string: $student->individual->mother->name ?? '-'); - - $linhas = array_filter(array: [ - "cod_aluno\">$student->cod_aluno", - $configuracoes['mostrar_codigo_inep_aluno'] === 1 ? "cod_aluno\">" . ($student->inepNumber ?? '-'). '' : null, - "cod_aluno\">$nomeAluno", - "cod_aluno\">$nomeMae", - "cod_aluno\">$nomeResponsavel", - "cod_aluno\">$cpfResponsavel", - ]); - - $this->addLinhas(linha: $linhas); + $this->addLinhas(linha: $this->studentRow(student: $student, configuracoes: $configuracoes)); } $this->addPaginador2(strUrl: 'educar_aluno_lst.php', intTotalRegistros: $students->total(), mixVariaveisMantidas: $_GET, nome: $this->nome, intResultadosPorPagina: $this->limite); @@ -200,4 +182,43 @@ public function cleanNameSearch($name) { return trim(string: preg_replace(pattern: '/\W/', replacement: ' ', subject: limpa_acentos(str_nome: $name))); } + + private function searchStudents(?string $cpf, array $dataFilter) + { + if ($cpf && !Portabilis_Utils_Validation::validatesCpf(cpf: $cpf)) { + // Um CPF inválido nunca deve corresponder a alunos reais. Sem esse + // corte, o valor era usado como está na busca (where('cpf', $cpf)), + // e um CPF inválido usado como placeholder para "sem CPF cadastrado" + // (ex.: 00000000000) pode estar salvo em vários registros, fazendo + // a busca por um CPF inválido retornar múltiplos alunos. + return new LengthAwarePaginator(items: [], total: 0, perPage: $this->limite, options: ['pageName' => 'pagina_' . $this->nome]); + } + + $studentFilter = new StudentFilter(...$dataFilter); + + return LegacyStudent::query()->findStudentWithMultipleSearch(studentFilter: $studentFilter); + } + + private function studentRow(LegacyStudent $student, $configuracoes): array + { + $nomeAluno = $student->person->name; + $nomeSocial = $student->individual->nome_social; + + if ($nomeSocial) { + $nomeAluno = $nomeSocial . '
Nome de registro: ' . $nomeAluno; + } + + $nomeResponsavel = mb_strtoupper(string: $student->getGuardianName() ?? '-'); + $cpfResponsavel = ucfirst(string: $student->getGuardianCpf()); + $nomeMae = mb_strtoupper(string: $student->individual->mother->name ?? '-'); + + return array_filter(array: [ + "cod_aluno\">$student->cod_aluno", + $configuracoes['mostrar_codigo_inep_aluno'] === 1 ? "cod_aluno\">" . ($student->inepNumber ?? '-'). '' : null, + "cod_aluno\">$nomeAluno", + "cod_aluno\">$nomeMae", + "cod_aluno\">$nomeResponsavel", + "cod_aluno\">$cpfResponsavel", + ]); + } };