@extends('docs.layout') @section('title', 'Arsitektur & Database') @section('breadcrumb')
Penjelasan struktur direktori kode sumber, pola arsitektur MVC framework Laravel 10, daftar file Controller & Model, serta relasi skema database (ERD) 15 tabel.
@endsection @section('content')Sistem Informasi SSE dibangun di atas framework Laravel 10 (PHP 8.1+) dengan mengadopsi standar arsitektur Model-View-Controller (MVC). Pemisahan tugas diimplementasikan secara jelas:
app/Models/): Merepresentasikan entitas data bisnis dan mengelola relasi Eloquent ORM (misal: hasMany, belongsTo, morphMany).resources/views/admin/): Template antarmuka pengguna berbasis Blade yang terintegrasi dengan Bootstrap 5, DataTables, dan Select2.app/Http/Controllers/Admin/): Mengatur alur logika bisnis, validasi request data, transaksi database (DB::transaction), dan kalkulasi saldo anggaran/stok.routes/web.php): Mendefinisikan endpoint web yang dilindungi oleh middleware otentikasi (auth) dan kontrol hak akses peran (role:admin,...).Berikut adalah rincian folder utama proyek dan perannya dalam aplikasi:
| Path Direktori / File | Fungsi & Cakupan |
|---|---|
app/Http/Controllers/Admin/ |
Tempat berkumpulnya 11 Controller utama yang menangani seluruh operasi CRUD dan logika validasi per modul admin. |
app/Http/Controllers/AuthController.php |
Menangani alur autentikasi login berbasis username, lockout rate limiter, dan logout. |
app/Http/Middleware/RoleMiddleware.php |
Guard middleware yang mencegat request dan memastikan pengguna memiliki role yang sesuai sebelum mengakses modul tertentu (mencegah error 403 Forbidden). |
app/Models/ |
Menyimpan 11 class Eloquent Model yang mendefinisikan casting tipe data, fillable attributes, dan relasi database antar tabel. |
database/migrations/ |
Kumpulan 23 file migrasi skema database yang mendefinisikan struktur tabel, kolom, index, dan foreign key constraints. |
database/seeders/ |
Berisi seeder awal master data (DatabaseSeeder.php dan UnitSeeder.php untuk inisialisasi 16+ satuan standar). |
resources/views/admin/ |
Berisi 47 file Blade view yang dikelompokkan ke dalam sub-folder tiap modul (projects, rab, purchases, usages, stocks, paid-wages, items, vendors, units, users). |
resources/views/admin/partials/ |
Komponen reusable seperti header navbar (header.blade.php), flash toast notifications (toast_messages.blade.php), dan section lampiran polymorphic (project_files_section.blade.php). |
resources/views/layouts/app.blade.php |
Master layout panel admin berbasis tema Sneat (warna utama hijau #16a34a) yang memuat sidebar menu, navbar, script modal z-index handler, dan assets bundle. |
resources/views/docs/ |
Pusat dokumentasi internal sistem yang terintegrasi langsung dengan framework Blade dan diproteksi akses login admin. |
Rincian peran dari 11 Controller admin yang menggerakkan sistem:
| Nama Controller | Tanggung Jawab Logika Utama |
|---|---|
DashboardController.php |
Mengalkulasi metrik agregat di beranda (Total Proyek, Total Realisasi Belanja, Total Upah, Total Budget RAP) serta merender progress bar per proyek aktif. |
ProjectController.php |
Manajemen CRUD Proyek dan penyediaan halaman Detail Proyek dengan navigasi Tab horizontal ERP. |
RabController.php |
Modul RAB: Kalkulasi anggaran terpadu (Upah & Material), auto-suggest AJAX per kategori, parsing impor Excel RAP multi-level, download template Excel, dan cetak print view. |
PurchaseController.php |
Barang Masuk: Dynamic multi-row input, validasi batas sisa anggaran RAB Material, auto-create master on-the-fly, dan edit transaksi dengan rekalkulasi budget efektif. |
UsageController.php |
Barang Keluar: Dynamic multi-row input, validasi stok fisik ketersediaan barang, dan edit transaksi dengan rekalkulasi stok efektif. |
StockController.php |
Monitoring Stok: Agregasi saldo berjalan per material, tabel buku besar (ledger) kronologis per transaksi masuk/keluar, dan cetak laporan stok resmi. |
PaidWageController.php |
Upah Terbayar: Pencatatan realisasi upah tukang, pemetaan ke uraian pekerjaan RAB Upah, persentase realisasi anggaran upah, dan cetak laporan upah. |
ProjectFileController.php |
Manajemen File: Upload file lampiran polymorphic, hapus file & record, download stream, dan in-page modal preview (PDF & Gambar). |
ItemController.php |
CRUD Master Material, auto-generated kode barang, relasi kategori dan satuan master. |
VendorController.php |
CRUD Master Vendor/Pemasok material beserta kontak dan alamat. |
UnitController.php |
CRUD Master Satuan (m3, m2, kg, zak, btg, dll) yang tersinkronisasi ke seluruh dropdown sistem. |
RabCategoryController.php |
CRUD Kategori Pekerjaan RAB (Persiapan, Tanah, Pondasi, Struktur Beton, dll). |
UserController.php |
Manajemen Pengguna (Admin only): Create/edit user, ganti password, ganti role, upload foto profil, dan pemantauan waktu login terakhir. |
Database sistem terdiri dari 15 tabel utama yang saling berelasi erat:
| Nama Tabel | Model Terkait | Foreign Keys & Relasi Eloquent |
|---|---|---|
projects |
Project |
hasMany(Rab), hasMany(Purchase), hasMany(Usage), hasMany(PaidWage), hasMany(ProjectFile)
|
rabs |
Rab |
project_id → projects.id (Cascade Delete).hasMany(RabDetail)
|
rab_details |
RabDetail |
rab_id → rabs.id (Cascade Delete).rab_category_id → rab_categories.id (Nullable).morphMany(ProjectFile, 'fileable')
|
purchases |
Purchase |
project_id → projects.id, vendor_id → vendors.id.hasMany(PurchaseDetail), morphMany(ProjectFile, 'fileable')
|
purchase_details |
PurchaseDetail |
purchase_id → purchases.id (Cascade Delete).item_id → items.id, unit_id → units.id (Nullable).
|
usages |
Usage |
project_id → projects.id.hasMany(UsageDetail), morphMany(ProjectFile, 'fileable')
|
usage_details |
UsageDetail |
usage_id → usages.id (Cascade Delete).item_id → items.id, unit_id → units.id (Nullable).
|
paid_wages |
PaidWage |
project_id → projects.id.rab_detail_id → rab_details.id (Nullable).
|
items |
Item |
item_category_id → item_categories.id.unit_id → units.id (Nullable).
|
project_files |
ProjectFile |
project_id → projects.id.Polymorphic: fileable_id & fileable_type (merujuk ke Project, Purchase, Usage, atau RabDetail).
|
vendors |
Vendor |
hasMany(Purchase) |
units |
Unit |
hasMany(Item), hasMany(PurchaseDetail), hasMany(UsageDetail) |
item_categories |
ItemCategory |
hasMany(Item) |
rab_categories |
RabCategory |
hasMany(RabDetail) |
users |
User |
Menyimpan credential login, role (enum/string), photo_path, dan last_login_at. |
#16a34a) sebagai warna utama brand.$loop->iteration), pencarian client-side, dan pagination.tags: true untuk memungkinkan penginputan instan on-the-fly.@media print yang secara otomatis menyembunyikan sidebar, navbar, tombol aksi, dan pagination saat dicetak ke printer atau disimpan sebagai PDF.