1
0
Fork 0
medical-record-server/app/Admin/Services/TotalRecordService.php

73 lines
1.8 KiB
PHP

<?php
namespace App\Admin\Services;
use App\Models\PatientRecord;
use App\ModelFilters\PatientRecordFilter;
use Illuminate\Support\Facades\DB;
class TotalRecordService extends BaseService
{
protected string $modelName = PatientRecord::class;
protected array $withRelationships = ['patient'];
protected string $modelFilterName = PatientRecordFilter::class;
public function getModelFilter()
{
return $this->modelFilterName;
}
public function primaryKey()
{
return 'patient_id';
}
public function sortColumn()
{
return 'patient_id';
}
public function listQuery()
{
$model = $this->getModel();
$filter = $this->getModelFilter();
$query = $this->query();
if ($this->withRelationships) {
$query->with($this->withRelationships);
}
if ($filter) {
$query->filter(request()->input(), $filter);
}
$query->select([
'patient_id',
DB::raw('count(1) as count'),
DB::raw('sum(`origin_price`) as `origin_price`'),
DB::raw('sum(`sell_price`) as `sell_price`'),
DB::raw('min(`treat_at`) as `min_treat_at`'),
DB::raw('max(`treat_at`) as `max_treat_at`'),
])->groupBy('patient_id');
$this->sortable($query);
return $query;
}
public function list()
{
$query = $this->listQuery();
$list = (clone $query)->paginate(request()->input('perPage', 20));
$items = $list->items();
$total = $list->total();
$origin_price = (new PatientRecordService())->listQuery()->sum('origin_price');
$sell_price = (new PatientRecordService())->listQuery()->sum('sell_price');
return compact('items', 'total', 'sell_price', 'origin_price');
}
}