Modificación del userController para el cambnio de rol si es alumno o docente
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user