Files
kartoteka/app/Http/Controllers/IndexController.php

126 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Resources\SI\SttMedicalHistoryResource as SiSttMedicalHistoryResource;
use App\Http\Resources\Mis\SttMedicalHistoryResource as MisSttMedicalHistoryResource;
use App\Models\ArchiveStatus;
use App\Models\SI\SttMedicalHistory;
use App\Repositories\MedicalHistoryRepository;
use Illuminate\Http\Request;
use Inertia\Inertia;
class IndexController extends Controller
{
private MedicalHistoryRepository $repository;
public function __construct(MedicalHistoryRepository $repository)
{
$this->repository = $repository;
}
public function index(Request $request)
{
$pageSize = $request->get('page_size', 50);
$searchText = $request->get('search', null);
$dateExtractFrom = $request->get('date_extract_from', null);
$dateExtractTo = $request->get('date_extract_to', null);
$database = $request->get('database', 'separate'); // si, mis
$status = $request->get('status', null);
$data = [];
$databaseStats = $this->repository->getDatabaseStats();
switch ($database) {
case 'si':
$paginator = $this->repository->searchInPostgres(
$searchText,
$dateExtractFrom,
$dateExtractTo,
$pageSize
);
$data['si'] = SiSttMedicalHistoryResource::collection($paginator);
break;
case 'mis':
$paginator = $this->repository->searchInMssql(
$searchText,
$dateExtractFrom,
$dateExtractTo,
$pageSize
);
$data['mis'] = MisSttMedicalHistoryResource::collection($paginator);
break;
case 'smart':
$paginator = $this->repository->smartSearch(
$searchText,
$dateExtractFrom,
$dateExtractTo,
$pageSize
);
$data['smart'] = SiSttMedicalHistoryResource::collection($paginator);
break;
case 'separate':
$separateResults = $this->repository->separateSearch(
$searchText,
$dateExtractFrom,
$dateExtractTo,
$status,
$pageSize
);
$data = [
'si' => SiSttMedicalHistoryResource::collection($separateResults['si']),
'mis' => MisSttMedicalHistoryResource::collection($separateResults['mis']),
'stats' => $separateResults['stats'],
];
break;
}
$statuses = ArchiveStatus::all()->map(function ($status) {
return [
'value' => $status->id,
'label' => $status->text
];
});
$statuses->push([
'value' => 0,
'label' => 'Нет в архиве',
]);
return Inertia::render('Home/Index', [
'cards' => $data,
'statuses' => $statuses,
'databaseStats' => $databaseStats,
'filters' => array_merge($request->only([
'search', 'date_extract_from', 'date_extract_to',
'page_size', 'page', 'view_type', 'database', 'status'
]))
]);
// $cardsQuery = SttMedicalHistory::query();
//
// if (!empty($searchText)) {
// $cardsQuery = $cardsQuery->search($searchText);
// }
//
// if (!empty($dateExtractFrom)) {
// $cardsQuery = $cardsQuery->whereDate('dateextract', '>=', $dateExtractFrom);
// if (!empty($dateExtractTo)) {
// $cardsQuery = $cardsQuery->whereDate('dateextract', '<=', $dateExtractTo);
// }
// }
//
// $cards = SttMedicalHistoryResource::collection($cardsQuery->paginate($pageSize));
//
// return Inertia::render('Home/Index', [
// 'cards' => $cards,
// 'filters' => $request->only([
// 'search', 'date_extract_from', 'date_extract_to', 'page_size', 'page', 'view_type'
// ]),
// ]);
}
}