Beranda

Ringkasan operasional cattery dan pemantauan kondisi kucing.

@foreach([ ['Total kucing aktif',$stats['total_cats'] ?? 0,'fa-cat','cats.index'], ['Dalam perawatan',$stats['sick_cats'] ?? 0,'fa-heart-pulse','cats.index'], ['Masa kehamilan',$stats['total_mating'] ?? 0,'fa-venus-mars','matting.index'], ['Total anakan',$stats['total_kittens'] ?? 0,'fa-paw','matting.index'] ] as $i=>$card)

{{ $card[0] }}

{{ $card[1] }}

@endforeach
{{-- PEMANTAUAN BERAT BADAN - REVISION 3 --}}

Pemantauan Berat Badan

Pantau perkembangan berat badan kucing secara ringkas dan mudah dibaca.

@php $weightCards = [ [ 'label' => 'Total Ditimbang Bulan Ini', 'value' => (int) data_get($weightKpis ?? [], 'weighed.value', 0), 'suffix' => 'kucing', 'change' => (float) data_get($weightKpis ?? [], 'weighed.change', 0), 'hasComparison' => true, 'icon' => 'fa-paw', 'box' => 'bg-blue-50/70 border-blue-100', 'iconBox' => 'bg-blue-100 text-blue-600', ], [ 'label' => 'Rata-rata Kitten', 'value' => (float) data_get($weightKpis ?? [], 'categories.Kitten.average', 0), 'suffix' => 'kg', 'change' => (float) data_get($weightKpis ?? [], 'categories.Kitten.change', 0), 'hasComparison' => (bool) data_get($weightKpis ?? [], 'categories.Kitten.has_comparison', false), 'icon' => 'fa-cat', 'box' => 'bg-indigo-50/70 border-indigo-100', 'iconBox' => 'bg-indigo-100 text-indigo-600', ], [ 'label' => 'Rata-rata Junior', 'value' => (float) data_get($weightKpis ?? [], 'categories.Junior.average', 0), 'suffix' => 'kg', 'change' => (float) data_get($weightKpis ?? [], 'categories.Junior.change', 0), 'hasComparison' => (bool) data_get($weightKpis ?? [], 'categories.Junior.has_comparison', false), 'icon' => 'fa-cat', 'box' => 'bg-rose-50/70 border-rose-100', 'iconBox' => 'bg-rose-100 text-rose-600', ], [ 'label' => 'Rata-rata Dewasa', 'value' => (float) data_get($weightKpis ?? [], 'categories.Dewasa.average', 0), 'suffix' => 'kg', 'change' => (float) data_get($weightKpis ?? [], 'categories.Dewasa.change', 0), 'hasComparison' => (bool) data_get($weightKpis ?? [], 'categories.Dewasa.has_comparison', false), 'icon' => 'fa-cat', 'box' => 'bg-emerald-50/70 border-emerald-100', 'iconBox' => 'bg-emerald-100 text-emerald-600', ], ]; @endphp
@foreach($weightCards as $card) @php $isCount = $card['suffix'] === 'kucing'; $change = $card['change']; $positive = $change >= 0; @endphp

{{ $card['label'] }}

{{ $isCount ? number_format($card['value'], 0) : number_format($card['value'], 1, ',', '.') }}

{{ $card['suffix'] }}
@if($card['hasComparison'])

{{ $positive ? '+' : '' }}{{ number_format($change, 1, ',', '.') }}% dari bulan lalu

@else

Belum ada pembanding bulan lalu

@endif
@endforeach

Rata-rata per kategori

Rata-rata berat terakhir setiap kucing pada masing-masing bulan.

Tren kategori terpilih

Maksimal 6 kucing dengan data terlengkap agar grafik tetap mudah dibaca.

@foreach(['Kitten','Junior','Dewasa'] as $category) @php $tabQuery = array_merge(request()->except('page', 'trend_category'), [ 'weight_focus' => 1, 'trend_category' => $category, ]); @endphp {{ $category }} @endforeach
@if(count($weightTrendSeries ?? []) > 0) @else

Belum ada tren {{ $weightTrendCategory ?? 'kategori ini' }}

Tambahkan minimal satu pencatatan berat pada periode yang dipilih.

@endif

Berat Terakhir

Daftar berat terbaru, perubahan dari pencatatan sebelumnya, dan tanggal timbang.

Tampilkan data
@can('check-access', ['cats','update']) Perbarui berat @endcan
@forelse(($weightLatestTable ?? collect()) as $item) @php $photoUrl = $item['photo'] ? \Illuminate\Support\Facades\Storage::url($item['photo']) : asset('images/default-cat.png'); $change = $item['change']; @endphp @empty @endforelse
Nama Kucing Kategori Berat Terakhir Perubahan Tanggal
Foto {{ $item['name'] }}

{{ $item['name'] }}

{{ $item['gender'] ?: '-' }}

@php $badge = match($item['category']) { 'Kitten' => 'bg-blue-50 text-blue-700 ring-blue-100', 'Junior' => 'bg-rose-50 text-rose-700 ring-rose-100', default => 'bg-emerald-50 text-emerald-700 ring-emerald-100', }; @endphp {{ $item['category'] }} {{ number_format($item['latest'], 2, ',', '.') }} kg @if($change === null) Belum ada pembanding @elseif($change > 0) +{{ number_format($change, 2, ',', '.') }} kg @elseif($change < 0) {{ number_format($change, 2, ',', '.') }} kg @else 0,00 kg @endif {{ \Carbon\Carbon::parse($item['date'])->translatedFormat('d M Y') }}
Belum ada data berat pada periode yang dipilih.

Perubahan berat yang perlu diperhatikan

Kenaikan dan penurunan berdasarkan dua pencatatan terakhir dalam periode {{ $weightPeriodLabel ?? '-' }}.

@foreach(['Kitten','Junior','Dewasa'] as $category) @php $movement = data_get($weightMovements ?? [], $category, ['gainers'=>collect(),'losers'=>collect()]); @endphp

{{ $category }}

Kenaikan

@forelse($movement['gainers'] as $row)
{{ $row['name'] }}+{{ number_format($row['change'],2,',','.') }} kg
@empty

Tidak ada kenaikan tercatat.

@endforelse

Penurunan

@forelse($movement['losers'] as $row)
{{ $row['name'] }}{{ number_format($row['change'],2,',','.') }} kg
@empty

Tidak ada penurunan tercatat.

@endforelse
@endforeach

Perkiraan kelahiran

Perkawinan aktif dengan perkiraan lahir sekitar 63 hari setelah kawin.

Lihat semua

Jadwal yang terlambat

Perlu ditindaklanjuti dari data kucing.

@php $labels=['vaccine'=>'Vaksin','flea'=>'Obat kutu','deworming'=>'Obat cacing','grooming'=>'Grooming']; @endphp @foreach($overdueAlerts as $key=>$data)

{{ $labels[$key] ?? $key }}

{{ $data['count'] }}

@endforeach

Stok menipis

@forelse(($lowStock ?? collect())->take(8) as $item) {{ $item->name }} {{ (float)$item->qty }} {{ $item->unit }} @empty
Tidak ada stok kritis.
@endforelse

Mendekati kedaluwarsa

@push('scripts') @endpush