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",
+ ]);
+ }
};