feat: tambah Filament 5 resources dengan schemas dan tables
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Activities\Pages\CreateActivity;
|
||||||
|
use App\Filament\Resources\Activities\Pages\EditActivity;
|
||||||
|
use App\Filament\Resources\Activities\Pages\ListActivities;
|
||||||
|
use App\Filament\Resources\Activities\Schemas\ActivityForm;
|
||||||
|
use App\Filament\Resources\Activities\Tables\ActivitiesTable;
|
||||||
|
use App\Models\Activity;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class ActivityResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = Activity::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-calendar-days';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Kegiatan';
|
||||||
|
protected static ?string $modelLabel = 'Kegiatan';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return ActivityForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return ActivitiesTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListActivities::route('/'),
|
||||||
|
'create' => CreateActivity::route('/create'),
|
||||||
|
'edit' => EditActivity::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Activities\ActivityResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateActivity extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = ActivityResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Activities\ActivityResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditActivity extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = ActivityResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Activities\ActivityResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListActivities extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = ActivityResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities\Schemas;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Filament\Forms\Components\DatePicker;
|
||||||
|
use Filament\Forms\Components\DateTimePicker;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class ActivityForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('title')->label('Judul')->required(),
|
||||||
|
Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(),
|
||||||
|
DatePicker::make('start_date')->label('Mulai')->required(),
|
||||||
|
DatePicker::make('end_date')->label('Selesai')->required(),
|
||||||
|
Select::make('status')
|
||||||
|
->options([
|
||||||
|
'draft' => 'Draft',
|
||||||
|
'pending' => 'Pending',
|
||||||
|
'approved' => 'Disetujui',
|
||||||
|
'rejected' => 'Ditolak',
|
||||||
|
])
|
||||||
|
->default('draft')
|
||||||
|
->required(),
|
||||||
|
Select::make('participants')
|
||||||
|
->label('Peserta')
|
||||||
|
->relationship('participants', 'name')
|
||||||
|
->multiple()
|
||||||
|
->preload()
|
||||||
|
->searchable()
|
||||||
|
->columnSpanFull(),
|
||||||
|
DateTimePicker::make('executed_at')->label('Waktu Pelaksanaan'),
|
||||||
|
Textarea::make('execution_notes')->label('Catatan Pelaksanaan')->rows(3)->columnSpanFull(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Activities\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class ActivitiesTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('title')->label('Judul')->searchable()->sortable(),
|
||||||
|
TextColumn::make('start_date')->label('Mulai')->date('d M Y')->sortable(),
|
||||||
|
TextColumn::make('end_date')->label('Selesai')->date('d M Y'),
|
||||||
|
TextColumn::make('status')->badge()
|
||||||
|
->color(fn ($state) => match ($state) {
|
||||||
|
'approved' => 'success',
|
||||||
|
'rejected' => 'danger',
|
||||||
|
'pending' => 'warning',
|
||||||
|
default => 'gray',
|
||||||
|
}),
|
||||||
|
TextColumn::make('creator.name')->label('Dibuat Oleh'),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('status')->options([
|
||||||
|
'draft' => 'Draft',
|
||||||
|
'pending' => 'Pending',
|
||||||
|
'approved' => 'Disetujui',
|
||||||
|
'rejected' => 'Ditolak',
|
||||||
|
]),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Approvals\Pages\CreateApproval;
|
||||||
|
use App\Filament\Resources\Approvals\Pages\EditApproval;
|
||||||
|
use App\Filament\Resources\Approvals\Pages\ListApprovals;
|
||||||
|
use App\Filament\Resources\Approvals\Schemas\ApprovalForm;
|
||||||
|
use App\Filament\Resources\Approvals\Tables\ApprovalsTable;
|
||||||
|
use App\Models\Approval;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class ApprovalResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = Approval::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-clipboard-document-check';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Keputusan';
|
||||||
|
protected static ?string $modelLabel = 'Persetujuan';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return ApprovalForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return ApprovalsTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListApprovals::route('/'),
|
||||||
|
'create' => CreateApproval::route('/create'),
|
||||||
|
'edit' => EditApproval::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Approvals\ApprovalResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateApproval extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = ApprovalResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Approvals\ApprovalResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditApproval extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = ApprovalResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Approvals\ApprovalResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListApprovals extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = ApprovalResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals\Schemas;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class ApprovalForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('model_type')->label('Tipe Model')->required(),
|
||||||
|
TextInput::make('model_id')->label('ID Model')->numeric()->required(),
|
||||||
|
TextInput::make('required_approvals')->label('Jumlah Persetujuan')->numeric()->default(1),
|
||||||
|
Select::make('status')
|
||||||
|
->options([
|
||||||
|
'pending' => 'Pending',
|
||||||
|
'approved' => 'Disetujui',
|
||||||
|
'rejected' => 'Ditolak',
|
||||||
|
])
|
||||||
|
->default('pending')
|
||||||
|
->required(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Approvals\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class ApprovalsTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('model_type')->label('Tipe'),
|
||||||
|
TextColumn::make('model_id')->label('ID'),
|
||||||
|
TextColumn::make('required_approvals')->label('Dibutuhkan'),
|
||||||
|
TextColumn::make('items_count')->counts('items')->label('Sudah Approve'),
|
||||||
|
TextColumn::make('status')->badge()
|
||||||
|
->color(fn ($state) => match ($state) {
|
||||||
|
'approved' => 'success',
|
||||||
|
'rejected' => 'danger',
|
||||||
|
default => 'warning',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('status')->options([
|
||||||
|
'pending' => 'Pending',
|
||||||
|
'approved' => 'Disetujui',
|
||||||
|
'rejected' => 'Ditolak',
|
||||||
|
]),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Audits\Pages\CreateAudit;
|
||||||
|
use App\Filament\Resources\Audits\Pages\EditAudit;
|
||||||
|
use App\Filament\Resources\Audits\Pages\ListAudits;
|
||||||
|
use App\Filament\Resources\Audits\Schemas\AuditForm;
|
||||||
|
use App\Filament\Resources\Audits\Tables\AuditsTable;
|
||||||
|
use App\Models\Audit;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class AuditResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = Audit::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-magnifying-glass';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Audit';
|
||||||
|
protected static ?string $modelLabel = 'Temuan Audit';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return AuditForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return AuditsTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListAudits::route('/'),
|
||||||
|
'create' => CreateAudit::route('/create'),
|
||||||
|
'edit' => EditAudit::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Audits\AuditResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateAudit extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = AuditResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Audits\AuditResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditAudit extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = AuditResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Audits\AuditResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListAudits extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = AuditResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits\Schemas;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class AuditForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
Select::make('auditor_id')->label('Auditor')
|
||||||
|
->options(User::pluck('name', 'id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('model_type')->label('Tipe Model')->required(),
|
||||||
|
TextInput::make('model_id')->label('ID Model')->numeric()->required(),
|
||||||
|
Select::make('issue_type')->label('Jenis Temuan')
|
||||||
|
->options(['warning' => 'Peringatan', 'critical' => 'Kritis'])
|
||||||
|
->required(),
|
||||||
|
Textarea::make('description')->label('Deskripsi')->rows(3)->required()->columnSpanFull(),
|
||||||
|
Select::make('status')
|
||||||
|
->options(['open' => 'Terbuka', 'resolved' => 'Selesai'])
|
||||||
|
->default('open')
|
||||||
|
->required(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Audits\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class AuditsTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('auditor.name')->label('Auditor'),
|
||||||
|
TextColumn::make('model_type')->label('Tipe'),
|
||||||
|
TextColumn::make('issue_type')->label('Jenis')->badge()
|
||||||
|
->color(fn ($state) => $state === 'critical' ? 'danger' : 'warning'),
|
||||||
|
TextColumn::make('description')->label('Deskripsi')->limit(50),
|
||||||
|
TextColumn::make('status')->badge()
|
||||||
|
->color(fn ($state) => $state === 'resolved' ? 'success' : 'danger'),
|
||||||
|
TextColumn::make('created_at')->label('Tanggal')->date('d M Y'),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('issue_type')->options(['warning' => 'Peringatan', 'critical' => 'Kritis']),
|
||||||
|
SelectFilter::make('status')->options(['open' => 'Terbuka', 'resolved' => 'Selesai']),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashCategories\Pages\CreateCashCategory;
|
||||||
|
use App\Filament\Resources\CashCategories\Pages\EditCashCategory;
|
||||||
|
use App\Filament\Resources\CashCategories\Pages\ListCashCategories;
|
||||||
|
use App\Filament\Resources\CashCategories\Schemas\CashCategoryForm;
|
||||||
|
use App\Filament\Resources\CashCategories\Tables\CashCategoriesTable;
|
||||||
|
use App\Models\CashCategory;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class CashCategoryResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = CashCategory::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-tag';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Keuangan';
|
||||||
|
protected static ?string $modelLabel = 'Kategori Kas';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return CashCategoryForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return CashCategoriesTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListCashCategories::route('/'),
|
||||||
|
'create' => CreateCashCategory::route('/create'),
|
||||||
|
'edit' => EditCashCategory::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashCategories\CashCategoryResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateCashCategory extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = CashCategoryResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashCategories\CashCategoryResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditCashCategory extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = CashCategoryResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashCategories\CashCategoryResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListCashCategories extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = CashCategoryResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories\Schemas;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class CashCategoryForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('name')->label('Nama')->required(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashCategories\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class CashCategoriesTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('name')->label('Nama')->searchable(),
|
||||||
|
TextColumn::make('records_count')->counts('records')->label('Transaksi'),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashRecords\Pages\CreateCashRecord;
|
||||||
|
use App\Filament\Resources\CashRecords\Pages\EditCashRecord;
|
||||||
|
use App\Filament\Resources\CashRecords\Pages\ListCashRecords;
|
||||||
|
use App\Filament\Resources\CashRecords\Schemas\CashRecordForm;
|
||||||
|
use App\Filament\Resources\CashRecords\Tables\CashRecordsTable;
|
||||||
|
use App\Models\CashRecord;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class CashRecordResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = CashRecord::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-banknotes';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Keuangan';
|
||||||
|
protected static ?string $modelLabel = 'Transaksi Kas';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return CashRecordForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return CashRecordsTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListCashRecords::route('/'),
|
||||||
|
'create' => CreateCashRecord::route('/create'),
|
||||||
|
'edit' => EditCashRecord::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashRecords\CashRecordResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateCashRecord extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = CashRecordResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashRecords\CashRecordResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditCashRecord extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = CashRecordResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\CashRecords\CashRecordResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListCashRecords extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = CashRecordResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords\Schemas;
|
||||||
|
|
||||||
|
use App\Models\CashCategory;
|
||||||
|
use Filament\Forms\Components\DatePicker;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class CashRecordForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
Select::make('category_id')->label('Kategori')
|
||||||
|
->options(CashCategory::pluck('name', 'id'))
|
||||||
|
->required(),
|
||||||
|
TextInput::make('amount')->label('Jumlah (Rp)')->numeric()->required(),
|
||||||
|
Textarea::make('description')->label('Keterangan')->required()->columnSpanFull(),
|
||||||
|
DatePicker::make('date')->label('Tanggal')->required(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\CashRecords\Tables;
|
||||||
|
|
||||||
|
use App\Models\CashCategory;
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class CashRecordsTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('date')->label('Tanggal')->date('d M Y')->sortable(),
|
||||||
|
TextColumn::make('category.name')->label('Kategori'),
|
||||||
|
TextColumn::make('amount')->label('Jumlah')->money('IDR')->sortable(),
|
||||||
|
TextColumn::make('description')->label('Keterangan')->limit(40),
|
||||||
|
TextColumn::make('creator.name')->label('Dibuat Oleh'),
|
||||||
|
TextColumn::make('verifier.name')->label('Diverifikasi')->default('-'),
|
||||||
|
TextColumn::make('verified_at')->label('Tgl Verifikasi')->dateTime('d M Y')->default('-'),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('category_id')->label('Kategori')
|
||||||
|
->options(CashCategory::pluck('name', 'id')),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Divisions\Pages\CreateDivision;
|
||||||
|
use App\Filament\Resources\Divisions\Pages\EditDivision;
|
||||||
|
use App\Filament\Resources\Divisions\Pages\ListDivisions;
|
||||||
|
use App\Filament\Resources\Divisions\Schemas\DivisionForm;
|
||||||
|
use App\Filament\Resources\Divisions\Tables\DivisionsTable;
|
||||||
|
use App\Models\Division;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class DivisionResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = Division::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-group';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Organisasi';
|
||||||
|
protected static ?string $modelLabel = 'Divisi';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return DivisionForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return DivisionsTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListDivisions::route('/'),
|
||||||
|
'create' => CreateDivision::route('/create'),
|
||||||
|
'edit' => EditDivision::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Divisions\DivisionResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateDivision extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = DivisionResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Divisions\DivisionResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditDivision extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = DivisionResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Divisions\DivisionResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListDivisions extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = DivisionResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions\Schemas;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class DivisionForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('name')->label('Nama')->required(),
|
||||||
|
Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Divisions\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class DivisionsTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('name')->label('Nama')->searchable()->sortable(),
|
||||||
|
TextColumn::make('description')->label('Deskripsi')->limit(50),
|
||||||
|
TextColumn::make('members_count')->counts('members')->label('Anggota'),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Users\UserResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateUser extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = UserResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Users\UserResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditUser extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = UserResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Users\UserResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListUsers extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = UserResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users\Schemas;
|
||||||
|
|
||||||
|
use App\Models\Division;
|
||||||
|
use Filament\Forms\Components\DatePicker;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class UserForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('name')->required(),
|
||||||
|
TextInput::make('email')->email()->unique(ignoreRecord: true),
|
||||||
|
TextInput::make('password')->password()->revealable()
|
||||||
|
->required(fn ($operation) => $operation === 'create')
|
||||||
|
->dehydrateStateUsing(fn ($state) => filled($state) ? bcrypt($state) : null)
|
||||||
|
->dehydrated(fn ($state) => filled($state)),
|
||||||
|
TextInput::make('phone')->label('Telepon'),
|
||||||
|
Textarea::make('address')->label('Alamat')->rows(2)->columnSpanFull(),
|
||||||
|
Select::make('division_id')->label('Divisi')
|
||||||
|
->options(Division::pluck('name', 'id'))
|
||||||
|
->searchable(),
|
||||||
|
Select::make('status')
|
||||||
|
->options(['aktif' => 'Aktif', 'nonaktif' => 'Nonaktif'])
|
||||||
|
->default('aktif')
|
||||||
|
->required()
|
||||||
|
->live(),
|
||||||
|
Textarea::make('inactive_reason')->label('Alasan Nonaktif')
|
||||||
|
->visible(fn ($get) => $get('status') === 'nonaktif')
|
||||||
|
->required(fn ($get) => $get('status') === 'nonaktif')
|
||||||
|
->columnSpanFull(),
|
||||||
|
DatePicker::make('last_activity_date')->label('Terakhir Aktif'),
|
||||||
|
Select::make('roles')->relationship('roles', 'name')
|
||||||
|
->multiple()->preload()->label('Role'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users\Tables;
|
||||||
|
|
||||||
|
use App\Models\Division;
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class UsersTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('name')->searchable()->sortable(),
|
||||||
|
TextColumn::make('email')->searchable(),
|
||||||
|
TextColumn::make('phone')->label('Telepon'),
|
||||||
|
TextColumn::make('division.name')->label('Divisi')->sortable(),
|
||||||
|
TextColumn::make('status')->badge()
|
||||||
|
->color(fn ($state) => $state === 'aktif' ? 'success' : 'danger'),
|
||||||
|
TextColumn::make('roles.name')->label('Role')->badge(),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('status')
|
||||||
|
->options(['aktif' => 'Aktif', 'nonaktif' => 'Nonaktif']),
|
||||||
|
SelectFilter::make('division_id')->label('Divisi')
|
||||||
|
->options(Division::pluck('name', 'id')),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Users;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Users\Pages\CreateUser;
|
||||||
|
use App\Filament\Resources\Users\Pages\EditUser;
|
||||||
|
use App\Filament\Resources\Users\Pages\ListUsers;
|
||||||
|
use App\Filament\Resources\Users\Schemas\UserForm;
|
||||||
|
use App\Filament\Resources\Users\Tables\UsersTable;
|
||||||
|
use App\Models\User;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class UserResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = User::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-users';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Organisasi';
|
||||||
|
protected static ?string $modelLabel = 'Anggota';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return UserForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return UsersTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListUsers::route('/'),
|
||||||
|
'create' => CreateUser::route('/create'),
|
||||||
|
'edit' => EditUser::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Votes\VoteResource;
|
||||||
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
|
||||||
|
class CreateVote extends CreateRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = VoteResource::class;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Votes\VoteResource;
|
||||||
|
use Filament\Actions\DeleteAction;
|
||||||
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
|
class EditVote extends EditRecord
|
||||||
|
{
|
||||||
|
protected static string $resource = VoteResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DeleteAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes\Pages;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Votes\VoteResource;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
|
class ListVotes extends ListRecords
|
||||||
|
{
|
||||||
|
protected static string $resource = VoteResource::class;
|
||||||
|
|
||||||
|
protected function getHeaderActions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
CreateAction::make(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes\Schemas;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\DateTimePicker;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
|
class VoteForm
|
||||||
|
{
|
||||||
|
public static function configure(Schema $schema): Schema
|
||||||
|
{
|
||||||
|
return $schema->components([
|
||||||
|
TextInput::make('title')->label('Judul')->required(),
|
||||||
|
Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(),
|
||||||
|
Select::make('type')->options([
|
||||||
|
'activity' => 'Kegiatan',
|
||||||
|
'finance' => 'Keuangan',
|
||||||
|
'general' => 'Umum',
|
||||||
|
])->required(),
|
||||||
|
Select::make('status')
|
||||||
|
->options(['open' => 'Buka', 'closed' => 'Tutup'])
|
||||||
|
->default('open')
|
||||||
|
->required(),
|
||||||
|
DateTimePicker::make('deadline')->label('Batas Waktu'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes\Tables;
|
||||||
|
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class VotesTable
|
||||||
|
{
|
||||||
|
public static function configure(Table $table): Table
|
||||||
|
{
|
||||||
|
return $table
|
||||||
|
->columns([
|
||||||
|
TextColumn::make('title')->label('Judul')->searchable(),
|
||||||
|
TextColumn::make('type')->badge(),
|
||||||
|
TextColumn::make('status')->badge()
|
||||||
|
->color(fn ($state) => $state === 'open' ? 'success' : 'gray'),
|
||||||
|
TextColumn::make('deadline')->label('Batas Waktu')->dateTime('d M Y H:i'),
|
||||||
|
TextColumn::make('items_count')->counts('items')->label('Suara'),
|
||||||
|
])
|
||||||
|
->filters([
|
||||||
|
SelectFilter::make('status')->options(['open' => 'Buka', 'closed' => 'Tutup']),
|
||||||
|
SelectFilter::make('type')->options([
|
||||||
|
'activity' => 'Kegiatan',
|
||||||
|
'finance' => 'Keuangan',
|
||||||
|
'general' => 'Umum',
|
||||||
|
]),
|
||||||
|
])
|
||||||
|
->recordActions([EditAction::make()])
|
||||||
|
->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Votes;
|
||||||
|
|
||||||
|
use App\Filament\Resources\Votes\Pages\CreateVote;
|
||||||
|
use App\Filament\Resources\Votes\Pages\EditVote;
|
||||||
|
use App\Filament\Resources\Votes\Pages\ListVotes;
|
||||||
|
use App\Filament\Resources\Votes\Schemas\VoteForm;
|
||||||
|
use App\Filament\Resources\Votes\Tables\VotesTable;
|
||||||
|
use App\Models\Vote;
|
||||||
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
class VoteResource extends Resource
|
||||||
|
{
|
||||||
|
protected static ?string $model = Vote::class;
|
||||||
|
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-check-badge';
|
||||||
|
protected static string|\UnitEnum|null $navigationGroup = 'Keputusan';
|
||||||
|
protected static ?string $modelLabel = 'Voting';
|
||||||
|
|
||||||
|
public static function form(Schema $form): Schema
|
||||||
|
{
|
||||||
|
return VoteForm::configure($form);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function table(Table $table): Table
|
||||||
|
{
|
||||||
|
return VotesTable::configure($table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getPages(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'index' => ListVotes::route('/'),
|
||||||
|
'create' => CreateVote::route('/create'),
|
||||||
|
'edit' => EditVote::route('/{record}/edit'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user