fix status

This commit is contained in:
mahdi purHosseini
2024-01-30 14:35:33 +03:30
parent 761aec8b69
commit 1d6d81a461
15 changed files with 147 additions and 33 deletions
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Constants;
class StatusTypeEnum
{
const APPROVED = "approved";
const REJECTED = "rejected";
const SUSPENDED = "suspended";
}
+8 -6
View File
@@ -2,6 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Constants\StatusTypeEnum;
use App\Http\Requests\ChangeStatusRequest;
use App\Http\Requests\StoreItemRequest; use App\Http\Requests\StoreItemRequest;
use App\Http\Resources\ItemResource; use App\Http\Resources\ItemResource;
use App\Item; use App\Item;
@@ -45,7 +47,7 @@ class ItemController extends Controller
if ( $user->hasRole( 'User' ) ) { if ( $user->hasRole( 'User' ) ) {
$Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) { $Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) {
$query->where( 'medical_center_id' , $user->medical_center_id ); $query->where( 'medical_center_id' , $user->medical_center_id );
} )->where( "status" , 1 ); } )->where( "status" , StatusTypeEnum::APPROVED );
} elseif ( $user->hasRole( 'Supervisor' ) ) { } elseif ( $user->hasRole( 'Supervisor' ) ) {
$Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) { $Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) {
$query->where( 'medical_center_id' , $user->medical_center_id ); $query->where( 'medical_center_id' , $user->medical_center_id );
@@ -108,7 +110,7 @@ class ItemController extends Controller
public function getItems() public function getItems()
{ {
$Items = Item::where( "status" , 1 ) $Items = Item::where( "status" , StatusTypeEnum::APPROVED )
->where( "package_id" , null ) ->where( "package_id" , null )
->orderByDesc( 'id' ) ->orderByDesc( 'id' )
->get(); ->get();
@@ -148,6 +150,7 @@ class ItemController extends Controller
'specific' => $request->specific , 'specific' => $request->specific ,
'note' => $request->note , 'note' => $request->note ,
'udi' => $request->udi , 'udi' => $request->udi ,
'status' => StatusTypeEnum::SUSPENDED ,
'user_id' => auth( 'api' )->user()->id , 'user_id' => auth( 'api' )->user()->id ,
'creator_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' ) ); 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 ) ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , Item::class ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) ); return MessageResponse::error( trans( 'messages.access_denied' ) );
} }
$Item->status = ! $Item->status; $Item->update( [ "status" => $request->status ] );
$Item->save(); return MessageResponse::success( trans( 'messages.success' ) );
return ItemResource::make( $Item );
} }
public function changeRepair( Item $Item ) public function changeRepair( Item $Item )
+20 -3
View File
@@ -2,6 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Constants\StatusTypeEnum;
use App\Http\Requests\ChangeStatusRequest;
use App\Http\Requests\StorePackageRequest; use App\Http\Requests\StorePackageRequest;
use App\Http\Resources\PackageResource; use App\Http\Resources\PackageResource;
use App\Item; use App\Item;
@@ -32,7 +34,11 @@ class PackageController extends Controller
] ); ] );
$user = auth( 'api' )->user(); $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 ) { $Packages = $Packages->whereHas( 'user' , function ( $query ) use ( $user ) {
$query->where( 'medical_center_id' , $user->medical_center_id ); $query->where( 'medical_center_id' , $user->medical_center_id );
} ); } );
@@ -89,7 +95,9 @@ class PackageController extends Controller
public function getPackages() public function getPackages()
{ {
$Packages = Package::orderByDesc( 'id' )->get(); $Packages = Package::where( "status" , StatusTypeEnum::APPROVED )
->orderByDesc( 'id' )
->get();
return PackageResource::collection( $Packages ); return PackageResource::collection( $Packages );
} }
@@ -120,7 +128,7 @@ class PackageController extends Controller
$PackageData = [ $PackageData = [
'name' => $request->name , 'name' => $request->name ,
'note' => $request->note , 'note' => $request->note ,
'verified' => 'NotVerified' , 'status' => StatusTypeEnum::SUSPENDED ,
'user_id' => auth( 'api' )->user()->id , 'user_id' => auth( 'api' )->user()->id ,
'creator_id' => auth( 'api' )->user()->id 'creator_id' => auth( 'api' )->user()->id
]; ];
@@ -179,4 +187,13 @@ class PackageController extends Controller
$Package->delete(); $Package->delete();
return MessageResponse::success( trans( 'messages.success' ) ); 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' ) );
}
} }
@@ -2,7 +2,8 @@
namespace App\Http\Controllers; 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\Requests\StoreTransferRequest;
use App\Http\Resources\TransferResource; use App\Http\Resources\TransferResource;
use App\Item; use App\Item;
@@ -15,7 +16,7 @@ class TransferItemController extends Controller
public function getSuspendedTransfer() public function getSuspendedTransfer()
{ {
$data = Transfer::where( "transferable_type" , "App\\Item" ) $data = Transfer::where( "transferable_type" , "App\\Item" )
->where( "status" , "suspended" ) ->where( "status" , StatusTypeEnum::SUSPENDED )
->with( [ "user" , "transferable" , "transferable.user" ] ); ->with( [ "user" , "transferable" , "transferable.user" ] );
$user = auth( 'api' )->user(); $user = auth( 'api' )->user();
@@ -32,13 +33,13 @@ class TransferItemController extends Controller
return TransferResource::collection($data); 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 ] ) ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) ); return MessageResponse::error( trans( 'messages.access_denied' ) );
} }
if ( $Transfer->status == "suspended" ) { if ( $Transfer->status == StatusTypeEnum::SUSPENDED ) {
if ( $request->status == "approved" ) { if ( $request->status == StatusTypeEnum::APPROVED ) {
$item = $Transfer->transferable; $item = $Transfer->transferable;
if ( $item->transferActive ) $item->transferActive()->update( [ "to_date" => Carbon::now() ] ); if ( $item->transferActive ) $item->transferActive()->update( [ "to_date" => Carbon::now() ] );
$Transfer->update( [ "status" => $request->status ] ); $Transfer->update( [ "status" => $request->status ] );
@@ -61,7 +62,7 @@ class TransferItemController extends Controller
$Item->transfers()->create( [ $Item->transfers()->create( [
"user_id" => $request->user_id , "user_id" => $request->user_id ,
"from_date" => Carbon::now() , "from_date" => Carbon::now() ,
"status" => "suspended" "status" => StatusTypeEnum::SUSPENDED
] ); ] );
} else { } else {
return MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); return MessageResponse::error( trans( 'messages.user_denied_transfer' ) );
@@ -2,7 +2,8 @@
namespace App\Http\Controllers; 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\Requests\StoreTransferRequest;
use App\Http\Resources\TransferResource; use App\Http\Resources\TransferResource;
use App\Package; use App\Package;
@@ -15,7 +16,7 @@ class TransferPackageController extends Controller
public function getSuspendedTransfer() public function getSuspendedTransfer()
{ {
$data = Transfer::where( "transferable_type" , "App\\Package" ) $data = Transfer::where( "transferable_type" , "App\\Package" )
->where( "status" , "suspended" ) ->where( "status" , StatusTypeEnum::SUSPENDED )
->with( [ "user" , "transferable" , "transferable.user" ] ); ->with( [ "user" , "transferable" , "transferable.user" ] );
$user = auth( 'api' )->user(); $user = auth( 'api' )->user();
@@ -32,13 +33,13 @@ class TransferPackageController extends Controller
return TransferResource::collection($data); 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 ] ) ) { if ( auth( 'api' )->user()->cant( 'changeStatus' , [ Transfer::class , $Transfer ] ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) ); return MessageResponse::error( trans( 'messages.access_denied' ) );
} }
if ( $Transfer->status == "suspended" ) { if ( $Transfer->status == StatusTypeEnum::SUSPENDED ) {
if ( $request->status == "approved" ) { if ( $request->status == StatusTypeEnum::APPROVED ) {
$package = $Transfer->transferable; $package = $Transfer->transferable;
if ( $package->transferActive ) $package->transferActive()->update( [ "to_date" => Carbon::now() ] ); if ( $package->transferActive ) $package->transferActive()->update( [ "to_date" => Carbon::now() ] );
$Transfer->update( [ "status" => $request->status ] ); $Transfer->update( [ "status" => $request->status ] );
@@ -64,7 +65,7 @@ class TransferPackageController extends Controller
$Package->transfers()->create( [ $Package->transfers()->create( [
"user_id" => $request->user_id , "user_id" => $request->user_id ,
"from_date" => Carbon::now() , "from_date" => Carbon::now() ,
"status" => "suspended" "status" => StatusTypeEnum::SUSPENDED
] ); ] );
} else { } else {
return MessageResponse::error( trans( 'messages.user_denied_transfer' ) ); return MessageResponse::error( trans( 'messages.user_denied_transfer' ) );
@@ -2,10 +2,10 @@
namespace App\Http\Requests; namespace App\Http\Requests;
use App\Item; use App\Constants\StatusTypeEnum;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
class StoreTransferChangeStatusRequest extends FormRequest class ChangeStatusRequest extends FormRequest
{ {
public function authorize() public function authorize()
{ {
@@ -15,7 +15,7 @@ class StoreTransferChangeStatusRequest extends FormRequest
public function rules() public function rules()
{ {
return [ return [
'status' => 'required|in:approved,rejected' 'status' => 'required|in:'. StatusTypeEnum::APPROVED .','. StatusTypeEnum::REJECTED
]; ];
} }
+1 -1
View File
@@ -20,7 +20,7 @@ class PackageResource extends JsonResource
'id' => $this->id, 'id' => $this->id,
'name' => $this->name, 'name' => $this->name,
'note' => $this->note, 'note' => $this->note,
'verified' => $this->verified, 'status' => $this->status,
'creator_id' => $this->creator_id, 'creator_id' => $this->creator_id,
'creator' => UserResource::make($this->whenLoaded('creator')), 'creator' => UserResource::make($this->whenLoaded('creator')),
'user_id' => $this->user_id, 'user_id' => $this->user_id,
+3 -2
View File
@@ -2,6 +2,7 @@
namespace App; namespace App;
use App\Constants\StatusTypeEnum;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMedia;
use App\Services\Media\HasMediaTrait; use App\Services\Media\HasMediaTrait;
@@ -30,12 +31,12 @@ class Item extends Model implements HasMedia
public function transfers() 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() 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 public function registerMediaCollections(): void
+4 -3
View File
@@ -2,11 +2,12 @@
namespace App; namespace App;
use App\Constants\StatusTypeEnum;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Package extends 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() public function user()
{ {
@@ -30,11 +31,11 @@ class Package extends Model
public function transfers() 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() 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" );
} }
} }
+2 -2
View File
@@ -29,9 +29,9 @@ class PackagePolicy
return true; 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; return true;
} }
+1
View File
@@ -4,6 +4,7 @@ namespace App\Policies;
use App\User; use App\User;
use App\TestResult; use App\TestResult;
use Illuminate\Support\Facades\DB;
class TestResultPolicy class TestResultPolicy
{ {
@@ -1,5 +1,6 @@
<?php <?php
use App\Constants\StatusTypeEnum;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
@@ -21,7 +22,7 @@ class CreateTransfersTable extends Migration
$table->foreign('user_id')->references('id')->on('users'); $table->foreign('user_id')->references('id')->on('users');
$table->dateTime('from_date')->nullable(); $table->dateTime('from_date')->nullable();
$table->dateTime('to_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->timestamps();
$table->softDeletes(); $table->softDeletes();
}); });
@@ -0,0 +1,39 @@
<?php
use App\Constants\StatusTypeEnum;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddStatusToItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table( 'items' , function ( Blueprint $table ) {
$table->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 );
} );
}
}
@@ -0,0 +1,39 @@
<?php
use App\Constants\StatusTypeEnum;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddStatusToPackagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table( 'packages' , function ( Blueprint $table ) {
$table->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']);
} );
}
}
+1
View File
@@ -75,6 +75,7 @@ Route::middleware('auth:api')->group(function () {
Route::resource('Packages', 'PackageController'); Route::resource('Packages', 'PackageController');
Route::get('/MyPackages', 'PackageController@myPackages'); Route::get('/MyPackages', 'PackageController@myPackages');
Route::get('/GetPackages', 'PackageController@getPackages'); Route::get('/GetPackages', 'PackageController@getPackages');
Route::post('Packages/ChangeStatus/{Package}', 'PackageController@changeStatus');
//transfer package //transfer package
Route::get('suspended-transfer-packages', 'TransferPackageController@getSuspendedTransfer'); Route::get('suspended-transfer-packages', 'TransferPackageController@getSuspendedTransfer');