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
+68 -3
View File
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Http\Requests\UpdateInfoUserRequest;
use App\InputValue;
use Illuminate\Http\Request;
use App\Http\Requests\StoreUserRequest;
use App\MedicalCenter;
@@ -17,7 +18,7 @@ class UserController extends Controller
{
$user = auth( 'api' )->user();
if ( $user->hasRole( 'User' ) or $user->hasRole( 'Supervisor' ) ) {
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;
@@ -90,8 +91,72 @@ class UserController extends Controller
if ( auth( 'api' )->user()->cant( 'delete' , $User ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) );
}
$User->delete();
return MessageResponse::success( trans( 'messages.success' ) );
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();
DB::commit();
return MessageResponse::success(trans('messages.success'));
}catch (\Exception $exception){
DB::rollBack();
return MessageResponse::error($exception->getMessage());
}
}
public function getByMedicalCenter( MedicalCenter $MedicalCenter )