Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Filament\Company\Resources\Sales\InvoiceResource\Pages;
  3. use App\Enums\Accounting\InvoiceStatus;
  4. use App\Filament\Company\Resources\Sales\ClientResource;
  5. use App\Filament\Company\Resources\Sales\InvoiceResource;
  6. use App\Models\Accounting\Invoice;
  7. use Carbon\CarbonInterface;
  8. use Filament\Infolists\Components\Section;
  9. use Filament\Infolists\Components\TextEntry;
  10. use Filament\Infolists\Infolist;
  11. use Filament\Resources\Pages\ViewRecord;
  12. use Filament\Support\Enums\FontWeight;
  13. use Illuminate\Support\Carbon;
  14. class ViewInvoice extends ViewRecord
  15. {
  16. protected static string $resource = InvoiceResource::class;
  17. protected $listeners = [
  18. 'refresh' => '$refresh',
  19. ];
  20. public function infolist(Infolist $infolist): Infolist
  21. {
  22. return $infolist
  23. ->schema([
  24. Section::make('Invoice Details')
  25. ->columns(3)
  26. ->schema([
  27. TextEntry::make('invoice_number')
  28. ->label('Invoice #'),
  29. TextEntry::make('status')
  30. ->badge(),
  31. TextEntry::make('client.name')
  32. ->label('Client')
  33. ->color('primary')
  34. ->weight(FontWeight::SemiBold)
  35. ->url(fn (Invoice $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])),
  36. TextEntry::make('amount_due')
  37. ->label('Amount Due')
  38. ->money(),
  39. TextEntry::make('due_date')
  40. ->label('Due Date')
  41. ->formatStateUsing(function (TextEntry $entry, mixed $state) {
  42. if (blank($state)) {
  43. return null;
  44. }
  45. $date = Carbon::parse($state)
  46. ->setTimezone($timezone ?? $entry->getTimezone());
  47. if ($date->isToday()) {
  48. return 'Today';
  49. }
  50. return $date->diffForHumans([
  51. 'options' => CarbonInterface::ONE_DAY_WORDS,
  52. ]);
  53. }),
  54. ]),
  55. ]);
  56. }
  57. public function approveDraft(): void
  58. {
  59. $this->record->update([
  60. 'status' => InvoiceStatus::Unsent,
  61. ]);
  62. }
  63. public function markAsSent(): void
  64. {
  65. $this->record->update([
  66. 'status' => InvoiceStatus::Sent,
  67. ]);
  68. }
  69. }