5.3 KiB
5.3 KiB
Audit Histori Stock
Deskripsi
Fitur Audit Histori Stock memungkinkan untuk melacak semua perubahan stock yang terjadi di sistem. Setiap kali ada perubahan stock (penambahan, pengurangan, penyesuaian), sistem akan mencatat detail perubahan tersebut untuk keperluan audit.
Fitur Utama
1. Tracking Otomatis
- Sistem otomatis mencatat setiap perubahan stock
- Mencatat stock sebelum dan sesudah perubahan
- Mencatat sumber perubahan (mutasi, opname, dll)
- Mencatat user yang melakukan perubahan
- Mencatat timestamp perubahan
2. Filter dan Pencarian
- Filter berdasarkan dealer
- Filter berdasarkan produk
- Filter berdasarkan jenis perubahan
- Filter berdasarkan tanggal
- Pencarian realtime pada semua kolom
3. Detail Audit
- Informasi lengkap perubahan stock
- Detail sumber perubahan (mutasi/opname)
- History user yang melakukan aksi
- Catatan dan keterangan perubahan
4. Export Data
- Export ke Excel
- Export ke PDF
- Data yang diekspor dapat disesuaikan
Jenis Perubahan Stock
1. Penambahan (Increase)
- Stock bertambah dari transaksi
- Biasanya dari mutasi masuk atau opname correction
2. Pengurangan (Decrease)
- Stock berkurang dari transaksi
- Biasanya dari mutasi keluar atau penjualan
3. Penyesuaian (Adjustment)
- Penyesuaian stock dari opname
- Koreksi stock manual
4. Tidak Ada Perubahan (No Change)
- Record dibuat tapi tidak ada perubahan quantity
- Biasanya untuk tracking purpose
Cara Menggunakan
1. Akses Menu
Warehouse -> Stock Audit
2. Menggunakan Filter
// Filter dealer
$("#filter-dealer").val("Nama Dealer");
// Filter produk
$("#filter-product").val("Nama Produk");
// Filter jenis perubahan
$("#filter-change-type").val("increase"); // increase, decrease, adjustment, no_change
// Filter tanggal
$("#filter-date").val("2024-01-15");
// Reset semua filter
$("#reset-filters").click();
3. Melihat Detail
// Klik tombol Detail pada baris data
showAuditDetail(stockLogId);
Setup dan Instalasi
1. Setup Menu dan Privileges
php artisan setup:stock-audit-menu
2. Atau Menggunakan Seeder
php artisan db:seed --class=StockAuditMenuSeeder
Struktur Data
Model yang Terlibat
- StockLog: Record audit perubahan stock
- Stock: Data stock utama
- Product: Data produk
- Dealer: Data dealer
- User: Data user
- Mutation: Data mutasi stock
- StockOpname: Data opname stock
Relasi Database
StockLog belongsTo Stock
StockLog belongsTo User
StockLog morphTo Source (Mutation, StockOpname, etc)
Stock belongsTo Product
Stock belongsTo Dealer
API Endpoints
1. Index (List Data)
GET /warehouse/stock-audit
2. Detail Audit
GET /warehouse/stock-audit/{stockLog}/detail
Kustomisasi
1. Menambah Jenis Perubahan
Edit enum StockChangeType:
// app/Enums/StockChangeType.php
case NEW_TYPE = 'new_type';
public function label(): string
{
return match($this) {
// ... existing cases
self::NEW_TYPE => 'Label Baru',
};
}
2. Menambah Filter Custom
Edit controller dan view untuk menambah filter baru:
// Controller
->filterColumn('new_field', function($query, $keyword) {
$query->where('new_field', 'like', "%{$keyword}%");
})
// View
<select class="form-select" id="filter-new-field">
<option value="">Semua</option>
// ... options
</select>
3. Kustomisasi Export
Edit DataTables buttons untuk menyesuaikan kolom export:
exportOptions: {
columns: [1, 2, 3, 4, 5, 6, 7, 8]; // Sesuaikan kolom yang ingin diekspor
}
Troubleshooting
1. Menu Tidak Muncul
- Pastikan menu sudah di-setup dengan benar
- Cek privileges user untuk menu stock-audit.index
- Cek role user memiliki akses view = 1
2. Data Tidak Muncul
- Cek apakah ada data StockLog di database
- Cek filter yang aktive
- Cek permission user untuk melihat data dealer tertentu
3. Detail Tidak Loading
- Cek URL endpoint
/warehouse/stock-audit/{id}/detail - Cek network tab di browser untuk error response
- Cek log Laravel untuk error detail
Keamanan
1. Filter Berdasarkan Role
- User dengan
dealer_idhanya melihat data dealer mereka - Admin dapat melihat semua data
2. View-Only Access
- Menu ini adalah read-only
- Tidak ada aksi create, update, atau delete
- Hanya viewing dan export yang diizinkan
3. Audit Trail
- Setiap akses audit log dapat di-track
- User activity dapat dimonitor
- Data tidak dapat dimanipulasi
Performance Tips
1. Index Database
Pastikan ada index pada kolom yang sering difilter:
-- Index untuk performance
CREATE INDEX idx_stock_logs_created_at ON stock_logs(created_at);
CREATE INDEX idx_stock_logs_change_type ON stock_logs(change_type);
CREATE INDEX idx_stock_logs_stock_id ON stock_logs(stock_id);
2. Pagination
- DataTables menggunakan server-side processing
- Default page length: 25 records
- Dapat disesuaikan sesuai kebutuhan
3. Caching
Jika data sangat besar, pertimbangkan untuk menambah caching:
// Cache dealer dan product data
$dealers = Cache::remember('dealers_for_audit', 3600, function () {
return Dealer::all();
});