user(); if ( $user->hasRole( 'User' ) or $user->hasRole( 'Supervisor' ) ) { $medical_center_id = $user->medical_center_id; } elseif ( $request->has( 'medical_center_id' ) && $request->medical_center_id ) { $medical_center_id = $request->medical_center_id; } else { $medical_center_id = null; } $Users = User::when($request->has('name') && $request->name, function ($query) use ($request) { $query->where('name', 'LIKE', '%' . $request->name . '%'); }) ->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request) { $from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00'); $upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59'); return $query->whereBetween('created_at', [$from, $upTo]); }) ->when($request->has('cell_number') && $request->cell_number, function ($query) use ($request) { $query->where('cell_number', 'LIKE', '%' . $request->cell_number . '%'); }) ->when($request->has('role') && $request->role, function ($query) use ($request) { $query->role($request->role); }) ->when($medical_center_id, function ($query) use ($medical_center_id) { $query->where('medical_center_id', $medical_center_id); }) ->whereDoesntHave('roles', function ($roleQuery) { $roleQuery->where('name', 'Admin'); }) ->with(['medical_center', 'roles'])->paginate(10); return MessageResponse::data($Users); } public function store( StoreUserRequest $request ) { if ( auth( 'api' )->user()->cant( 'store' , User::class ) ) { return MessageResponse::error( trans( 'messages.failed' ) ); } $UserData = [ 'name' => $request->name , 'cell_number' => $request->cell_number , 'medical_center_id' => $request->medical_center_id , 'status' => 'Suspended' , 'verified' => "Verified" , 'password' => bcrypt( $request->password ) , ]; User::create( $UserData ); return MessageResponse::success( trans( 'messages.success' ) ); } public function edit( User $User ) { return MessageResponse::data( $User ); } public function update( StoreUserRequest $request , User $User ) { if ( auth( 'api' )->user()->cant( 'update' , $User ) ) { return MessageResponse::error( trans( 'messages.failed' ) ); } $UserData = [ 'name' => $request->name , 'cell_number' => $request->cell_number , 'medical_center_id' => $request->medical_center_id , 'verified' => "Verified" , 'password' => bcrypt( $request->password ) , ]; $User->update( $UserData ); return MessageResponse::success( trans( 'messages.success' ) ); } public function destroy( User $User ) { if ( auth( 'api' )->user()->cant( 'delete' , $User ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } try { DB::beginTransaction(); // delete test_results foreach ( $User->test_results as $test_result ) { if ( count( $test_result->input_values ) ) { InputValue::where( 'test_result_id' , $test_result->id )->get()->each->delete(); } $test_result->delete(); } // delete test_types foreach ( $User->test_types as $test_type ) { $UniqueID = substr( base_convert( sha1( uniqid( mt_rand() ) ) , 16 , 36 ) , 0 , 10 ); $test_type->unique_code = $test_type->unique_code . '--' . $UniqueID; $test_type->save(); $test_type->delete(); } // delete items foreach ( $User->items as $item ) { $item->transfersAll()->delete(); $item->delete(); } // delete packages foreach ( $User->packages as $package ) { if ( count( $package->items ) ) { foreach ( $package->items as $item ) { $item->update( [ "package_id" => null ] ); } } if ( count( $package->labels ) ) { $package->labels()->delete(); } $package->transfersAll()->delete(); $package->delete(); } // delete labels foreach ( $User->labels as $label ) { if ( count( $label->cycles ) ) { $label->cycles()->detach(); } $label->delete(); } // delete cycles foreach ( $User->cycles as $cycle ) { if ( count( $cycle->labels ) ) { $cycle->labels()->detach(); } $cycle->delete(); } foreach ( $User->galleries as $gallery ) { if (count($gallery->uploadables)) { foreach ($gallery->uploadables as $item) { $item->delete(); } } $gallery->delete(); } // delete user $User->delete(); DB::commit(); return MessageResponse::success(trans('messages.success')); }catch (\Exception $exception){ DB::rollBack(); return MessageResponse::error($exception->getMessage()); } } public function getByMedicalCenter( MedicalCenter $MedicalCenter ) { $user = auth( 'api' )->user(); if ( auth( 'api' )->user()->cant( 'getByMedicalCenter' , $MedicalCenter ) ) { return MessageResponse::error( trans( 'messages.failed' ) ); } // if ($user->hasRole('Admin')){ // $MedicalCenter = MedicalCenter::with(['users' => function ($query) { // $query->select('id', 'medical_center_id', 'name', 'cell_number', 'status') // ->whereDoesntHave('roles', function ($roleQuery) { // $roleQuery->where('name', 'Admin'); // }); // }, 'users.roles'])->get(); // }else{ $MedicalCenter = $MedicalCenter->load( [ 'users' => function ( $query ) use ( $user ) { if ( $user->hasRole( 'User' ) ) { return $query->select( [ 'id' , 'medical_center_id' , 'name' , 'cell_number' , 'status' ] )->where( 'id' , $user->id ); } else { return $query->select( [ 'id' , 'medical_center_id' , 'name' , 'cell_number' , 'status' ] ) ->whereDoesntHave('roles', function ($roleQuery) { $roleQuery->where('name', 'Admin'); }); } } , 'users.roles' ] ); // } return MessageResponse::data( $MedicalCenter ); } public function changeStatus( User $User ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , User::class ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } if ( $User->status == 'Active' ) { $User->status = 'Suspended'; $tokens = DB::table( 'oauth_access_tokens' )->where( 'user_id' , $User->id ); foreach ( $tokens->get() as $token ) { DB::table( 'oauth_refresh_tokens' )->where( 'access_token_id' , $token->id )->delete(); } $tokens->delete(); } else { $User->status = 'Active'; } $User->save(); return MessageResponse::data( $User ); } public function changeRole( User $User , Request $request ) { if ( auth( 'api' )->user()->cant( 'changeRole' , User::class ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } $User->syncRoles( $request->roles ); return MessageResponse::data( $User ); } public function updateInfo( UpdateInfoUserRequest $request ) { auth( 'api' )->user()->update( $request->validated() ); return MessageResponse::success( trans( 'messages.success' ) ); } public function getInfo() { $user = auth( 'api' )->user(); $user->load( 'medical_center' ); return MessageResponse::data( [ 'user' => $user , 'roles' => auth( 'api' )->user()->getRoleNames() ] ); } public function getMessages() { $User = auth( 'api' )->user(); $SentMessages = Message::with( 'recipient_user' )->where( 'sender_user_id' , $User->id )->get(); $ReceivedMessages = Message::with( 'sender_user' )->where( 'recipient_user_id' , $User->id )->get(); return MessageResponse::data( [ 'ReceivedMessages' => $ReceivedMessages , 'SentMessages' => $SentMessages ] ); } public function searchUser(Request $request) { $User = auth('api')->user(); $query = User::query() ->where('id', '<>', $User->id) ->select('id', 'name') ->where('name', 'LIKE', '%' . $request->name . '%'); // اگر نقش کاربر Supervisor یا User باشه → فقط Userهای همون مرکز درمانی رو بگرد if ($User->hasRole('Supervisor') || $User->hasRole('User')) { $query->where('medical_center_id', $User->medical_center_id) ->role('User'); } $users = $query->get(); return MessageResponse::data($users); } }