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')); } }