@extends('layouts.manager') @section('title','Графік по зміні') @section('page_title','Графік по зміні') @push('head') @endpush @section('content') @php $daysCount = count($labels); $shiftLabel = [ 'day' => 'денна', 'evening' => 'вечірня', 'night' => 'нічна', ][$shift] ?? $shift; // режим: tg (коли обраний cabinet_id і ми показуємо по TG по всій базі) $mode = $mode ?? (($cabinetId ?? null) ? 'tg' : 'shift'); // список кабінетів для таблиці: // ✅ у TG-режимі показуємо ті кабінети, де реально є записи (щоб не було плутанини) $tableCabinets = $cabinets; if ($mode === 'tg') { $ids = collect($cabinetTotals)->keys()->map(fn($id) => (int)$id)->all(); $tableCabinets = $cabinets->filter(fn($c) => in_array((int)$c->id, $ids, true)); } // totals для таблиці $totalAllCab = 0; $maxCabVal = 0; foreach ($tableCabinets as $c) { $v = (float)($cabinetTotals[$c->id] ?? 0); $totalAllCab += $v; if ($v > $maxCabVal) $maxCabVal = $v; } // бейдж для "джерела TG" (кабінет, з якого ми взяли TG) $badgeCabName = null; $badgeOpName = null; if (($cabinetId ?? null) && isset($selectedCabinet) && $selectedCabinet) { $badgeCabName = $selectedCabinet->name; $badgeOpName = $selectedOperatorName ?: null; } // avgLine приходит из контроллера, но на всякий случай: $avgLine = $avgLine ?? []; @endphp {{-- Верхний блок: контекст --}}

Графік зміни — {{ $shiftLabel }}

Період: @if($from || $to) {{ $from ?: '—' }}  –  {{ $to ?: '—' }} @else не вибрано (усі дні) @endif @if($daysCount) · Днів у вибірці: {{ $daysCount }} @endif
@if($mode === 'tg' && !empty($selectedTgNorm))
Режим: по TG оператора (незалежно від кабінета/зміни в історії) · Фільтр TG: {{ '@'.$selectedTgNorm }}
Увага: вибір “Кабінет + оператор” використовується лише щоб визначити TG. Далі графік/таблиця будуються по всіх записах цього TG у базі.
@endif
Зміна: {{ $shiftLabel }} @if($mode === 'tg' && ($cabinetId ?? null)) TG взято з кабінета: {{ $badgeCabName ?: ('#'.$cabinetId) }} @if($badgeOpName) ({{ $badgeOpName }}) @endif Дані: всі кабінети (де є записи TG) @else Кабінети: всі @endif
{{-- Фільтри --}}
{{-- KPI картки --}} @if($daysCount)
Разом за період
{{ number_format($sum, 2, '.', ' ') }} $
@if($mode === 'tg' && !empty($selectedTgNorm)) Сума по TG (незалежно від кабінета/зміни в історії) @else Сумарний обʼєм по вибраній зміні @endif
Середнє за день
{{ number_format($avg, 2, '.', ' ') }} $
Середній результат для одного дня
Максимум за день
{{ number_format($max, 2, '.', ' ') }} $
Найсильніший день у вибірці
Мінімум за день
{{ number_format($min, 2, '.', ' ') }} $
Найслабший день у вибірці
@endif {{-- Графік --}}
Динаміка по зміні ({{ $shiftLabel }}) @if($mode === 'tg' && !empty($selectedTgNorm)) — TG {{ '@'.$selectedTgNorm }} @endif
Показує суму за кожен день вибраного періоду. @if($mode === 'tg' && !empty($selectedTgNorm)) (пересадки між кабінетами/змінами не дадуть 0 — рахуємо по TG у всій базі) @endif · Друга лінія — “Середній оператор (по зміні)”
{{-- ✅ Перемикач лінії середнього --}}
@if (!$daysCount)
Немає даних для відображення графіка.
@endif {{-- Таблиця --}}
@if($mode === 'tg' && !empty($selectedTgNorm)) Розподіл по кабінетах для TG {{ '@'.$selectedTgNorm }} @else Розподіл по кабінетах (зміна: {{ $shiftLabel }}) @endif
@if($mode === 'tg' && !empty($selectedTgNorm)) Показує, у яких кабінетах фактично є записи цього TG за період. @else Хто дає найбільший вклад у суму за вибраний період. @endif
@forelse($tableCabinets as $c) @php $val = (float)($cabinetTotals[$c->id] ?? 0); $opName = match($shift) { 'day' => $c->day_operator, 'evening' => $c->evening_operator, 'night' => $c->night_operator, default => null, }; $isTop = $val > 0 && $val === $maxCabVal; $percent = $totalAllCab > 0 ? ($val / $totalAllCab * 100) : 0; @endphp @empty @endforelse
Кабінет / оператор Частка від загальної суми Сума за період, $
{{ $c->name }} @if($isTop) TOP @endif
@if($mode === 'tg' && !empty($selectedTgNorm))
Оператор: {{ $selectedOperatorName ?: '—' }}{{ '@'.$selectedTgNorm }}
@elseif($opName)
Оператор: {{ $opName }}
@endif
Вклад: {{ number_format($percent, 1, '.', ' ') }}%
{{ number_format($val, 2, '.', ' ') }}
Немає записів для вибраних фільтрів.
Разом {{ $totalAllCab > 0 ? '100%' : '0%' }} {{ number_format($totalAllCab, 2, '.', ' ') }}
@endsection @push('body') @endpush