Files
cssd-back/app/Http/Controllers/MedicalCenterController.php
2024-11-23 22:14:01 +03:30

154 lines
5.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreMedicalCenterRequest;
use App\Models\City;
use App\Models\InputValue;
use App\Models\MedicalCenter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Packages\Messaging\src\Facades\MessageResponse;
class MedicalCenterController extends Controller
{
public function index( Request $request )
{
if ( ! auth( 'api' )->user()->can( 'list' , MedicalCenter::class ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) );
}
$MedicalCenters = MedicalCenter::when( $request->has( 'name' ) && $request->name , function ( $query ) use ( $request ) {
$query->where( 'name' , 'LIKE' , '%' . $request->name . '%' );
} )->withCount( 'users' )->paginate( 10 );
return MessageResponse::data( $MedicalCenters );
}
public function create()
{
//
}
public function store( StoreMedicalCenterRequest $request )
{
MedicalCenter::create( $request->all() );
return MessageResponse::success( trans( 'messages.success' ) );
}
public function show( $id )
{
// $MedicalCenter = MedicalCenter::with('users')->findOrFail($id);
// return response()->json(['MedicalCenter' => $MedicalCenter]);
}
public function edit( MedicalCenter $MedicalCenter )
{
$MedicalCenter->load( 'users' );
return MessageResponse::data( $MedicalCenter );
}
public function update( StoreMedicalCenterRequest $request , MedicalCenter $MedicalCenter )
{
$MedicalCenter->update( $request->all() );
return MessageResponse::success( trans( 'messages.success' ) );
}
public function destroy( MedicalCenter $MedicalCenter )
{
if ( ! auth( 'api' )->user()->can( 'delete' , $MedicalCenter ) ) {
return MessageResponse::error( trans( 'messages.access_denied' ) );
}
try {
DB::beginTransaction();
foreach ( $MedicalCenter->users as $user ) {
// delete test_results
foreach ( $user->test_results as $test_result ) {
if ( count( $test_result->input_values ) ) {
InputValue::where( 'test_result_id' , $test_result->id )->get()->each->delete();
}
$test_result->delete();
}
// delete test_types
foreach ( $user->test_types as $test_type ) {
$UniqueID = substr( base_convert( sha1( uniqid( mt_rand() ) ) , 16 , 36 ) , 0 , 10 );
$test_type->unique_code = $test_type->unique_code . '--' . $UniqueID;
$test_type->save();
$test_type->delete();
}
// delete items
foreach ( $user->items as $item ) {
$item->transfersAll()->delete();
$item->delete();
}
// delete labels
foreach ( $user->labels as $label ) {
if ( count( $label->cycles ) ) {
$label->cycles()->detach();
}
$label->delete();
}
// delete packages
foreach ( $user->packages as $package ) {
if ( count( $package->items ) ) {
foreach ( $package->items as $item ) {
$item->update( [
"package_id" => null
] );
}
}
if ( count( $package->labels ) ) {
$package->labels()->delete();
}
$package->transfersAll()->delete();
$package->delete();
}
// delete cycles
foreach ( $user->cycles as $cycle ) {
if ( count( $cycle->labels ) ) {
$cycle->labels()->detach();
}
$cycle->delete();
}
foreach ( $user->galleries as $gallery ) {
if (count($gallery->uploadables)) {
foreach ($gallery->uploadables as $item) {
$item->delete();
}
}
$gallery->delete();
}
// delete user
$user->delete();
}
$MedicalCenter->delete();
DB::commit();
return MessageResponse::success( trans( 'messages.success' ) );
} catch ( \Exception $exception ) {
DB::rollBack();
return MessageResponse::error( $exception->getMessage() );
}
}
public function listMedicalCenters()
{
$MedicalCenters = MedicalCenter::select( 'id' , 'name' )->get();
return MessageResponse::data( $MedicalCenters );
}
public function getCities()
{
$Cities = City::whereNull( 'parent_id' )->get();
return MessageResponse::data( $Cities );
}
}