Роли, переделывание отчета, изменение на главной странице

This commit is contained in:
brusnitsyn
2026-01-11 23:37:18 +09:00
parent eb019504d7
commit d4f077cdaf
59 changed files with 2099 additions and 366 deletions

View File

@@ -3,9 +3,13 @@
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Department;
use App\Models\MetrikaForm;
use App\Models\MetrikaGroup;
use App\Models\MetrikaItem;
use App\Models\MetrikaResult;
use App\Models\Report;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
@@ -15,6 +19,64 @@ use Inertia\Inertia;
class StatisticController extends Controller
{
public function index(Request $request)
{
$user = $request->user();
$userDepartment = $user->department;
$data = [];
$departments = Department::select('department_id', 'name_short')->get();
foreach ($departments as $department) {
$allCount = MetrikaResult::whereHas('report', function ($query) use ($userDepartment, $department) {
$query->where('rf_department_id', $department->department_id);
})->where('rf_metrika_item_id', 3)
->sum(DB::raw('value::integer'));
$leaveCount = MetrikaResult::whereHas('report', function ($query) use ($userDepartment, $department) {
$query->where('rf_department_id', $department->department_id);
})->where('rf_metrika_item_id', 7)
->sum(DB::raw('value::integer'));
$consistCount = optional(MetrikaResult::where('rf_metrika_item_id', 8)
->whereHas('report', function (Builder $query) use ($department) {
$query->where('rf_department_id', $department->department_id);
})->join('reports', 'metrika_results.rf_report_id', '=', 'reports.report_id')
->select('metrika_results.value')
->orderBy('reports.sent_at', 'desc')
)->value('value') ?? 0;
$beds = (int)optional($department->metrikaDefault()
->where('rf_metrika_item_id', 1)
->first())->value ?? 0;
$occupiedBeds = (int)optional(Report::where('rf_department_id', $department->department_id)
->join('metrika_results', 'reports.report_id', '=', 'metrika_results.rf_report_id')
->where('metrika_results.rf_metrika_item_id', 8)
->orderBy('reports.sent_at', 'desc')
->first())->value ?? 0;
$percentLoadedBeds = $beds > 0 ? $occupiedBeds * 100 / $beds : 0;
$data[] = [
'department' => $department->name_short,
'beds' => $beds,
'all' => $allCount,
'plan' => '0',
'emergency' => '0',
'leave' => $leaveCount,
'consist' => $consistCount,
'percentLoadedBeds' => $percentLoadedBeds,
];
}
return Inertia::render('Statistic/Index', [
'data' => $data
]);
}
public function indexOld(Request $request)
{
$user = Auth::user();