Kendala Stok FIFO

Dear Master,

Gimana caranya membuat kontrol stock dengan metode FIFO. Contoh kasus sederhana :

Barang -- Exp Date -- Qty Beras -- 20/02/2018 -- 20 Beras -- 31/03/2018 -- 50

Ketika Stok beras keluar 30, maka tabel mysql berubah menjadi :

Barang -- Exp Date -- Qty Beras -- 20/02/2018 -- 0 Beras -- 31/03/2018 -- 40

Mohon pencerahanya master.. Tks..

avatar husnifaizal
@husnifaizal

10 Kontribusi 6 Poin

Diperbarui 3 tahun yang lalu

7 Jawaban:

Jawaban Terpilih

Sesuaikan Dengan Koneksi & tabel Anda hehe...

1. Buat Tabel => Barang

/*
    ************ Barang *************

    ID         nama      tgl     stok
    ---------------------------------
    primary   varchar    date    int
*/

2. Buat file => fifo.php

<?php
// fifo.php

$conn = mysqli_connect( 'localhost','root','password','database') or die('Could not connect to mysql server.' );

if(isset($_POST['submit'])) {

  $barang = $_POST['barang'];
  $qty    = $_POST['qty'];

  // Jumlahkan keseluruhan Stok barang yg terpilih
  $sql      = "SELECT SUM(stok) AS total FROM barang WHERE nama = '$barang'";
  $result   = mysqli_query($conn, $sql);
  $data     = mysqli_fetch_assoc($result);

  $stok_all = $data['total'];

  // Lihat Daftar Stok Barang yg terpilih urutkan berdasrkan tgl ASC (FIFO)
  // FIFO (V7 Full View Display hahaha \(0_0)/ kog malah promosi) fokus fokus ... (@-@)

  $sql    = "SELECT * FROM barang WHERE nama = '$barang' AND stok > 0 ORDER by tgl ASC";
  $result = mysqli_query($conn, $sql);

  // ayo mulai mikir , siapkan logikanya yaaa....

  // bandingkan dulu boss qty yg dibeli dg stok brg digudang ...
  if($qty <= $stok_all) {

      // Lakukan Perulangan pd setiap List Stok Barang
      // hasil ($result):

      // nama     tgl          stok       step
      //----------------------------
      // beras    2018-02-01    30         1 (++)
      // beras    2018-02-03    50         2
      // beras    2018-02-03    40         3

      while($row = mysqli_fetch_assoc($result)) {

          $tgl  = $row['tgl'];
          $stok = $row['stok'];

          // Selama Qty > 0 (belum habis) artinya => stok pd setiap list akan terus dieksekusi (dikurangi)
          // logika nya gini :

          // --------loop 1--------
          // qty beli = 50 .... stok (1 feb) = 30 maka
          // qty - stok => 50 - 30 = 20 (masih kurang maka ambil di stok tgl berikutnya ...)
          // artinya ekseskui lanjut ...

          // --------loop 2--------
          // qty beli = 20 .... stok (3 feb) = 50 maka
          // qty - stok => 20 - 50 = -30 (hasil -minus) artinya $qty > 0 == false ... (tidak terpenuhi)
          // maka pengurangan stok (update data) akan dijalankan sampai disini

          if($qty > 0) {

              // buat var $temp sbg. pengurang
              $temp = $qty;

              //proses pengurangan
              $qty = $qty - $stok;

              // jika hasil pengurangan > 0 berarti stok pd list pertama kurang  .. jadi update stok jd 0..
              // contoh : qty = 50 , stok = 30 .....maka 50 - 30 = 20.. (20 > 0 =>true)
              // dan juga sebaliknya jika stok berikutnya cukup yawess.. $stok - $temp;

              if($qty > 0) {
                  $stok_update = 0;
              }else{
                  $stok_update = $stok - $temp;
              }

              $sql = "UPDATE barang SET stok = $stok_update WHERE nama = '$barang' AND tgl = '$tgl'";
              echo "<br>$sql<br><br>";
              mysqli_query($conn, $sql);
          }
      }
  }else{

      echo "Stok Barang Tidak Cukup, Stok = $stok_all <br><br>";
  }
}

?>

<form action="" method="post">
Barang : <input type="text" name="barang" value="beras">
Keluar : <input type="text" name="qty" placeholder="qty"><br><br>
<input type="submit" name="submit"><br>
</form>

wuihhh setelah menempuh jarak 7000 cm... akhirnya selesai juga hehe... sengaja dibuat detail biar manfaat ke pe nanya dan ke member yg lain juga...

Penting : lebih disarankan update berdasarkan field id (siapa tau ada nama barang yg sama tpi beda supplier)... krena ini contoh... pake nama biar simple & mudah dipahami ...

Semoga Membantu (^_^) ...

avatar ciloxz
@ciloxz

284 Kontribusi 139 Poin

Dipost 6 tahun yang lalu

Tanggapan

mas, kalo di codeigniter apakah sama logikanya? saya menerapkan spt diatas tp masih tidak jalan.. mohon pencerahan.. trimakasih

Maantaappz.. Sampe niat bgt dibikinin scriptnya.. Makasih bnyak master sudah menjawab dan menanggapi pertanyaan saya (sampe dikasih codingnya segala.. Hehe..) ini sangat membantu saya dan mudah2an yg lain jg..

Ga kaya orang di forum sebelah yg jawabanya malah bikin emosi dan ga kasih solusi.. #CurCol

Sekali lagi thanks ya.. :D

avatar husnifaizal
@husnifaizal

10 Kontribusi 6 Poin

Dipost 6 tahun yang lalu

Welcome broo.. kalau bisa total bantu kenapa ngk.. lagi santai juga..disela2 project hehe....dan biar manfaat bagi member yg lain juga.. siapa tau masalahnya sama.. atau mungkin kedepan akan menemui hal sperti ini.. masalah forum sebelah ndk usah dimasukin hati... ngk ada manfaat nya.. hehe lebih baik cepet selesaikan kerjaannya...

Sukses buat project nya... (^_^) ...

avatar ciloxz
@ciloxz

284 Kontribusi 139 Poin

Dipost 6 tahun yang lalu

thanks @ciloxz buat jawabannya, membantu banget buat projek tugas akhir mengenai obat2an.. thanks juga @husnifaizal udah tanya, jd gk usah tanya lagi deh

avatar myzacky
@myzacky

1 Kontribusi 0 Poin

Dipost 6 tahun yang lalu

maaf tanya lagi... terus bagaimana codingnya jika stok tanggal 1 feb ternyata tidak mencukupi untuk dijual.. misal: stok tgl 1 feb 30 dijual 40

mohon solusinya..... maaf masih newbie...

avatar GregoriusSutrisno
@GregoriusSutrisno

1 Kontribusi 0 Poin

Dipost 6 tahun yang lalu

<div>Jika dibuat ke trigger bagaimana bentuknya bang?<br>Mohon pencerahannya!</div>

avatar mobilelegends2
@mobilelegends2

2 Kontribusi 0 Poin

Dipost 3 tahun yang lalu

<div>Jika dibikin ke codeigniter bagaimana bang?</div>

avatar mobilelegends2
@mobilelegends2

2 Kontribusi 0 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban