From 2a982057d7a8732cb08e3a4981ea8ed91fbbfbd7 Mon Sep 17 00:00:00 2001 From: Nawcodes Date: Sat, 26 Apr 2025 16:47:27 +0700 Subject: [PATCH] feat: add transaksional --- .../Resources/TrTransaksiResource.php | 90 +++++++++++++++++++ .../Pages/CreateTrTransaksi.php | 12 +++ .../Pages/EditTrTransaksi.php | 20 +++++ .../Pages/ListTrTransaksis.php | 19 ++++ .../Pages/ViewTrTransaksi.php | 19 ++++ app/Models/TrTransaksi.php | 18 ++++ .../2025_04_26_072441_tr_transaksi.php | 5 +- database/seeders/DatabaseSeeder.php | 1 + database/seeders/TransaksiSeed.php | 44 +++++++++ 9 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 app/Filament/Resources/TrTransaksiResource.php create mode 100644 app/Filament/Resources/TrTransaksiResource/Pages/CreateTrTransaksi.php create mode 100644 app/Filament/Resources/TrTransaksiResource/Pages/EditTrTransaksi.php create mode 100644 app/Filament/Resources/TrTransaksiResource/Pages/ListTrTransaksis.php create mode 100644 app/Filament/Resources/TrTransaksiResource/Pages/ViewTrTransaksi.php create mode 100644 database/seeders/TransaksiSeed.php diff --git a/app/Filament/Resources/TrTransaksiResource.php b/app/Filament/Resources/TrTransaksiResource.php new file mode 100644 index 0000000..5133c64 --- /dev/null +++ b/app/Filament/Resources/TrTransaksiResource.php @@ -0,0 +1,90 @@ +schema([ + Forms\Components\Select::make('id_registrasi') + ->relationship('registrasi', 'id_registrasi') + ->required(), + Forms\Components\Select::make('id_tindakan') + ->relationship('tindakan', 'id_tindakan') + ->required(), + Forms\Components\Select::make('id_pegawai') + ->relationship('pegawai', 'id_pegawai') + ->required(), + Forms\Components\TextInput::make('jml_tindakan') + ->required(), + + // + ]); + } + + public static function table(Table $table): Table + { + return $table + ->defaultSort('created_at', 'desc') + ->columns([ + TextColumn::make('pegawai.nama_pegawai')->label('Pegawai'), + TextColumn::make('jml_tindakan')->label('Jumlah Tindakan')->default(function ($record) { + return count($record->id_tindakan); + }), + TextColumn::make('created_at')->label('Tanggal Dibuat'), + TextColumn::make('updated_at')->label('Tanggal Diubah'), + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\ViewAction::make(), + // Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListTrTransaksis::route('/'), + 'create' => Pages\CreateTrTransaksi::route('/create'), + 'view' => Pages\ViewTrTransaksi::route('/{record}'), + // 'edit' => Pages\EditTrTransaksi::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/TrTransaksiResource/Pages/CreateTrTransaksi.php b/app/Filament/Resources/TrTransaksiResource/Pages/CreateTrTransaksi.php new file mode 100644 index 0000000..a2f0fd9 --- /dev/null +++ b/app/Filament/Resources/TrTransaksiResource/Pages/CreateTrTransaksi.php @@ -0,0 +1,12 @@ + 'array', + ]; + + public function registrasi() + { + return $this->belongsTo(TrRegistrasi::class, 'id_registrasi', 'id_registrasi'); + } + + public function tindakan() + { + return $this->belongsTo(MsTindakan::class, 'id_tindakan', 'id_tindakan'); + } + + public function pegawai() + { + return $this->belongsTo(MsPegawai::class, 'id_pegawai', 'id_pegawai'); + } } diff --git a/database/migrations/2025_04_26_072441_tr_transaksi.php b/database/migrations/2025_04_26_072441_tr_transaksi.php index 72440f0..ad5bd05 100644 --- a/database/migrations/2025_04_26_072441_tr_transaksi.php +++ b/database/migrations/2025_04_26_072441_tr_transaksi.php @@ -14,13 +14,12 @@ return new class extends Migration Schema::create('tr_transaksi', function (Blueprint $table) { $table->id('id_transaksi'); $table->unsignedBigInteger('id_registrasi'); - $table->string('id_tindakan'); + // id tindakan as array cause has multiple tindakan + $table->json('id_tindakan'); $table->string('id_pegawai'); - $table->integer('jml_tindakan')->default(1); $table->timestamps(); $table->foreign('id_registrasi')->references('id_registrasi')->on('tr_registrasi'); - $table->foreign('id_tindakan')->references('id_tindakan')->on('ms_tindakan'); $table->foreign('id_pegawai')->references('id_pegawai')->on('ms_pegawai'); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a83b4df..3c8845e 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -29,6 +29,7 @@ class DatabaseSeeder extends Seeder RuangPelayananSeeder::class, TindakanSeeder::class, RegisterSeeder::class, + TransaksiSeed::class, ]); } } diff --git a/database/seeders/TransaksiSeed.php b/database/seeders/TransaksiSeed.php new file mode 100644 index 0000000..f2a4f33 --- /dev/null +++ b/database/seeders/TransaksiSeed.php @@ -0,0 +1,44 @@ +pluck('id_tindakan')->toArray(); + + // make sure id_tindakan more than 1 + $id_tindakan = array_map(function ($id) { + return [$id]; + }, $id_tindakan); + + + foreach (range(1, 10) as $i) { + TrTransaksi::create([ + 'id_registrasi' => TrRegistrasi::all()->random()->id_registrasi, + 'id_tindakan' => $id_tindakan[array_rand($id_tindakan)], + 'id_pegawai' => MsPegawai::all()->random()->id_pegawai, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } +}