@extends('docs.layout') @section('title', 'Barang Keluar (Usage)') @section('breadcrumb')
Dokumentasi pencatatan pemakaian material lapangan (Usage), form mutasi multi-baris, serta mekanisme proteksi validasi stok fisik untuk mencegah saldo gudang minus.
@endsection @section('content')Modul Barang Keluar digunakan untuk mencatat material yang diambil dari gudang proyek untuk digunakan pada pekerjaan fisik di lapangan. Struktur data terbagi atas:
usages): Menyimpan nomor_pengeluaran (Nomor Surat Jalan/Pengeluaran), tanggal_keluar, penanggung_jawab (mandor/kepala tukang yang mengambil), dan keterangan.usage_details): Menyimpan baris material yang dikeluarkan, meliputi item_id (material), unit_id (satuan), dan kuantitas.Untuk menjaga akurasi pembukuan logistik dan mencegah pengambilan fiktif, UsageController@store dan UsageController@update menjalankan Validasi Ketersediaan Saldo Fisik:
Sebelum transaksi pemakaian disimpan:
$totalIn = PurchaseDetail::whereHas('purchase', fn($q) => $q->where('project_id', $project->id))->where('item_id', $itemId)->sum('kuantitas').$totalOut = UsageDetail::whereHas('usage', fn($q) => $q->where('project_id', $project->id))->where('item_id', $itemId)->sum('kuantitas').$availableStock = $totalIn - $totalOut.IF (Kuantitas_Keluar_Baru > Available_Stock) {
DB::rollBack();
// Gagalkan transaksi dan munculkan pesan error:
// "Stok [Nama Material] tidak mencukupi! Tersedia: X, Diminta: Y"
}
Stok_Efektif = Available_Stock + Kuantitas_Lama_Pada_Transaksi_Ini
IF (Kuantitas_Keluar_Baru > Stok_Efektif) {
DB::rollBack();
// Gagalkan update dan tampilkan batas stok efektif
}
usages/create.blade.php), opsi dropdown material secara cerdas menampilkan sisa stok yang tersedia (misal: "Semen Gresik 50kg (Sisa: 45 Zak)") sehingga staf langsung mengetahui ketersediaan barang sebelum memilih.usages/show.blade.php), staf dapat melampirkan foto serah terima barang di lapangan atau pindaian tanda tangan mandor.| Layer | File / Direktori | Fungsi |
|---|---|---|
| Controller | app/Http/Controllers/Admin/UsageController.php |
Method index, create, store, show, edit, update, destroy. |
| Models | app/Models/Usage.phpapp/Models/UsageDetail.php |
Relasi Eloquent ke Project, Item, Unit, dan ProjectFile. |
| Views | resources/views/admin/usages/ |
Daftar transaksi (index), form input (create), form edit (edit), dan detail pengeluaran + lampiran (show). |
| Routes | routes/web.php |
Nested routes: admin/projects/{project}/usages/... |