mirror of
https://git.meshkee.com/cssd/cssd-back.git
synced 2026-10-11 00:51:05 +03:30
225 lines
7.7 KiB
PHP
225 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Cycle;
|
|
use App\Models\FakeModel;
|
|
use App\Models\Item;
|
|
use App\Models\Package;
|
|
use App\Services\ExportCollection;
|
|
use App\Services\Responser;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class ExportController extends Controller
|
|
{
|
|
|
|
private function sendToS3($export){
|
|
$fakeModel = FakeModel::firstOrCreate(['batch_id' => Str::random(6)]);
|
|
|
|
$tempFileName = 'excel_' . Str::random(10) . '.xlsx';
|
|
$tempDir = 'temp';
|
|
Storage::makeDirectory($tempDir);
|
|
$tempFilePath = $tempDir . '/' . $tempFileName;
|
|
|
|
Excel::store($export, $tempFilePath, 'local', \Maatwebsite\Excel\Excel::XLSX);
|
|
|
|
$media = $fakeModel->addMedia(storage_path('app/' . $tempFilePath))->toMediaCollection('temp_medias');
|
|
|
|
// اگه مشکلی پیش نمیاد بعد از این مرحله بالایی فیک مدل رو هم حذف کن که دیتابیس شلوغ نشه
|
|
|
|
Storage::delete($tempFilePath);
|
|
return $media;
|
|
}
|
|
|
|
public function items()
|
|
{
|
|
$Items = Item::with( [ 'user' => function ( $query ) {
|
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
|
} ,
|
|
'user.medical_center' => function ( $query ) {
|
|
$query->select( 'id' , 'name' );
|
|
} ,
|
|
'latestTransfer'
|
|
] );
|
|
|
|
$user = auth( 'api' )->user();
|
|
if ( $user->hasRole( 'User' ) ) {
|
|
$Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) {
|
|
$query->where( 'medical_center_id' , $user->medical_center_id );
|
|
} )->where( "status" , 1 );
|
|
} elseif ( $user->hasRole( 'Supervisor' ) ) {
|
|
$Items = $Items->whereHas( 'user' , function ( $query ) use ( $user ) {
|
|
$query->where( 'medical_center_id' , $user->medical_center_id );
|
|
} );
|
|
}
|
|
|
|
$Items = $Items->orderByDesc( 'id' )->get();
|
|
|
|
$Items = $Items->map( function ( $item , $key ) {
|
|
|
|
$row[] = $item[ "id" ];
|
|
$row[] = $item[ "name" ];
|
|
$row[] = $item[ "size" ];
|
|
$row[] = $item[ "udi" ];
|
|
$row[] = $item[ "note" ];
|
|
$row[] = $item[ "specific" ];
|
|
$row[] = $item[ "status" ];
|
|
$row[] = $item[ "repair" ];
|
|
$row[] = $item[ "user" ] != null ? $item[ "user" ][ "id" ] : null;
|
|
$row[] = $item[ "user" ] != null ? $item[ "user" ][ "name" ] : null;
|
|
$row[] = $item[ "medical_center" ] != null ? $item[ "medical_center" ][ "id" ] : null;
|
|
$row[] = $item[ "medical_center" ] != null ? $item[ "medical_center" ][ "name" ] : null;
|
|
$row[] = $item[ "latestTransfer" ] != null ? $item[ "latestTransfer" ][ "from_date" ] : null;
|
|
|
|
return $row;
|
|
} );
|
|
$Items->prepend( [
|
|
'شناسه آیتم' ,
|
|
'نام' ,
|
|
'سایز' ,
|
|
'udi' ,
|
|
'توضیحات' ,
|
|
'specific' ,
|
|
'وضعیت' ,
|
|
'تعمیرات' ,
|
|
'شناسه کاربر' ,
|
|
'نام کاربر' ,
|
|
'شناسه بیمارستان' ,
|
|
'نام بیمارستان',
|
|
'اخرین انتقال'
|
|
] );
|
|
|
|
$export = new ExportCollection( $Items );
|
|
$media = $this->sendToS3($export);
|
|
|
|
return response()->json(
|
|
Responser::success(
|
|
'خروجی اکسل',
|
|
null,
|
|
['id' => $media->id, 'url' => $media->getUrl()]
|
|
)
|
|
);
|
|
}
|
|
|
|
public function packages()
|
|
{
|
|
$Packages = Package::with( [
|
|
'user' => function ( $query ) {
|
|
$query->select( 'id' , 'name' , 'medical_center_id' );
|
|
} ,
|
|
'user.medical_center' => function ( $query ) {
|
|
$query->select( 'id' , 'name' );
|
|
},
|
|
"latestTransfer"
|
|
] );
|
|
|
|
$user = auth( 'api' )->user();
|
|
if ( $user->hasRole( 'User' ) or $user->hasRole( 'Supervisor' ) ) {
|
|
$Packages = $Packages->whereHas( 'user' , function ( $query ) use ( $user ) {
|
|
$query->where( 'medical_center_id' , $user->medical_center_id );
|
|
} );
|
|
}
|
|
|
|
$Packages = $Packages->orderByDesc( 'id' )->get();
|
|
|
|
$Packages = $Packages->map( function ( $item , $key ) {
|
|
|
|
$row[] = $item[ "id" ];
|
|
$row[] = $item[ "name" ];
|
|
$row[] = $item[ "bar_code" ];
|
|
$row[] = $item[ "qr_code" ];
|
|
$row[] = $item[ "note" ];
|
|
$row[] = $item[ "verified" ];
|
|
$row[] = $item[ "user" ] != null ? $item[ "user" ][ "id" ] : null;
|
|
$row[] = $item[ "user" ] != null ? $item[ "user" ][ "name" ] : null;
|
|
$row[] = $item[ "medical_center" ] != null ? $item[ "medical_center" ][ "id" ] : null;
|
|
$row[] = $item[ "medical_center" ] != null ? $item[ "medical_center" ][ "name" ] : null;
|
|
$row[] = $item[ "latestTransfer" ] != null ? $item[ "latestTransfer" ][ "from_date" ] : null;
|
|
|
|
return $row;
|
|
} );
|
|
$Packages->prepend( [
|
|
'شناسه آیتم' ,
|
|
'نام' ,
|
|
'بارکد' ,
|
|
'qr code' ,
|
|
'توضیحات' ,
|
|
'وضعیت' ,
|
|
'شناسه کاربر' ,
|
|
'نام کاربر' ,
|
|
'شناسه بیمارستان' ,
|
|
'نام بیمارستان',
|
|
'اخرین انتقال'
|
|
] );
|
|
$export = new ExportCollection( $Packages );
|
|
$media = $this->sendToS3($export);
|
|
return response()->json(
|
|
Responser::success(
|
|
'خروجی اکسل',
|
|
null,
|
|
['id' => $media->id, 'url' => $media->getUrl()]
|
|
)
|
|
);
|
|
}
|
|
|
|
public function cycles()
|
|
{
|
|
$cycles = Cycle::with([
|
|
'user' => function ($query) {
|
|
$query->select('id', 'name', 'medical_center_id');
|
|
},
|
|
'user.medical_center' => function ($query) {
|
|
$query->select('id', 'name');
|
|
},
|
|
]);
|
|
|
|
$user = auth('api')->user();
|
|
if ($user->hasRole('User') or $user->hasRole('Supervisor')) {
|
|
$cycles = $cycles->whereHas('user', function ($query) use ($user) {
|
|
$query->where('medical_center_id', $user->medical_center_id);
|
|
});
|
|
}
|
|
|
|
$cycles = $cycles->orderByDesc('id')->get();
|
|
|
|
$cycles = $cycles->map(function ($item, $key) {
|
|
$row[] = $item["id"];
|
|
$row[] = $item["unique_id"];
|
|
$row[] = $item["note"];
|
|
$row[] = $item["sterilizer_id"];
|
|
$row[] = $item["cycle_number"];
|
|
$row[] = $item["user"] != null ? $item["user"]["id"] : null;
|
|
$row[] = $item["user"] != null ? $item["user"]["name"] : null;
|
|
$row[] = $item['user']['medical_center']['id'] ?? null;
|
|
$row[] = $item['user']['medical_center']['name'] ?? null;
|
|
|
|
return $row;
|
|
});
|
|
$cycles->prepend([
|
|
'شناسه آیتم',
|
|
'unique_id',
|
|
'یادداشت',
|
|
'sterilizer_id',
|
|
'cycle_number',
|
|
'شناسه کاربر',
|
|
'نام کاربر',
|
|
'شناسه بیمارستان',
|
|
'نام بیمارستان',
|
|
]);
|
|
$export = new ExportCollection($cycles);
|
|
|
|
$media = $this->sendToS3($export);
|
|
|
|
return response()->json(
|
|
Responser::success(
|
|
'خروجی اکسل',
|
|
null,
|
|
['id' => $media->id, 'url' => $media->getUrl()]
|
|
)
|
|
);
|
|
}
|
|
|
|
}
|