From 1d6d81a4616136b2de295b43c45ec964c9bcb525 Mon Sep 17 00:00:00 2001 From: mahdi purHosseini Date: Tue, 30 Jan 2024 14:35:33 +0330 Subject: [PATCH] fix status --- app/Constants/StatusTypeEnum.php | 10 +++++ app/Http/Controllers/ItemController.php | 14 ++++--- app/Http/Controllers/PackageController.php | 23 +++++++++-- .../Controllers/TransferItemController.php | 13 ++++--- .../Controllers/TransferPackageController.php | 13 ++++--- ...tusRequest.php => ChangeStatusRequest.php} | 6 +-- app/Http/Resources/PackageResource.php | 2 +- app/Item.php | 5 ++- app/Package.php | 7 ++-- app/Policies/PackagePolicy.php | 4 +- app/Policies/TestResultPolicy.php | 1 + ...23_10_10_110117_create_transfers_table.php | 3 +- ...01_29_124700_add_status_to_items_table.php | 39 +++++++++++++++++++ ...29_124701_add_status_to_packages_table.php | 39 +++++++++++++++++++ routes/api.php | 1 + 15 files changed, 147 insertions(+), 33 deletions(-) create mode 100644 app/Constants/StatusTypeEnum.php rename app/Http/Requests/{StoreTransferChangeStatusRequest.php => ChangeStatusRequest.php} (55%) create mode 100644 database/migrations/2024_01_29_124700_add_status_to_items_table.php create mode 100644 database/migrations/2024_01_29_124701_add_status_to_packages_table.php diff --git a/app/Constants/StatusTypeEnum.php b/app/Constants/StatusTypeEnum.php new file mode 100644 index 00000000..307ef83a --- /dev/null +++ b/app/Constants/StatusTypeEnum.php @@ -0,0 +1,10 @@ +hasRole( 'User' ) ) { $Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) { $query->where( 'medical_center_id' , $user->medical_center_id ); - } )->where( "status" , 1 ); + } )->where( "status" , StatusTypeEnum::APPROVED ); } elseif ( $user->hasRole( 'Supervisor' ) ) { $Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) { $query->where( 'medical_center_id' , $user->medical_center_id ); @@ -108,7 +110,7 @@ class ItemController extends Controller public function getItems() { - $Items = Item::where( "status" , 1 ) + $Items = Item::where( "status" , StatusTypeEnum::APPROVED ) ->where( "package_id" , null ) ->orderByDesc( 'id' ) ->get(); @@ -148,6 +150,7 @@ class ItemController extends Controller 'specific' => $request->specific , 'note' => $request->note , 'udi' => $request->udi , + 'status' => StatusTypeEnum::SUSPENDED , 'user_id' => auth( 'api' )->user()->id , 'creator_id' => auth( 'api' )->user()->id ] ); @@ -183,14 +186,13 @@ class ItemController extends Controller return MessageResponse::success( trans( 'messages.success' ) ); } - public function changeStatus( Item $Item ) + public function changeStatus( ChangeStatusRequest $request , Item $Item ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , Item::class ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } - $Item->status = ! $Item->status; - $Item->save(); - return ItemResource::make( $Item ); + $Item->update( [ "status" => $request->status ] ); + return MessageResponse::success( trans( 'messages.success' ) ); } public function changeRepair( Item $Item ) diff --git a/app/Http/Controllers/PackageController.php b/app/Http/Controllers/PackageController.php index a6c596d7..4ae3252d 100644 --- a/app/Http/Controllers/PackageController.php +++ b/app/Http/Controllers/PackageController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Constants\StatusTypeEnum; +use App\Http\Requests\ChangeStatusRequest; use App\Http\Requests\StorePackageRequest; use App\Http\Resources\PackageResource; use App\Item; @@ -32,7 +34,11 @@ class PackageController extends Controller ] ); $user = auth( 'api' )->user(); - if ( $user->hasRole( 'User' ) or $user->hasRole( 'Supervisor' ) ) { + 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 ); } ); @@ -89,7 +95,9 @@ class PackageController extends Controller public function getPackages() { - $Packages = Package::orderByDesc( 'id' )->get(); + $Packages = Package::where( "status" , StatusTypeEnum::APPROVED ) + ->orderByDesc( 'id' ) + ->get(); return PackageResource::collection( $Packages ); } @@ -120,7 +128,7 @@ class PackageController extends Controller $PackageData = [ 'name' => $request->name , 'note' => $request->note , - 'verified' => 'NotVerified' , + 'status' => StatusTypeEnum::SUSPENDED , 'user_id' => auth( 'api' )->user()->id , 'creator_id' => auth( 'api' )->user()->id ]; @@ -179,4 +187,13 @@ class PackageController extends Controller $Package->delete(); return MessageResponse::success( trans( 'messages.success' ) ); } + + public function changeStatus( ChangeStatusRequest $request , Package $Package ) + { + 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' ) ); + } } diff --git a/app/Http/Controllers/TransferItemController.php b/app/Http/Controllers/TransferItemController.php index 304c4649..531c44c8 100644 --- a/app/Http/Controllers/TransferItemController.php +++ b/app/Http/Controllers/TransferItemController.php @@ -2,7 +2,8 @@ namespace App\Http\Controllers; -use App\Http\Requests\StoreTransferChangeStatusRequest; +use App\Constants\StatusTypeEnum; +use App\Http\Requests\ChangeStatusRequest; use App\Http\Requests\StoreTransferRequest; use App\Http\Resources\TransferResource; use App\Item; @@ -15,7 +16,7 @@ class TransferItemController extends Controller public function getSuspendedTransfer() { $data = Transfer::where( "transferable_type" , "App\\Item" ) - ->where( "status" , "suspended" ) + ->where( "status" , StatusTypeEnum::SUSPENDED ) ->with( [ "user" , "transferable" , "transferable.user" ] ); $user = auth( 'api' )->user(); @@ -32,13 +33,13 @@ class TransferItemController extends Controller return TransferResource::collection($data); } - public function changeStatus( StoreTransferChangeStatusRequest $request , Transfer $Transfer ) + public function changeStatus( ChangeStatusRequest $request , Transfer $Transfer ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } - if ( $Transfer->status == "suspended" ) { - if ( $request->status == "approved" ) { + if ( $Transfer->status == StatusTypeEnum::SUSPENDED ) { + if ( $request->status == StatusTypeEnum::APPROVED ) { $item = $Transfer->transferable; if ( $item->transferActive ) $item->transferActive()->update( [ "to_date" => Carbon::now() ] ); $Transfer->update( [ "status" => $request->status ] ); @@ -61,7 +62,7 @@ class TransferItemController extends Controller $Item->transfers()->create( [ "user_id" => $request->user_id , "from_date" => Carbon::now() , - "status" => "suspended" + "status" => StatusTypeEnum::SUSPENDED ] ); } else { return MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); diff --git a/app/Http/Controllers/TransferPackageController.php b/app/Http/Controllers/TransferPackageController.php index 53b460f0..14dd8a79 100644 --- a/app/Http/Controllers/TransferPackageController.php +++ b/app/Http/Controllers/TransferPackageController.php @@ -2,7 +2,8 @@ namespace App\Http\Controllers; -use App\Http\Requests\StoreTransferChangeStatusRequest; +use App\Constants\StatusTypeEnum; +use App\Http\Requests\ChangeStatusRequest; use App\Http\Requests\StoreTransferRequest; use App\Http\Resources\TransferResource; use App\Package; @@ -15,7 +16,7 @@ class TransferPackageController extends Controller public function getSuspendedTransfer() { $data = Transfer::where( "transferable_type" , "App\\Package" ) - ->where( "status" , "suspended" ) + ->where( "status" , StatusTypeEnum::SUSPENDED ) ->with( [ "user" , "transferable" , "transferable.user" ] ); $user = auth( 'api' )->user(); @@ -32,13 +33,13 @@ class TransferPackageController extends Controller return TransferResource::collection($data); } - public function changeStatus( StoreTransferChangeStatusRequest $request , Transfer $Transfer ) + public function changeStatus( ChangeStatusRequest $request , Transfer $Transfer ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) { return MessageResponse::error( trans( 'messages.access_denied' ) ); } - if ( $Transfer->status == "suspended" ) { - if ( $request->status == "approved" ) { + if ( $Transfer->status == StatusTypeEnum::SUSPENDED ) { + if ( $request->status == StatusTypeEnum::APPROVED ) { $package = $Transfer->transferable; if ( $package->transferActive ) $package->transferActive()->update( [ "to_date" => Carbon::now() ] ); $Transfer->update( [ "status" => $request->status ] ); @@ -64,7 +65,7 @@ class TransferPackageController extends Controller $Package->transfers()->create( [ "user_id" => $request->user_id , "from_date" => Carbon::now() , - "status" => "suspended" + "status" => StatusTypeEnum::SUSPENDED ] ); } else { return MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); diff --git a/app/Http/Requests/StoreTransferChangeStatusRequest.php b/app/Http/Requests/ChangeStatusRequest.php similarity index 55% rename from app/Http/Requests/StoreTransferChangeStatusRequest.php rename to app/Http/Requests/ChangeStatusRequest.php index 02778d23..4664b7ac 100644 --- a/app/Http/Requests/StoreTransferChangeStatusRequest.php +++ b/app/Http/Requests/ChangeStatusRequest.php @@ -2,10 +2,10 @@ namespace App\Http\Requests; -use App\Item; +use App\Constants\StatusTypeEnum; use Illuminate\Foundation\Http\FormRequest; -class StoreTransferChangeStatusRequest extends FormRequest +class ChangeStatusRequest extends FormRequest { public function authorize() { @@ -15,7 +15,7 @@ class StoreTransferChangeStatusRequest extends FormRequest public function rules() { return [ - 'status' => 'required|in:approved,rejected' + 'status' => 'required|in:'. StatusTypeEnum::APPROVED .','. StatusTypeEnum::REJECTED ]; } diff --git a/app/Http/Resources/PackageResource.php b/app/Http/Resources/PackageResource.php index 2b2a119a..997b2600 100644 --- a/app/Http/Resources/PackageResource.php +++ b/app/Http/Resources/PackageResource.php @@ -20,7 +20,7 @@ class PackageResource extends JsonResource 'id' => $this->id, 'name' => $this->name, 'note' => $this->note, - 'verified' => $this->verified, + 'status' => $this->status, 'creator_id' => $this->creator_id, 'creator' => UserResource::make($this->whenLoaded('creator')), 'user_id' => $this->user_id, diff --git a/app/Item.php b/app/Item.php index a8fbd526..de9c4c1f 100644 --- a/app/Item.php +++ b/app/Item.php @@ -2,6 +2,7 @@ namespace App; +use App\Constants\StatusTypeEnum; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia\HasMedia; use App\Services\Media\HasMediaTrait; @@ -30,12 +31,12 @@ class Item extends Model implements HasMedia public function transfers() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , "approved" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED ); } public function transferActive() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , "approved" )->whereNull( "to_date" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED )->whereNull( "to_date" ); } public function registerMediaCollections(): void diff --git a/app/Package.php b/app/Package.php index 7b4fd191..be949a15 100644 --- a/app/Package.php +++ b/app/Package.php @@ -2,11 +2,12 @@ namespace App; +use App\Constants\StatusTypeEnum; use Illuminate\Database\Eloquent\Model; class Package extends Model { - public $fillable = [ 'name' , 'user_id' , 'note' , 'verified' , 'creator_id' ]; + public $fillable = [ 'name' , 'user_id' , 'note' , 'status' , 'creator_id' ]; public function user() { @@ -30,11 +31,11 @@ class Package extends Model public function transfers() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , "approved" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED ); } public function transferActive() { - return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , "approved" )->whereNull( "to_date" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" , StatusTypeEnum::APPROVED )->whereNull( "to_date" ); } } diff --git a/app/Policies/PackagePolicy.php b/app/Policies/PackagePolicy.php index e0722009..c5e6cf77 100644 --- a/app/Policies/PackagePolicy.php +++ b/app/Policies/PackagePolicy.php @@ -29,9 +29,9 @@ class PackagePolicy return true; } - public function verifyPackage(User $User, Package $Package) + public function changeStatus( User $User ) { - if($User->hasRole('Admin') || ($User->hasRole('Supervisor') && $Package->user->medical_center_id == $User->medical_center_id)) + if ( $User->hasRole( 'Admin|Supervisor' ) ) return true; } diff --git a/app/Policies/TestResultPolicy.php b/app/Policies/TestResultPolicy.php index 6aa27c17..5e08bcb6 100644 --- a/app/Policies/TestResultPolicy.php +++ b/app/Policies/TestResultPolicy.php @@ -4,6 +4,7 @@ namespace App\Policies; use App\User; use App\TestResult; +use Illuminate\Support\Facades\DB; class TestResultPolicy { diff --git a/database/migrations/2023_10_10_110117_create_transfers_table.php b/database/migrations/2023_10_10_110117_create_transfers_table.php index 42a4a9e4..1c0e56e4 100644 --- a/database/migrations/2023_10_10_110117_create_transfers_table.php +++ b/database/migrations/2023_10_10_110117_create_transfers_table.php @@ -1,5 +1,6 @@ foreign('user_id')->references('id')->on('users'); $table->dateTime('from_date')->nullable(); $table->dateTime('to_date')->nullable(); - $table->enum('status', ['approved','rejected','suspended'])->default('suspended'); + $table->enum( 'status' , [ StatusTypeEnum::APPROVED , StatusTypeEnum::REJECTED , StatusTypeEnum::SUSPENDED ] )->default( StatusTypeEnum::SUSPENDED ); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/migrations/2024_01_29_124700_add_status_to_items_table.php b/database/migrations/2024_01_29_124700_add_status_to_items_table.php new file mode 100644 index 00000000..7934a667 --- /dev/null +++ b/database/migrations/2024_01_29_124700_add_status_to_items_table.php @@ -0,0 +1,39 @@ +dropColumn( 'status' ); + } ); + Schema::table( 'items' , function ( Blueprint $table ) { + $table->enum( 'status' , [ StatusTypeEnum::APPROVED , StatusTypeEnum::REJECTED , StatusTypeEnum::SUSPENDED ] )->default( StatusTypeEnum::SUSPENDED ); + } ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table( 'items' , function ( Blueprint $table ) { + $table->dropColumn( 'status' ); + } ); + Schema::table( 'items' , function ( Blueprint $table ) { + $table->tinyInteger( 'status' )->default( 0 ); + } ); + } +} diff --git a/database/migrations/2024_01_29_124701_add_status_to_packages_table.php b/database/migrations/2024_01_29_124701_add_status_to_packages_table.php new file mode 100644 index 00000000..18ca47b8 --- /dev/null +++ b/database/migrations/2024_01_29_124701_add_status_to_packages_table.php @@ -0,0 +1,39 @@ +dropColumn( 'verified' ); + } ); + Schema::table( 'packages' , function ( Blueprint $table ) { + $table->enum( 'status' , [ StatusTypeEnum::APPROVED , StatusTypeEnum::REJECTED , StatusTypeEnum::SUSPENDED ] )->default( StatusTypeEnum::SUSPENDED ); + } ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table( 'packages' , function ( Blueprint $table ) { + $table->dropColumn( 'status' ); + } ); + Schema::table( 'packages' , function ( Blueprint $table ) { + $table->enum('verified', ['Verified', 'NotVerified']); + } ); + } +} diff --git a/routes/api.php b/routes/api.php index 1b5a8049..e5b1ca84 100644 --- a/routes/api.php +++ b/routes/api.php @@ -75,6 +75,7 @@ Route::middleware('auth:api')->group(function () { Route::resource('Packages', 'PackageController'); Route::get('/MyPackages', 'PackageController@myPackages'); Route::get('/GetPackages', 'PackageController@getPackages'); + Route::post('Packages/ChangeStatus/{Package}', 'PackageController@changeStatus'); //transfer package Route::get('suspended-transfer-packages', 'TransferPackageController@getSuspendedTransfer');