diff --git a/app/Http/Controllers/CycleController.php b/app/Http/Controllers/CycleController.php index 71a4a64d..0863ece8 100644 --- a/app/Http/Controllers/CycleController.php +++ b/app/Http/Controllers/CycleController.php @@ -14,12 +14,10 @@ class CycleController extends Controller $user = auth( 'api' )->user(); $Cycles = Cycle::when( $user->cant( 'showAll' , Cycle::class ) , function ( $query ) use ( $user ) { - if ( $user->hasRole( 'Supervisor' ) ) { + if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { $query->whereHas( 'user' , function ( $query ) use ( $user ) { $query->where( 'medical_center_id' , $user->medical_center_id ); } ); - } else { - $query->where( 'user_id' , $user->id ); } } ) ->when( $request->has( 'cycle_id' ) && $request->cycle_id != '' , function ( $query ) use ( $request ) { diff --git a/app/Http/Controllers/LabelController.php b/app/Http/Controllers/LabelController.php index f06f11c8..61274059 100644 --- a/app/Http/Controllers/LabelController.php +++ b/app/Http/Controllers/LabelController.php @@ -14,12 +14,10 @@ class LabelController extends Controller $user = auth( 'api' )->user(); $Labels = Label::when( $user->cant( 'showAll' , Label::class ) , function ( $query ) use ( $user ) { - if ( $user->hasRole( 'Supervisor' ) ) { + if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { $query->whereHas( 'user' , function ( $query ) use ( $user ) { $query->where( 'medical_center_id' , $user->medical_center_id ); } ); - } else { - $query->where( 'user_id' , $user->id ); } } ) ->when( $request->has( 'sterilizer_id' ) && $request->sterilizer_id != '' , function ( $query ) use ( $request ) { diff --git a/app/Http/Controllers/PackageController.php b/app/Http/Controllers/PackageController.php index e63dbabb..f37cb0b7 100644 --- a/app/Http/Controllers/PackageController.php +++ b/app/Http/Controllers/PackageController.php @@ -6,193 +6,174 @@ use App\Constants\StatusTypeEnum; use App\Http\Requests\ChangeStatusRequest; use App\Http\Requests\StorePackageRequest; use App\Http\Resources\PackageResource; +use App\Interfaces\PackageRepositoryInterface; use App\Item; use App\Package; use Illuminate\Http\Request; +use Illuminate\Http\Resources\Json\AnonymousResourceCollection; use Packages\Messaging\src\Facades\MessageResponse; class PackageController extends Controller { - public function index( Request $request ) + public function index(Request $request): AnonymousResourceCollection { - $Packages = Package::when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { - $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); - } ) - ->when( $request->has( 'package_id' ) && $request->package_id != '' , function ( $query ) use ( $request ) { - $query->where( 'id' , $request->package_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' , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' , 'address' , 'phone_number' ); - } , - ] ); + $user = auth('api')->user(); - $user = auth( 'api' )->user(); - if ( $user->hasRole( 'User' ) ) { - $Packages = $Packages->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } )->where( "status" , StatusTypeEnum::APPROVED ); - } elseif ( $user->hasRole( 'Supervisor' ) ) { - $Packages = $Packages->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } ); + if ($user->hasRole('User')) { + $Packages = app(PackageRepositoryInterface::class)->indexForUser($request, $user); + } elseif ($user->hasRole('Supervisor')) { + $Packages = app(PackageRepositoryInterface::class)->indexForSupervisor($request, $user); + } else { + $Packages = app(PackageRepositoryInterface::class)->indexForAdmin($request, $user); } - $Packages = $Packages->orderByDesc( 'id' )->paginate( 10 ); - - return PackageResource::collection( $Packages ); + return PackageResource::collection($Packages); } - public function myPackages( Request $request ) + public function myPackages(Request $request) { - $Packages = Package::when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { - $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); - } ) - ->when( $request->has( 'package_id' ) && $request->package_id != '' , function ( $query ) use ( $request ) { - $query->where( 'id' , $request->package_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' , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' , 'address' , 'phone_number' ); - } , - "transfers" => function ( $query ) { - $query->with( [ - 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'cell_number' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' , 'address' , 'phone_number' ); + $Packages = Package::when($request->has('name') && $request->name != '', function ($query) use ($request) { + $query->where('name', 'LIKE', '%'.$request->name.'%'); + }) + ->when($request->has('package_id') && $request->package_id != '', function ($query) use ($request) { + $query->where('id', $request->package_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', + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); + }, + "transfers" => function ($query) { + $query->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'cell_number'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); } - ] ); + ]); } - ] ); + ]); - $user = auth( 'api' )->user(); - if ( $user->hasRole( 'User' ) ) { - $Packages = $Packages->where( "user_id" , $user->id ); - } elseif ( $user->hasRole( 'Supervisor' ) ) { - $Packages = $Packages->whereHas( 'user' , function ( $query ) use ( $user ) { - $query->where( 'medical_center_id' , $user->medical_center_id ); - } ); + $user = auth('api')->user(); + if ($user->hasRole('User')) { + $Packages = $Packages->where("user_id", $user->id); + } elseif ($user->hasRole('Supervisor')) { + $Packages = $Packages->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }); } - $Packages = $Packages->orderByDesc( 'id' )->get(); + $Packages = $Packages->orderByDesc('id')->get(); - return PackageResource::collection( $Packages ); + return PackageResource::collection($Packages); } public function getPackages() { - $Packages = Package::where( "status" , StatusTypeEnum::APPROVED ) - ->orderByDesc( 'id' ) + $Packages = Package::where("status", StatusTypeEnum::APPROVED) + ->orderByDesc('id') ->get(); - return PackageResource::collection( $Packages ); + return PackageResource::collection($Packages); } - public function show( Package $Package ) + public function show(Package $Package) { - $Package->load( [ - 'user' , - 'creator' , - 'items' , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' , 'address' , 'phone_number' ); - } , - "transfers" => function ( $query ) { - $query->with( [ - 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'cell_number' ); - } , - 'user.medical_center' => function ( $query ) { - $query->select( 'id' , 'name' , 'address' , 'phone_number' ); + $Package->load([ + 'user', + 'creator', + 'items', + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); + }, + "transfers" => function ($query) { + $query->with([ + 'user' => function ($query) { + $query->select('id', 'name', 'cell_number'); + }, + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); } - ] ); + ]); } - ] ); - return PackageResource::make( $Package ); + ]); + return PackageResource::make($Package); } - public function store( StorePackageRequest $request ) + public function store(StorePackageRequest $request) { $PackageData = [ - 'name' => $request->name , - 'note' => $request->note , - 'status' => StatusTypeEnum::SUSPENDED , - 'user_id' => auth( 'api' )->user()->id , - 'creator_id' => auth( 'api' )->user()->id + 'name' => $request->name, + 'note' => $request->note, + 'status' => StatusTypeEnum::SUSPENDED, + 'user_id' => auth('api')->user()->id, + 'creator_id' => auth('api')->user()->id ]; - $Package = Package::create( $PackageData ); - foreach ( $request->items as $itemId ) { - $item = Item::where( "id" , $itemId )->first(); - if ( $item ) { - $item->update( [ + $Package = Package::create($PackageData); + foreach ($request->items as $itemId) { + $item = Item::where("id", $itemId)->first(); + if ($item) { + $item->update([ "package_id" => $Package->id - ] ); + ]); } } - return MessageResponse::success( trans( 'messages.success' ) ); + return MessageResponse::success(trans('messages.success')); } - public function edit( Package $Package ) + public function edit(Package $Package) { - $Package->load( 'items' ); - return PackageResource::make( $Package ); + $Package->load('items'); + return PackageResource::make($Package); } - public function update( StorePackageRequest $request , Package $Package ) + public function update(StorePackageRequest $request, Package $Package) { - $Package->update( $request->except( [ 'items' ] ) ); + $Package->update($request->except(['items'])); - foreach ( $request->items as $itemId ) { - $item = Item::where( "id" , $itemId )->first(); - if ( $item ) { - $item->update( [ + foreach ($request->items as $itemId) { + $item = Item::where("id", $itemId)->first(); + if ($item) { + $item->update([ "package_id" => $Package->id - ] ); + ]); } } - return MessageResponse::success( trans( 'messages.success' ) ); + return MessageResponse::success(trans('messages.success')); } - public function destroy( Package $Package ) + public function destroy(Package $Package) { - if ( auth( 'api' )->user()->cant( 'delete' , $Package ) ) { - return MessageResponse::error( trans( 'messages.access_denied' ) ); + if (auth('api')->user()->cant('delete', $Package)) { + return MessageResponse::error(trans('messages.access_denied')); } - if ( count( $Package->items ) ) { - foreach ( $Package->items as $item ) { - $item->update( [ + if (count($Package->items)) { + foreach ($Package->items as $item) { + $item->update([ "package_id" => null - ] ); + ]); } } - if ( count( $Package->labels ) ) { + if (count($Package->labels)) { $Package->labels()->delete(); } $Package->transfersAll()->delete(); $Package->delete(); - return MessageResponse::success( trans( 'messages.success' ) ); + return MessageResponse::success(trans('messages.success')); } - public function changeStatus( ChangeStatusRequest $request , Package $Package ) + public function changeStatus(ChangeStatusRequest $request, Package $Package) { - if ( auth( 'api' )->user()->cant( 'changeStatus' , Package::class ) ) { - return MessageResponse::error( trans( 'messages.access_denied' ) ); + if (auth('api')->user()->cant('changeStatus', Package::class)) { + return MessageResponse::error(trans('messages.access_denied')); } - $Package->update( [ "status" => $request->status ] ); - return MessageResponse::success( trans( 'messages.success' ) , null , $Package ); + $Package->update(["status" => $request->status]); + return MessageResponse::success(trans('messages.success'), null, $Package); } } diff --git a/app/Interfaces/PackageRepositoryInterface.php b/app/Interfaces/PackageRepositoryInterface.php new file mode 100644 index 00000000..275f27e8 --- /dev/null +++ b/app/Interfaces/PackageRepositoryInterface.php @@ -0,0 +1,12 @@ +belongsTo( 'App\User' ); + return $this->belongsTo('App\User'); } public function creator() { - return $this->belongsTo( 'App\User' , "creator_id" ); + return $this->belongsTo('App\User', "creator_id"); } public function items() { - return $this->hasMany( 'App\Item' ); + return $this->hasMany('App\Item'); } public function labels() { - return $this->hasMany( 'App\Label' ); + return $this->hasMany('App\Label'); } public function transfersAll() { - return $this->morphMany( 'App\Transfer' , "transferable" )->orderBy("id" , "desc"); + return $this->morphMany('App\Transfer', "transferable")->orderBy("id", "desc"); } public function transfers() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED )->orderBy("id" , "desc"); + return $this->morphMany('App\Transfer', "transferable")->where("status", StatusTypeEnum::APPROVED)->orderBy("id", "desc"); } public function latestTransfer() { - return $this->morphOne( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED )->orderBy("id" , "desc")->latest(); + return $this->morphOne('App\Transfer', "transferable")->where("status", StatusTypeEnum::APPROVED)->orderBy("id", "desc")->latest(); } public function transferActive() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED )->whereNull( "to_date" )->orderBy("id" , "desc"); + return $this->morphMany('App\Transfer', "transferable")->where("status", StatusTypeEnum::APPROVED)->whereNull("to_date")->orderBy("id", "desc"); } } diff --git a/app/Policies/PackagePolicy.php b/app/Policies/PackagePolicy.php index c5e6cf77..16fbe0ba 100644 --- a/app/Policies/PackagePolicy.php +++ b/app/Policies/PackagePolicy.php @@ -15,7 +15,11 @@ class PackagePolicy public function delete(User $User, Package $Package) { - if($User->hasRole('Admin') || ($User->hasRole('Supervisor') && $Package->user->medical_center_id == $User->medical_center_id)) + if( + $User->hasRole('Admin') || + ($User->hasRole('Supervisor') && $Package->user->medical_center_id == $User->medical_center_id) || + ($User->hasRole('User') && $Package->user_id == $User->id) + ) return true; } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1ffb5cdf..b983985e 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,8 @@ namespace App\Providers; +use App\Interfaces\PackageRepositoryInterface; +use App\Repositories\PackageRepository; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -13,7 +15,10 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - + $this->app->bind( + PackageRepositoryInterface::class, + PackageRepository::class + ); } /** @@ -22,7 +27,5 @@ class AppServiceProvider extends ServiceProvider * @return void */ public function boot() - { - // - } + {} } diff --git a/app/Repositories/PackageRepository.php b/app/Repositories/PackageRepository.php new file mode 100644 index 00000000..8549b8ee --- /dev/null +++ b/app/Repositories/PackageRepository.php @@ -0,0 +1,86 @@ +has('name') && $request->name != '', function ($query) use ($request) { + $query->where('name', 'LIKE', '%'.$request->name.'%'); + }) + ->when($request->has('package_id') && $request->package_id != '', function ($query) use ($request) { + $query->where('id', $request->package_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', + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); + }, + ]) + ->whereHas('user', function ($query) use ($user) { + $query->where('medical_center_id', $user->medical_center_id); + }) + ->where("user_id", $user->id) + ->orWhere("status", StatusTypeEnum::APPROVED) + ->orderByDesc('id') + ->paginate(10); + } + + public function indexForSupervisor($request, $user) + { + return Package::when($request->has('name') && $request->name != '', function ($query) use ($request) { + $query->where('name', 'LIKE', '%'.$request->name.'%'); + }) + ->when($request->has('package_id') && $request->package_id != '', function ($query) use ($request) { + $query->where('id', $request->package_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', + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); + }, + ])->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 Package::when($request->has('name') && $request->name != '', function ($query) use ($request) { + $query->where('name', 'LIKE', '%'.$request->name.'%'); + }) + ->when($request->has('package_id') && $request->package_id != '', function ($query) use ($request) { + $query->where('id', $request->package_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', + 'user.medical_center' => function ($query) { + $query->select('id', 'name', 'address', 'phone_number'); + }, + ]) + ->orderByDesc('id') + ->paginate(10); + } +}