diff --git a/app/Livewire/Datatable/Studio/Loyalty/CustomersTable.php b/app/Livewire/Datatable/Studio/Loyalty/CustomersTable.php index 4fc9380..f440153 100644 --- a/app/Livewire/Datatable/Studio/Loyalty/CustomersTable.php +++ b/app/Livewire/Datatable/Studio/Loyalty/CustomersTable.php @@ -6,11 +6,12 @@ use App\Traits\Datatable\WithAppendColumn; use App\Traits\Datatable\WithConfiguration; use App\Traits\Datatable\WithPrependColumn; -use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Blade; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; +use Rappasoft\LaravelLivewireTables\Views\Columns\CountColumn; +use Rappasoft\LaravelLivewireTables\Views\Columns\SumColumn; class CustomersTable extends DataTableComponent { @@ -44,8 +45,27 @@ public function columns(): array }) ->html(), - Column::make('Terdaftar Sejak', 'user.created_at') - ->format(fn ($value) => $value ? Carbon::parse($value)->diffForHumans() : '') + CountColumn::make('Total Order') + ->setDataSource('orders') + ->label(fn ($value) => currency($value->orders_count)) + ->sortable(), + + SumColumn::make('Total Pembayaran') + ->setDataSource('orders', 'total') + ->label(fn ($value) => currency($value->orders_sum_total, 'Rp')) + ->sortable(), + + Column::make('Terakhir Order') + ->label(function ($record) { + $latestOrder = $record->orders()->latest()->first(); + + return $latestOrder + ? timeAgo($latestOrder->created_at) + : ''; + }), + + Column::make('Terdaftar Sejak', 'created_at') + ->format(fn ($value) => $value ? timeAgo($value) : '') ->searchable() ->sortable(), @@ -76,6 +96,6 @@ public function columns(): array public function builder(): Builder { - return Customer::select('customers.id', 'name', 'phone_number', 'gender')->with('user'); + return Customer::select('customers.id', 'name', 'phone_number', 'gender', 'customers.created_at')->with('user', 'orders'); } } diff --git a/app/Livewire/Studio/Loyalty/Customer.php b/app/Livewire/Studio/Loyalty/Customer.php index 1f74e03..bf19043 100644 --- a/app/Livewire/Studio/Loyalty/Customer.php +++ b/app/Livewire/Studio/Loyalty/Customer.php @@ -25,6 +25,26 @@ class Customer extends Component public string $modalTitle = ''; + public array $stats = []; + + public function mount() + { + $this->stats = [ + [ + 'title' => 'Total Customer', + 'value' => CustomerModel::whereDoesntHave('user')->count(), + ], + [ + 'title' => 'Total Member', + 'value' => CustomerModel::whereHas('user')->count(), + ], + [ + 'title' => 'Top Member', + 'value' => CustomerModel::whereHas('user')->withCount('orders')->orderByDesc('orders_count')->first()?->name, + ], + ]; + } + #[On('modal:open')] public function openModal(string $method, string $modalTitle, ?string $id = null) { diff --git a/resources/views/livewire/studio/loyalty/customers.blade.php b/resources/views/livewire/studio/loyalty/customers.blade.php index 54d9fd5..7bfd54b 100644 --- a/resources/views/livewire/studio/loyalty/customers.blade.php +++ b/resources/views/livewire/studio/loyalty/customers.blade.php @@ -15,6 +15,17 @@
+ @if (!empty($stats)) +
+ @foreach ($stats as $stat) +
+ {{ $stat['title'] }} + {{ $stat['value'] }} +
+ @endforeach +
+ @endif +
@@ -30,7 +41,7 @@ -