@extends('docs.layout') @section('title', 'Manajemen Lampiran File') @section('breadcrumb') @endsection @section('page_header') Modul Media

Manajemen Lampiran Dokumen Multi-Level

Dokumentasi arsitektur penyimpanan berkas lampiran berbasis relasi Polymorphic, 3 tingkat hierarki lampiran, fitur in-page modal preview, dan penanganan multi-modal z-index.

@endsection @section('content')

1. Arsitektur Lampiran Polymorphic

Untuk menghindari pembuatan tabel file yang terpisah-pisah untuk setiap modul, sistem SSE menggunakan satu tabel terpusat project_files dengan memanfaatkan relasi Eloquent Polymorphic (nullableMorphs):

Kolom Database Tipe Data Fungsi & Peran
project_id BIGINT (FK) Mengaitkan file ke proyek yang bersangkutan (untuk isolasi folder penyimpanan).
fileable_id BIGINT (Nullable) ID dari entitas pemilik berkas (misal: ID transaksi Purchase, ID baris RabDetail).
fileable_type VARCHAR (Nullable) Nama class Model pemilik berkas (App\Models\Purchase, App\Models\Usage, App\Models\RabDetail, atau NULL untuk level modul).
nama_file / nama_asli VARCHAR Nama file terenkripsi unik di disk dan nama asli saat diunggah pengguna.
path_file VARCHAR Lokasi penyimpanan pada direktori storage/app/public/project-files/{project_id}/.
ukuran_file / mime_type BIGINT / VARCHAR Metadata ukuran berkas dalam bytes dan tipe MIME (cth: application/pdf, image/jpeg).

2. Tiga Tingkat Hierarki Lampiran (3-Level Attachments)

Fitur lampiran melayani 3 kebutuhan operasional yang berbeda:

Level 1: Modul / Proyek

Disediakan via partial project_files_section.blade.php di halaman RAB, Rekap Stok, dan Upah Terbayar. Digunakan untuk dokumen umum (Surat Perjanjian Kontrak, SPK, RAP Master, Berita Acara Rekap).

Level 2: Baris Rincian RAB

Tombol paperclip dan badge indikator 📎 N per baris tabel RAB. Digunakan untuk melampirkan gambar kerja teknik, detail potongan konstruksi, atau analisis harga satuan spesifik rincian tersebut.

Level 3: Per Transaksi Faktur

Tersedia di halaman Detail Pembelian (purchases/show) dan Detail Pemakaian (usages/show). Digunakan untuk melampirkan foto nota belanja toko, invoice vendor, kwitansi, atau surat jalan bermaterai.

3. Modal Preview In-Page & Multi-Modal Stacking Handler

4. Pemetaan File Kode Terkait

Layer File / Direktori Fungsi
Controller app/Http/Controllers/Admin/ProjectFileController.php Method store, destroy, download, preview.
Model app/Models/ProjectFile.php Relasi morphTo('fileable'), accessor helper (ukuranReadable, isImage, iconClass).
Partial View resources/views/admin/partials/project_files_section.blade.php Komponen reusable daftar berkas & form upload level modul/transaksi.
Modal Layout resources/views/layouts/app.blade.php Modal global preview (#modalGlobalFilePreview) dan script multi-modal stacking handler.
@endsection