atualizacao de responsavel

This commit is contained in:
2026-02-22 19:26:28 +00:00
parent 05b7d0a82b
commit e1e1f444ea
3 changed files with 172 additions and 101 deletions

View File

@@ -3,32 +3,42 @@
namespace App\Http\Controllers;
use App\Models\Aluno;
use App\Models\turmas;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class AlunosController extends Controller
{
public function index()
{
$user = Auth()->user();
$user = Auth::user();
// coordenação/secretaria (ou quem tiver)
if ($user->can('alunos.ver_todos')) {
$alunos = Aluno::query()->get();
$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', fn($r) => $r->where('users.id', $user->id));
->orWhereHas('responsaveis', function ($r) use ($user) {
$r->where('users.id', $user->id);
});
})
->orderBy('nome')
->get();
return view('alunos.index', compact('alunos'));
// ✅ a mesma view (evita duplicar telas)
return view('escolas.alunos', compact('alunos'));
}
abort(403);
@@ -36,20 +46,53 @@ class AlunosController extends Controller
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'],
$aluno = Aluno::updateOrCreate(
['cpf' => $request->cpf],
[
'nome' => $request->nome,
'id_turma' => $request->id_turma,
'id_escola' => $request->id_escola,
'data_nascimento' => $request->data_nascimento,
'data_inscricao' => $request->data_inscricao,
'cpf' => $request->cpf,
'user_id' => $request->user_id,
'responsavel_user_id' => $request->responsavel_user_id,
]
);
return redirect()->route('alunos')->with('success', 'Aluno Criado|Atualizado com sucesso.');
// ✅ 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;
}
}
}