@extends('layouts.staff') @section('content') {{-- LOGIC PHP: TENTUKAN TAB MANA AKTIF --}} @php // Default tab $activeTab = 'customers'; // Jika ada request 'tab' dari URL if (request()->has('tab')) { $activeTab = request('tab'); } // Jika ada filter 'activity_type' atau 'date', PAKSA buka tab activities if (request()->has('activity_type') || request()->has('date')) { $activeTab = 'activities'; } @endphp
{{-- PAGE HEADER --}}

Loyalty & Rewards Management

Monitor customer loyalty points, rewards activities, and manage vouchers

{{-- KEY METRICS --}}
{{-- Total Points Distributed --}}

Total Points Distributed

{{ number_format($totalPointsDistributed) }}

{{-- Total Points Redeemed --}}

Points Redeemed

{{ number_format($totalPointsRedeemed) }}

{{-- Rental Vouchers --}}

Rental Vouchers

{{ $rentalVouchers->count() }}

{{-- Total Members --}}

Loyalty Members

{{ $loyaltyStats->count() }}

{{-- TABS NAVIGATION --}}
{{-- TAB 1: CUSTOMER LOYALTY LIST --}}

All Customers Loyalty Points

@forelse($loyaltyStats as $index => $loyalty) @empty @endforelse
# Customer Name Loyalty Points Tier Vouchers Action
{{ $index + 1 }}
{{ substr($loyalty->customer->fullName ?? 'G', 0, 1) }}

{{ $loyalty->customer->fullName ?? 'N/A' }}

{{ $loyalty->customer->email ?? 'N/A' }}

{{ number_format($loyalty->points) }} {{ $loyalty->tier }} @php $voucherCount = \App\Models\Voucher::where('customerID', $loyalty->user_id)->count(); @endphp {{ $voucherCount }} View Details

No loyalty data yet

{{-- TAB 2: TIER BREAKDOWN --}}

Member Tier Distribution

{{-- Bronze --}}

Bronze

{{ $tierBreakdown['Bronze'] }}

0 - 999 points

{{-- Silver --}}

Silver

{{ $tierBreakdown['Silver'] }}

1000 - 2499 points

{{-- Gold --}}

Gold

{{ $tierBreakdown['Gold'] }}

2500 - 4999 points

{{-- Platinum --}}

Platinum

{{ $tierBreakdown['Platinum'] }}

5000+ points

{{-- Top Performers --}}

Top 10 Performers

@foreach($topPerformers as $index => $performer)
{{ $index + 1 }}

{{ $performer->customer->fullName ?? 'N/A' }}

{{ $performer->tier }}

{{ number_format($performer->points) }}
@endforeach
{{-- TAB 3: REWARDS & VOUCHERS --}}
{{-- A. MANAGE REWARDS (INTERFACE DINAMIK) --}}

Manage Rewards & Milestones

Add merchant rewards (redeem points) OR milestones (auto-reward based on booking count).

{{-- ADD REWARD FORM --}}

Add New Reward / Milestone

@csrf
{{-- Name --}}
{{-- Offer --}}
{{-- INPUT DINAMIK: PILIH SALAH SATU --}}
{{-- Extra Fields --}}
{{-- REWARDS TABLE --}}
@foreach($manageRewards as $reward) @csrf @method('PUT') {{-- 1. Name --}} {{-- 2. Offer --}} {{-- 3. Target Step (Milestone) --}} {{-- 4. POINTS COST (LOGIC BARU: NOT APPLICABLE) --}} {{-- 5. Discount % --}} {{-- 6. Active --}} {{-- 7. Actions --}} @endforeach
Reward Name Description Target Stamps Points Cost Discount % Active Actions
@if($reward->category == 'Milestone' || $reward->milestone_step > 0) {{-- Kalau Milestone, Tunjuk N/A dan hantar value 0 --}} NOT APPLICABLE @else {{-- Kalau Reward Biasa, Boleh Edit Points --}} @endif % is_active ? 'checked' : '' }}>
{{-- ========================================================= --}} {{-- SECTION B: MANAGE VOUCHERS (SPECIFIC CODES) --}} {{-- ========================================================= --}}
{{-- Header Section --}}

List of Vouchers

List of discount codes for rental or merchant redemptions.

{{-- Sub-Section: Rental Vouchers List --}}

Rental Discount Vouchers

{{ $rentalVouchers->count() }}
@forelse($rentalVouchers as $voucher) @empty @endforelse
Code Discount Valid Range Status Actions
{{ $voucher->code }} @if($voucher->discount_percent > 0) {{ $voucher->discount_percent }}% OFF @else RM {{ number_format($voucher->voucherAmount, 2) }} @endif
{{ $voucher->validFrom?->format('d M') }} - {{ $voucher->validUntil?->format('d M Y') }}
{{ $voucher->isUsed ? 'Used' : 'Active' }}
@csrf @method('DELETE')
No rental vouchers created yet.
{{-- Sub-Section: Merchant Vouchers List --}}

Merchant Reward Vouchers

{{ $merchantVouchers->count() }}
@forelse($merchantVouchers as $voucher) @empty @endforelse
Code Merchant Amount Expires Status Actions
{{ $voucher->code }} {{ $voucher->redeem_place ?? 'N/A' }} RM {{ number_format($voucher->voucherAmount, 2) }} {{ $voucher->validUntil?->format('d M Y') ?? 'N/A' }} {{ $voucher->isUsed ? 'Used' : 'Active' }}
@csrf @method('DELETE')
No merchant vouchers created yet.
{{-- TAB 4: RECENT ACTIVITIES --}}
{{-- HEADER & FILTERS --}}

Activity Log

{{-- FILTER FORM --}}
{{-- Hidden Input untuk kekalkan tab aktif selepas reload --}} {{-- Filter: Date --}}
{{-- Filter: Type --}}
{{-- Reset Button (Muncul jika ada filter) --}} @if(request('activity_type') && request('activity_type') != 'all' || request('date')) Reset @endif
{{-- ACTIVITY TABLE --}}
@forelse($recentActivities as $activity) {{-- DATE --}} {{-- CUSTOMER --}} {{-- TYPE BADGE --}} {{-- DESCRIPTION --}} {{-- POINTS CHANGE --}} @empty @endforelse
Date & Time Customer Activity Type Description Points
{{ $activity->created_at->format('d M Y') }}
{{ $activity->created_at->format('h:i A') }}
{{ substr($activity->customer->fullName ?? '?', 0, 1) }}
{{ $activity->customer->fullName ?? 'Unknown User' }}
@php $badgeColor = 'bg-gray-100 text-gray-600'; $icon = 'fa-circle'; if($activity->points_change > 0) { $badgeColor = 'bg-green-100 text-green-700 border border-green-200'; $icon = 'fa-arrow-down'; // Masuk } elseif($activity->points_change < 0) { $badgeColor = 'bg-orange-100 text-orange-700 border border-orange-200'; $icon = 'fa-arrow-up'; // Keluar/Redeem } @endphp {{ $activity->points_change > 0 ? 'EARNED' : 'REDEEMED' }}

{{ $activity->reason }}

@if($activity->reference_id)

REF: {{ $activity->reference_id }}

@endif
{{ $activity->points_change > 0 ? '+' : '' }}{{ number_format($activity->points_change) }} pts

No activities found.

Try adjusting your filters.

{{-- PAGINATION --}}
{{-- {{ $recentActivities->links() }} --}}
{{-- SCRIPTS --}} {{-- EDIT VOUCHER MODAL (Keep Existing) --}} @endsection