Code Factory Sistem Inventory atau Aplikasi Persediaan Barang adalah salah satu aplikasi yang umum dan cukup menantang terutama bagi para programmer pemula yang sedang mengasah skill programming-nya. Artikel ini merupakan lanjutan dari artikel keempat yang membahas Pembuatan Form Transaksi Barang dan merupakan bagian terakhir dari serial artikel Aplikasi Persediaan Barang Menggunakan Yii2. Artikel ini membahas pembuatan laporan kartu stok yang merupakan laporan yang wajib tersedia dalam sebuah aplikasi inventory, dan kita buat sederhana saja sehingga akan cukup mudah dipahami para programmer pemula.

Modifikasi ItemController

Kartu Stok pada dasarnya adalah daftar transaksi masing-masing barang, dengan mencantumkan jumlah masuk, jumlah keluar, dan saldo barang yang tersedia. dengan begitu kita bisa melihat pergerakan dan perubahan stok dari barang bersangkutan. Untuk mencapai hal ini, kita cukup melakukan join terhadap table barang (items) dan table transaksi (transactions dan transaction_details) untuk mendapatkan laporan yang kita inginkan.

Untuk itu kita bisa melakukan query dan memberikan hasil query tersebut ke view agar dapat ditampilkan dalam bentuk GridView. Untuk itu kita lakukan modifikasi terhadap fungsi actionView yang ada di dalam class ItemController. Dengan mengubah actionView, maka setiap kali kita membuka/melihat detil informasi barang maka di bawahnya akan terlihat history transaksinya. Perubahannya adalah sebagai berikut,

/**
 * Displays a single Items model.
 * @param integer $id
 * @return mixed
 */
public function actionView($id)
{
    // query kartu stok
    $sql_list = "
        SELECT t.id AS trans_id
        , t.trans_code AS trans_code
        , t.trans_date AS trans_date
        , a.id AS detail_id, a.item_id AS item_id
        , trim(concat(t.remarks,' - ',a.remarks)) AS remarks
        , b.code AS item_code, b.name AS item_name
        , CASE 
            WHEN t.type_id=1 THEN a.quantity 
            WHEN t.type_id=2 THEN -a.quantity 
            ELSE 0 END 
          AS quantity
        , @sal := @sal + CASE 
            WHEN t.type_id=1 THEN a.quantity 
            WHEN t.type_id=2 THEN -a.quantity 
            ELSE 0 END 
          AS saldo
        FROM transactions t
        JOIN transaction_details a ON t.id = a.trans_id
        JOIN items b ON a.item_id = b.id
        JOIN ( SELECT @sal:=0 ) v
        WHERE b.id = :id
        ORDER BY t.trans_date, t.id, a.id
    ";
    // query total data di kartu stok
    $sql_count = "
        SELECT count(*) 
        FROM transactions t
        JOIN transaction_details a ON t.id = a.trans_id
        JOIN items b ON a.item_id = b.id
        ORDER BY t.trans_date, t.id, a.id;
    ";
    // count data
    $count = Yii::$app->db->createCommand($sql_count, [':id' => $id])->queryScalar();
    // data provider untuk ditampilkan di view
    $dataProvider = new SqlDataProvider([
        'sql' => $sql_list,
        'params' => [':id' => $id],
        'totalCount' => $count,
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);

    // render view
    return $this->render('view', [
        'model' => $this->findModel($id),
        'dataProvider' => $dataProvider,
    ]);
}

Jika teman-teman perhatikan, dalam query di atas terdapat variable @sal yang kita gunakan untuk men-generate kolom saldo berdasarkan perhitungan penambahan/pengurangan transaksi barang. Dalam query tersebut juga terdapat klausa CASE yang berfungsi sebagai logika percabangan untuk membedakan transaksi barang masuk dan barang keluar, karena barang masuk harus menambah saldo, sedangkan barang keluar harus mengurangi saldo.

Modifikasi View Barang

Dan untuk menampilkannya, caranya cukup mudah, yaitu langsung saja kita tambahkan code GridView di bawah DetailView yang sebelumnya sudah ada di dalam file view.php menjadi seperti di bawah ini

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'code',
        'name',
        'quantity',
        'remarks',
    ],
]) ?>

<h3>Stock Card</h3>
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'trans_code',
        'trans_date',
        'item_code',
        'item_name',
        'quantity',
        'saldo',
        'remarks',
    ],
]); ?>

Berikut ini salah satu contoh penampakan kartu stok-nya.

Aplikasi Persediaan Barang (Sistem Inventory) Menggunakan Yii2 - Laporan Kartu Stock Card Report

Simpulan dan Saran

Sesuai dengan judulnya, aplikasi ini masih sangat sederhana. Banyak ide yang bisa dikembangkan dari aplikasi ini, misalkan

  • Dukungan transaksi multi-warehouse.
  • Penambahan laporan-laporan periodik, seperti laporan mutasi stok bulanan, dan sebagainya.
  • Integrasi dengan aplikasi Point of Sales.

Dan masih banyak ide-ide lain yang bisa kita kembangkan.

Mudah-mudahan tutorial ini dapat membantu teman-teman yang sedang belajar membuat aplikasi inventory, khususnya yang menggunakan Yii Framework. Source code aplikasi ini dapat dilihat di GitHub, silakan digunakan untuk keperluan pembelajaran saja. Jika teman-teman ingin menggunakan source code tersebut untuk keperluan komersil, diwajibkan untuk mendapatkan izin tertulis dari penulis.

 

Leave a Reply

Your email address will not be published. Required fields are marked *