89 lines
3.7 KiB
PHP
89 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services;
|
|
|
|
use App\Models\AdminUser;
|
|
use App\Models\PatientRecord;
|
|
|
|
class TotalProfitService extends BaseService
|
|
{
|
|
protected string $modelName = AdminUser::class;
|
|
|
|
protected array $withRelationships = [];
|
|
|
|
protected string $modelFilterName = '';
|
|
|
|
public function listQuery()
|
|
{
|
|
$filter = $this->getModelFilter();
|
|
|
|
$query = $this->query();
|
|
if ($this->withRelationships) {
|
|
$query->with($this->withRelationships);
|
|
}
|
|
|
|
if ($filter) {
|
|
$query->filter(request()->input(), $filter);
|
|
}
|
|
$request = request();
|
|
if ($request->filled('id')) {
|
|
$id = $request->input('id');
|
|
$query->whereIn('id', is_array($id) ? $id : explode(',', $id));
|
|
}
|
|
$subQuery = fn ($q) => $q->filter(request()->except(['id']));
|
|
$query->select(['id', 'name'])->with([
|
|
'doctors' => $subQuery,
|
|
'inviters' => $subQuery,
|
|
'salers' => $subQuery
|
|
]);
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$query = $this->listQuery();
|
|
$list = (clone $query)->paginate(request()->input('perPage', 20));
|
|
|
|
$items = collect($list->items())->map(function ($item) {
|
|
$item['doctor_money'] = round($item->doctors->sum('doctor_money'), 2, PHP_ROUND_HALF_DOWN);
|
|
$item['inviter_money'] = round($item->inviters->sum('inviter_money'), 2, PHP_ROUND_HALF_DOWN);
|
|
$item['saler_money'] = round($item->salers->sum('saler_money'), 2, PHP_ROUND_HALF_DOWN);
|
|
$item['records_count'] = floor($item->doctors->count() + $item->inviters->count() + $item->salers->count());
|
|
$item['total_money'] = round($item['doctor_money'] + $item['inviter_money'] + $item['saler_money'], 2, PHP_ROUND_HALF_DOWN);
|
|
return $item;
|
|
});
|
|
$doctorQuery = PatientRecord::filter([
|
|
'type_id' => request('type_id'),
|
|
'treat_range' => request('treat_range'),
|
|
'doctor_id' => request('id')
|
|
]);
|
|
$inviterQuery = PatientRecord::filter([
|
|
'type_id' => request('type_id'),
|
|
'treat_range' => request('treat_range'),
|
|
'inviter_id' => request('id')
|
|
]);
|
|
$salerQuery = PatientRecord::filter([
|
|
'type_id' => request('type_id'),
|
|
'treat_range' => request('treat_range'),
|
|
'saler_id' => request('id')
|
|
]);
|
|
$records_count = $doctorQuery->count() + $inviterQuery->count() + $salerQuery->count();
|
|
$doctor_money = $doctorQuery->sum('doctor_money');
|
|
$inviter_money = $inviterQuery->sum('inviter_money');
|
|
$saler_money = $salerQuery->sum('saler_money');
|
|
$total_money = round($doctor_money + $inviter_money + $saler_money, 2, PHP_ROUND_HALF_DOWN);
|
|
// $allList = (clone $query)->get();
|
|
// $records_count = $allList->sum(fn ($item) => $item->doctors->count() + $item->inviters->count() + $item->salers->count());
|
|
// $doctor_money = round($allList->sum(fn ($item) => $item->doctors->sum('doctor_money')), 2, PHP_ROUND_HALF_DOWN);
|
|
// $inviter_money = round($allList->sum(fn ($item) => $item->inviters->sum('inviter_money')), 2, PHP_ROUND_HALF_DOWN);
|
|
// $saler_money = round($allList->sum(fn ($item) => $item->salers->sum('saler_money')), 2, PHP_ROUND_HALF_DOWN);
|
|
// $total_money = round($allList->sum(fn ($item) => $item->salers->sum('saler_money') + $item->inviters->sum('inviter_money') + $item->doctors->sum('doctor_money')), 2, PHP_ROUND_HALF_DOWN);
|
|
$total = $list->total();
|
|
|
|
$this->sortable($query);
|
|
|
|
return compact('items', 'total', 'records_count', 'doctor_money', 'inviter_money', 'saler_money', 'total_money');
|
|
}
|
|
}
|