Initial commit

This commit is contained in:
annajwasz 2025-02-20 00:14:04 +07:00
parent e417ebc95d
commit 120ffbe865
57 changed files with 11502 additions and 13 deletions

View File

@ -0,0 +1,81 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\FormulirResource\Pages;
use App\Filament\Resources\FormulirResource\RelationManagers;
use App\Models\Formulir;
use Filament\Forms;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
class FormulirResource extends Resource
{
protected static ?string $model = Formulir::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Data Master';
protected static ?string $slug = 'daftar-formulir';
protected static ?int $navigationSort = 5;
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('nama')
->required(),//kolom wajib diisi
DatePicker::make('tgl_pembuatan')
->label('Tanggal')
->required(),
TextInput::make('kuota'),
TextInput::make('status')
->required(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('nama'),
TextColumn::make('tgl_pembuatan')
->label('Tanggal'),
TextColumn::make('kuota'),
TextColumn::make('status'),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListFormulirs::route('/'),
'create' => Pages\CreateFormulir::route('/create'),
'edit' => Pages\EditFormulir::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,81 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\KriteriaResource\Pages;
use App\Filament\Resources\KriteriaResource\RelationManagers;
use App\Models\Kriteria;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
class KriteriaResource extends Resource
{
protected static ?string $model = Kriteria::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Data Master';
// protected static ?string $navigationLabel = 'Kriteria';
// protected static ?string $modelLabel = 'Kriteria';
// protected static ?string $pluralModelLabel = 'Kriteria';
protected static ?string $slug = 'kriteria';
protected static ?int $navigationSort = 1;
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('nama')
->required(),//kolom wajib diisi
TextInput::make('prioritas')
->required(),
TextInput::make('bobot')
->required(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('nama')
->searchable(),
TextColumn::make('prioritas'),
TextColumn::make('bobot'),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListKriterias::route('/'),
'create' => Pages\CreateKriteria::route('/create'),
'edit' => Pages\EditKriteria::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,109 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\MahasiswaResource\Pages;
use App\Filament\Resources\MahasiswaResource\RelationManagers;
use App\Models\Mahasiswa;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
class MahasiswaResource extends Resource
{
protected static ?string $model = Mahasiswa::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Data Master';
// protected static ?string $navigationLabel = 'Mahasiswa';
// protected static ?string $modelLabel = 'Mahasiswa';
// protected static ?string $pluralModelLabel = 'Mahasiswa';
protected static ?string $slug = 'mahasiswa';
protected static ?int $navigationSort = 3;//buat urutannya
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('noreg_kipk')
->label('No. Registrasi KIP-K')
->required(),
TextInput::make('nama')
->required(),
TextInput::make('NIM')
->label('NIM')
->required(),
TextInput::make('jurusan')
->required(),
TextInput::make('prodi')
->label('Program Studi')
->required(),
TextInput::make('angkatan')
->required(),
TextInput::make('semester')
->required(),
TextInput::make('jalur_masuk')
->required(),
TextInput::make('ponsel')
->required(),
TextInput::make('alamat')
->required(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('noreg_kipk')
->label('No. Registrasi KIP-K'),
TextColumn::make('nama')
->searchable(),
// ->shortable(), //biar urut berdasarkan abjad
TextColumn::make('NIM')
->label('NIM'),
TextColumn::make('jurusan'),
TextColumn::make('prodi')
->label('Program Studi'),
TextColumn::make('angkatan'),
TextColumn::make('semester'),
TextColumn::make('jalur_masuk'),
TextColumn::make('ponsel'),
TextColumn::make('alamat'),
])
->filters([
//
])
->actions([
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\ListMahasiswas::route('/'),
'create' => Pages\CreateMahasiswa::route('/create'),
'edit' => Pages\EditMahasiswa::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,110 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\SubKriteriaResource\Pages;
use App\Filament\Resources\SubKriteriaResource\RelationManagers;
use App\Models\SubKriteria;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\Select;
class SubKriteriaResource extends Resource
{
protected static ?string $model = SubKriteria::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Data Master';
// Tambahkan ini untuk mengubah label navigasi
// protected static ?string $navigationLabel = 'Sub Kriteria';
// // Tambahkan ini untuk mengubah label model
// protected static ?string $modelLabel = 'Sub Kriteria';
// // Tambahkan ini untuk mengubah label plural
// protected static ?string $pluralModelLabel = 'Sub Kriteria';
protected static ?string $slug = 'sub-kriteria';
protected static ?int $navigationSort = 2;
public static function form(Form $form): Form
{
return $form
->schema([
Select::make('kriteria_id')
->relationship('kriteria', 'nama')
->label('Kriteria')
->required()
->searchable(),
TextInput::make('nama')
->label('Sub Kriteria')
->required(),
TextInput::make('deskripsi')
->required(),
TextInput::make('prioritas')
->numeric()
->required(),
TextInput::make('bobot')
->numeric()
->required(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('kriteria.nama')
->label('Kriteria')
->sortable()
->searchable(),
TextColumn::make('nama')
->label('Sub Kriteria')
->sortable()
->searchable(),
TextColumn::make('deskripsi')
->sortable()
->searchable(),
TextColumn::make('prioritas')
->sortable(),
TextColumn::make('bobot')
->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListSubKriterias::route('/'),
'create' => Pages\CreateSubKriteria::route('/create'),
'edit' => Pages\EditSubKriteria::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,97 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource\RelationManagers;
use App\Models\User;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
class UserResource extends Resource
{
protected static ?string $model = User::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Data Master';
protected static ?string $slug = 'user';
// Tambahkan ini untuk mengubah label navigasi
// protected static ?string $navigationLabel = 'User';
// // Tambahkan ini untuk mengubah label model
// protected static ?string $modelLabel = 'User';
// // Tambahkan ini untuk mengubah label plural
// protected static ?string $pluralModelLabel = 'User';
protected static ?int $navigationSort = 4;
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('name')
->required(),
TextInput::make('email')
->email()
->required(),
TextInput::make('password')
->password()
->required()
// ->hiddenOn('edit'),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')
->searchable()
->sortable(),
TextColumn::make('email')
->searchable()
->sortable(),
TextColumn::make('password'),
TextColumn::make('created_at')
->dateTime()
->sortable(),
TextColumn::make('updated_at')
->dateTime()
->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListUsers::route('/'),
'create' => Pages\CreateUser::route('/create'),
'edit' => Pages\EditUser::route('/{record}/edit'),
];
}
}

View File

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

View File

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

View File

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

View File

@ -17,11 +17,12 @@ class User extends Authenticatable
* *
* @var list<string> * @var list<string>
*/ */
protected $fillable = [ protected $guarded = [];
'name', // protected $fillable = [
'email', // 'name',
'password', // 'email',
]; // 'password',
// ];
/** /**
* The attributes that should be hidden for serialization. * The attributes that should be hidden for serialization.

14
app/Models/formulir.php Normal file
View File

@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class formulir extends Model
{
use HasFactory;
protected $guarded = [];
}

18
app/Models/kriteria.php Normal file
View File

@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class kriteria extends Model
{
use HasFactory;
protected $guarded = [];
// protected $fillable = [
// 'nama',
// 'prioritas',
// 'bobot'
// ];
}

13
app/Models/mahasiswa.php Normal file
View File

@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class mahasiswa extends Model
{
use HasFactory;
protected $guarded = [];
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SubKriteria extends Model
{
use HasFactory;
protected $table = 'subkriterias'; //soalnya buatnya manual
protected $guarded = [];
// protected $table = 'subkriterias';
// protected $fillable = [
// 'kriteria_id',
// 'nama',
// 'deskripsi',
// 'prioritas',
// 'bobot'
// ];
public function kriteria()
{
return $this->belongsTo(Kriteria::class, 'kriteria_id');
}
}

View File

@ -0,0 +1,58 @@
<?php
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->path('admin')
->login()
->colors([
'primary' => Color::Amber,
])
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([
Pages\Dashboard::class,
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
]);
}
}

View File

@ -2,4 +2,5 @@
return [ return [
App\Providers\AppServiceProvider::class, App\Providers\AppServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
]; ];

View File

@ -7,6 +7,7 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"filament/filament": "^3.2",
"laravel/framework": "^11.31", "laravel/framework": "^11.31",
"laravel/tinker": "^2.9" "laravel/tinker": "^2.9"
}, },
@ -34,7 +35,8 @@
"scripts": { "scripts": {
"post-autoload-dump": [ "post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi" "@php artisan package:discover --ansi",
"@php artisan filament:upgrade"
], ],
"post-update-cmd": [ "post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force" "@php artisan vendor:publish --tag=laravel-assets --ansi --force"

9753
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('kriterias', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->integer('prioritas');
$table->decimal('bobot', 10, 7);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('kriterias');
}
};

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('subkriterias', function (Blueprint $table) {
$table->id();
$table->foreignId('kriteria_id')->constrained('kriterias')->cascadeOnDelete();
$table->string('nama');
$table->string('deskripsi');
$table->integer('prioritas');
$table->decimal('bobot', 10, 7);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('subkriterias');
}
};

View File

@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('mahasiswas', function (Blueprint $table) {
$table->id();
$table->string('noreg_kipk');
$table->string('nama');
$table->string('NIM');
$table->string('jurusan');
$table->string('prodi');
$table->string('angkatan');
$table->string('semester');
$table->string('jalur_masuk');
$table->string('ponsel');
$table->string('alamat');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('mahasiswas');
}
};

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('formulirs', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->datetime('tgl_pembuatan');
$table->string('kuota');
$table->string('status');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('formulirs');
}
};

View File

@ -2,8 +2,6 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
@ -13,11 +11,11 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// User::factory(10)->create(); $this->call([
UserSeeder::class,
User::factory()->create([ KriteriaSeeder::class,
'name' => 'Test User', SubKriteriaSeeder::class,
'email' => 'test@example.com', MahasiswaSeeder::class,
]); ]);
} }
} }

View File

@ -0,0 +1,39 @@
<?php
namespace Database\Seeders;
use App\Models\Kriteria;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class KriteriaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$kriterias = [
[
'nama' => 'Kepemilikan KIP',
'prioritas' => 1,
'bobot' => 0.5555,
],
[
'nama' => 'Tingkatan Desil',
'prioritas' => 2,
'bobot' => 0.25,
],
[
'nama' => 'Kondisi Ekonomi',
'prioritas' => 3,
'bobot' => 0.20,
],
];
foreach ($kriterias as $kriteria) {
Kriteria::create($kriteria);
}
}
}

View File

@ -0,0 +1,59 @@
<?php
namespace Database\Seeders;
use App\Models\Mahasiswa;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class MahasiswaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$mahasiswas = [
[
'noreg_kipk' => 'KIP001',
'nama' => 'Ahmad Fauzi',
'NIM' => '2021573010001',
'jurusan' => 'Teknik',
'prodi' => 'Teknik Informatika',
'angkatan' => '2021',
'semester' => '5',
'jalur_masuk' => 'SNMPTN',
'ponsel' => '081234567890',
'alamat' => 'Jl. Pendidikan No. 1',
],
[
'noreg_kipk' => 'KIP002',
'nama' => 'Siti Nurhaliza',
'NIM' => '2021573010002',
'jurusan' => 'Teknik',
'prodi' => 'Teknik Informatika',
'angkatan' => '2021',
'semester' => '5',
'jalur_masuk' => 'SBMPTN',
'ponsel' => '081234567891',
'alamat' => 'Jl. Pendidikan No. 2',
],
[
'noreg_kipk' => 'KIP003',
'nama' => 'Budi Santoso',
'NIM' => '2021573010003',
'jurusan' => 'Teknik',
'prodi' => 'Teknik Informatika',
'angkatan' => '2021',
'semester' => '5',
'jalur_masuk' => 'SNMPTN',
'ponsel' => '081234567892',
'alamat' => 'Jl. Pendidikan No. 3',
],
];
foreach ($mahasiswas as $mahasiswa) {
Mahasiswa::create($mahasiswa);
}
}
}

View File

@ -0,0 +1,84 @@
<?php
namespace Database\Seeders;
use App\Models\SubKriteria;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class SubKriteriaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$subkriterias = [
// Subkriteria untuk Kepemilikan KIP (kriteria_id: 1)
[
'kriteria_id' => 1,
'nama' => 'Memiliki KIP',
'deskripsi' => 'Mahasiswa memiliki Kartu Indonesia Pintar',
'prioritas' => 1,
'bobot' => 0.6,
],
[
'kriteria_id' => 1,
'nama' => 'Tidak Memiliki KIP',
'deskripsi' => 'Mahasiswa tidak memiliki Kartu Indonesia Pintar',
'prioritas' => 2,
'bobot' => 0.4,
],
// Subkriteria untuk Tingkatan Desil (kriteria_id: 2)
[
'kriteria_id' => 2,
'nama' => 'Desil 1',
'deskripsi' => 'Tingkat kesejahteraan terendah',
'prioritas' => 1,
'bobot' => 0.4,
],
[
'kriteria_id' => 2,
'nama' => 'Desil 2',
'deskripsi' => 'Tingkat kesejahteraan rendah',
'prioritas' => 2,
'bobot' => 0.3,
],
[
'kriteria_id' => 2,
'nama' => 'Desil 3',
'deskripsi' => 'Tingkat kesejahteraan menengah bawah',
'prioritas' => 3,
'bobot' => 0.3,
],
// Subkriteria untuk Kondisi Ekonomi (kriteria_id: 3)
[
'kriteria_id' => 3,
'nama' => 'Sangat Kurang Mampu',
'deskripsi' => 'Penghasilan dibawah UMR',
'prioritas' => 1,
'bobot' => 0.4,
],
[
'kriteria_id' => 3,
'nama' => 'Kurang Mampu',
'deskripsi' => 'Penghasilan setara UMR',
'prioritas' => 2,
'bobot' => 0.3,
],
[
'kriteria_id' => 3,
'nama' => 'Cukup Mampu',
'deskripsi' => 'Penghasilan diatas UMR',
'prioritas' => 3,
'bobot' => 0.3,
],
];
foreach ($subkriterias as $subkriteria) {
SubKriteria::create($subkriteria);
}
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$users = [
[
'name' => 'Najwa',
'email' => 'najwa@admin.com',
'password' => Hash::make('12345678'),
'email_verified_at' => now(),
],
[
'name' => 'Administrator',
'email' => 'admin@admin.com',
'password' => Hash::make('password'),
'email_verified_at' => now(),
],
[
'name' => 'Ketua Prodi',
'email' => 'kaprodi@admin.com',
'password' => Hash::make('password'),
'email_verified_at' => now(),
],
[
'name' => 'Staff',
'email' => 'staff@admin.com',
'password' => Hash::make('password'),
'email_verified_at' => now(),
],
];
foreach ($users as $user) {
User::create($user);
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.fi-pagination-items,.fi-pagination-overview,.fi-pagination-records-per-page-select:not(.fi-compact){display:none}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width: 28rem){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@container (min-width: 56rem){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:640px){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@media (min-width:768px){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}.tippy-box[data-theme~=light]{background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;color:#26323d}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-sortable-ghost{opacity:.3}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
function r({state:o}){return{state:o,rows:[],shouldUpdateRows:!0,init:function(){this.updateRows(),this.rows.length<=0?this.rows.push({key:"",value:""}):this.updateState(),this.$watch("state",(t,e)=>{let s=i=>i===null?0:Array.isArray(i)?i.length:typeof i!="object"?0:Object.keys(i).length;s(t)===0&&s(e)===0||this.updateRows()})},addRow:function(){this.rows.push({key:"",value:""}),this.updateState()},deleteRow:function(t){this.rows.splice(t,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows:function(t){let e=Alpine.raw(this.rows);this.rows=[];let s=e.splice(t.oldIndex,1)[0];e.splice(t.newIndex,0,s),this.$nextTick(()=>{this.rows=e,this.updateState()})},updateRows:function(){if(!this.shouldUpdateRows){this.shouldUpdateRows=!0;return}let t=[];for(let[e,s]of Object.entries(this.state??{}))t.push({key:e,value:s});this.rows=t},updateState:function(){let t={};this.rows.forEach(e=>{e.key===""||e.key===null||(t[e.key]=e.value)}),this.shouldUpdateRows=!1,this.state=t}}}export{r as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
function i({state:a,splitKeys:n}){return{newTag:"",state:a,createTag:function(){if(this.newTag=this.newTag.trim(),this.newTag!==""){if(this.state.includes(this.newTag)){this.newTag="";return}this.state.push(this.newTag),this.newTag=""}},deleteTag:function(t){this.state=this.state.filter(e=>e!==t)},reorderTags:function(t){let e=this.state.splice(t.oldIndex,1)[0];this.state.splice(t.newIndex,0,e),this.state=[...this.state]},input:{["x-on:blur"]:"createTag()",["x-model"]:"newTag",["x-on:keydown"](t){["Enter",...n].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},["x-on:paste"](){this.$nextTick(()=>{if(n.length===0){this.createTag();return}let t=n.map(e=>e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")).join("|");this.newTag.split(new RegExp(t,"g")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{i as default};

View File

@ -0,0 +1 @@
function r({initialHeight:t,shouldAutosize:i,state:s}){return{state:s,wrapperEl:null,init:function(){this.wrapperEl=this.$el.parentNode,this.setInitialHeight(),i?this.$watch("state",()=>{this.resize()}):this.setUpResizeObserver()},setInitialHeight:function(){this.$el.scrollHeight<=0||(this.wrapperEl.style.height=t+"rem")},resize:function(){if(this.setInitialHeight(),this.$el.scrollHeight<=0)return;let e=this.$el.scrollHeight+"px";this.wrapperEl.style.height!==e&&(this.wrapperEl.style.height=e)},setUpResizeObserver:function(){new ResizeObserver(()=>{this.wrapperEl.style.height=this.$el.style.height}).observe(this.$el)}}}export{r as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
function n(){return{checkboxClickController:null,collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,lastCheckedRecord:null,livewireId:null,init:function(){this.livewireId=this.$root.closest("[wire\\:id]").attributes["wire:id"].value,this.$wire.$on("deselectAllTableRecords",()=>this.deselectAllRecords()),this.$watch("selectedRecords",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1}),this.$nextTick(()=>this.watchForCheckboxClicks()),Livewire.hook("element.init",({component:e})=>{e.id===this.livewireId&&this.watchForCheckboxClicks()})},mountAction:function(e,t=null){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableAction(e,t)},mountBulkAction:function(e){this.$wire.set("selectedTableRecords",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){if(this.isLoading=!0,this.areRecordsSelected(this.getRecordsInGroupOnPage(e))){this.deselectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e));return}this.selectRecords(await this.$wire.getGroupedSelectableTableRecordKeys(e)),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let t=[];for(let s of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])s.dataset.group===e&&t.push(s.value);return t},getRecordsOnPage:function(){let e=[];for(let t of this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[])e.push(t.value);return e},selectRecords:function(e){for(let t of e)this.isRecordSelected(t)||this.selectedRecords.push(t)},deselectRecords:function(e){for(let t of e){let s=this.selectedRecords.indexOf(t);s!==-1&&this.selectedRecords.splice(s,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(t=>this.isRecordSelected(t))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]},watchForCheckboxClicks:function(){this.checkboxClickController&&this.checkboxClickController.abort(),this.checkboxClickController=new AbortController;let{signal:e}=this.checkboxClickController;this.$root?.addEventListener("click",t=>t.target?.matches(".fi-ta-record-checkbox")&&this.handleCheckboxClick(t,t.target),{signal:e})},handleCheckboxClick:function(e,t){if(!this.lastChecked){this.lastChecked=t;return}if(e.shiftKey){let s=Array.from(this.$root?.getElementsByClassName("fi-ta-record-checkbox")??[]);if(!s.includes(this.lastChecked)){this.lastChecked=t;return}let o=s.indexOf(this.lastChecked),r=s.indexOf(t),l=[o,r].sort((i,d)=>i-d),c=[];for(let i=l[0];i<=l[1];i++)s[i].checked=t.checked,c.push(s[i].value);t.checked?this.selectRecords(c):this.deselectRecords(c)}this.lastChecked=t}}}export{n as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long