@extends('layouts.manager') @section('title','Datame — цілі на місяць') @section('page_title','Datame — цілі на місяць') @push('head') @endpush @section('content') {{-- ПЛАН ПО БОНУСАМ НА МІСЯЦЬ --}}
📅 План по бонусам на місяць

Обери місяць, щоб побачити загальну ціль та розподіл по нічній, денній та вечірній змінах.

{{ \Carbon\Carbon::now(config('app.timezone','Europe/Kyiv'))->translatedFormat('d F Y') }}

Обраний місяць: {{ $summary['month_label'] }}, днів у місяці: {{ $summary['days'] }}

{{-- ✅ НОВОЕ: ПРОГРЕСС ЗА МЕСЯЦ --}}
Прогрес за місяць
{{ (int)($summary['month_progress'] ?? 0) }}%
Зроблено: ${{ number_format((float)($summary['month_earned'] ?? 0), 2) }} План: ${{ number_format((float)($summary['month_total'] ?? 0), 2) }} Залишилось: ${{ number_format((float)($summary['month_remaining'] ?? 0), 2) }}
{{-- ЩОДЕННА ЦІЛЬ / ЦІЛЬ ЗА МІСЯЦЬ --}}
{{-- ЩОДЕННА ЦІЛЬ --}}
📆
Щоденна ціль
Мінімальний добовий бонус, щоб впевнено вийти на план.
daily
${{ number_format($summary['daily_target'],2) }}
Якщо стабільно тримати цю суму щодня — місячний план буде закритий.
{{-- ЦІЛЬ ЗА МІСЯЦЬ --}}
🎯
Ціль за місяць
Загальний бонус по всім змінам за обраний місяць.
month
${{ number_format($summary['month_total'],2) }}
Орієнтир, до якого веде щоденна ціль та робота по всіх змінах.

{{-- ЦІЛІ ПО ЗМІНАХ (ЗА МІСЯЦЬ) --}}
Цілі по змінах (за місяць)
Можна швидко побачити, чи не просідає якась конкретна зміна.
{{-- Нічна зміна --}}
🌙 Ніч
02:00 – 10:00
нічна зміна
На день ${{ number_format($summary['night_target'],2) }}
За місяць {{ number_format($summary['night_total'],2) }}
{{-- Денна зміна --}}
🌤 День
10:00 – 18:00
денна зміна
На день ${{ number_format($summary['day_target'],2) }}
За місяць {{ number_format($summary['day_total'],2) }}
{{-- Вечірня зміна --}}
🌇 Вечір
18:00 – 02:00
вечірня зміна
На день ${{ number_format($summary['evening_target'],2) }}
За місяць {{ number_format($summary['evening_total'],2) }}
{{-- DATAME ЗА ОБРАНИЙ ДЕНЬ --}} @if(!empty($datame)) @php $tz = config('app.timezone','Europe/Kyiv'); $selectedDateRaw = $selectedDateRaw ?? null; $selectedDate = $selectedDateLabel ?? null; $diff = $datame['target'] - $datame['total']; $datameDateForShifts = \Carbon\Carbon::parse($selectedDateRaw, $tz)->startOfDay(); $now = \Carbon\Carbon::now($tz); @endphp
⚡ Datame — бонуси за {{ $selectedDate }}

Обрана дата: {{ $selectedDate }}

За день закрито {{ $datame['progress'] }}% від добової цілі
Сьогодні
@if($datame['target'] > 0) @if($diff > 0) Залишилось до цілі: ${{ number_format($diff,2) }} @else Перевиконано на: ${{ number_format(abs($diff),2) }} @endif @endif
{{-- Тотал + ціль + прогрес --}}
Поточний бонус
${{ number_format($datame['total'],2) }}
Сумарно по всіх логінах за цю дату
Ціль за добу
${{ number_format($datame['target'],0) }}
Прогрес за день {{ $datame['progress'] }}%

Розподіл по змінах за день
Поточний прогрес по кожній зміні + прогноз або підсумок.
@foreach($datame['shifts'] as $key => $shift) @php $isActive = false; $isFuture = false; $isFinished = false; $shiftStart = null; $shiftEnd = null; if ($key === 'night') { $shiftStart = $datameDateForShifts->copy()->setTime(2, 0, 0); $shiftEnd = $datameDateForShifts->copy()->setTime(10, 0, 0); } elseif ($key === 'day') { $shiftStart = $datameDateForShifts->copy()->setTime(10, 0, 0); $shiftEnd = $datameDateForShifts->copy()->setTime(18, 0, 0); } elseif ($key === 'evening') { $shiftStart = $datameDateForShifts->copy()->setTime(18, 0, 0); $shiftEnd = $datameDateForShifts->copy()->addDay()->setTime(2, 0, 0); } if ($shiftStart && $shiftEnd) { if ($now->between($shiftStart, $shiftEnd)) { $isActive = true; } elseif ($now->lt($shiftStart)) { $isFuture = true; } elseif ($now->gt($shiftEnd)) { $isFinished = true; } } $shiftDiff = $shift['target'] - $shift['total']; $elapsedFraction = 0.0; $predictionPercent = null; $predictedShiftTotal = null; if ($isActive && $shift['target'] > 0 && $shift['total'] > 0 && $shiftStart && $shiftEnd) { $totalMinutes = $shiftStart->diffInMinutes($shiftEnd); $elapsedMinutes = $shiftStart->diffInMinutes($now); $elapsedMinutes = max(0, min($totalMinutes, $elapsedMinutes)); $elapsedFraction = $totalMinutes > 0 ? $elapsedMinutes / $totalMinutes : 0; if ($elapsedFraction > 0) { $predictedShiftTotal = $shift['total'] / $elapsedFraction; $predictionPercent = $predictedShiftTotal > 0 ? (int) round(($predictedShiftTotal / $shift['target']) * 100) : 0; } } @endphp
{{ $shift['label'] }} @if($isActive) зміна зараз у роботі @endif
${{ number_format($shift['total'],2) }} Ціль: ${{ number_format($shift['target'],2) }}
@if($shift['target'] > 0) @if($isActive)
Якщо тримати такий темп до кінця зміни, очікуваний результат:
@if($predictionPercent !== null && $predictedShiftTotal !== null && $elapsedFraction > 0) ≈ ${{ number_format($predictedShiftTotal,2) }} ({{ $predictionPercent }}% від цілі) @else Поки що замало даних для коректного прогнозу @endif
@elseif($isFinished)
Підсумок по зміні:
@php $progress = (int)$shift['progress']; $target = (float)$shift['target']; $total = (float)$shift['total']; $missingAmount = max(0, $target - $total); $missingPercent = $progress < 100 ? (100 - $progress) : 0; $overAmount = $progress > 100 ? max(0, $total - $target) : 0; @endphp
@if($progress >= 100) Зміну закрито на {{ $progress }}% @if($overAmount > 0) (перевиконано +${{ number_format($overAmount,2) }}) @endif @else Не вистачило {{ $missingPercent }}% (-${{ number_format($missingAmount,2) }}) щоб закрити зміну на 100% @endif
@endif @else
Ціль не задана для цієї зміни.
@endif
@php $timeLeftLabel = null; if ($shiftStart && $shiftEnd) { if ($now->between($shiftStart, $shiftEnd)) { $remainingMinutes = $now->diffInMinutes($shiftEnd); $hoursLeft = intdiv($remainingMinutes, 60); $minutesLeft = $remainingMinutes % 60; $timeLeftLabel = 'До кінця зміни залишилось ' . $hoursLeft . ':' . str_pad($minutesLeft, 2, '0', STR_PAD_LEFT); } elseif ($now->lt($shiftStart)) { $remainingMinutes = $now->diffInMinutes($shiftStart); $hoursLeft = intdiv($remainingMinutes, 60); $minutesLeft = $remainingMinutes % 60; $timeLeftLabel = 'До початку зміни залишилось ' . $hoursLeft . ':' . str_pad($minutesLeft, 2, '0', STR_PAD_LEFT); } else { $timeLeftLabel = 'Зміна вже завершилась'; } } @endphp @if($timeLeftLabel) {{ $timeLeftLabel }} @endif
@if(!empty($shift['hours']))
Погодинний розподіл:
@foreach($shift['hours'] as $h)
{{ $h['label'] }} ${{ number_format($h['amount'],2) }}
@endforeach
@endif
@endforeach
@endif @endsection