99 lines
4.3 KiB
PHP
99 lines
4.3 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/includes/layout.php';
|
|
require_user_login();
|
|
|
|
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
|
|
$service = $id > 0 ? fetch_service_by_id_for_user(current_user_id(), $id) : null;
|
|
|
|
if (!$service) {
|
|
http_response_code(404);
|
|
}
|
|
|
|
render_page_start([
|
|
'title' => $service ? 'Detail reminder servis' : 'Catatan tidak ditemukan',
|
|
'description' => 'Lihat detail item servis kendaraan beserta status reminder dan jadwal servis berikutnya.',
|
|
'page' => 'detail',
|
|
'robots' => 'noindex, nofollow',
|
|
]);
|
|
render_flash(consume_flash());
|
|
?>
|
|
<section class="py-4 py-lg-5">
|
|
<div class="container">
|
|
<?php if (!$service): ?>
|
|
<div class="surface-card text-center py-5">
|
|
<span class="eyebrow">404</span>
|
|
<h1 class="section-title mt-2">Catatan servis tidak ditemukan</h1>
|
|
<p class="text-secondary mb-4">Catatan ini mungkin bukan milik akun kamu, atau link yang dibuka sudah tidak valid.</p>
|
|
<a class="btn btn-dark" href="<?= e(app_url('dashboard.php')) ?>">Kembali ke dashboard</a>
|
|
</div>
|
|
<?php else: ?>
|
|
<?php $state = due_state($service['next_due_date'] ?? null); ?>
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-8">
|
|
<div class="surface-card detail-card">
|
|
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-start gap-3 mb-4">
|
|
<div>
|
|
<span class="eyebrow">Detail reminder privat</span>
|
|
<h1 class="section-title mt-2 mb-2"><?= e($service['vehicle_name']) ?></h1>
|
|
<p class="text-secondary mb-0"><?= e($service['service_name']) ?><?= !empty($service['plate_number']) ? ' · ' . e($service['plate_number']) : '' ?></p>
|
|
</div>
|
|
<span class="status-pill <?= e($state['class']) ?> large"><?= e($state['label']) ?></span>
|
|
</div>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<div class="detail-box">
|
|
<div class="detail-label">Jenis kendaraan</div>
|
|
<div class="detail-value"><?= e($service['vehicle_category']) ?></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="detail-box">
|
|
<div class="detail-label">Servis terakhir</div>
|
|
<div class="detail-value"><?= e(date('d M Y', strtotime((string) $service['last_service_date']))) ?></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="detail-box">
|
|
<div class="detail-label">Servis berikutnya</div>
|
|
<div class="detail-value"><?= e(date('d M Y', strtotime((string) $service['next_due_date']))) ?></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="surface-subsection mb-4">
|
|
<h2 class="h6 mb-3">Ringkasan reminder</h2>
|
|
<div class="detail-metadata stacked">
|
|
<span>Interval pengingat: <?= (int) $service['reminder_interval_days'] ?> hari</span>
|
|
<span>Status dashboard: <?= e($state['description']) ?></span>
|
|
<span>Kilometer terakhir: <?= $service['odometer_km'] ? number_format((int) $service['odometer_km']) . ' km' : 'Belum dicatat' ?></span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="surface-subsection">
|
|
<h2 class="h6 mb-3">Catatan servis</h2>
|
|
<p class="text-secondary mb-0"><?= $service['notes'] ? e($service['notes']) : 'Belum ada catatan tambahan untuk item servis ini.' ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4">
|
|
<div class="surface-card side-panel mb-3">
|
|
<h2 class="h6 mb-3">Aksi cepat</h2>
|
|
<div class="d-grid gap-2">
|
|
<a class="btn btn-dark" href="<?= e(app_url('dashboard.php')) ?>">Tambah reminder lain</a>
|
|
<a class="btn btn-outline-secondary" href="<?= e(app_url()) ?>">Kembali ke beranda</a>
|
|
</div>
|
|
</div>
|
|
<div class="surface-card muted-panel">
|
|
<h2 class="h6 mb-2">Privasi akun</h2>
|
|
<p class="small text-secondary mb-0">Halaman detail ini hanya menampilkan catatan milik akun yang sedang login, jadi data user lain tidak ikut terlihat.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</section>
|
|
<?php render_page_end(); ?>
|