diff --git a/app/Livewire/Member/MyVouchers.php b/app/Livewire/Member/MyVouchers.php index 7f3fc6e..817bcfd 100644 --- a/app/Livewire/Member/MyVouchers.php +++ b/app/Livewire/Member/MyVouchers.php @@ -14,7 +14,7 @@ class MyVouchers extends Component { public array $myVouchers = []; - public function mount() + public function mount(): void { $this->myVouchers = auth()->user()->vouchers() ->withPivot('quantity', 'created_at') diff --git a/app/Livewire/Member/OrderHistory.php b/app/Livewire/Member/OrderHistory.php new file mode 100644 index 0000000..cabaf7e --- /dev/null +++ b/app/Livewire/Member/OrderHistory.php @@ -0,0 +1,49 @@ +orders = Order::where('customer_id', auth()->user()->customer->id) + ->with(['items.orderable']) + ->latest() + ->get() + ->map(function ($order) { + $order->status_color = $order->status->color(); + $order->status_label = $order->status->label(); + $order->formatted_created_at = formatDateLocalized($order->created_at); + $order->formatted_total = formatCurrencyNumber($order->total, 'Rp'); + $order->total_items_count = $order->items->count(); + $order->preview_items = $order->items->take(2)->map(function ($item) { + return [ + 'name' => $item->orderable->name ?? 'Unknown Item', + 'quantity_label' => ! empty($item->quality) ? $item->quality : 'x'.$item->quantity, + ]; + }); + $order->remaining_items_count = max(0, $order->items->count() - 2); + + return $order; + }) + ->toArray(); + } + + public function render(): View + { + return view('livewire.member.order-histories', [ + 'pageTitle' => 'Riwayat Pesanan', + 'pageDescription' => 'Lihat riwayat pesanan dan status pembayaran Anda.', + ]); + } +} diff --git a/resources/views/components/sections/ui/member/_sidebar.blade.php b/resources/views/components/sections/ui/member/_sidebar.blade.php index d2af4a4..370f18c 100644 --- a/resources/views/components/sections/ui/member/_sidebar.blade.php +++ b/resources/views/components/sections/ui/member/_sidebar.blade.php @@ -16,6 +16,9 @@ class="bg-zinc-50 dark:bg-zinc-900 border-r rtl:border-r-0 rtl:border-l border-z Voucher Saya + + Riwayat Pesanan Penukaran Poin diff --git a/resources/views/livewire/member/order-histories.blade.php b/resources/views/livewire/member/order-histories.blade.php new file mode 100644 index 0000000..a3dffa0 --- /dev/null +++ b/resources/views/livewire/member/order-histories.blade.php @@ -0,0 +1,79 @@ + + {{ $pageTitle }} + {{ $pageDescription }} + + @if (empty($orders)) + + + + Belum Ada Pesanan + + Anda belum melakukan pemesanan apapun. Mulai belanja sekarang! + + + + @else + + @foreach ($orders as $order) + + {{-- Badge Status --}} + + + {{ $order['status_label'] }} + + + + {{-- Order Header --}} + + Order #{{ $order['invoice_number'] }} + + + {{-- Date --}} + + + + {{ $order['formatted_created_at'] }} + + + + {{-- Items Count --}} + + + + {{ $order['total_items_count'] }} Produk + + + + {{-- Total Amount --}} + + + + {{ $order['formatted_total'] }} + + + + + + + {{-- Items Preview --}} + + Ringkasan Pesanan + + @foreach ($order['preview_items'] as $item) + + {{ $item['name'] }} + {{ $item['quantity_label'] }} + + @endforeach + @if ($order['remaining_items_count'] > 0) + + +{{ $order['remaining_items_count'] }} item lainnya + + @endif + + + @endforeach + + @endif + diff --git a/resources/views/livewire/studio/manage/order/form.blade.php b/resources/views/livewire/studio/manage/order/form.blade.php index 773be1e..7378b3a 100644 --- a/resources/views/livewire/studio/manage/order/form.blade.php +++ b/resources/views/livewire/studio/manage/order/form.blade.php @@ -299,7 +299,7 @@ Rp + wire:model.live="form.discount" autocomplete="off" /> diff --git a/routes/pages/member.php b/routes/pages/member.php index 2606f64..de544ff 100644 --- a/routes/pages/member.php +++ b/routes/pages/member.php @@ -2,6 +2,7 @@ use App\Livewire\Member\Membership; use App\Livewire\Member\MyVouchers; +use App\Livewire\Member\OrderHistory; use App\Livewire\Member\Overview; use App\Livewire\Member\RedeemPoint; use App\Livewire\Member\Referral; @@ -16,6 +17,7 @@ Route::get('memberships', Membership::class)->name('membership'); Route::get('my-vouchers', MyVouchers::class)->name('my_vouchers'); + Route::get('order-histories', OrderHistory::class)->name('order_history'); Route::get('redeem-points', RedeemPoint::class)->name('redeem_point'); Route::get('referrals', Referral::class)->name('referral'); Route::get('settings', Account::class)->name('setting');