From 9bf9437cd67d1600f97507897538d6c82a222958 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Wed, 20 Nov 2024 15:53:46 -0500 Subject: [PATCH] Improving Order table front-end --- .../Resources/CustomerReportResource.php | 2 +- app/Filament/Resources/InvoiceResource.php | 22 +++--- app/Filament/Resources/OrderResource.php | 23 +++++- .../OrderResource/Pages/ListOrders.php | 66 ++++++++++++++++++ app/Models/Order.php | 16 +++++ database/seeders/OrderSeeder.php | 2 +- time.ods | Bin 18269 -> 18763 bytes 7 files changed, 115 insertions(+), 16 deletions(-) diff --git a/app/Filament/Resources/CustomerReportResource.php b/app/Filament/Resources/CustomerReportResource.php index d0e0ca2..7a86555 100644 --- a/app/Filament/Resources/CustomerReportResource.php +++ b/app/Filament/Resources/CustomerReportResource.php @@ -95,7 +95,7 @@ class CustomerReportResource extends Resource DatePicker::make('created_until') ->label('Until date'), ]), - ], layout: Tables\Enums\FiltersLayout::AboveContentCollapsible) + ]) ->actions([ ]) ->bulkActions([ diff --git a/app/Filament/Resources/InvoiceResource.php b/app/Filament/Resources/InvoiceResource.php index aeda0fa..8c29bf7 100644 --- a/app/Filament/Resources/InvoiceResource.php +++ b/app/Filament/Resources/InvoiceResource.php @@ -102,9 +102,6 @@ class InvoiceResource extends Resource ->sortable() ->extraHeaderAttributes(['class' => 'w-full']) ->searchable(), - Tables\Columns\TextColumn::make('status') - ->badge(InvoiceStatus::class) - ->sortable(), Tables\Columns\TextColumn::make('created_at') ->label('Created') ->date() @@ -126,17 +123,18 @@ class InvoiceResource extends Resource ->money('USD') ->weight('bold') ->alignRight(), + Tables\Columns\TextColumn::make('status') + ->badge(InvoiceStatus::class) + ->sortable(), ]) ->filters([ Tables\Filters\Filter::make('created_at') ->form([ - Split::make([ - DatePicker::make('created_from') - ->label('From date'), - DatePicker::make('created_until') - ->label('Until date'), - ]), + DatePicker::make('created_from') + ->label('From date'), + DatePicker::make('created_until') + ->label('Until date'), ]) ->query(function (Builder $query, array $data): Builder { return $query @@ -151,11 +149,9 @@ class InvoiceResource extends Resource }), Tables\Filters\SelectFilter::make('status') - ->options(InvoiceStatus::class) - ->columnSpan(1), + ->options(InvoiceStatus::class), - ], layout: Tables\Enums\FiltersLayout::AboveContentCollapsible) - ->filtersFormColumns(3) + ], ) ->groups([ 'status', diff --git a/app/Filament/Resources/OrderResource.php b/app/Filament/Resources/OrderResource.php index 13e307b..bd9fac7 100644 --- a/app/Filament/Resources/OrderResource.php +++ b/app/Filament/Resources/OrderResource.php @@ -223,15 +223,29 @@ class OrderResource extends Resource { return $table ->columns([ + Tables\Columns\IconColumn::make('alert') + ->getStateUsing(fn ($record) => $record->is_alert_danger || $record->is_alert_warning) + ->label('') + ->color(fn ($record) => $record->is_alert_danger ? 'danger' : 'warning') + ->icon(function ($record) { + return $record->is_alert_danger + ? 'lucide-calendar-clock' : ($record->rush + ? OrderAttributes::rush->getIcon() : null); + }) + + ->size(Tables\Columns\IconColumn\IconColumnSize::Small), + TextColumn::make('internal_po') ->label('Internal PO') ->fontFamily('mono') ->color('info') ->searchable() ->sortable(), + TextColumn::make('customer.company_name') ->searchable() ->sortable(), + TextColumn::make('customer_po') ->label('PO') ->wrap() @@ -242,18 +256,23 @@ class OrderResource extends Resource ->extraHeaderAttributes([ 'class' => 'w-full', ]), + TextColumn::make('order_date') ->searchable() ->sortable(), + TextColumn::make('due_date') ->searchable() ->sortable(), + TextColumn::make('status') ->badge() ->searchable() ->sortable(), ]) + ->defaultSort('order_date', 'desc') + ->filters([ Tables\Filters\Filter::make('order_date') ->form([ @@ -271,10 +290,12 @@ class OrderResource extends Resource fn (Builder $query, $date): Builder => $query->whereDate('order_date', '<=', $date), ); }), - ], layout: Tables\Enums\FiltersLayout::AboveContentCollapsible) + ], ) + ->actions([ Tables\Actions\EditAction::make(), ]) + ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), diff --git a/app/Filament/Resources/OrderResource/Pages/ListOrders.php b/app/Filament/Resources/OrderResource/Pages/ListOrders.php index dc19c41..0765829 100644 --- a/app/Filament/Resources/OrderResource/Pages/ListOrders.php +++ b/app/Filament/Resources/OrderResource/Pages/ListOrders.php @@ -2,8 +2,12 @@ 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 @@ -16,4 +20,66 @@ class ListOrders extends ListRecords Actions\CreateAction::make(), ]; } + + public function getTabs(): array + { + return [ + null => Tab::make('All') + ->icon('lucide-layout-grid'), + + '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'), + + '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()), + ]; + } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 08f17a3..9113375 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -45,6 +45,8 @@ class Order extends Model protected $appends = [ 'total_service_price', 'total_product_quantity', + 'is_alert_warning', + 'is_alert_danger', ]; protected $casts = [ @@ -80,6 +82,20 @@ class Order extends Model return 'TN'.$year.'-'.$po; } + public function getIsAlertWarningAttribute(): bool + { + if ($this->rush) { + return ! ($this->status === OrderStatus::INVOICED || $this->status === OrderStatus::SHIPPED); + } + + return false; + } + + public function getIsAlertDangerAttribute(): bool + { + return $this->due_date <= today() && $this->status !== OrderStatus::INVOICED && $this->status !== OrderStatus::SHIPPED; + } + public function getTotalProductQuantityAttribute(): int { $total = 0; diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php index 9bc5503..813f3de 100644 --- a/database/seeders/OrderSeeder.php +++ b/database/seeders/OrderSeeder.php @@ -14,7 +14,7 @@ class OrderSeeder extends Seeder public function run(): void { foreach (Customer::all() as $customer) { - Order::factory(rand(2, 50), ['customer_id' => $customer])->create(); + Order::factory(rand(10, 50), ['customer_id' => $customer])->create(); } } } diff --git a/time.ods b/time.ods index 064bb889c33592bcf931f3ea9a2022c3e8e01529..4f0639145d73cc0f2f26c8724bacddf8f22453e3 100644 GIT binary patch delta 16417 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%0AU zRnC99RI~>zn!-LKzG^cciX6aLPHts*!C$s1I%uDe?9n7!gA)6xHkaO@X5PHKZNVWK z*vpo@LX7*+Lf{|aRFM#*)xc$TMTM09rRVDgC#x-54�?N3O7Z>TCX~@UJX!2RJ{W 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 I{57Kg1K(M#$N&HU