diff --git a/app/Enums/IconEnum.php b/app/Enums/IconEnum.php index 48e42ec..86838ac 100644 --- a/app/Enums/IconEnum.php +++ b/app/Enums/IconEnum.php @@ -19,5 +19,8 @@ enum IconEnum: string case INVOICE_REPORT = 'lucide-files'; case TAB_ALL = 'lucide-layout-grid'; case TAB_OVERDUE = 'lucide-calendar-clock'; - case TAB_UNPRINTED = 'lucide-printer'; + case PRINT = 'lucide-printer'; + case TRASH = 'lucide-trash-2'; + case SAVE = 'lucide-save'; + case COPY = 'lucide-copy'; } diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php index 3521c34..7ad745e 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php @@ -2,9 +2,13 @@ namespace App\Filament\Admin\Resources\OrderResource\Pages; +use App\Enums\IconEnum; +use App\Enums\InvoiceStatus; use App\Enums\OrderAttributes; use App\Enums\OrderStatus; +use App\Filament\Admin\Resources\InvoiceResource; use App\Filament\Admin\Resources\OrderResource; +use App\Models\Invoice; use App\Models\Order; use App\Models\OrderProduct; use App\Models\ProductService; @@ -13,13 +17,20 @@ use App\Models\ServiceType; use Filament\Actions; use Filament\Actions\Action; +use Filament\Notifications\Notification; use Filament\Resources\Pages\EditRecord; +use Illuminate\Contracts\Support\Htmlable; use Illuminate\Database\Eloquent\Model; class EditOrder extends EditRecord { protected static string $resource = OrderResource::class; + public function getTitle(): string|Htmlable + { + return parent::getTitle().' '.$this->record->internal_po; + } + protected function mutateFormDataBeforeFill(array $data): array { $order = Order::findOrFail($data['id']); @@ -148,12 +159,11 @@ protected function getHeaderActions(): array Action::make('save') ->label('Save changes') ->action('save') - ->icon('lucide-save'), + ->icon(IconEnum::SAVE->value), Actions\ReplicateAction::make() ->label('Duplicate') - ->icon('lucide-copy') - ->color('info') + ->icon(IconEnum::COPY->value) ->mutateRecordDataUsing(function (array $data): array { $po = 'Duplicate of '.$data['customer_po']; $data['customer_po'] = $po; @@ -195,23 +205,37 @@ protected function getHeaderActions(): array }) ->successRedirectUrl(fn (Model $replica): string => OrderResource::getUrl('edit', [$replica])), - // Action::make('invoice') - // ->visible(fn () => auth()->user()->is_admin) - // ->label('To Invoice') - // ->icon('lucide-receipt-text'), - // + Action::make('invoice') + ->visible(fn () => auth()->user()->is_admin) + ->label(fn (Order $record) => $record->invoice()->exists() ? 'To Invoice' : 'Make Invoice') + ->icon(IconEnum::INVOICE->value) + ->action(function (Order $record) { + if ($record->invoice()->exists()) { + return redirect()->to(InvoiceResource::getUrl('edit', ['record' => $record->invoice->id])); + } + + $invoice = Invoice::create([ + 'customer_id' => $record->customer_id, + 'date' => today(), + 'status' => InvoiceStatus::UNPAID->value, + ]); + + $invoice->orders()->save($record); + + return Notification::make() + ->title('Invoice '.$invoice->internal_id.' created successfully') + ->body('Click the button again to go to the invoice') + ->success() + ->send(); + }), + Action::make('print') - ->icon('lucide-printer') + ->icon(IconEnum::PRINT->value) ->url(fn (Order $record) => route('orders.pdf', $record)) ->openUrlInNewTab(), Actions\DeleteAction::make() - ->icon('lucide-trash-2'), + ->icon(IconEnum::TRASH->value), ]; } - - // protected function getRedirectUrl(): string - // { - // return $this->previousUrl ?? $this->getResource()::getUrl('index'); - // } } diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php b/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php index e05b29d..4443a71 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php @@ -42,7 +42,7 @@ public function getTabs(): array ->query(function ($query) { return $query->where('printed', false); }) - ->icon(IconEnum::TAB_UNPRINTED->value) + ->icon(IconEnum::PRINT->value) ->badge(function () { $count = Order::where('printed', false)->count();