feat(voucher): membuat stats dan menambahkan scope di model

This commit is contained in:
Yoga Pangestu 2025-11-12 09:24:47 +07:00
parent 54a7fcec5a
commit 30c30c7642
3 changed files with 48 additions and 1 deletions

View File

@ -14,6 +14,30 @@ class Index extends Component
{
use WithConfirmation, WithToast;
public array $stats = [];
public function mount()
{
$this->stats = [
[
'title' => 'Total Voucher',
'value' => Voucher::count(),
],
[
'title' => 'Voucher Aktif',
'value' => Voucher::query()->active()->count(),
],
[
'title' => 'Voucher Tidak Aktif',
'value' => Voucher::query()->inactive()->count(),
],
[
'title' => 'Voucher Akan Datang',
'value' => Voucher::query()->upcoming()->count(),
],
];
}
public function delete(Voucher $voucher)
{
$voucher->delete();

View File

@ -41,6 +41,18 @@ public function active(Builder $query): void
});
}
#[Scope]
public function inactive(Builder $query): void
{
$query->whereDate('end_date', '<', now());
}
#[Scope]
public function upcoming(Builder $query): void
{
$query->whereDate('start_date', '>', now());
}
public function outlets(): BelongsToMany
{
return $this->belongsToMany(Outlet::class);

View File

@ -3,7 +3,7 @@
<div>
<flux:heading size="xl">{{ $pageTitle }}</flux:heading>
</div>
@can ('create voucher')
@can('create voucher')
<div>
<flux:button href="{{ route('studio.loyalty.voucher.create') }}" variant="primary" wire:navigate.hover
class="text-sm">
@ -14,6 +14,17 @@ class="text-sm">
</div>
<div class="mt-6">
@if (!empty($stats))
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6">
@foreach ($stats as $stat)
<div class="rounded-lg px-6 py-4 bg-zinc-200 dark:bg-zinc-700">
<flux:subheading>{{ $stat['title'] }}</flux:subheading>
<flux:heading size="xl" class="mb-2">{{ $stat['value'] }}</flux:heading>
</div>
@endforeach
</div>
@endif
<livewire:datatable.studio.loyalty.vouchers-table />
</div>