Files
Sio-Back/app/Http/Controllers/Administrador/UsersController.php
SIO Admin de656b70a2 feat: Actualizacion sistema SIO Backend
- Nuevo modulo de historial de cambios (ServicioHistorial)
- Observer para tracking automatico de cambios en servicios
- Correccion de variables auxiliar en ServiciosController
- Actualizacion de configuraciones y migraciones
- Endpoint para consultar historial de cambios

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 23:01:55 +00:00

217 lines
6.7 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Administrador;
use App\Models\Rol;
use Illuminate\Support\Facades\Auth;
use const App\Http\Controllers\PASSWORD;
use App\Http\Requests\Administrador\UserRequest;
use App\Models\RolUser;
use App\Models\Sucursal;
use App\Models\TipoEmpleado;
use App\Models\User;
use Cartalyst\Sentinel\Native\Facades\Sentinel;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Log;
class UsersController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$user = Auth::user();
$deleted = $request->input('deleted');
$orderBy = $request->input('sortBy','users.nombre');
$order = $request->input('order','asc');
$queryBuilder = User::select('users.*', DB::raw("coalesce (roles.name, '') as role"), 'roles.id as role_id', 'tipos_empleados.nombre as tipo_empleado', 'tipos_empleados.id as tipo_empleado_id', 'sucursales.id as sucursal_id', 'sucursales.nombre as sucursal')
->orderBy($orderBy,$order)
->leftJoin('role_users', 'role_users.user_id', '=', 'users.id')
->leftJoin('roles', 'roles.id', '=', 'role_users.role_id')
->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id')
->join('tipos_empleados', 'tipos_empleados.id', '=', 'users.tipo_empleado_id')
->where('users.sucursal_id', $user->sucursal_id);
if($query = $request->get('query',false)){
$queryBuilder->where(function($q) use ($query){
$q->where('users.email','like','%' .$query.'%')
->orWhere('users.nombre','like','%' .$query.'%')
->orWhere('users.apellido_paterno','like','%' .$query.'%')
->orWhere('users.apellido_materno','like','%' .$query.'%')
->orWhere('users.telefono','like','%' .$query.'%');
});
}
if($deleted) {
$queryBuilder->onlyTrashed();
}
if($perPage = $request->input('perPage',false)){
$users = $queryBuilder->paginate($perPage);
}else{
$users = ['data'=>$queryBuilder->get()];
}
return response()->success($users);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(UserRequest $request)
{
$data = $request->all();
DB::beginTransaction();
try {
$tipo = TipoEmpleado::where('id', $data['tipo_empleado_id'])->first();
if($tipo->login){
$data['password'] = bcrypt($data['password']);
}else{
$data['password'] = bcrypt(PASSWORD);
}
$user = User::create($data);
$user_sentinel = Sentinel::findById($user->id);
$role = Sentinel::findRoleById($data['role_id']);
$role->users()->attach($user_sentinel);
DB::commit();
return response()->success($user);
} catch (\Exception $e) {
DB::rollBack();
return response()->unprocessable('Error', ['Error al guardar el usuario.']);
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$user = User::select('users.*', 'roles.name as role', 'roles.id as role_id', 'tipos_empleados.nombre as tipo_empleado', 'tipos_empleados.id as tipo_empleado_id', 'sucursales.id as sucursal_id', 'sucursales.nombre as sucursal')
->leftJoin('role_users', 'role_users.user_id', '=', 'users.id')
->leftJoin('roles', 'roles.id', '=', 'role_users.role_id')
->join('tipos_empleados', 'tipos_empleados.id', '=', 'users.tipo_empleado_id')
->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id')
->where('users.id', $id)
->withTrashed()
->firstOrFail();
return response()->success($user);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(UserRequest $request, $id)
{
$data = $request->all();
DB::beginTransaction();
try {
if(trim($data['password']) != ''){
$data['password'] = bcrypt($data['password']);
}else{
$data = collect($data)->forget('password')->all();
}
$user = User::where('id',$id)
->withTrashed()
->firstOrFail();
$user->update($data);
RolUser::where('user_id', $id)
->update(['role_id' => $data['role_id']]);
DB::commit();
return response()->success($user);
} catch (\Exception $e) {
DB::rollBack();
return response()->unprocessable('Error', ['Error al actualizar el usuario.']);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id, Request $request)
{
$deleted = $request->input('deleted');
if($deleted){
$user = User::where('id',$id)
->onlyTrashed()
->first();
$user->restore();
}else{
$user = User::findOrFail($id);
$user->delete();
}
return response()->success(['result' => 'ok']);
}
public function tiposEmpleados(){
$tipos_empleados = TipoEmpleado::get();
return response()->success($tipos_empleados);
}
public function sucursales(Request $request){
$orderBy = $request->input('sortBy','nombre');
$order = $request->input('order','asc');
$queryBuilder = Sucursal::orderBy($orderBy,$order);
if($query = $request->get('query',false)){
$queryBuilder->where(function($q) use ($query){
$q->where('nombre','like','%' .$query.'%');
});
}
if($perPage = $request->input('perPage',false)){
$data = $queryBuilder->paginate($perPage);
}else{
$data = ['data'=>$queryBuilder->get()];
}
return response()->success($data);
}
public function filtrosUsuarios(){
$sucursales = Sucursal::get();
$tipos_empleados = TipoEmpleado::get();
$roles = Rol::get();
return response()->success(compact('sucursales', 'tipos_empleados', 'roles'));
}
}