mirror of
https://git.meshkee.com/cssd/cssd-back.git
synced 2026-10-10 20:31:05 +03:30
add transfer section
This commit is contained in:
@@ -50,7 +50,13 @@ 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 );
|
||||
return \MessageResponse::data( $Items );
|
||||
}
|
||||
@@ -67,7 +73,13 @@ 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' );
|
||||
} ] );
|
||||
}
|
||||
] );
|
||||
|
||||
$FilesPath = [];
|
||||
if ( count( $Item->files ) ) {
|
||||
@@ -134,7 +146,7 @@ class ItemController extends Controller
|
||||
|
||||
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' ) );
|
||||
}
|
||||
if ( count( $Item->packages ) ) {
|
||||
@@ -165,7 +177,13 @@ 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' );
|
||||
} ] );
|
||||
}
|
||||
] )
|
||||
->get();
|
||||
|
||||
return \MessageResponse::data( $Items );
|
||||
@@ -178,7 +196,13 @@ 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' );
|
||||
} ] );
|
||||
}
|
||||
] );
|
||||
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' );
|
||||
}
|
||||
|
||||
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\Item;
|
||||
use Doctrine\Tests\Common\Inflector\InflectorTest;
|
||||
|
||||
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\User' => 'App\Policies\UserPolicy',
|
||||
'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;
|
||||
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Passport\HasApiTokens;
|
||||
use Spatie\Permission\Traits\HasRoles;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use Notifiable, HasApiTokens, HasRoles;
|
||||
use Notifiable , HasApiTokens , HasRoles;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name', 'email', 'password','status','medical_center_id','address', 'gender'
|
||||
];
|
||||
protected $fillable = [
|
||||
'name' , 'email' , 'password' , 'status' , 'medical_center_id' , 'address' , 'gender'
|
||||
];
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password', 'remember_token',
|
||||
'password' , 'remember_token' ,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -35,50 +34,56 @@ class User extends Authenticatable
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
'email_verified_at' => 'datetime' ,
|
||||
];
|
||||
|
||||
public function medical_center()
|
||||
{
|
||||
return $this->belongsTo('App\MedicalCenter');
|
||||
return $this->belongsTo( 'App\MedicalCenter' );
|
||||
}
|
||||
|
||||
public function test_results()
|
||||
{
|
||||
return $this->hasMany('App\TestResult');
|
||||
return $this->hasMany( 'App\TestResult' );
|
||||
}
|
||||
|
||||
public function test_types()
|
||||
{
|
||||
return $this->hasMany('App\TestType');
|
||||
return $this->hasMany( 'App\TestType' );
|
||||
}
|
||||
|
||||
public function findForPassport($username)
|
||||
{
|
||||
return $this->where('cell_number', $username)->where('status', 'Active')->first();
|
||||
}
|
||||
public function findForPassport( $username )
|
||||
{
|
||||
return $this->where( 'cell_number' , $username )->where( 'status' , 'Active' )->first();
|
||||
}
|
||||
|
||||
public function messagesSent()
|
||||
{
|
||||
return $this->hasMany('App\Message', 'sender_user_id');
|
||||
}
|
||||
public function messagesSent()
|
||||
{
|
||||
return $this->hasMany( 'App\Message' , 'sender_user_id' );
|
||||
}
|
||||
|
||||
public function messagesReceived()
|
||||
{
|
||||
return $this->hasMany('App\Message', 'recipient_user_id');
|
||||
}
|
||||
public function packages()
|
||||
{
|
||||
return $this->hasMany('App\Package');
|
||||
}
|
||||
public function items()
|
||||
{
|
||||
return $this->hasMany('App\Item');
|
||||
}
|
||||
public function labels()
|
||||
{
|
||||
return $this->hasMany('App\Label');
|
||||
}
|
||||
public function cycles()
|
||||
{
|
||||
return $this->hasMany('App\Cycle');
|
||||
}
|
||||
public function messagesReceived()
|
||||
{
|
||||
return $this->hasMany( 'App\Message' , 'recipient_user_id' );
|
||||
}
|
||||
|
||||
public function packages()
|
||||
{
|
||||
return $this->hasMany( 'App\Package' );
|
||||
}
|
||||
|
||||
public function items()
|
||||
{
|
||||
return $this->hasMany( 'App\Item' );
|
||||
}
|
||||
|
||||
public function labels()
|
||||
{
|
||||
return $this->hasMany( 'App\Label' );
|
||||
}
|
||||
|
||||
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␍
|
||||
␍
|
||||
return [␍
|
||||
␍
|
||||
'failed' => 'Error',␍
|
||||
'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',␍
|
||||
];␍
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
return [
|
||||
|
||||
|
||||
|
||||
'failed' => 'Error',
|
||||
|
||||
'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::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');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user