diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index 344a9531..1757aa8c 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -50,11 +50,6 @@ class ItemController extends Controller } , 'user.medical_center' => function ( $query ) { $query->select( 'id' , 'name' ); - }, - "transfers" => function ( $query ) { - $query->with( [ 'user' => function ( $query ) { - $query->select( 'id' , 'name' , 'medical_center_id' ); - } ] ); } ] ) ->paginate( 10 ); @@ -185,7 +180,6 @@ class ItemController extends Controller } ] ) ->get(); - return \MessageResponse::data( $Items ); } diff --git a/app/Http/Controllers/PackageController.php b/app/Http/Controllers/PackageController.php index d7b73c0a..d724b114 100644 --- a/app/Http/Controllers/PackageController.php +++ b/app/Http/Controllers/PackageController.php @@ -48,9 +48,7 @@ class PackageController extends Controller } public function create() - { - - } + {} public function show( Package $Package ) { diff --git a/app/Http/Controllers/TransferController.php b/app/Http/Controllers/TransferController.php deleted file mode 100644 index 8835d67d..00000000 --- a/app/Http/Controllers/TransferController.php +++ /dev/null @@ -1,64 +0,0 @@ -user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) { - return \MessageResponse::error( trans( 'messages.access_denied' ) ); - } - if ( $Transfer->status == "suspended" ) { - if ( $request->status == "approved" ) { - $item = $Transfer->item; - $item->transferActive->update( [ "to_date" => Carbon::now() ] ); - $Transfer->update( [ "status" => $request->status ] ); - $item->update( [ "user_id" => $Transfer->user_id ] ); - } else { - $Transfer->update( [ "status" => $request->status ] ); - } - } else { - return \MessageResponse::error( trans( 'messages.change_status_denied_transfer' ) ); - } - return \MessageResponse::success( trans( 'messages.success' ) ); - } - - public function transfer( StoreTransferRequest $request , Item $Item ) - { - if ( auth( 'api' )->user()->cant( 'transfer' , [ Transfer::class , $Item ] ) ) { - return \MessageResponse::error( trans( 'messages.access_denied' ) ); - } - if ( $Item->user_id != $request->user_id ) { - $Item->transfers()->create( [ - "user_id" => $request->user_id , - "from_date" => Carbon::now() , - "status" => "suspended" - ] ); - } else { - return \MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); - } - return \MessageResponse::success( trans( 'messages.success' ) ); - } - - public function mySuspendedTransfer() - { - $data = Transfer::where( "user_id" , auth()->id() )->where( "status" , "suspended" )->with( [ "item" ] )->get(); - return \MessageResponse::data( $data ); - } - - public function suspendedTransfer() - { - if ( auth( 'api' )->user()->cant( 'suspendedTransfer' , Transfer::class ) ) { - return \MessageResponse::error( trans( 'messages.access_denied' ) ); - } - $data = Transfer::where( "status" , "suspended" )->with( [ "user" , "item" ] )->get(); - return \MessageResponse::data( $data ); - } -} diff --git a/app/Http/Controllers/TransferItemController.php b/app/Http/Controllers/TransferItemController.php new file mode 100644 index 00000000..9c852398 --- /dev/null +++ b/app/Http/Controllers/TransferItemController.php @@ -0,0 +1,133 @@ +user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + if ( $Transfer->status == "suspended" ) { + if ( $request->status == "approved" ) { + $item = $Transfer->transferable; + if ( $item->transferActive ) $item->transferActive()->update( [ "to_date" => Carbon::now() ] ); + $Transfer->update( [ "status" => $request->status ] ); + $item->update( [ "user_id" => $Transfer->user_id ] ); + } else { + $Transfer->update( [ "status" => $request->status ] ); + } + } else { + return \MessageResponse::error( trans( 'messages.change_status_denied_transfer' ) ); + } + return \MessageResponse::success( trans( 'messages.success' ) ); + } + + public function transfer( StoreTransferRequest $request , Item $Item ) + { + if ( auth( 'api' )->user()->cant( 'transferItem' , [ Transfer::class , $Item ] ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + if ( $Item->user_id != $request->user_id ) { + $Item->transfers()->create( [ + "user_id" => $request->user_id , + "from_date" => Carbon::now() , + "status" => "suspended" + ] ); + } else { + return \MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); + } + return \MessageResponse::success( trans( 'messages.success' ) ); + } + + public function mySuspendedTransfer() + { + $data = Transfer::where( "transferable_type" , "App\\Item" )->where( "user_id" , auth()->id() )->where( "status" , "suspended" )->with( [ "transferable" ] )->get(); + return \MessageResponse::data( $data ); + } + + public function suspendedTransfer() + { + if ( auth( 'api' )->user()->cant( 'suspendedTransfer' , Transfer::class ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + $data = Transfer::where( "transferable_type" , "App\\Item" )->where( "status" , "suspended" )->with( [ "user" , "transferable" ] )->get(); + return \MessageResponse::data( $data ); + } + + public function items( Request $request ) + { + if ( auth( 'api' )->user()->cant( 'items' , [Transfer::class] ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + $user = auth()->user(); + $data = Item::whereHas( 'user' , function ( $query ) use ( $user ) { + $query->where( 'medical_center_id' , $user->medical_center_id ); + } ) + ->when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { + $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); + } ) + ->when( $request->has( 'udi' ) && $request->udi != '' , function ( $query ) use ( $request ) { + $query->where( 'udi' , 'LIKE' , '%' . $request->udi . '%' ); + } ) + ->when( $request->has( 'size' ) && $request->size != '' , function ( $query ) use ( $request ) { + $query->where( 'size' , $request->size ); + } ) + ->when( $request->has( 'specific' ) && $request->specific != '' , function ( $query ) use ( $request ) { + $query->where( 'specific' , $request->specific ); + } ) + ->with( [ 'user' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } , + 'user.medical_center' => function ( $query ) { + $query->select( 'id' , 'name' ); + } , + "transfers" => function ( $query ) { + $query->with( [ 'user' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } ] ); + } + ] )->get(); + return \MessageResponse::data( $data ); + } + + public function myItems( Request $request ) + { + $data = Item::where( 'user_id' , auth()->id() ) + ->when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { + $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); + } ) + ->when( $request->has( 'udi' ) && $request->udi != '' , function ( $query ) use ( $request ) { + $query->where( 'udi' , 'LIKE' , '%' . $request->udi . '%' ); + } ) + ->when( $request->has( 'size' ) && $request->size != '' , function ( $query ) use ( $request ) { + $query->where( 'size' , $request->size ); + } ) + ->when( $request->has( 'specific' ) && $request->specific != '' , function ( $query ) use ( $request ) { + $query->where( 'specific' , $request->specific ); + } ) + ->with( [ 'user' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } , + 'user.medical_center' => function ( $query ) { + $query->select( 'id' , 'name' ); + } , + "transfers" => function ( $query ) { + $query->with( [ 'user' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } ] ); + } + ] ) + ->get(); + return \MessageResponse::data( $data ); + } +} diff --git a/app/Http/Controllers/TransferPackageController.php b/app/Http/Controllers/TransferPackageController.php new file mode 100644 index 00000000..b5ab8d54 --- /dev/null +++ b/app/Http/Controllers/TransferPackageController.php @@ -0,0 +1,132 @@ +user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + if ( $Transfer->status == "suspended" ) { + if ( $request->status == "approved" ) { + $package = $Transfer->transferable; + if ( $package->transferActive ) $package->transferActive()->update( [ "to_date" => Carbon::now() ] ); + $Transfer->update( [ "status" => $request->status ] ); + $package->update( [ "user_id" => $Transfer->user_id ] ); + + foreach ( $package->items as $item ) { + $item->update( [ "user_id" => $Transfer->user_id ] ); + } + } else { + $Transfer->update( [ "status" => $request->status ] ); + } + } else { + return \MessageResponse::error( trans( 'messages.change_status_denied_transfer' ) ); + } + return \MessageResponse::success( trans( 'messages.success' ) ); + } + + public function transfer( StoreTransferRequest $request , Package $Package ) + { + if ( auth( 'api' )->user()->cant( 'transferPackage' , [ Transfer::class , $Package ] ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + if ( $Package->user_id != $request->user_id ) { + $Package->transfers()->create( [ + "user_id" => $request->user_id , + "from_date" => Carbon::now() , + "status" => "suspended" + ] ); + } else { + return \MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); + } + return \MessageResponse::success( trans( 'messages.success' ) ); + } + + public function mySuspendedTransfer() + { + $data = Transfer::where( "transferable_type" , "App\\Package" )->where( "user_id" , auth()->id() )->where( "status" , "suspended" )->with( [ "transferable" ] )->get(); + return \MessageResponse::data( $data ); + } + + public function suspendedTransfer() + { + if ( auth( 'api' )->user()->cant( 'suspendedTransfer' , Transfer::class ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + $data = Transfer::where( "transferable_type" , "App\\Package" )->where( "status" , "suspended" )->with( [ "user" , "transferable" ] )->get(); + return \MessageResponse::data( $data ); + } + + public function packages( Request $request ) + { + if ( auth( 'api' )->user()->cant( 'packages' , Transfer::class ) ) { + return \MessageResponse::error( trans( 'messages.access_denied' ) ); + } + $user = auth()->user(); + $data = Package::whereHas( 'user' , function ( $query ) use ( $user ) { + $query->where( 'medical_center_id' , $user->medical_center_id ); + } ) + ->when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { + $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); + } ) + ->when( $request->has( 'udi' ) && $request->udi != '' , function ( $query ) use ( $request ) { + $query->where( 'udi' , 'LIKE' , '%' . $request->udi . '%' ); + } ) + ->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' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } , + 'user.medical_center' => function ( $query ) { + $query->select( 'id' , 'name' ); + } ] ) + ->orderByDesc( 'id' ) + ->get(); + return \MessageResponse::data( $data ); + } + + public function myPackages( Request $request ) + { + $data = Package::where( 'user_id' , auth()->id() ) + ->when( $request->has( 'name' ) && $request->name != '' , function ( $query ) use ( $request ) { + $query->where( 'name' , 'LIKE' , '%' . $request->name . '%' ); + } ) + ->when( $request->has( 'udi' ) && $request->udi != '' , function ( $query ) use ( $request ) { + $query->where( 'udi' , 'LIKE' , '%' . $request->udi . '%' ); + } ) + ->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' => function ( $query ) { + $query->select( 'id' , 'name' , 'medical_center_id' ); + } , + 'user.medical_center' => function ( $query ) { + $query->select( 'id' , 'name' ); + } ] ) + ->orderByDesc( 'id' ) + ->get(); + return \MessageResponse::data( $data ); + } +} diff --git a/app/Item.php b/app/Item.php index 67bc36f0..fb1fdb65 100644 --- a/app/Item.php +++ b/app/Item.php @@ -25,11 +25,11 @@ public function transfers() { - return $this->hasMany( 'App\Transfer' )->where( "status" ,"approved" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" ,"approved" ); } public function transferActive() { - return $this->hasOne( 'App\Transfer' )->where( "status" ,"approved" )->whereNull( "to_date" ); + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" ,"approved" )->whereNull( "to_date" ); } } diff --git a/app/Package.php b/app/Package.php index 66688ce4..991505d9 100644 --- a/app/Package.php +++ b/app/Package.php @@ -23,4 +23,13 @@ return $this->hasMany( 'App\Label' ); } + public function transfers() + { + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" ,"approved" ); + } + + public function transferActive() + { + return $this->morphMany( 'App\Transfer' , "transferable" )->where( "status" ,"approved" )->whereNull( "to_date" ); + } } diff --git a/app/Policies/TransferPolicy.php b/app/Policies/TransferPolicy.php index ccae5bb2..8d3b147e 100644 --- a/app/Policies/TransferPolicy.php +++ b/app/Policies/TransferPolicy.php @@ -2,6 +2,7 @@ namespace App\Policies; +use App\Package; use App\Transfer; use App\User; use App\Item; @@ -14,15 +15,38 @@ class TransferPolicy return true; } - public function transfer( User $User , Item $Item ) - { - if ( $User->hasRole( 'Admin|Supervisor' ) || $Item->user_id == $User->id ) - return true; - } - public function suspendedTransfer( User $User ) { if ( $User->hasRole( 'Admin|Supervisor' ) ) return true; } + + + //Item + public function transferItem( User $User , Item $Item ) + { + if ( $User->hasRole( 'Admin|Supervisor' ) || $Item->user_id == $User->id ) + return true; + } + + public function items( User $User ) + { + if ( $User->hasRole( 'Admin|Supervisor' ) ) + return true; + } + + + //package + public function transferPackage( User $User , Package $Package ) + { + if ( $User->hasRole( 'Admin|Supervisor' ) || $Package->user_id == $User->id ) + return true; + } + + public function packages( User $User ) + { + if ( $User->hasRole( 'Admin|Supervisor' ) ) + return true; + } + } diff --git a/app/Transfer.php b/app/Transfer.php index 1096d184..d069e1dc 100644 --- a/app/Transfer.php +++ b/app/Transfer.php @@ -9,15 +9,15 @@ class Transfer extends Model { use SoftDeletes; - public $fillable = [ 'user_id' , 'item_id' , 'to_date' , 'from_date' , 'status' ]; + public $fillable = [ 'user_id' , 'to_date' , 'from_date' , 'status' ]; public function user() { return $this->belongsTo( 'App\User' ); } - public function item() + public function transferable() { - return $this->belongsTo( 'App\Item' ); + return $this->morphTo(); } } diff --git a/database/migrations/2023_10_21_124945_update_transfers_table.php b/database/migrations/2023_10_21_124945_update_transfers_table.php new file mode 100644 index 00000000..ebb6c986 --- /dev/null +++ b/database/migrations/2023_10_21_124945_update_transfers_table.php @@ -0,0 +1,51 @@ +bigIncrements('id'); + $table->morphs( 'transferable' ); + $table->unsignedBigInteger('user_id'); + $table->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->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists( 'transfers' ); + Schema::create('transfers', function (Blueprint $table) { + $table->bigIncrements('id'); + $table->unsignedBigInteger('item_id'); + $table->foreign('item_id')->references('id')->on('items'); + $table->unsignedBigInteger('user_id'); + $table->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->timestamps(); + $table->softDeletes(); + }); + } +} diff --git a/routes/api.php b/routes/api.php index 52b4fd6b..0bb77832 100644 --- a/routes/api.php +++ b/routes/api.php @@ -46,15 +46,9 @@ Route::middleware('auth:api')->group(function () { Route::get('users/search', 'UserController@searchUser'); Route::resource('Users', 'UserController'); - Route::resource('Items', 'ItemController'); Route::post('Items/ChangeStatus/{Item}', 'ItemController@changeStatus'); - Route::post('transfers/ChangeStatus/{Transfer}', 'TransferController@changeStatus'); - Route::post('transfers/{Item}', 'TransferController@transfer'); - Route::get('my-suspended-transfers', 'TransferController@mySuspendedTransfer'); - Route::get('suspended-transfers', 'TransferController@suspendedTransfer'); - Route::resource('Packages', 'PackageController')->except(['showPackage']); Route::resource('Labels', 'LabelController'); @@ -72,6 +66,23 @@ Route::middleware('auth:api')->group(function () { Route::post('UploadFile', 'UploadController@uploadFile'); Route::post('DeleteFile', 'UploadController@deleteFile'); + +//transfer item + Route::get('transfer-items', 'TransferItemController@items'); + Route::get('transfer-my-items', 'TransferItemController@myItems'); + Route::get('suspended-transfer-items', 'TransferItemController@suspendedTransfer'); + Route::get('my-suspended-transfer-items', 'TransferItemController@mySuspendedTransfer'); + Route::post('transfer-items/{Item}', 'TransferItemController@transfer'); + Route::post('transfer-items/ChangeStatus/{Transfer}', 'TransferItemController@changeStatus'); + +//transfer package + Route::get('transfer-packages', 'TransferPackageController@packages'); + Route::get('transfer-my-packages', 'TransferPackageController@myPackages'); + Route::get('suspended-transfer-packages', 'TransferPackageController@suspendedTransfer'); + Route::get('my-suspended-transfer-packages', 'TransferPackageController@mySuspendedTransfer'); + Route::post('transfer-packages/{Package}', 'TransferPackageController@transfer'); + Route::post('transfer-packages/ChangeStatus/{Transfer}', 'TransferPackageController@changeStatus'); + }); Route::post('/BarCode/{Code}/{Type?}', 'BarCodeController@generateBarcode'); Route::post('Package/Barcode/{Code}', 'BarCodeController@generatePackageBarcode');