Files
zemailnator/app/Filament/Widgets/StatsOverview.php

72 lines
2.1 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\Log;
use App\Models\Meta;
use App\Models\PremiumEmail;
use App\Models\Ticket;
use App\Models\User;
use DB;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class StatsOverview extends BaseWidget
{
protected function getStats(): array
{
return [
Stat::make('Total Users', $this->getUser()),
Stat::make('Customers', $this->getCustomerCount()),
Stat::make('Paid Users', $this->getUserPaid()),
Stat::make('Logs Count', $this->getLogsCount()),
Stat::make('Total Mailbox', $this->getTotalMailbox()),
Stat::make('Emails Received', $this->getTotalEmailsReceived()),
Stat::make('Emails Stored', $this->getStoreEmailsCount()),
Stat::make('Open Tickets', $this->getOpenTicketsCount()),
Stat::make('Closed Tickets', $this->getClosedTicketsCount()),
];
}
private function getUser(): int
{
return User::all()->count();
}
private function getUserPaid(): int
{
return DB::table('subscriptions')
->where(['stripe_status' => 'active'])
->distinct('user_id')
->count('user_id');
}
private function getLogsCount(): int
{
return Log::all()->count();
}
private function getTotalMailbox(): int
{
return Meta::select('value')->where(['key' => 'email_ids_created'])->first()->value;
}
private function getTotalEmailsReceived(): int
{
return Meta::select('value')->where(['key' => 'messages_received'])->first()->value;
}
private function getCustomerCount(): int
{
return User::whereNotNull('stripe_id')->count();
}
private function getStoreEmailsCount(): int
{
return PremiumEmail::all()->count();
}
private function getOpenTicketsCount(): int
{
return Ticket::whereIn('status', ['open', 'pending'])->count();
}
private function getClosedTicketsCount(): int
{
return Ticket::whereIn('status', ['closed'])->count();
}
}