#78 Invoice button on Order edit page

Also cleaned up some icon stuff
This commit is contained in:
Nisse Lommerde 2025-02-11 14:32:10 -05:00
parent 2b377f72aa
commit aa60cf18ee
3 changed files with 44 additions and 17 deletions

View File

@ -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';
}

View File

@ -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');
// }
}

View File

@ -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();