feat: init all migration, controller & models. create manage data for insurances

This commit is contained in:
Hafiz Caniago 2025-04-27 09:43:35 +07:00
parent d0af4d87bf
commit d307027c74
24 changed files with 392 additions and 137 deletions

View File

@ -1,61 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\DocumentType;
use Illuminate\Http\Request;
class DocumentTypeController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$documentTypes = DocumentType::all();
return view('doc-types-management.index', compact('documentTypes'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
]);
DocumentType::create($request->all());
return redirect()->route('doc-types-management.index')
->with('success', 'Jenis surat berhasil ditambahkan.');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required|string|max:255',
]);
$documentType = DocumentType::findOrFail($id);
$documentType->update($request->all());
return redirect()->route('doc-types-management.index')
->with('success', 'Jenis surat berhasil diperbarui.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
$documentType = DocumentType::findOrFail($id);
$documentType->delete();
return redirect()->route('doc-types-management.index')
->with('success', 'Jenis surat berhasil dihapus.');
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace App\Http\Controllers;
use App\Models\Insurance;
use Illuminate\Http\Request;
class InsuranceController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$insurances = Insurance::all();
return view('insurance.index', compact('insurances'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
]);
Insurance::create($request->all());
return redirect()->route('insurance.index')
->with('success', 'Jenis Asuransi berhasil ditambahkan.');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required|string|max:255',
]);
$insurance = insurance::findOrFail($id);
$insurance->update($request->all());
return redirect()->route('insurance.index')
->with('success', 'Jenis Asuransi berhasil diperbarui.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
$insurance = insurance::findOrFail($id);
$insurance->delete();
return redirect()->route('insurance.index')
->with('success', 'Jenis Asuransi berhasil dihapus.');
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PatienRegistrationController extends Controller
{
//
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PatientController extends Controller
{
//
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ServiceRoomController extends Controller
{
//
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TransactionController extends Controller
{
//
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TreatmentController extends Controller
{
//
}

View File

@ -6,16 +6,10 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class DocumentType extends Model
class Insurance extends Model
{
use HasFactory, SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $table = "document_types";
protected $table = "insurances";
protected $guarded = ["id"];
}

View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class PatienRegistration extends Model
{
use HasFactory, SoftDeletes;
}

12
app/Models/Patient.php Normal file
View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Patient extends Model
{
use HasFactory, SoftDeletes;
}

View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class ServiceRoom extends Model
{
use HasFactory, SoftDeletes;
}

View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Transaction extends Model
{
use HasFactory, SoftDeletes;
}

12
app/Models/Treatment.php Normal file
View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Treatment extends Model
{
use HasFactory, SoftDeletes;
}

View File

@ -0,0 +1,45 @@
<?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('patients', function (Blueprint $table) {
$table->id();
// Personal Information
$table->string('identity_number', 16)->unique(); // (NIK)
$table->string('medical_record_number', 16)->unique(); // (No. Rekam Medis)
$table->string('first_name');
$table->string('last_name');
$table->date('birth_date');
$table->enum('gender', ['P', 'L']); // (Laki-laki, Perempuan)
$table->string('phone_number', 15);
$table->string('email');
$table->string('address');
// Medical Information
$table->string('blood_type', 10); // (Golongan Darah)
$table->string('allergies');
$table->string('current_medicines');
$table->text('medical_history');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('patients');
}
};

View File

@ -0,0 +1,29 @@
<?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('insurances', function (Blueprint $table) {
$table->id();
$table->string('name', 100); // (BPJS, Asuransi Swasta, dll)
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('insurances');
}
};

View File

@ -0,0 +1,29 @@
<?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('service_rooms', function (Blueprint $table) {
$table->id();
$table->string('name', 100)->unique(); // (Laboratorium, Radiologi, Ruang Operasi, Ruang Rawat Inap, UGD, IGD)
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('service_rooms');
}
};

View File

@ -0,0 +1,41 @@
<?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('patien_registrations', function (Blueprint $table) {
$table->id();
$table->date('registration_date');
$table->string('insurance_number', 20)->unique(); // (No. Asuransi)
$table->string('responsible_person_name');
$table->string('responsible_person_phone', 15);
$table->string('responsible_email');
$table->string('responsible_person_relationship'); // (Hubungan dengan Pasien)
$table->string('responsible_person_address');
// Foreign keys
$table->foreignId('patient_id')->constrained('patients')->onDelete('cascade');
$table->foreignId('insurance_id')->constrained('insurances')->onDelete('cascade');
$table->foreignId('service_room_id')->constrained('service_rooms')->onDelete('cascade');
$table->foreignId('user_id')->constrained('users')->onDelete('cascade');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('patien_registrations');
}
};

View File

@ -11,11 +11,12 @@ return new class extends Migration
*/
public function up(): void
{
Schema::create('document_types', function (Blueprint $table) {
Schema::create('treatments', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->softDeletes();
$table->integer('fee')->default(0);
$table->timestamps();
$table->softDeletes();
});
}
@ -24,6 +25,6 @@ return new class extends Migration
*/
public function down(): void
{
Schema::dropIfExists('document_types');
Schema::dropIfExists('treatments');
}
};

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('transactions', function (Blueprint $table) {
$table->id();
$table->integer('amount')->default(0);
$table->foreignId('treatment_id')->constrained('treatments')->onDelete('cascade');
$table->foreignId('patien_registration_id')->constrained('patien_registrations')->onDelete('cascade');
$table->foreignId('user_id')->constrained('users')->onDelete('cascade');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('transactions');
}
};

View File

@ -14,7 +14,6 @@ class DatabaseSeeder extends Seeder
{
$this->call([
AdminSeeder::class,
DocumentTypeSeeder::class,
]);
}
}

View File

@ -1,27 +0,0 @@
<?php
namespace Database\Seeders;
use App\Models\DocumentType;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DocumentTypeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$documentTypes = [
['name' => 'Surat Biasa'],
['name' => 'Surat Rahasia'],
['name' => 'Surat Izin'],
['name' => 'Surat Keputusan'],
];
foreach ($documentTypes as $documentType) {
DocumentType::create($documentType);
}
}
}

View File

@ -12,12 +12,12 @@
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0">Manajemen Data Jenis Surat</h1>
<h1 class="m-0">Manajemen Data Asuransi</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item active">Jenis Surat</li>
<li class="breadcrumb-item active">Jenis Asuransi</li>
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
@ -28,9 +28,9 @@
@section('main-content')
<div class="card">
<div class="card-header">
<button class="btn btn-info" data-toggle="modal" data-target="#addDocumentTypeModal">
<button class="btn btn-info" data-toggle="modal" data-target="#addInsuranceModal">
<i class="fas fa-plus"></i>
&nbsp;&nbsp;Tambah Jenis Surat
&nbsp;&nbsp;Tambah Jenis Asuransi
</button>
</div>
<div class="card-body">
@ -38,25 +38,25 @@
<thead>
<tr>
<th>No</th>
<th>Jenis Surat</th>
<th>Jenis Asuransi</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($documentTypes as $index => $doc)
@foreach ($insurances as $index => $data)
<tr>
<td>{{ $index + 1 }}</td>
<td>{{ $doc->name }}</td>
<td>{{ $data->name }}</td>
<td>
<a href="#" class="btn btn-sm btn-warning edit-btn"
data-url="{{ route('doc-types-management.update', $doc->id) }}"
data-name="{{ $doc->name }}" data-toggle="modal"
data-target="#editDocumentTypeModal">
data-url="{{ route('insurance.update', $data->id) }}"
data-name="{{ $data->name }}" data-toggle="modal"
data-target="#editInsuranceModal">
<i class="fas fa-pencil-alt"></i>&nbsp;&nbsp;Edit
</a>
<button type="button" class="btn btn-sm btn-danger delete-btn"
data-url="{{ route('doc-types-management.destroy', $doc->id) }}" data-toggle="modal"
data-target="#deleteDocumentTypeModal">
data-url="{{ route('insurance.destroy', $data->id) }}" data-toggle="modal"
data-target="#deleteInsuranceModal">
<i class="fas fa-trash"></i>&nbsp;&nbsp;Hapus
</button>
</td>
@ -68,22 +68,22 @@
<!-- /.card-body -->
</div>
<!-- Modal Tambah Jenis Surat -->
<div class="modal fade" id="addDocumentTypeModal" tabindex="-1" aria-labelledby="addDocumentTypeModalLabel"
<!-- Modal Tambah Jenis Asuransi -->
<div class="modal fade" id="addInsuranceModal" tabindex="-1" aria-labelledby="addInsuranceModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<form id="addDocumentTypeForm" method="POST" action="{{ route('doc-types-management.store') }}">
<form id="addDocumentTypeForm" method="POST" action="{{ route('insurance.store') }}">
@csrf
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addDocumentTypeModalLabel">Tambah Jenis Surat</h5>
<h5 class="modal-title" id="addInsuranceModalLabel">Tambah Jenis Asuransi</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="documentTypeName" class="form-label">Nama Jenis Surat</label>
<label for="documentTypeName" class="form-label">Nama Jenis Asuransi</label>
<input type="text" class="form-control" id="documentTypeName" name="name" required>
</div>
</div>
@ -96,8 +96,8 @@
</div>
</div>
<!-- Modal Edit Jenis Surat -->
<div class="modal fade" id="editDocumentTypeModal" tabindex="-1" aria-labelledby="editDocumentTypeModalLabel"
<!-- Modal Edit Jenis Asuransi -->
<div class="modal fade" id="editInsuranceModal" tabindex="-1" aria-labelledby="editInsuranceModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<form id="editDocumentTypeForm" method="POST">
@ -105,14 +105,14 @@
@method('PUT')
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editDocumentTypeModalLabel">Edit Jenis Surat</h5>
<h5 class="modal-title" id="editInsuranceModalLabel">Edit Jenis Asuransi</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="editDocumentTypeName" class="form-label">Nama Jenis Surat</label>
<label for="editDocumentTypeName" class="form-label">Nama Jenis Asuransi</label>
<input type="text" class="form-control" id="editDocumentTypeName" name="name" required>
</div>
</div>
@ -126,18 +126,18 @@
</div>
<!-- Modal Konfirmasi Hapus -->
<div class="modal fade" id="deleteDocumentTypeModal" tabindex="-1" aria-labelledby="deleteDocumentTypeModalLabel"
<div class="modal fade" id="deleteInsuranceModal" tabindex="-1" aria-labelledby="deleteInsuranceModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteDocumentTypeModalLabel">Hapus Jenis Surat</h5>
<h5 class="modal-title" id="deleteInsuranceModalLabel">Hapus Jenis Asuransi</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
Apakah Anda yakin ingin menghapus jenis surat ini?
Apakah Anda yakin ingin menghapus jenis asuransi ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Tutup</button>
@ -193,7 +193,7 @@
// Edit Document Type
const editButtons = document.querySelectorAll('.edit-btn');
const editModal = document.getElementById('editDocumentTypeModal');
const editModal = document.getElementById('editInsuranceModal');
const editForm = document.getElementById('editDocumentTypeForm');
editButtons.forEach(button => {
@ -210,7 +210,7 @@
// Delete Document Type
const deleteButtons = document.querySelectorAll('.delete-btn');
const deleteModal = document.getElementById('deleteDocumentTypeModal');
const deleteModal = document.getElementById('deleteInsuranceModal');
const deleteForm = document.getElementById('deleteForm');
deleteButtons.forEach(button => {

View File

@ -34,16 +34,17 @@
],
(object) [
'icon' => 'fas fa-list',
'name' => 'Jenis Surat',
'link' => '/jenis-surat',
'name' => 'Jenis Asuransi',
'link' => '/asuransi',
'childs' => [],
'is_admin' => true, // Menambahkan field ini untuk mengontrol akses
],
(object) [
'icon' => 'fas fa-user',
'name' => 'Pegawai',
'name' => 'Manajemen Pegawai',
'link' => '/manajemen-akun',
'childs' => [],
'is_superuser' => true, // Menambahkan field ini untuk mengontrol akses
'is_admin' => true, // Menambahkan field ini untuk mengontrol akses
],
(object) [
'title' => 'DROPDOWN EXAMPLE',
@ -82,7 +83,7 @@
@continue
@endif
@if (isset($menu->is_superuser) && $menu->is_superuser && !Auth::user()->role === 'admin')
@if (isset($menu->is_admin) && $menu->is_admin && !Auth::user()->role === 'admin')
@continue {{-- Menghentikan iterasi jika bukan superuser --}}
@endif

View File

@ -5,6 +5,7 @@ use App\Http\Controllers\DashboardController;
use App\Http\Controllers\ManageUserController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\DocumentTypeController;
use App\Http\Controllers\InsuranceController;
use Illuminate\Support\Facades\Route;
/*
@ -45,13 +46,13 @@ Route::middleware('auth')->group(function () {
Route::put('/manajemen-akun/{id}', [ManageUserController::class, 'update'])->name('users-management.update');
Route::delete('/manajemen-akun/{id}', [ManageUserController::class, 'destroy'])->name('users-management.destroy');
Route::post('/manajemen-akun/{id}/disable', [ManageUserController::class, 'disable'])->name('users-management.disable');
});
# Manage Jenis Surat
Route::get('/jenis-surat', [DocumentTypeController::class, 'index'])->name('doc-types-management.index');
Route::post('/jenis-surat', [DocumentTypeController::class, 'store'])->name('doc-types-management.store');
Route::put('/jenis-surat/{id}', [DocumentTypeController::class, 'update'])->name('doc-types-management.update');
Route::delete('/jenis-surat/{id}', [DocumentTypeController::class, 'destroy'])->name('doc-types-management.destroy');
# Manage Jenis Asuransi
Route::get('/asuransi', [InsuranceController::class, 'index'])->name('insurance.index');
Route::post('/asuransi', [InsuranceController::class, 'store'])->name('insurance.store');
Route::put('/asuransi/{id}', [InsuranceController::class, 'update'])->name('insurance.update');
Route::delete('/asuransi/{id}', [InsuranceController::class, 'destroy'])->name('insurance.destroy');
});
// Profile Page
Route::get('/profil-akun', [ProfileController::class, 'edit'])->name('profile.edit');