mirror of
https://git.meshkee.com/cssd/cssd-back.git
synced 2026-10-10 19:31:07 +03:30
add transfer section
This commit is contained in:
@@ -50,7 +50,13 @@ class ItemController extends Controller
|
|||||||
} ,
|
} ,
|
||||||
'user.medical_center' => function ( $query ) {
|
'user.medical_center' => function ( $query ) {
|
||||||
$query->select( 'id' , 'name' );
|
$query->select( 'id' , 'name' );
|
||||||
} ] )
|
},
|
||||||
|
"transfers" => function ( $query ) {
|
||||||
|
$query->with( [ 'user' => function ( $query ) {
|
||||||
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
||||||
|
} ] );
|
||||||
|
}
|
||||||
|
] )
|
||||||
->paginate( 10 );
|
->paginate( 10 );
|
||||||
return \MessageResponse::data( $Items );
|
return \MessageResponse::data( $Items );
|
||||||
}
|
}
|
||||||
@@ -67,7 +73,13 @@ class ItemController extends Controller
|
|||||||
} ,
|
} ,
|
||||||
'user.medical_center' => function ( $query ) {
|
'user.medical_center' => function ( $query ) {
|
||||||
$query->select( 'id' , 'name' );
|
$query->select( 'id' , 'name' );
|
||||||
} ] );
|
},
|
||||||
|
"transfers" => function ( $query ) {
|
||||||
|
$query->with( [ 'user' => function ( $query ) {
|
||||||
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
||||||
|
} ] );
|
||||||
|
}
|
||||||
|
] );
|
||||||
|
|
||||||
$FilesPath = [];
|
$FilesPath = [];
|
||||||
if ( count( $Item->files ) ) {
|
if ( count( $Item->files ) ) {
|
||||||
@@ -134,7 +146,7 @@ class ItemController extends Controller
|
|||||||
|
|
||||||
public function destroy( Item $Item )
|
public function destroy( Item $Item )
|
||||||
{
|
{
|
||||||
if ( ! auth( 'api' )->user()->can( 'delete' , $Item ) ) {
|
if ( ! auth( 'api' )->user()->can( 'delete' , Item::class ) ) {
|
||||||
return \MessageResponse::error( trans( 'messages.access_denied' ) );
|
return \MessageResponse::error( trans( 'messages.access_denied' ) );
|
||||||
}
|
}
|
||||||
if ( count( $Item->packages ) ) {
|
if ( count( $Item->packages ) ) {
|
||||||
@@ -165,7 +177,13 @@ class ItemController extends Controller
|
|||||||
} ,
|
} ,
|
||||||
'user.medical_center' => function ( $query ) {
|
'user.medical_center' => function ( $query ) {
|
||||||
$query->select( 'id' , 'name' );
|
$query->select( 'id' , 'name' );
|
||||||
} ] )
|
},
|
||||||
|
"transfers" => function ( $query ) {
|
||||||
|
$query->with( [ 'user' => function ( $query ) {
|
||||||
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
||||||
|
} ] );
|
||||||
|
}
|
||||||
|
] )
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
return \MessageResponse::data( $Items );
|
return \MessageResponse::data( $Items );
|
||||||
@@ -178,7 +196,13 @@ class ItemController extends Controller
|
|||||||
} ,
|
} ,
|
||||||
'user.medical_center' => function ( $query ) {
|
'user.medical_center' => function ( $query ) {
|
||||||
$query->select( 'id' , 'name' );
|
$query->select( 'id' , 'name' );
|
||||||
} ] );
|
},
|
||||||
|
"transfers" => function ( $query ) {
|
||||||
|
$query->with( [ 'user' => function ( $query ) {
|
||||||
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
||||||
|
} ] );
|
||||||
|
}
|
||||||
|
] );
|
||||||
return \MessageResponse::data( $Item );
|
return \MessageResponse::data( $Item );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\StoreTransferChangeStatusRequest;
|
||||||
|
use App\Http\Requests\StoreTransferRequest;
|
||||||
|
use App\Item;
|
||||||
|
use App\Transfer;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class TransferController extends Controller
|
||||||
|
{
|
||||||
|
public function changeStatus( StoreTransferChangeStatusRequest $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" ) {
|
||||||
|
$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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use App\Item;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class StoreTransferChangeStatusRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'status' => 'required|in:approved,rejected'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use App\Item;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class StoreTransferRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'user_id' => 'required|exists:users,id'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -22,4 +22,14 @@
|
|||||||
{
|
{
|
||||||
return $this->morphMany( 'App\Media' , 'model' );
|
return $this->morphMany( 'App\Media' , 'model' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function transfers()
|
||||||
|
{
|
||||||
|
return $this->hasMany( 'App\Transfer' )->where( "status" ,"approved" );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transferActive()
|
||||||
|
{
|
||||||
|
return $this->hasOne( 'App\Transfer' )->where( "status" ,"approved" )->whereNull( "to_date" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ namespace App\Policies;
|
|||||||
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use App\Item;
|
use App\Item;
|
||||||
use Doctrine\Tests\Common\Inflector\InflectorTest;
|
|
||||||
|
|
||||||
class ItemPolicy
|
class ItemPolicy
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use App\Transfer;
|
||||||
|
use App\User;
|
||||||
|
use App\Item;
|
||||||
|
|
||||||
|
class TransferPolicy
|
||||||
|
{
|
||||||
|
public function changeStatus( User $User , Transfer $transfer )
|
||||||
|
{
|
||||||
|
if ( $User->hasRole( 'Admin|Supervisor' ) || $transfer->user_id == $User->id )
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,8 @@ class AuthServiceProvider extends ServiceProvider
|
|||||||
'App\MedicalCenter' => 'App\Policies\MedicalCenterPolicy',
|
'App\MedicalCenter' => 'App\Policies\MedicalCenterPolicy',
|
||||||
'App\User' => 'App\Policies\UserPolicy',
|
'App\User' => 'App\Policies\UserPolicy',
|
||||||
'App\TestType' => 'App\Policies\TestTypePolicy',
|
'App\TestType' => 'App\Policies\TestTypePolicy',
|
||||||
|
'App\Item' => 'App\Policies\ItemPolicy',
|
||||||
|
'App\Transfer' => 'App\Policies\TransferPolicy',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
|
class Transfer extends Model
|
||||||
|
{
|
||||||
|
use SoftDeletes;
|
||||||
|
|
||||||
|
public $fillable = [ 'user_id' , 'item_id' , 'to_date' , 'from_date' , 'status' ];
|
||||||
|
|
||||||
|
public function user()
|
||||||
|
{
|
||||||
|
return $this->belongsTo( 'App\User' );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function item()
|
||||||
|
{
|
||||||
|
return $this->belongsTo( 'App\Item' );
|
||||||
|
}
|
||||||
|
}
|
||||||
+44
-39
@@ -2,31 +2,30 @@
|
|||||||
|
|
||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use Illuminate\Notifications\Notifiable;
|
|
||||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Laravel\Passport\HasApiTokens;
|
use Laravel\Passport\HasApiTokens;
|
||||||
use Spatie\Permission\Traits\HasRoles;
|
use Spatie\Permission\Traits\HasRoles;
|
||||||
|
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable
|
||||||
{
|
{
|
||||||
use Notifiable, HasApiTokens, HasRoles;
|
use Notifiable , HasApiTokens , HasRoles;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name', 'email', 'password','status','medical_center_id','address', 'gender'
|
'name' , 'email' , 'password' , 'status' , 'medical_center_id' , 'address' , 'gender'
|
||||||
];
|
];
|
||||||
/**
|
/**
|
||||||
* The attributes that should be hidden for arrays.
|
* The attributes that should be hidden for arrays.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $hidden = [
|
protected $hidden = [
|
||||||
'password', 'remember_token',
|
'password' , 'remember_token' ,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,50 +34,56 @@ class User extends Authenticatable
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'email_verified_at' => 'datetime',
|
'email_verified_at' => 'datetime' ,
|
||||||
];
|
];
|
||||||
|
|
||||||
public function medical_center()
|
public function medical_center()
|
||||||
{
|
{
|
||||||
return $this->belongsTo('App\MedicalCenter');
|
return $this->belongsTo( 'App\MedicalCenter' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_results()
|
public function test_results()
|
||||||
{
|
{
|
||||||
return $this->hasMany('App\TestResult');
|
return $this->hasMany( 'App\TestResult' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_types()
|
public function test_types()
|
||||||
{
|
{
|
||||||
return $this->hasMany('App\TestType');
|
return $this->hasMany( 'App\TestType' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findForPassport($username)
|
public function findForPassport( $username )
|
||||||
{
|
{
|
||||||
return $this->where('cell_number', $username)->where('status', 'Active')->first();
|
return $this->where( 'cell_number' , $username )->where( 'status' , 'Active' )->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function messagesSent()
|
public function messagesSent()
|
||||||
{
|
{
|
||||||
return $this->hasMany('App\Message', 'sender_user_id');
|
return $this->hasMany( 'App\Message' , 'sender_user_id' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function messagesReceived()
|
public function messagesReceived()
|
||||||
{
|
{
|
||||||
return $this->hasMany('App\Message', 'recipient_user_id');
|
return $this->hasMany( 'App\Message' , 'recipient_user_id' );
|
||||||
}
|
}
|
||||||
public function packages()
|
|
||||||
{
|
public function packages()
|
||||||
return $this->hasMany('App\Package');
|
{
|
||||||
}
|
return $this->hasMany( 'App\Package' );
|
||||||
public function items()
|
}
|
||||||
{
|
|
||||||
return $this->hasMany('App\Item');
|
public function items()
|
||||||
}
|
{
|
||||||
public function labels()
|
return $this->hasMany( 'App\Item' );
|
||||||
{
|
}
|
||||||
return $this->hasMany('App\Label');
|
|
||||||
}
|
public function labels()
|
||||||
public function cycles()
|
{
|
||||||
{
|
return $this->hasMany( 'App\Label' );
|
||||||
return $this->hasMany('App\Cycle');
|
}
|
||||||
}
|
|
||||||
|
public function cycles()
|
||||||
|
{
|
||||||
|
return $this->hasMany( 'App\Cycle' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateTransfersTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('transfers');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,28 @@
|
|||||||
<?php␍
|
<?php
|
||||||
␍
|
|
||||||
return [␍
|
|
||||||
␍
|
|
||||||
'failed' => 'Error',␍
|
return [
|
||||||
'failed_message' => "You've encountered an error",␍
|
|
||||||
'success' => 'Success',␍
|
|
||||||
'success_message' => 'Done Successfully',␍
|
|
||||||
'create' => 'The Item created successfully',␍
|
'failed' => 'Error',
|
||||||
'update' => 'The Item updated successfully',␍
|
|
||||||
'access_denied' => 'You dont have permission to do it',␍
|
'failed_message' => "You've encountered an error",
|
||||||
];␍
|
|
||||||
|
'success' => 'Success',
|
||||||
|
|
||||||
|
'success_message' => 'Done Successfully',
|
||||||
|
|
||||||
|
'create' => 'The Item created successfully',
|
||||||
|
|
||||||
|
'update' => 'The Item updated successfully',
|
||||||
|
|
||||||
|
'access_denied' => 'You dont have permission to do it',
|
||||||
|
|
||||||
|
'change_status_denied_transfer' => 'The Transfer has been approved or rejected before',
|
||||||
|
|
||||||
|
'user_denied_transfer' => 'The Item has been transferred before to this user',
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,12 @@ Route::middleware('auth:api')->group(function () {
|
|||||||
|
|
||||||
Route::resource('Items', 'ItemController');
|
Route::resource('Items', 'ItemController');
|
||||||
Route::post('Items/ChangeStatus/{Item}', 'ItemController@changeStatus');
|
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('Packages', 'PackageController')->except(['showPackage']);
|
||||||
Route::resource('Labels', 'LabelController');
|
Route::resource('Labels', 'LabelController');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user