223 lines
12 KiB
PHP
223 lines
12 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/store.php';
|
|
|
|
$lookupOrder = store_sanitize_line((string)($_GET['order'] ?? ''), 30);
|
|
$lookupEmail = trim(store_lower((string)($_GET['email'] ?? '')));
|
|
$created = (string)($_GET['created'] ?? '') === '1';
|
|
$lastLookup = store_last_order_lookup();
|
|
$currentUser = store_current_user();
|
|
|
|
if ($lookupOrder !== '' && $lookupEmail === '' && ($lastLookup['order_number'] ?? '') === $lookupOrder) {
|
|
$lookupEmail = (string)($lastLookup['email'] ?? '');
|
|
}
|
|
|
|
if ($lookupEmail === '' && $currentUser) {
|
|
$lookupEmail = (string)($currentUser['email'] ?? '');
|
|
}
|
|
|
|
$order = null;
|
|
$searchError = '';
|
|
if ($lookupOrder !== '') {
|
|
if ($lookupEmail === '') {
|
|
$searchError = 'Masukkan email yang dipakai saat checkout untuk membuka detail pesanan.';
|
|
} else {
|
|
$order = store_find_order($lookupOrder, $lookupEmail);
|
|
if (!$order) {
|
|
$searchError = 'Pesanan tidak ditemukan. Pastikan kode pesanan dan email sudah benar.';
|
|
}
|
|
}
|
|
}
|
|
|
|
store_page_start('Status Pesanan', 'Lacak status pesanan menggunakan order number dan email.', ['noindex' => true]);
|
|
?>
|
|
<section class="section-block pt-0">
|
|
<div class="section-heading mb-4">
|
|
<span class="eyebrow">Status Pesanan</span>
|
|
<h1 class="section-title">Lacak progress pesanan pelanggan.</h1>
|
|
<p class="section-copy mb-0">Masukkan kode pesanan dan email untuk melihat item, total, metode pembayaran, dan status terbaru.</p>
|
|
</div>
|
|
|
|
<?php if ($created && ($lastLookup['order_number'] ?? '') !== ''): ?>
|
|
<div class="alert alert-success border-0 shadow-sm mb-4 d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3" role="alert">
|
|
<div>
|
|
<strong>Pesanan berhasil dibuat.</strong>
|
|
<div class="small mt-1">Simpan kode <strong><?= h((string)$lastLookup['order_number']) ?></strong> untuk pelacakan status.</div>
|
|
</div>
|
|
<button type="button" class="btn btn-outline-success btn-sm" data-copy-text="<?= h((string)$lastLookup['order_number']) ?>">Salin kode pesanan</button>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="row g-4 align-items-start">
|
|
<div class="col-lg-4">
|
|
<form action="order_status.php" method="get" class="surface-panel p-4 sticky-summary">
|
|
<div class="card-kicker">Cek pesanan</div>
|
|
<h2 class="h5 mb-3">Cari berdasarkan kode & email</h2>
|
|
<div class="mb-3">
|
|
<label class="form-label" for="order">Kode pesanan</label>
|
|
<input id="order" name="order" type="text" class="form-control" value="<?= h($lookupOrder) ?>" placeholder="contoh: SB260526-1234" required>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label" for="email">Email checkout</label>
|
|
<input id="email" name="email" type="email" class="form-control" value="<?= h($lookupEmail) ?>" required>
|
|
</div>
|
|
<div class="d-grid gap-2">
|
|
<button class="btn btn-dark" type="submit">Tampilkan status</button>
|
|
<a class="btn btn-outline-secondary" href="index.php#catalog">Belanja lagi</a>
|
|
</div>
|
|
|
|
<div class="info-box mt-4 mb-0">
|
|
<div class="card-kicker">Status default</div>
|
|
<div class="status-legend">
|
|
<?php foreach (store_status_steps() as $step): ?>
|
|
<div class="status-legend__item">
|
|
<span class="<?= h(store_status_class($step['value'])) ?>"><?= h($step['label']) ?></span>
|
|
<p class="mb-0"><?= h($step['description']) ?></p>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="col-lg-8">
|
|
<?php if ($searchError !== ''): ?>
|
|
<div class="alert alert-warning border-0 shadow-sm mb-4" role="alert">
|
|
<?= h($searchError) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($order): ?>
|
|
<section class="surface-panel p-4 p-lg-5 mb-4">
|
|
<div class="d-flex flex-column flex-lg-row align-items-lg-start justify-content-between gap-3 mb-4">
|
|
<div>
|
|
<div class="card-kicker">Order detail</div>
|
|
<h2 class="section-title mb-2"><?= h((string)$order['order_number']) ?></h2>
|
|
<p class="section-copy mb-0">Dibuat pada <?= h(store_format_datetime((string)$order['created_at'])) ?></p>
|
|
</div>
|
|
<span class="<?= h(store_status_class((string)$order['status'])) ?>"><?= h((string)$order['status']) ?></span>
|
|
</div>
|
|
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-value metric-value--small"><?= h(store_money((float)$order['grand_total'])) ?></div>
|
|
<div class="metric-label">total pembayaran</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-value metric-value--small"><?= h((string)$order['payment_method_label']) ?></div>
|
|
<div class="metric-label">metode bayar</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-value metric-value--small"><?= h((string)count($order['items'])) ?> item</div>
|
|
<div class="metric-label">jumlah item di order</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-4">
|
|
<div class="col-lg-7">
|
|
<h3 class="h6 text-uppercase text-muted mb-3">Item pesanan</h3>
|
|
<div class="table-responsive">
|
|
<table class="table align-middle table-borderless order-table mb-0">
|
|
<thead>
|
|
<tr>
|
|
<th>Produk</th>
|
|
<th class="text-center">Qty</th>
|
|
<th class="text-end">Total</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($order['items'] as $item): ?>
|
|
<tr>
|
|
<td>
|
|
<strong><?= h((string)$item['name']) ?></strong>
|
|
<div class="small text-muted"><?= h(store_money((float)$item['price'])) ?> / item</div>
|
|
</td>
|
|
<td class="text-center"><?= h((string)$item['quantity']) ?></td>
|
|
<td class="text-end"><?= h(store_money((float)$item['line_total'])) ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<td colspan="2">Subtotal</td>
|
|
<td class="text-end"><?= h(store_money((float)$order['subtotal'])) ?></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">Ongkir</td>
|
|
<td class="text-end"><?= h(store_money((float)$order['shipping_fee'])) ?></td>
|
|
</tr>
|
|
<tr class="fw-semibold">
|
|
<td colspan="2">Grand total</td>
|
|
<td class="text-end"><?= h(store_money((float)$order['grand_total'])) ?></td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-5">
|
|
<div class="info-box mb-3">
|
|
<div class="card-kicker">Data penerima</div>
|
|
<p class="mb-1"><strong><?= h((string)$order['customer_name']) ?></strong></p>
|
|
<p class="mb-1"><?= h((string)$order['email']) ?></p>
|
|
<p class="mb-1"><?= h((string)$order['phone']) ?></p>
|
|
<p class="mb-0"><?= nl2br(h((string)$order['address'])) ?></p>
|
|
</div>
|
|
<div class="info-box mb-0">
|
|
<div class="card-kicker">Instruksi pembayaran</div>
|
|
<p class="mb-2"><?= h((string)$order['payment_instruction']) ?></p>
|
|
<?php if (!empty($order['note'])): ?>
|
|
<div class="note-copy"><strong>Catatan pelanggan:</strong> <?= h((string)$order['note']) ?></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<?php if ((string)$order['status'] !== 'Batal'): ?>
|
|
<?php $currentIndex = store_status_index((string)$order['status']); ?>
|
|
<section class="surface-panel p-4 p-lg-5">
|
|
<div class="card-kicker">Progress pesanan</div>
|
|
<div class="timeline-list mt-3">
|
|
<?php foreach (store_status_steps() as $index => $step): ?>
|
|
<?php
|
|
$stateClass = 'timeline-step';
|
|
if ($index < $currentIndex) {
|
|
$stateClass .= ' is-complete';
|
|
} elseif ($index === $currentIndex) {
|
|
$stateClass .= ' is-current';
|
|
}
|
|
?>
|
|
<div class="<?= h($stateClass) ?>">
|
|
<div class="timeline-step__dot"></div>
|
|
<div>
|
|
<div class="timeline-step__title"><?= h($step['label']) ?></div>
|
|
<p class="timeline-step__copy mb-0"><?= h($step['description']) ?></p>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</section>
|
|
<?php endif; ?>
|
|
<?php else: ?>
|
|
<section class="empty-state-card">
|
|
<span class="eyebrow">Belum ada detail</span>
|
|
<h2 class="section-title">Masukkan kode pesanan untuk melihat status.</h2>
|
|
<p class="section-copy">Setelah checkout berhasil, halaman ini akan menampilkan ringkasan item, total pembayaran, dan progress status order.</p>
|
|
<ul class="list-clean compact-list mt-4 mb-0">
|
|
<li><span class="list-index">1</span><span>Masuk dari checkout otomatis akan mengisi kode pesanan terbaru.</span></li>
|
|
<li><span class="list-index">2</span><span>Untuk kunjungan berikutnya, pelanggan cukup ingat order number dan email.</span></li>
|
|
<li><span class="list-index">3</span><span>Status pesanan kini bisa diperbarui lewat admin lite internal.</span></li>
|
|
</ul>
|
|
</section>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<?php store_page_end(); ?>
|