You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
PHTML
55 lines
1.7 KiB
PHTML
2 months ago
|
<?php
|
||
|
|
||
|
namespace App\Filament\Widgets;
|
||
|
|
||
|
use App\Enums\OrderStatus;
|
||
|
use App\Models\Order;
|
||
|
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
|
||
|
use Filament\Widgets\StatsOverviewWidget\Stat;
|
||
|
|
||
|
class OrderStats extends BaseWidget
|
||
|
{
|
||
|
// protected int|string|array $columnSpan = '2';
|
||
|
|
||
|
protected function getStats(): array
|
||
|
{
|
||
|
return [
|
||
|
Stat::make('Active Orders', $this->getActiveOrders())
|
||
|
->icon('heroicon-o-arrow-path')
|
||
|
->description('Orders that have yet to be completed'),
|
||
|
Stat::make('This Month', $this->getOrdersCurrentMonth())
|
||
|
->icon('heroicon-s-calendar')
|
||
|
->description('New orders since the beginning of the month'),
|
||
|
Stat::make('Due Today', $this->getDueOrders())
|
||
|
->icon('heroicon-o-clock')
|
||
|
->description('Orders that are scheduled to be due today'),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
private function getActiveOrders(): string
|
||
|
{
|
||
|
return Order::all()
|
||
|
->where('order_status', '!=', OrderStatus::SHIPPED)
|
||
|
->where('order_status', '!=', OrderStatus::INVOICED)
|
||
|
->count();
|
||
|
}
|
||
|
|
||
|
private function getOrdersCurrentMonth(): string
|
||
|
{
|
||
|
return Order::all()
|
||
|
->where('order_status', '!=', OrderStatus::SHIPPED)
|
||
|
->where('order_status', '!=', OrderStatus::INVOICED)
|
||
|
->whereBetween('created_at', [now()->startOfMonth(), now()->endOfMonth()])
|
||
|
->count();
|
||
|
}
|
||
|
|
||
|
private function getDueOrders(): string
|
||
|
{
|
||
|
return Order::all()
|
||
|
->where('order_status', '!=', OrderStatus::SHIPPED)
|
||
|
->where('order_status', '!=', OrderStatus::INVOICED)
|
||
|
->where('due_date', '<=', now())
|
||
|
->count();
|
||
|
}
|
||
|
}
|