fix deleting

This commit is contained in:
mahdi purHosseini
2024-03-07 13:16:52 +03:30
parent aed6b73c71
commit 3e3735098c
4 changed files with 173 additions and 35 deletions
+100 -27
View File
@@ -2,23 +2,26 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\InputValue;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\MedicalCenter; use App\MedicalCenter;
use App\User; use App\User;
use App\City; use App\City;
use App\Http\Requests\StoreMedicalCenterRequest; use App\Http\Requests\StoreMedicalCenterRequest;
use Illuminate\Support\Facades\DB;
use Packages\Messaging\src\Facades\MessageResponse;
class MedicalCenterController extends Controller class MedicalCenterController extends Controller
{ {
public function index(Request $request) public function index( Request $request )
{ {
if (!auth('api')->user()->can('list', MedicalCenter::class)) { if ( ! auth( 'api' )->user()->can( 'list' , MedicalCenter::class ) ) {
return \MessageResponse::error(trans('messages.access_denied')); return MessageResponse::error( trans( 'messages.access_denied' ) );
} }
$MedicalCenters = MedicalCenter::when($request->has('name') && $request->name, function($query) use($request){ $MedicalCenters = MedicalCenter::when( $request->has( 'name' ) && $request->name , function ( $query ) use ( $request ) {
$query->where('name', 'LIKE', '%'.$request->name.'%'); $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' );
})->withCount('users')->paginate(10); } )->withCount( 'users' )->paginate( 10 );
return \MessageResponse::data($MedicalCenters); return MessageResponse::data( $MedicalCenters );
} }
public function create() public function create()
@@ -26,46 +29,116 @@ class MedicalCenterController extends Controller
// //
} }
public function store(StoreMedicalCenterRequest $request) public function store( StoreMedicalCenterRequest $request )
{ {
MedicalCenter::create($request->all()); MedicalCenter::create( $request->all() );
return \MessageResponse::success(trans('messages.success')); return MessageResponse::success( trans( 'messages.success' ) );
} }
public function show($id) public function show( $id )
{ {
// $MedicalCenter = MedicalCenter::with('users')->findOrFail($id); // $MedicalCenter = MedicalCenter::with('users')->findOrFail($id);
// return response()->json(['MedicalCenter' => $MedicalCenter]); // return response()->json(['MedicalCenter' => $MedicalCenter]);
} }
public function edit(MedicalCenter $MedicalCenter) public function edit( MedicalCenter $MedicalCenter )
{ {
$MedicalCenter->load('users'); $MedicalCenter->load( 'users' );
return \MessageResponse::data($MedicalCenter); return MessageResponse::data( $MedicalCenter );
} }
public function update(StoreMedicalCenterRequest $request, MedicalCenter $MedicalCenter) public function update( StoreMedicalCenterRequest $request , MedicalCenter $MedicalCenter )
{ {
$MedicalCenter->update($request->all()); $MedicalCenter->update( $request->all() );
return \MessageResponse::success(trans('messages.success')); return MessageResponse::success( trans( 'messages.success' ) );
} }
public function destroy(MedicalCenter $MedicalCenter) public function destroy( MedicalCenter $MedicalCenter )
{ {
if (!auth('api')->user()->can('delete', $MedicalCenter)) { if ( ! auth( 'api' )->user()->can( 'delete' , $MedicalCenter ) ) {
return \MessageResponse::error(trans('messages.access_denied')); return MessageResponse::error( trans( 'messages.access_denied' ) );
}
try {
DB::beginTransaction();
foreach ( $MedicalCenter->users as $user ) {
// 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();
}
// delete user
$user->delete();
} }
$MedicalCenter->delete(); $MedicalCenter->delete();
return \MessageResponse::success(trans('messages.success'));
DB::commit();
return MessageResponse::success( trans( 'messages.success' ) );
} catch ( \Exception $exception ) {
DB::rollBack();
return MessageResponse::error( $exception->getMessage() );
}
} }
public function listMedicalCenters(){ public function listMedicalCenters()
$MedicalCenters = MedicalCenter::select('id','name')->get(); {
return \MessageResponse::data($MedicalCenters); $MedicalCenters = MedicalCenter::select( 'id' , 'name' )->get();
return MessageResponse::data( $MedicalCenters );
} }
public function getCities(){ public function getCities()
$Cities = City::whereNull('parent_id')->get(); {
return \MessageResponse::data($Cities); $Cities = City::whereNull( 'parent_id' )->get();
return MessageResponse::data( $Cities );
} }
} }
+66 -1
View File
@@ -3,6 +3,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\UpdateInfoUserRequest; use App\Http\Requests\UpdateInfoUserRequest;
use App\InputValue;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Requests\StoreUserRequest; use App\Http\Requests\StoreUserRequest;
use App\MedicalCenter; use App\MedicalCenter;
@@ -90,8 +91,72 @@ class UserController extends Controller
if ( auth( 'api' )->user()->cant( 'delete' , $User ) ) { if ( auth( 'api' )->user()->cant( 'delete' , $User ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) ); 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();
}
// delete user
$User->delete(); $User->delete();
return MessageResponse::success( trans( 'messages.success' ) );
DB::commit();
return MessageResponse::success(trans('messages.success'));
}catch (\Exception $exception){
DB::rollBack();
return MessageResponse::error($exception->getMessage());
}
} }
public function getByMedicalCenter( MedicalCenter $MedicalCenter ) public function getByMedicalCenter( MedicalCenter $MedicalCenter )
+3 -1
View File
@@ -12,9 +12,10 @@ class MedicalCenterPolicy
if($User->hasRole('Admin')) if($User->hasRole('Admin'))
return true; return true;
} }
public function delete(User $User, MedicalCenter $MedicalCenter) public function delete(User $User, MedicalCenter $MedicalCenter)
{ {
if($User->hasRole('Admin') && $MedicalCenter->users->count() == 0) if($User->hasRole('Admin'))
return true; return true;
} }
@@ -29,6 +30,7 @@ class MedicalCenterPolicy
if($User->hasRole('Admin')) if($User->hasRole('Admin'))
return true; return true;
} }
public function getByMedicalCenter(User $User, MedicalCenter $MedicalCenter) public function getByMedicalCenter(User $User, MedicalCenter $MedicalCenter)
{ {
if($User->hasRole('Admin') || $MedicalCenter->id == $User->medical_center_id) { if($User->hasRole('Admin') || $MedicalCenter->id == $User->medical_center_id) {
+1 -3
View File
@@ -14,9 +14,7 @@ class UserPolicy
public function delete(User $User, User $Operator) public function delete(User $User, User $Operator)
{ {
if($User->hasRole('Admin') && $Operator->test_results->count() == 0 && $Operator->test_types->count() == 0 if($User->hasRole('Admin'))
&& $Operator->items->count() == 0 && $Operator->packages->count() == 0 && $Operator->labels->count() == 0
&& $Operator->cycles->count() == 0)
return true; return true;
} }