From fd59106db81ee20a9e891f68dff4b36043c97d91 Mon Sep 17 00:00:00 2001 From: mahdi purHosseini Date: Mon, 2 Sep 2024 12:28:51 +0330 Subject: [PATCH] fix label and cycle --- app/Http/Controllers/CycleController.php | 56 ++---- app/Http/Controllers/LabelController.php | 188 +++++++++----------- app/Http/Resources/CycleResource.php | 33 ++++ app/Http/Resources/LabelResource.php | 36 ++++ app/Interfaces/CycleRepositoryInterface.php | 12 ++ app/Interfaces/LabelRepositoryInterface.php | 12 ++ app/Providers/AppServiceProvider.php | 12 ++ app/Repositories/CycleRepository.php | 121 +++++++++++++ app/Repositories/LabelRepository.php | 118 ++++++++++++ 9 files changed, 444 insertions(+), 144 deletions(-) create mode 100644 app/Http/Resources/CycleResource.php create mode 100644 app/Http/Resources/LabelResource.php create mode 100644 app/Interfaces/CycleRepositoryInterface.php create mode 100644 app/Interfaces/LabelRepositoryInterface.php create mode 100644 app/Repositories/CycleRepository.php create mode 100644 app/Repositories/LabelRepository.php diff --git a/app/Http/Controllers/CycleController.php b/app/Http/Controllers/CycleController.php index 0863ece8..54491200 100644 --- a/app/Http/Controllers/CycleController.php +++ b/app/Http/Controllers/CycleController.php @@ -2,54 +2,29 @@ namespace App\Http\Controllers; +use App\Http\Resources\CycleResource; +use App\Interfaces\CycleRepositoryInterface; use Illuminate\Http\Request; use App\Http\Requests\StoreCycleRequest; use App\Cycle; +use Illuminate\Http\Resources\Json\AnonymousResourceCollection; use Packages\Messaging\src\Facades\MessageResponse; class CycleController extends Controller { - public function index( Request $request ) + public function index( Request $request ): AnonymousResourceCollection { - $user = auth( 'api' )->user(); + $user = auth('api')->user(); - $Cycles = Cycle::when( $user->cant( 'showAll' , Cycle::class ) , function ( $query ) use ( $user ) { - if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { - $query->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } ); - } - } ) - ->when( $request->has( 'cycle_id' ) && $request->cycle_id != '' , function ( $query ) use ( $request ) { - $query->where( 'id' , $request->cycle_id ); - } ) - ->when( $request->has( 'sterilizer_id' ) && $request->sterilizer_id != '' , function ( $query ) use ( $request ) { - $query->where( 'sterilizer_id' , $request->sterilizer_id ); - } ) - ->when( $request->has( 'date' ) && $request->date != '' , function ( $query ) use ( $request ) { - $query->where( 'date' , $request->date ); - } ) - ->when( $request->has( 'cycle_number' ) && $request->cycle_number != '' , function ( $query ) use ( $request ) { - $query->where( 'cycle_number' , $request->cycle_number ); - } ) - ->when( $request->has( 'medical_center_id' ) && $request->medical_center_id != '' && $request->medical_center_id != 'undefined' , function ( $query ) use ( $request ) { - $query->whereHas( 'user' , function ( $query ) use ( $request ) { - $query->where( 'medical_center_id' , $request->medical_center_id ); - } ); - } ) - ->with( [ 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'labels' , - 'labels.package' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - ] )->orderByDesc( 'id' )->paginate( 10 ); + if ($user->hasRole('User')) { + $Packages = app(CycleRepositoryInterface::class)->indexForUser($request, $user); + } elseif ($user->hasRole('Supervisor')) { + $Packages = app(CycleRepositoryInterface::class)->indexForSupervisor($request, $user); + } else { + $Packages = app(CycleRepositoryInterface::class)->indexForAdmin($request, $user); + } - return MessageResponse::data( $Cycles ); + return CycleResource::collection($Packages); } public function create() @@ -64,7 +39,9 @@ class CycleController extends Controller $query->select( 'id' , 'name' ); } , 'labels' , - 'labels.package' , 'labels.package.items' ] ); + 'labels.package' , + 'labels.package.items' + ] ); return MessageResponse::data( $Cycle ); } @@ -95,7 +72,6 @@ class CycleController extends Controller foreach ( $Labels as $Label => $Count ) { $CycleObj->labels()->attach( array( $Label ) , [ 'count' => $Count ] ); } - // $CycleObj->labels()->attach($request->labels); return MessageResponse::success( trans( 'messages.success' ) ); } diff --git a/app/Http/Controllers/LabelController.php b/app/Http/Controllers/LabelController.php index 61274059..29c8733e 100644 --- a/app/Http/Controllers/LabelController.php +++ b/app/Http/Controllers/LabelController.php @@ -3,152 +3,132 @@ namespace App\Http\Controllers; use App\Http\Requests\StoreLabelRequest; +use App\Http\Resources\LabelResource; +use App\Interfaces\LabelRepositoryInterface; use App\Label; use Illuminate\Http\Request; use Packages\Messaging\src\Facades\MessageResponse; class LabelController extends Controller { - public function index( Request $request ) + public function index(Request $request) { - $user = auth( 'api' )->user(); + $user = auth('api')->user(); - $Labels = Label::when( $user->cant( 'showAll' , Label::class ) , function ( $query ) use ( $user ) { - if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { - $query->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } ); - } - } ) - ->when( $request->has( 'sterilizer_id' ) && $request->sterilizer_id != '' , function ( $query ) use ( $request ) { - $query->where( 'sterilizer_id' , $request->sterilizer_id ); - } ) - ->when( $request->has( 'cycle_number' ) && $request->cycle_number != '' , function ( $query ) use ( $request ) { - $query->where( 'cycle_number' , $request->cycle_number ); - } ) - ->when( $request->has( 'lot_number' ) && $request->lot_number != '' , function ( $query ) use ( $request ) { - $query->where( 'lot_number' , $request->lot_number ); - } ) - ->when( $request->has( 'label_id' ) && $request->label_id != '' , function ( $query ) use ( $request ) { - $query->where( 'id' , $request->label_id ); - } ) - ->when( $request->has( 'medical_center_id' ) && $request->medical_center_id != '' && $request->medical_center_id != 'undefined' , function ( $query ) use ( $request ) { - $query->whereHas( 'user' , function ( $query ) use ( $request ) { - $query->where( 'medical_center_id' , $request->medical_center_id ); - } ); - } ) - ->with( [ 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'package' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - ] )->orderByDesc( 'id' )->paginate( 10 ); + if ($user->hasRole('User')) { + $Packages = app(LabelRepositoryInterface::class)->indexForUser($request, $user); + } elseif ($user->hasRole('Supervisor')) { + $Packages = app(LabelRepositoryInterface::class)->indexForSupervisor($request, $user); + } else { + $Packages = app(LabelRepositoryInterface::class)->indexForAdmin($request, $user); + } - return MessageResponse::data( $Labels ); + return LabelResource::collection($Packages); } public function create() - {} - - public function show( Label $Label ) { - $Label->load( [ 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'package' , 'package.items' ] ); - - return MessageResponse::data( $Label ); } - public function store( StoreLabelRequest $request ) + public function show(Label $Label) + { + $Label->load([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'package', 'package.items' + ]); + + return MessageResponse::data($Label); + } + + public function store(StoreLabelRequest $request) { $LabelData = [ - 'sterile_date' => $request->sterile_date , - 'expire_date' => $request->expire_date , - 'sterilizer_id' => $request->sterilizer_id , - 'cycle_number' => $request->cycle_number , - 'lot_number' => $request->lot_number , - 'user_id' => auth( 'api' )->user()->id , + 'sterile_date' => $request->sterile_date, + 'expire_date' => $request->expire_date, + 'sterilizer_id' => $request->sterilizer_id, + 'cycle_number' => $request->cycle_number, + 'lot_number' => $request->lot_number, + 'user_id' => auth('api')->user()->id, 'package_id' => $request->package_id ]; - $Label = Label::create( $LabelData ); - $Label->load( [ - 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'package' , + $Label = Label::create($LabelData); + $Label->load([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'package', 'package.items' - ] ); - return MessageResponse::success( trans( 'messages.success' ) , null , $Label ); + ]); + return MessageResponse::success(trans('messages.success'), null, $Label); } - public function edit( Label $Label ) + public function edit(Label $Label) { - $Label->load( 'package' ); - return MessageResponse::data( $Label ); + $Label->load('package'); + return MessageResponse::data($Label); } - public function update( StoreLabelRequest $request , Label $Label ) + public function update(StoreLabelRequest $request, Label $Label) { - $Label->update( $request->all() ); - $Label->load( [ - 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'package' , + $Label->update($request->all()); + $Label->load([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'package', 'package.items' - ] ); - return MessageResponse::success( trans( 'messages.success' ) , null , $Label ); + ]); + return MessageResponse::success(trans('messages.success'), null, $Label); } - public function destroy( Label $Label ) + public function destroy(Label $Label) { - if ( auth( 'api' )->user()->cant( 'delete' , $Label ) ) { - return MessageResponse::error( trans( 'messages.access_denied' ) ); + if (auth('api')->user()->cant('delete', $Label)) { + return MessageResponse::error(trans('messages.access_denied')); } - if ( count( $Label->cycles ) ) { + if (count($Label->cycles)) { $Label->cycles()->detach(); } $Label->delete(); - return MessageResponse::success( trans( 'messages.success' ) ); + return MessageResponse::success(trans('messages.success')); } public function getLabels() { - $user = auth( 'api' )->user(); - $Labels = Label::when( $user->cant( 'showAll' , Label::class ) , function ( $query ) use ( $user ) { - if ( $user->hasRole( 'Supervisor|User' ) ) { - $query->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } ); + $user = auth('api')->user(); + $Labels = Label::when($user->cant('showAll', Label::class), function ($query) use ($user) { + if ($user->hasRole('Supervisor|User')) { + $query->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }); } - } )->get(); + })->get(); - return MessageResponse::data( $Labels ); + return MessageResponse::data($Labels); } - public function showLabel( Label $Label ) + public function showLabel(Label $Label) { - $Label->load( [ 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' ); - } , - 'package' , 'package.items' ] ); - return MessageResponse::data( $Label ); + $Label->load([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'package', 'package.items' + ]); + return MessageResponse::data($Label); } } diff --git a/app/Http/Resources/CycleResource.php b/app/Http/Resources/CycleResource.php new file mode 100644 index 00000000..4b128d7a --- /dev/null +++ b/app/Http/Resources/CycleResource.php @@ -0,0 +1,33 @@ + $this->id, + 'unique_id' => $this->unique_id, + 'date' => $this->date, + 'sterilizer_id' => $this->sterilizer_id, + 'cycle_number' => $this->cycle_number, + 'note' => $this->note, + 'verified' => $this->verified, + 'user_id' => $this->user_id, + 'user' => UserResource::make($this->whenLoaded('user')), + 'labels' => LabelResource::collection($this->whenLoaded('labels')), + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Http/Resources/LabelResource.php b/app/Http/Resources/LabelResource.php new file mode 100644 index 00000000..ab22a995 --- /dev/null +++ b/app/Http/Resources/LabelResource.php @@ -0,0 +1,36 @@ + $this->id, + 'name' => $this->name, + 'sterile_date' => $this->sterile_date, + 'expire_date' => $this->expire_date, + 'sterilizer_id' => $this->sterilizer_id, + 'cycle_number' => $this->cycle_number, + 'lot_number' => $this->lot_number, + 'department' => $this->department, + 'note' => $this->note, + 'user_id' => $this->user_id, + 'user' => UserResource::make($this->whenLoaded('user')), + 'package_id' => $this->package_id, + 'package' => PackageResource::make($this->whenLoaded('package')), + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Interfaces/CycleRepositoryInterface.php b/app/Interfaces/CycleRepositoryInterface.php new file mode 100644 index 00000000..22e46cab --- /dev/null +++ b/app/Interfaces/CycleRepositoryInterface.php @@ -0,0 +1,12 @@ +app->bind( + CycleRepositoryInterface::class, + CycleRepository::class + ); + $this->app->bind( + LabelRepositoryInterface::class, + LabelRepository::class + ); } /** diff --git a/app/Repositories/CycleRepository.php b/app/Repositories/CycleRepository.php new file mode 100644 index 00000000..b2dd4788 --- /dev/null +++ b/app/Repositories/CycleRepository.php @@ -0,0 +1,121 @@ +has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) { + $query->where('id', $request->cycle_id); + }) + ->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('date') && $request->date != '', function ($query) use ($request) { + $query->where('date', $request->date); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'labels', + 'labels.package' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }) + ->where("user_id", $user->id) + ->orderByDesc('id') + ->paginate(10); + } + + public function indexForSupervisor($request, $user) + { + return Cycle::when($request->has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) { + $query->where('id', $request->cycle_id); + }) + ->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('date') && $request->date != '', function ($query) use ($request) { + $query->where('date', $request->date); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'labels', + 'labels.package' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }) + ->orderByDesc('id') + ->paginate(10); + } + + public function indexForAdmin($request, $user) + { + return Cycle::when($request->has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) { + $query->where('id', $request->cycle_id); + }) + ->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('date') && $request->date != '', function ($query) use ($request) { + $query->where('date', $request->date); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + 'labels', + 'labels.package' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->orderByDesc('id') + ->paginate(10); + } +} diff --git a/app/Repositories/LabelRepository.php b/app/Repositories/LabelRepository.php new file mode 100644 index 00000000..57cab3a9 --- /dev/null +++ b/app/Repositories/LabelRepository.php @@ -0,0 +1,118 @@ +has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) { + $query->where('lot_number', $request->lot_number); + }) + ->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) { + $query->where('id', $request->label_id); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'package' => function ($query) { + $query->select('id', 'name'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }) + ->where("user_id", $user->id) + ->orderByDesc('id') + ->paginate(10); + } + + public function indexForSupervisor($request, $user) + { + return Label::when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) { + $query->where('lot_number', $request->lot_number); + }) + ->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) { + $query->where('id', $request->label_id); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'package' => function ($query) { + $query->select('id', 'name'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }) + ->orderByDesc('id') + ->paginate(10); + } + + public function indexForAdmin($request, $user) + { + return Label::when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) { + $query->where('sterilizer_id', $request->sterilizer_id); + }) + ->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) { + $query->where('cycle_number', $request->cycle_number); + }) + ->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) { + $query->where('lot_number', $request->lot_number); + }) + ->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) { + $query->where('id', $request->label_id); + }) + ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { + $query->whereHas('user', function ($query) use ($request) { + $query->where('medical_center_id', $request->medical_center_id); + }); + }) + ->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'medical_center_id'); + }, + 'package' => function ($query) { + $query->select('id', 'name'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name'); + }, + ]) + ->orderByDesc('id') + ->paginate(10); + } +}