Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions app/Filament/Resources/TicketClassificationResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<?php
/**
* TicketClassificationResource
*
* Resource Filament untuk manajemen klasifikasi tiket.
*
* @package App\Filament\Resources
*/

namespace App\Filament\Resources;

use App\Filament\Resources\TicketClassificationResource\Pages;
use App\Models\TicketClassification;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables\Table;
use Filament\Tables;

class TicketClassificationResource extends Resource
{
protected static ?string $model = TicketClassification::class;

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

protected static ?int $navigationSort = 6;

/**
* Mendapatkan label navigasi untuk resource ini.
*
* @return string Label navigasi (diterjemahkan)
*/
public static function getNavigationLabel(): string
{
return __('Classification');
}

/**
* Mendapatkan label jamak (plural) untuk resource ini.
*
* @return string|null Label plural (diterjemahkan)
*/
public static function getPluralLabel(): ?string
{
return static::getNavigationLabel();
}

/**
* Mendapatkan grup navigasi untuk resource ini.
*
* @return string|null Nama grup navigasi (diterjemahkan)
*/
public static function getNavigationGroup(): ?string
{
return __('Referential');
}

/**
* Mendefinisikan form input untuk create/edit klasifikasi tiket.
*
* @param Form $form Instance form Filament
* @return Form Form dengan skema input
*/
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Card::make()
->schema([
Forms\Components\Grid::make()
->schema([
// Input nama klasifikasi
Forms\Components\TextInput::make('name')
->label(__('Classification name'))
->required()
->maxLength(255),

// Picker warna klasifikasi
Forms\Components\ColorPicker::make('color')
->label(__('Classification color'))
->required(),
])
])
]);
}

/**
* Mendefinisikan tabel daftar klasifikasi tiket.
*
* @param Table $table Instance tabel Filament
* @return Table Tabel dengan kolom dan aksi
*/
public static function table(Table $table): Table
{
return $table
->columns([
// Kolom warna klasifikasi
Tables\Columns\ColorColumn::make('color')
->label(__('Color'))
->sortable()
->searchable(),

// Kolom nama klasifikasi
Tables\Columns\TextColumn::make('name')
->label(__('Name'))
->sortable()
->searchable(),
])
->filters([
// Tambahkan filter jika diperlukan
])
->actions([
// Aksi edit per baris
Tables\Actions\EditAction::make(),
])
->bulkActions([
// Aksi hapus massal
Tables\Actions\DeleteBulkAction::make(),
]);
}

/**
* Mendefinisikan relasi yang tersedia untuk resource ini.
*
* @return array Daftar relasi
*/
public static function getRelations(): array
{
return [
// Tambahkan relasi jika ada
];
}

/**
* Mendefinisikan halaman-halaman (routes) untuk resource ini.
*
* @return array Daftar halaman dan route-nya
*/
public static function getPages(): array
{
return [
'index' => Pages\ListTicketClassifications::route('/'),
'create' => Pages\CreateTicketClassification::route('/create'),
'edit' => Pages\EditTicketClassification::route('/{record}/edit'),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php
/**
* CreateTicketClassification
*
* Halaman untuk membuat klasifikasi tiket baru pada resource TicketClassificationResource.
*
* @package App\Filament\Resources\TicketClassificationResource\Pages
*/

namespace App\Filament\Resources\TicketClassificationResource\Pages;

use App\Filament\Resources\TicketClassificationResource;
use Filament\Resources\Pages\CreateRecord;

class CreateTicketClassification extends CreateRecord
{
/**
* Resource yang terkait dengan halaman ini.
*
* @var string
*/
protected static string $resource = TicketClassificationResource::class;

/**
* Mendapatkan judul halaman create klasifikasi tiket.
*
* @return string Judul halaman (diterjemahkan)
*/
public function getTitle(): string
{
return __('Create Classification');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php
/**
* EditTicketClassification
*
* Halaman untuk mengedit klasifikasi tiket pada resource TicketClassificationResource.
*
* @package App\Filament\Resources\TicketClassificationResource\Pages
*/

namespace App\Filament\Resources\TicketClassificationResource\Pages;

use App\Filament\Resources\TicketClassificationResource;
use Filament\Pages\Actions;
use Filament\Resources\Pages\EditRecord;

class EditTicketClassification extends EditRecord
{
/**
* Resource yang terkait dengan halaman ini.
*
* @var string
*/
protected static string $resource = TicketClassificationResource::class;

/**
* Mendapatkan judul halaman edit klasifikasi tiket.
*
* @return string Judul halaman (diterjemahkan)
*/
public function getTitle(): string
{
return __('Edit Classification');
}

/**
* Mendapatkan daftar aksi yang tersedia pada halaman edit.
*
* @return array Daftar aksi (misal: hapus)
*/
protected function getActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php
/**
* ListTicketClassifications
*
* Halaman untuk menampilkan daftar klasifikasi tiket pada resource TicketClassificationResource.
*
* @package App\Filament\Resources\TicketClassificationResource\Pages
*/

namespace App\Filament\Resources\TicketClassificationResource\Pages;

use App\Filament\Resources\TicketClassificationResource;
use Filament\Pages\Actions;
use Filament\Resources\Pages\ListRecords;

class ListTicketClassifications extends ListRecords
{
/**
* Resource yang terkait dengan halaman ini.
*
* @var string
*/
protected static string $resource = TicketClassificationResource::class;

/**
* Mendapatkan daftar aksi yang tersedia pada halaman list.
*
* @return array Daftar aksi (misal: tambah data)
*/
protected function getActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}
51 changes: 31 additions & 20 deletions app/Filament/Resources/TicketResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Filament\Resources;

use App\Filament\Resources\TicketResource\Pages;
use App\Models\Epic;
use App\Models\Project;
use App\Models\Ticket;
use App\Models\TicketPriority;
Expand All @@ -24,6 +23,7 @@
use App\Models\Milestone;
use Carbon\Carbon;
use App\Models\IssueSource;
use App\Models\TicketClassification;
use Filament\Tables\Columns\ViewColumn;

class TicketResource extends Resource
Expand Down Expand Up @@ -113,14 +113,13 @@ public static function form(Form $form): Form
)
->default(fn() => request()->get('project'))
->required(),
// Pilihan epic
Forms\Components\Select::make('epic_id')
->label(__('Epic'))

// klasifikasi tiket
Forms\Components\Select::make('classification_id')
->label(__('Classification'))
->searchable()
->reactive()
->options(function ($get, $set) {
return Epic::where('project_id', $get('project_id'))->pluck('name', 'id')->toArray();
}),
->options(fn() => TicketClassification::all()->pluck('name', 'id')->toArray()),

// Grid untuk kode dan nama tiket
Forms\Components\Grid::make()
->columns(12)
Expand Down Expand Up @@ -347,12 +346,23 @@ public static function tableColumns(bool $withProject = true): array
->sortable()
->searchable(),

// Kolom owner
// Tables\Columns\TextColumn::make('owner.name')
// ->label(__('Owner'))
// ->sortable()
// ->formatStateUsing(fn($record) => view('components.user-avatar', ['user' => $record->owner]))
// ->searchable(),
// Kolom klasifikasi
Tables\Columns\TextColumn::make('classification.name')
->label(__('Classification'))
->placeholder('-')
->formatStateUsing(function ($state, $record) {
return new HtmlString('
<div class="flex flex-wrap gap-1">
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium text-white"
style="background-color: ' . ($record->classification->color ?? '#999') . '">
' . $state . '
</span>
</div>
');
})
->searchable()
->sortable(),

ViewColumn::make('owner')
->label(__('Owner'))
->view('components.user-avatar')
Expand All @@ -363,12 +373,6 @@ public static function tableColumns(bool $withProject = true): array
->sortable()
->disabledClick(),

// Kolom penanggung jawab
// Tables\Columns\TextColumn::make('responsible.name')
// ->label(__('Responsible'))
// ->sortable()
// ->formatStateUsing(fn($record) => view('components.user-avatar', ['user' => $record->responsible]))
// ->searchable(),
ViewColumn::make('responsible')
->label(__('Responsible'))
->view('components.user-avatar')
Expand Down Expand Up @@ -477,6 +481,7 @@ public static function table(Table $table): Table
{
return $table
->columns(self::tableColumns())
->defaultSort('created_at', 'desc')
->filters([
// Filter project
Tables\Filters\SelectFilter::make('project_id')
Expand Down Expand Up @@ -547,6 +552,12 @@ public static function table(Table $table): Table
->label(__('Issue Source'))
->multiple()
->options(fn() => IssueSource::all()->pluck('name', 'id')->toArray()),

// Filter klasifikasi
Tables\Filters\SelectFilter::make('classification_id')
->label(__('Classification'))
->multiple()
->options(fn() => TicketClassification::all()->pluck('name', 'id')->toArray()),
])
->actions([
// Aksi lihat dan edit
Expand Down
5 changes: 2 additions & 3 deletions app/Filament/Resources/TicketResource/Pages/ListTickets.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected function getTableQuery(): Builder
{
// 🔥 ATASAN: BISA LIHAT SEMUA TIKET
if (in_array(auth()->user()->name, ['Husnul Septia'])) {
return parent::getTableQuery()->orderBy('created_at', 'desc');
return parent::getTableQuery();
}

return parent::getTableQuery()
Expand All @@ -40,7 +40,6 @@ protected function getTableQuery(): Builder
return $query->where('users.id', auth()->user()->id);
});
});
})
->orderBy('created_at', 'desc');
});
}
}
Loading