Files
CKB/docs/STOCK_AUDIT.md

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_id hanya 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();
});