fix label and cycle

This commit is contained in:
mahdi purHosseini
2024-09-02 12:28:51 +03:30
parent 156e30a595
commit fd59106db8
9 changed files with 444 additions and 144 deletions
+14 -38
View File
@@ -2,54 +2,29 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Resources\CycleResource;
use App\Interfaces\CycleRepositoryInterface;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Requests\StoreCycleRequest; use App\Http\Requests\StoreCycleRequest;
use App\Cycle; use App\Cycle;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Packages\Messaging\src\Facades\MessageResponse; use Packages\Messaging\src\Facades\MessageResponse;
class CycleController extends Controller class CycleController extends Controller
{ {
public function index( Request $request ) public function index( Request $request ): AnonymousResourceCollection
{ {
$user = auth('api')->user(); $user = auth('api')->user();
$Cycles = Cycle::when( $user->cant( 'showAll' , Cycle::class ) , function ( $query ) use ( $user ) { if ($user->hasRole('User')) {
if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { $Packages = app(CycleRepositoryInterface::class)->indexForUser($request, $user);
$query->whereHas( 'user' , function ( $query ) use ( $user ) { } elseif ($user->hasRole('Supervisor')) {
$query->where( 'medical_center_id' , $user->medical_center_id ); $Packages = app(CycleRepositoryInterface::class)->indexForSupervisor($request, $user);
} ); } else {
$Packages = app(CycleRepositoryInterface::class)->indexForAdmin($request, $user);
} }
} )
->when( $request->has( 'cycle_id' ) && $request->cycle_id != '' , function ( $query ) use ( $request ) {
$query->where( 'id' , $request->cycle_id );
} )
->when( $request->has( 'sterilizer_id' ) && $request->sterilizer_id != '' , function ( $query ) use ( $request ) {
$query->where( 'sterilizer_id' , $request->sterilizer_id );
} )
->when( $request->has( 'date' ) && $request->date != '' , function ( $query ) use ( $request ) {
$query->where( 'date' , $request->date );
} )
->when( $request->has( 'cycle_number' ) && $request->cycle_number != '' , function ( $query ) use ( $request ) {
$query->where( 'cycle_number' , $request->cycle_number );
} )
->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' );
} ,
'labels' ,
'labels.package' => function ( $query ) {
$query->select( 'id' , 'name' );
} ,
] )->orderByDesc( 'id' )->paginate( 10 );
return MessageResponse::data( $Cycles ); return CycleResource::collection($Packages);
} }
public function create() public function create()
@@ -64,7 +39,9 @@ class CycleController extends Controller
$query->select( 'id' , 'name' ); $query->select( 'id' , 'name' );
} , } ,
'labels' , 'labels' ,
'labels.package' , 'labels.package.items' ] ); 'labels.package' ,
'labels.package.items'
] );
return MessageResponse::data( $Cycle ); return MessageResponse::data( $Cycle );
} }
@@ -95,7 +72,6 @@ class CycleController extends Controller
foreach ( $Labels as $Label => $Count ) { foreach ( $Labels as $Label => $Count ) {
$CycleObj->labels()->attach( array( $Label ) , [ 'count' => $Count ] ); $CycleObj->labels()->attach( array( $Label ) , [ 'count' => $Count ] );
} }
// $CycleObj->labels()->attach($request->labels);
return MessageResponse::success( trans( 'messages.success' ) ); return MessageResponse::success( trans( 'messages.success' ) );
} }
+19 -39
View File
@@ -3,6 +3,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\StoreLabelRequest; use App\Http\Requests\StoreLabelRequest;
use App\Http\Resources\LabelResource;
use App\Interfaces\LabelRepositoryInterface;
use App\Label; use App\Label;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Packages\Messaging\src\Facades\MessageResponse; use Packages\Messaging\src\Facades\MessageResponse;
@@ -13,56 +15,32 @@ class LabelController extends Controller
{ {
$user = auth('api')->user(); $user = auth('api')->user();
$Labels = Label::when( $user->cant( 'showAll' , Label::class ) , function ( $query ) use ( $user ) { if ($user->hasRole('User')) {
if ( $user->hasRole( 'Supervisor' ) and $user->hasRole( 'User' ) ) { $Packages = app(LabelRepositoryInterface::class)->indexForUser($request, $user);
$query->whereHas( 'user' , function ( $query ) use ( $user ) { } elseif ($user->hasRole('Supervisor')) {
$query->where( 'medical_center_id' , $user->medical_center_id ); $Packages = app(LabelRepositoryInterface::class)->indexForSupervisor($request, $user);
} ); } else {
$Packages = app(LabelRepositoryInterface::class)->indexForAdmin($request, $user);
} }
} )
->when( $request->has( 'sterilizer_id' ) && $request->sterilizer_id != '' , function ( $query ) use ( $request ) {
$query->where( 'sterilizer_id' , $request->sterilizer_id );
} )
->when( $request->has( 'cycle_number' ) && $request->cycle_number != '' , function ( $query ) use ( $request ) {
$query->where( 'cycle_number' , $request->cycle_number );
} )
->when( $request->has( 'lot_number' ) && $request->lot_number != '' , function ( $query ) use ( $request ) {
$query->where( 'lot_number' , $request->lot_number );
} )
->when( $request->has( 'label_id' ) && $request->label_id != '' , function ( $query ) use ( $request ) {
$query->where( 'id' , $request->label_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' );
} ,
'package' => function ( $query ) {
$query->select( 'id' , 'name' );
} ,
'user.medical_center' => function ( $query ) {
$query->select( 'id' , 'name' );
} ,
] )->orderByDesc( 'id' )->paginate( 10 );
return MessageResponse::data( $Labels ); return LabelResource::collection($Packages);
} }
public function create() public function create()
{} {
}
public function show(Label $Label) public function show(Label $Label)
{ {
$Label->load( [ 'user' => function ( $query ) { $Label->load([
'user' => function ($query) {
$query->select('id', 'name', 'medical_center_id'); $query->select('id', 'name', 'medical_center_id');
}, },
'user.medical_center' => function ($query) { 'user.medical_center' => function ($query) {
$query->select('id', 'name'); $query->select('id', 'name');
}, },
'package' , 'package.items' ] ); 'package', 'package.items'
]);
return MessageResponse::data($Label); return MessageResponse::data($Label);
} }
@@ -142,13 +120,15 @@ class LabelController extends Controller
public function showLabel(Label $Label) public function showLabel(Label $Label)
{ {
$Label->load( [ 'user' => function ( $query ) { $Label->load([
'user' => function ($query) {
$query->select('id', 'name', 'medical_center_id'); $query->select('id', 'name', 'medical_center_id');
}, },
'user.medical_center' => function ($query) { 'user.medical_center' => function ($query) {
$query->select('id', 'name'); $query->select('id', 'name');
}, },
'package' , 'package.items' ] ); 'package', 'package.items'
]);
return MessageResponse::data($Label); return MessageResponse::data($Label);
} }
} }
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class CycleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'unique_id' => $this->unique_id,
'date' => $this->date,
'sterilizer_id' => $this->sterilizer_id,
'cycle_number' => $this->cycle_number,
'note' => $this->note,
'verified' => $this->verified,
'user_id' => $this->user_id,
'user' => UserResource::make($this->whenLoaded('user')),
'labels' => LabelResource::collection($this->whenLoaded('labels')),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at
];
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class LabelResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'sterile_date' => $this->sterile_date,
'expire_date' => $this->expire_date,
'sterilizer_id' => $this->sterilizer_id,
'cycle_number' => $this->cycle_number,
'lot_number' => $this->lot_number,
'department' => $this->department,
'note' => $this->note,
'user_id' => $this->user_id,
'user' => UserResource::make($this->whenLoaded('user')),
'package_id' => $this->package_id,
'package' => PackageResource::make($this->whenLoaded('package')),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at
];
}
}
@@ -0,0 +1,12 @@
<?php
namespace App\Interfaces;
interface CycleRepositoryInterface
{
public function indexForUser($request , $user);
public function indexForSupervisor($request , $user);
public function indexForAdmin($request , $user);
}
@@ -0,0 +1,12 @@
<?php
namespace App\Interfaces;
interface LabelRepositoryInterface
{
public function indexForUser($request , $user);
public function indexForSupervisor($request , $user);
public function indexForAdmin($request , $user);
}
+12
View File
@@ -2,7 +2,11 @@
namespace App\Providers; namespace App\Providers;
use App\Interfaces\CycleRepositoryInterface;
use App\Interfaces\LabelRepositoryInterface;
use App\Interfaces\PackageRepositoryInterface; use App\Interfaces\PackageRepositoryInterface;
use App\Repositories\CycleRepository;
use App\Repositories\LabelRepository;
use App\Repositories\PackageRepository; use App\Repositories\PackageRepository;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
@@ -19,6 +23,14 @@ class AppServiceProvider extends ServiceProvider
PackageRepositoryInterface::class, PackageRepositoryInterface::class,
PackageRepository::class PackageRepository::class
); );
$this->app->bind(
CycleRepositoryInterface::class,
CycleRepository::class
);
$this->app->bind(
LabelRepositoryInterface::class,
LabelRepository::class
);
} }
/** /**
+121
View File
@@ -0,0 +1,121 @@
<?php
namespace App\Repositories;
use App\Cycle;
use App\Interfaces\CycleRepositoryInterface;
class CycleRepository implements CycleRepositoryInterface
{
public function indexForUser($request, $user)
{
return Cycle::when($request->has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) {
$query->where('id', $request->cycle_id);
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('date') && $request->date != '', function ($query) use ($request) {
$query->where('date', $request->date);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->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');
},
'labels',
'labels.package' => function ($query) {
$query->select('id', 'name');
},
])
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->where("user_id", $user->id)
->orderByDesc('id')
->paginate(10);
}
public function indexForSupervisor($request, $user)
{
return Cycle::when($request->has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) {
$query->where('id', $request->cycle_id);
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('date') && $request->date != '', function ($query) use ($request) {
$query->where('date', $request->date);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->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');
},
'labels',
'labels.package' => function ($query) {
$query->select('id', 'name');
},
])
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->orderByDesc('id')
->paginate(10);
}
public function indexForAdmin($request, $user)
{
return Cycle::when($request->has('cycle_id') && $request->cycle_id != '', function ($query) use ($request) {
$query->where('id', $request->cycle_id);
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('date') && $request->date != '', function ($query) use ($request) {
$query->where('date', $request->date);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->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');
},
'labels',
'labels.package' => function ($query) {
$query->select('id', 'name');
},
])
->orderByDesc('id')
->paginate(10);
}
}
+118
View File
@@ -0,0 +1,118 @@
<?php
namespace App\Repositories;
use App\Interfaces\LabelRepositoryInterface;
use App\Label;
class LabelRepository implements LabelRepositoryInterface
{
public function indexForUser($request, $user)
{
return Label::when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) {
$query->where('lot_number', $request->lot_number);
})
->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) {
$query->where('id', $request->label_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');
},
'package' => function ($query) {
$query->select('id', 'name');
},
'user.medical_center' => function ($query) {
$query->select('id', 'name');
},
])
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->where("user_id", $user->id)
->orderByDesc('id')
->paginate(10);
}
public function indexForSupervisor($request, $user)
{
return Label::when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) {
$query->where('lot_number', $request->lot_number);
})
->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) {
$query->where('id', $request->label_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');
},
'package' => function ($query) {
$query->select('id', 'name');
},
'user.medical_center' => function ($query) {
$query->select('id', 'name');
},
])
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->orderByDesc('id')
->paginate(10);
}
public function indexForAdmin($request, $user)
{
return Label::when($request->has('sterilizer_id') && $request->sterilizer_id != '', function ($query) use ($request) {
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function ($query) use ($request) {
$query->where('cycle_number', $request->cycle_number);
})
->when($request->has('lot_number') && $request->lot_number != '', function ($query) use ($request) {
$query->where('lot_number', $request->lot_number);
})
->when($request->has('label_id') && $request->label_id != '', function ($query) use ($request) {
$query->where('id', $request->label_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');
},
'package' => function ($query) {
$query->select('id', 'name');
},
'user.medical_center' => function ($query) {
$query->select('id', 'name');
},
])
->orderByDesc('id')
->paginate(10);
}
}