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

OfferingResource.php 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace App\Filament\Company\Resources\Common;
  3. use App\Enums\Common\OfferingType;
  4. use App\Filament\Company\Resources\Common\OfferingResource\Pages;
  5. use App\Models\Common\Offering;
  6. use App\Utilities\Currency\CurrencyAccessor;
  7. use Filament\Forms;
  8. use Filament\Forms\Form;
  9. use Filament\Resources\Resource;
  10. use Filament\Tables;
  11. use Filament\Tables\Table;
  12. class OfferingResource extends Resource
  13. {
  14. protected static ?string $model = Offering::class;
  15. public static function form(Form $form): Form
  16. {
  17. return $form
  18. ->schema([
  19. Forms\Components\Section::make('General')
  20. ->schema([
  21. Forms\Components\TextInput::make('name')
  22. ->autofocus()
  23. ->required()
  24. ->maxLength(255),
  25. Forms\Components\Textarea::make('description')
  26. ->label('Description')
  27. ->autosize(),
  28. Forms\Components\Select::make('type')
  29. ->options(OfferingType::class)
  30. ->searchable()
  31. ->required(),
  32. Forms\Components\TextInput::make('price')
  33. ->required()
  34. ->money(CurrencyAccessor::getDefaultCurrency()),
  35. Forms\Components\Checkbox::make('sellable')
  36. ->label('Sellable')
  37. ->live()
  38. ->dehydrated(false)
  39. ->default(false),
  40. Forms\Components\Checkbox::make('purchasable')
  41. ->label('Purchasable')
  42. ->live()
  43. ->dehydrated(false)
  44. ->default(false),
  45. ]),
  46. // Sellable Section
  47. Forms\Components\Section::make('Sellable Configuration')
  48. ->schema([
  49. Forms\Components\Select::make('income_account_id')
  50. ->relationship('incomeAccount', 'name')
  51. ->searchable()
  52. ->preload(),
  53. Forms\Components\Select::make('sales_taxes')
  54. ->relationship('salesTaxes', 'name')
  55. ->preload()
  56. ->multiple(),
  57. Forms\Components\Select::make('sales_discounts')
  58. ->relationship('salesDiscounts', 'name')
  59. ->preload()
  60. ->multiple(),
  61. ])
  62. ->columns(2)
  63. ->visible(fn (Forms\Get $get) => $get('sellable')),
  64. // Purchasable Section
  65. Forms\Components\Section::make('Purchasable Configuration')
  66. ->schema([
  67. Forms\Components\Select::make('expense_account_id')
  68. ->relationship('expenseAccount', 'name')
  69. ->searchable()
  70. ->preload(),
  71. Forms\Components\Select::make('purchase_taxes')
  72. ->relationship('purchaseTaxes', 'name')
  73. ->preload()
  74. ->multiple(),
  75. Forms\Components\Select::make('purchase_discounts')
  76. ->relationship('purchaseDiscounts', 'name')
  77. ->preload()
  78. ->multiple(),
  79. ])
  80. ->columns(2)
  81. ->visible(fn (Forms\Get $get) => $get('purchasable')),
  82. ])->columns(1);
  83. }
  84. public static function table(Table $table): Table
  85. {
  86. return $table
  87. ->columns([
  88. Tables\Columns\ViewColumn::make('name')
  89. ->label('Name')
  90. ->view('filament.company.components.tables.columns.offering-status'),
  91. Tables\Columns\TextColumn::make('type')
  92. ->searchable(),
  93. Tables\Columns\TextColumn::make('price')
  94. ->money()
  95. ->sortable(),
  96. ])
  97. ->filters([
  98. //
  99. ])
  100. ->actions([
  101. Tables\Actions\EditAction::make(),
  102. ])
  103. ->bulkActions([
  104. Tables\Actions\BulkActionGroup::make([
  105. Tables\Actions\DeleteBulkAction::make(),
  106. ]),
  107. ]);
  108. }
  109. public static function getRelations(): array
  110. {
  111. return [
  112. //
  113. ];
  114. }
  115. public static function getPages(): array
  116. {
  117. return [
  118. 'index' => Pages\ListOfferings::route('/'),
  119. 'create' => Pages\CreateOffering::route('/create'),
  120. 'edit' => Pages\EditOffering::route('/{record}/edit'),
  121. ];
  122. }
  123. }