feat: add transaksional

This commit is contained in:
Nawcodes 2025-04-26 16:47:27 +07:00
parent 786ccc8254
commit 2a982057d7
9 changed files with 225 additions and 3 deletions

View File

@ -0,0 +1,90 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\TrTransaksiResource\Pages;
use App\Filament\Resources\TrTransaksiResource\RelationManagers;
use App\Models\TrTransaksi;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class TrTransaksiResource extends Resource
{
protected static ?string $model = TrTransaksi::class;
protected static ?string $pluralModelLabel = 'Transaksi Tindakan';
protected static ?string $navigationGroup = 'Transaksi';
protected static ?int $navigationSort = 2;
protected static ?string $navigationLabel = "Transaksi Tindakan";
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public static function form(Form $form): Form
{
return $form
->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'),
];
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\TrTransaksiResource\Pages;
use App\Filament\Resources\TrTransaksiResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateTrTransaksi extends CreateRecord
{
protected static string $resource = TrTransaksiResource::class;
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Filament\Resources\TrTransaksiResource\Pages;
use App\Filament\Resources\TrTransaksiResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditTrTransaksi extends EditRecord
{
protected static string $resource = TrTransaksiResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
];
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\TrTransaksiResource\Pages;
use App\Filament\Resources\TrTransaksiResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListTrTransaksis extends ListRecords
{
protected static string $resource = TrTransaksiResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\TrTransaksiResource\Pages;
use App\Filament\Resources\TrTransaksiResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewTrTransaksi extends ViewRecord
{
protected static string $resource = TrTransaksiResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@ -9,4 +9,22 @@ class TrTransaksi extends Model
protected $table = 'tr_transaksi';
protected $primaryKey = 'id_transaksi';
protected $guarded = [];
protected $casts = [
'id_tindakan' => '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');
}
}

View File

@ -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');
});
}

View File

@ -29,6 +29,7 @@ class DatabaseSeeder extends Seeder
RuangPelayananSeeder::class,
TindakanSeeder::class,
RegisterSeeder::class,
TransaksiSeed::class,
]);
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace Database\Seeders;
use App\Models\MsAsuransi;
use App\Models\MsPasien;
use App\Models\MsPegawai;
use App\Models\MsRuangPelayanan;
use App\Models\MsTindakan;
use App\Models\TrRegistrasi;
use App\Models\TrTransaksi;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TransaksiSeed extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
$faker = \Faker\Factory::create();
// random id tindakan return array of id tindakan, 1-4
$id_tindakan = MsTindakan::all()->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(),
]);
}
}
}