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.
topnotch_website/app/Filament/Resources/OrderResource/Pages/ListOrders.php

98 lines
3.8 KiB
PHP

<?php
namespace App\Filament\Resources\OrderResource\Pages;
use App\Enums\OrderAttributes;
use App\Enums\OrderStatus;
use App\Filament\Resources\OrderResource;
use App\Models\Order;
use Filament\Actions;
use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\ListRecords;
class ListOrders extends ListRecords
{
protected static string $resource = OrderResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
public function getTabs(): array
{
return [
'active' => Tab::make()
->query(function ($query) {
return $query
->whereNot('status', OrderStatus::INVOICED)
->whereNot('status', ORderStatus::SHIPPED);
})
->icon(OrderStatus::PRODUCTION->getIcon())
->badge(function () {
return Order::whereNot('status', OrderStatus::SHIPPED)
->whereNot('status', OrderStatus::INVOICED)
->count();
}),
'overdue' => Tab::make()
->query(function ($query) {
return $query->whereDate('due_date', '<=', today())
->whereNot('status', OrderStatus::INVOICED)
->whereNot('status', ORderStatus::SHIPPED);
})
->icon('lucide-calendar-clock')
->badge(function () {
$count = Order::whereDate('due_date', '<=', today())
->whereNot('status', OrderStatus::INVOICED)
->whereNot('status', ORderStatus::SHIPPED)
->count();
return $count > 0 ? $count : null;
})
->badgeColor('danger'),
'rush' => Tab::make()
->query(function ($query) {
return $query->where('rush', true)
->whereNot('status', OrderStatus::INVOICED)
->whereNot('status', OrderStatus::SHIPPED);
})
->icon(OrderAttributes::rush->getIcon())
->badge(function () {
$count = Order::where('rush', true)
->whereNot('status', OrderStatus::INVOICED)
->whereNot('status', OrderStatus::SHIPPED)
->count();
return $count > 0 ? $count : null;
})
->badgeColor('warning'),
null => Tab::make('All')
->icon('lucide-layout-grid'),
// 'draft' => Tab::make()
// ->query(fn ($query) => $query->where('status', OrderStatus::DRAFT->value))
// ->icon(OrderStatus::DRAFT->getIcon()),
//
// 'approved' => Tab::make()
// ->query(fn ($query) => $query->where('status', OrderStatus::APPROVED->value))
// ->icon(OrderStatus::APPROVED->getIcon()),
//
// 'production' => Tab::make()
// ->query(fn ($query) => $query->where('status', OrderStatus::PRODUCTION->value))
// ->icon(OrderStatus::PRODUCTION->getIcon()),
//
// 'shipped' => Tab::make()
// ->query(fn ($query) => $query->where('status', OrderStatus::SHIPPED->value))
// ->icon(OrderStatus::SHIPPED->getIcon()),
//
// 'invoiced' => Tab::make()
// ->query(fn ($query) => $query->where('status', OrderStatus::INVOICED->value))
// ->icon(OrderStatus::INVOICED->getIcon()),
];
}
}