99 lines
3.2 KiB
PHP
99 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Aluno;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class AlunosController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$user = Auth::user();
|
|
|
|
// coordenação/secretaria (ou quem tiver)
|
|
if ($user->can('alunos.ver_todos')) {
|
|
$alunos = Aluno::query()
|
|
->with(['turma', 'escola', 'user', 'responsaveis'])
|
|
->orderBy('nome')
|
|
->get();
|
|
|
|
// ✅ mantenha UMA view só (ajuste o nome conforme sua tela real)
|
|
return view('escolas.alunos', compact('alunos'));
|
|
}
|
|
|
|
// aluno/responsável
|
|
if ($user->can('alunos.ver_meus')) {
|
|
$alunos = Aluno::query()
|
|
->with(['turma', 'escola', 'user', 'responsaveis'])
|
|
->where(function ($q) use ($user) {
|
|
$q->where('user_id', $user->id)
|
|
->orWhereHas('responsaveis', function ($r) use ($user) {
|
|
$r->where('users.id', $user->id);
|
|
});
|
|
})
|
|
->orderBy('nome')
|
|
->get();
|
|
|
|
// ✅ a mesma view (evita duplicar telas)
|
|
return view('escolas.alunos', compact('alunos'));
|
|
}
|
|
|
|
abort(403);
|
|
}
|
|
|
|
public function updateOrCreate(Request $request)
|
|
{
|
|
// ✅ Validação mínima (ajuste se quiser campos extras)
|
|
$data = $request->validate([
|
|
'cpf' => ['required', 'string', 'max:20'],
|
|
'nome' => ['required', 'string', 'max:255'],
|
|
'id_turma' => ['required', 'integer', 'exists:turmas,id'],
|
|
'id_escola' => ['required', 'integer', 'exists:escolas,id'],
|
|
'data_nascimento' => ['required', 'date'],
|
|
'data_inscricao' => ['required', 'date'],
|
|
'user_id' => ['nullable', 'integer', 'exists:users,id'],
|
|
|
|
// ✅ múltiplos responsáveis (users ids)
|
|
'responsavel_ids' => ['nullable', 'array'],
|
|
'responsavel_ids.*' => ['integer', 'exists:users,id'],
|
|
]);
|
|
|
|
DB::beginTransaction();
|
|
|
|
try {
|
|
$aluno = Aluno::updateOrCreate(
|
|
['cpf' => $data['cpf']],
|
|
[
|
|
'nome' => $data['nome'],
|
|
'id_turma' => $data['id_turma'],
|
|
'id_escola' => $data['id_escola'],
|
|
'data_nascimento' => $data['data_nascimento'],
|
|
'data_inscricao' => $data['data_inscricao'],
|
|
'cpf' => $data['cpf'],
|
|
'user_id' => $data['user_id'] ?? null,
|
|
]
|
|
);
|
|
|
|
// ✅ Pivot N:N responsáveis (se vier no request)
|
|
// - syncWithoutDetaching: adiciona sem apagar os existentes
|
|
// - sync: substitui os existentes
|
|
if (!empty($data['responsavel_ids'])) {
|
|
$aluno->responsaveis()->sync($data['responsavel_ids']);
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
return redirect()
|
|
->route('alunos')
|
|
->with('success', 'Aluno Criado|Atualizado com sucesso.');
|
|
|
|
} catch (\Throwable $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|