238 lines
8.9 KiB
PHP
238 lines
8.9 KiB
PHP
@extends('layout.app')
|
|
|
|
@section('title', 'Validasi Rekomendasi')
|
|
|
|
@include('admin.shared.admin-styles')
|
|
|
|
@section('content')
|
|
<div class="admin-container container-fluid">
|
|
<!-- Page Header -->
|
|
<div class="page-header animate-fade-in">
|
|
<div class="row align-items-center">
|
|
<div class="col-12">
|
|
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
|
<div>
|
|
<h3 class="mb-1 text-white d-flex align-items-center">
|
|
<i class="fas fa-check-circle me-2"></i>Validasi Rekomendasi
|
|
</h3>
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb mb-0">
|
|
<li class="breadcrumb-item"><a href="{{ route('admindash') }}" class="text-white-50">Dashboard</a></li>
|
|
<li class="breadcrumb-item active text-white" aria-current="page">Validasi Rekomendasi</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
<div class="d-flex gap-2">
|
|
<a href="{{ route('validasi.export') }}" class="admin-btn btn-success">
|
|
<i class="fas fa-file-excel me-1"></i>Export Excel
|
|
</a>
|
|
<form action="{{ route('validasi.bandingkan') }}" method="POST" class="d-inline">
|
|
@csrf
|
|
<button type="submit" class="admin-btn btn-primary">
|
|
<i class="fas fa-sync-alt me-1"></i>Bandingkan
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Statistik -->
|
|
<div class="row g-4 mb-4">
|
|
<div class="col-12 col-md-6 col-lg-3">
|
|
<div class="stat-card bg-primary">
|
|
<div class="stat-icon">
|
|
<i class="fas fa-check-circle"></i>
|
|
</div>
|
|
<div class="stat-details">
|
|
<div class="stat-value">{{ $lebihBaik }}</div>
|
|
<div class="stat-label">Lebik baik</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 col-md-6 col-lg-3">
|
|
<div class="stat-card bg-warning">
|
|
<div class="stat-icon">
|
|
<i class="fas fa-exclamation-circle"></i>
|
|
</div>
|
|
<div class="stat-details">
|
|
<div class="stat-value">{{ $setara }}</div>
|
|
<div class="stat-label">Setara</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 col-md-6 col-lg-3">
|
|
<div class="stat-card bg-danger">
|
|
<div class="stat-icon">
|
|
<i class="fas fa-times-circle"></i>
|
|
</div>
|
|
<div class="stat-details">
|
|
<div class="stat-value">{{ $lebihBuruk }}</div>
|
|
<div class="stat-label">Lebih Buruk</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 col-md-6 col-lg-3">
|
|
<div class="stat-card bg-success">
|
|
<div class="stat-icon">
|
|
<i class="fas fa-percentage"></i>
|
|
</div>
|
|
<div class="stat-details">
|
|
<div class="stat-value">{{ number_format($persentaseCocok, 2) }}%</div>
|
|
<div class="stat-label">Persentase Kecocokan</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Filter -->
|
|
<div class="card mb-4">
|
|
<div class="card-body">
|
|
<form action="{{ route('validasi.index') }}" method="GET" class="row g-3">
|
|
<div class="col-md-4">
|
|
<label for="hari" class="form-label">Hari</label>
|
|
<select name="hari" id="hari" class="form-select">
|
|
<option value="">Semua Hari</option>
|
|
@foreach(['Senin','Selasa','Rabu','Kamis','Jumat','Sabtu','Minggu'] as $h)
|
|
<option value="{{ $h }}" {{ request('hari') == $h ? 'selected' : '' }}>{{ $h }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label for="waktu_makan_id" class="form-label">Waktu Makan</label>
|
|
<select name="waktu_makan_id" id="waktu_makan_id" class="form-select">
|
|
<option value="">Semua Waktu Makan</option>
|
|
@foreach($waktuMakans as $waktu)
|
|
<option value="{{ $waktu->id }}" {{ request('waktu_makan_id') == $waktu->id ? 'selected' : '' }}>
|
|
{{ $waktu->nama }}
|
|
</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="col-md-4 d-flex align-items-end">
|
|
<button type="submit" class="btn btn-primary me-2">
|
|
<i class="fas fa-filter me-1"></i>Filter
|
|
</button>
|
|
<a href="{{ route('validasi.index') }}" class="btn btn-secondary">
|
|
<i class="fas fa-undo me-1"></i>Reset
|
|
</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tabel Hasil -->
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Hari</th>
|
|
<th>Waktu Makan</th>
|
|
<th>Komponen</th>
|
|
<th>Makanan Pakar</th>
|
|
<th>Makanan Sistem</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@php
|
|
$komponenUrutan = ['Karbohidrat', 'Protein', 'Sayur', 'Buah', 'Susu', 'Snack'];
|
|
$grouped = $validasi->groupBy(['hari', 'waktu_makan_id']);
|
|
@endphp
|
|
|
|
@forelse($grouped as $hari => $waktuGroup)
|
|
@foreach($waktuGroup as $waktuMakanId => $items)
|
|
@php
|
|
$waktuNama = $items->first()->waktuMakan->nama ?? '-';
|
|
$komponenData = collect($items)->keyBy(fn($item) => $item->komponen->nama);
|
|
@endphp
|
|
<tr class="table-primary">
|
|
<td colspan="6"><strong>{{ $hari }} - {{ $waktuNama }}</strong></td>
|
|
</tr>
|
|
@foreach($komponenUrutan as $komponen)
|
|
@php
|
|
$v = $komponenData->get($komponen);
|
|
@endphp
|
|
<tr>
|
|
<td></td>
|
|
<td></td>
|
|
<td>{{ $komponen }}</td>
|
|
<td>{{ $v?->makananPakar->nama ?? '-' }}</td>
|
|
<td>
|
|
@if($v && is_array($v->makanan_sistem_ids) && count($v->makanan_sistem_ids) > 0)
|
|
@foreach($v->makanan_sistem_ids as $id)
|
|
<span class="badge bg-info">{{ \App\Models\Makanan::find($id)?->nama ?? 'Tidak Ditemukan' }}</span>
|
|
@endforeach
|
|
@else
|
|
<span class="text-muted">Tidak ada data</span>
|
|
@endif
|
|
</td>
|
|
<td>
|
|
@if($v)
|
|
@switch($v->status_kecocokan)
|
|
@case('lebih_baik')
|
|
<span class="badge bg-success">✅ Lebih Baik</span>
|
|
@break
|
|
@case('setara')
|
|
<span class="badge bg-warning">⚠️ Setara</span>
|
|
@break
|
|
@case('lebih_buruk')
|
|
<span class="badge bg-danger">❌ Lebih Buruk</span>
|
|
@break
|
|
@endswitch
|
|
@else
|
|
<span class="text-muted">-</span>
|
|
@endif
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
@endforeach
|
|
@empty
|
|
<tr>
|
|
<td colspan="6" class="text-center">Belum ada data validasi</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.stat-card {
|
|
padding: 1.5rem;
|
|
border-radius: 1rem;
|
|
color: white;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 1.5rem;
|
|
transition: transform 0.3s ease;
|
|
}
|
|
.stat-card:hover {
|
|
transform: translateY(-5px);
|
|
}
|
|
.stat-icon {
|
|
font-size: 2.5rem;
|
|
opacity: 0.9;
|
|
}
|
|
.stat-details {
|
|
flex-grow: 1;
|
|
}
|
|
.stat-value {
|
|
font-size: 1.75rem;
|
|
font-weight: 600;
|
|
margin-bottom: 0.25rem;
|
|
}
|
|
.stat-label {
|
|
margin-bottom: 0;
|
|
opacity: 0.9;
|
|
font-size: 0.9rem;
|
|
}
|
|
</style>
|
|
@endsection
|