Modificación del userController para el cambnio de rol si es alumno o docente

This commit is contained in:
2026-05-05 18:33:36 -06:00
parent 59b7ff87f3
commit 91d0813a9c
21 changed files with 1267 additions and 165 deletions
+68
View File
@@ -2,11 +2,14 @@
namespace App\Http\Controllers;
use App\Models\Alumno;
use App\Models\AreaCode;
use App\Models\Docente;
use App\Models\Plantel;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
@@ -58,6 +61,8 @@ class UserController extends Controller
$user->plantelUsuarios()->sync($request->plantels);
$this->syncAlumnoDocente($user, $request->roles ?? []);
$token = Password::createToken($user);
$user->notify(new ResetPassword($token));
@@ -82,12 +87,14 @@ class UserController extends Controller
$user->update($request->except(['plantels']));
$user->roles()->sync($request->roles);
$user->plantelUsuarios()->sync($request->plantels);
$this->syncAlumnoDocente($user, $request->roles ?? []);
return redirect()->route('user.edit',compact('user'))->with('info','Se modifico el usuario correctamente');
}
public function destroy(User $user)
{
$this->detachAlumnoDocente($user);
$user->plantelUsuarios()->detach();
$user->roles()->detach();
$user->delete();
@@ -102,4 +109,65 @@ class UserController extends Controller
public function profile(){
return view('profile.show');
}
private function syncAlumnoDocente(User $user, array $roleIds): void
{
$roleNames = Role::whereIn('id', $roleIds)->pluck('name')->toArray();
// ── Alumno ──────────────────────────────────────────────────
if (in_array('Alumno', $roleNames)) {
$alumno = Alumno::whereHas('alumnos', fn($q) => $q->where('id', $user->id))->first();
if (!$alumno) {
$alumno = Alumno::create([
'nivel' => 0,
'plan_id' => 0,
'ciclo' => 0,
'turno' => 0,
'medio' => 0,
'usuario_registro' => Auth::id(),
]);
}
$alumno->alumnos()->syncWithoutDetaching([$user->id]);
} else {
$this->detachFromAlumno($user);
}
// ── Docente ─────────────────────────────────────────────────
if (in_array('Docente', $roleNames)) {
$docente = Docente::whereHas('docentes', fn($q) => $q->where('id', $user->id))->first();
if (!$docente) {
$docente = Docente::create([
'usuario_registro' => Auth::id(),
'status' => 1,
]);
}
$docente->docentes()->syncWithoutDetaching([$user->id]);
} else {
$this->detachFromDocente($user);
}
}
private function detachAlumnoDocente(User $user): void
{
$this->detachFromAlumno($user);
$this->detachFromDocente($user);
}
private function detachFromAlumno(User $user): void
{
Alumno::whereHas('alumnos', fn($q) => $q->where('id', $user->id))
->get()
->each(fn($a) => $a->alumnos()->detach($user->id));
}
private function detachFromDocente(User $user): void
{
Docente::whereHas('docentes', fn($q) => $q->where('id', $user->id))
->get()
->each(fn($d) => $d->docentes()->detach($user->id));
}
}