Cara menggunakan phpzag inventory

Tema aplikasi yang akan dibuat adalah inventory, berfokus pada perhitungan barang masuk dan barang keluar serta perubahan stock nya.

Aplikasi ini berfokus pada implementasi mobile app khusunya pada android. Dibangun menggunakan Flutter versi baru yaitu versi 3.0. Meskipun khusus pada mobile, namun bisa dijalankan juga untuk platform lain seperti Windows.

Pemaparan pada course ini menggunakan Bahasa Indonesia dengan style code Bahasa Inggris. Sebelum mengambil course ini alangkah baiknya mempelajari pemrograman dart, php, flutter dasar, dan SQL dasar agar tidak terlalu kesulitan mengikuti course yang ada disini.

Tools yang digunakan pada course ini diantaranya, Visual Studio Code, Postman, XAMPP, Emulator, Framework Flutter, dan browser. Inti jenis pembahasan dibagi menjadi 3, yaitu Database, API, UI Flutter.

Untuk menangani perubahan data pada aplikasi, menggunakan State Management GetX. Selain package GetX ada beberapa package tambahan dalam pengembangan aplikasinya.

Pembuatan aplikasi disertai penerapan clean architecture, namun di dalam course ini tidak diterapkan secara lengkap untuk clean architecture dimana interaksi ada 2 arah yaitu “data” dan “presentation” yang ke-2 nya memiliki turunan masing-masing.

Untuk kelola user dibagi menjadi 2 level yaitu “Admin” dan “Employee” dimana ada hak akses yang berbeda. Untuk fiturnya terdapat 5 menu yaitu “Product”, “History”, “IN” atau barang masuk, “OUT” atau barang keluar, dan “Employee”.

Analysis history diterapkan dan dipercantik mengunakan chart dimana terdapat beberapa keunggulan untuk memberi kesan informatif bagi user. Hasil dari aplikasi ini dapat dikembangkan kembali sehingga dapat digunakan di perusahaan besar yang membutuhkan management gudang ataupun warehouse.

Trigger bagaikan pisau bermata dua. Salah penggunaan bisa berakibat fatal, dan tidak sedikit developer software antipati dengan trigger karena sering terjadi hal-hal yang tidak disangka-sangka dan bahkan di luar nalar, berhari-hari melakukan debugging, pada akhirnya problem ditemukan karena adanya sebuat trigger yang tidak terdokumentasi dengan baik. Walaupun sebuah pisau bisa membunuh kita, bukan berarti kita harus membuangnya jauh-jauh dan tidak mau menggunakannya lagi, karena penggunaan yang benar tentunya akan sangat membantu mempermudah dan meningkatkan kualitas hidup kita :)

Dalam artikel ini, akan kita mempelajari cara penggunaan trigger yang benar, dalam rangka membantu mempermudah kita membuat sebuah Aplikasi Inventory Sederhana ini. Trigger akan kita gunakan untuk melakukan update status kuantitas stok barang setiap kali terjadi transaksi penambahan dan pengurangan barang, atau transaksi barang masuk atau barang keluar. Jika kita sederhanakan sampai level database, maka akan ada perintah SQL INSERT, UPDATE, dan DELETE di table transaksi yang secara otomatis, mengubah status stok barang bersangkutan.

Desain database sudah kita buat pada langkah analisa dan desain database pada artikel sebelumnya. Maka langkah selanjutnya adalah membuat trigger untuk setiap jenis SQL DML. Trigger akan kita tempelkan ke table transaction_details, karena di table itulah informasi ID dan jumlah kuantitas barang tersedia. Untuk detail sintaks CREATE TRIGGER dapat mengacu ke dokumentasi MySQL CREATE TRIGGER di sini.

Referensi Data

Untuk tutorial ini, diasumsikan sudah tersedia data untuk transaction_types dan items seperti berikut ini,

mysql>select *from transaction_types ;

|  1 |IN   | BARANG MASUK  |

|  2 |OUT  select0

select1select2                    select3

select4select5    select6

select7select5    select6

*0select5    select6

*3select5    select6

INSERT Data Transaksi

Untuk proses INSERT ini akan kita set berjalan setiap kali ada sebuah row dimasukkan ke dalam database, diindikasikan dengan keywork FOR EACH ROW, dan setiap row yang baru masuk bisa kita ketahui di variable NEW. Logikanya adalah seperti ini,

  • Setiap kali ada transaksi barang masuk, maka field stok barang di table items akan kita tambahkan,
  • Sebaliknya, setiap kali ada transaksi barang keluar, maka field stok barang di table items akan kita kurangi,

maka trigger INSERT akan seperti ini.

mysql>*7 *8 *9

from0from1 from2

mysql>from4 *8 from6

from7from8from9 transaction_types ;0 transaction_types ;1 transaction_types ;2

from7transaction_types ;4transaction_types ;5 transaction_types ;6transaction_types ;7transaction_types ;8

from7|  1 |0|  1 |1 |  1 |2transaction_types ;1 |  1 |4

from7|  1 |0|  1 |7 |  1 |8

from7IN0IN1 IN2 IN3IN4 IN5 IN6

from7IN8IN2 IN3| BARANG MASUK  |1 IN5 | BARANG MASUK  |3

from7| BARANG MASUK  |5|  1 |7 | BARANG MASUK  |7

from0from1 |  2 |0

UPDATE (Edit) Data Transaksi

Untuk proses UPDATE, sama seperti proses INSERT dan DELETE, trigger akan berjalan FOR EACH ROW, namun sedikit lebih rumit, row ebelum proses update, atau data original tersimpan di variable OLD, dan row yang baru tersimpan di variable NEW. Logikanya adalah seperti ini,

  • Setiap kali ada update data transaksi barang masuk, maka field stok barang di table items akan kita kurangi dengan kuantitas lama kemudian kita tambahkan dengan kuantitas yang baru, 
  • Sebaliknya, setiap kali ada update data transaksi barang keluar, maka field stok barang di table items akan kita tambahkan dengan kuantitas lama kemudian kita kurangi dengan kuantitas yang baru,

maka trigger UPDATE akan seperti ini,

mysql>*7 *8 |  2 |4

from0from1 |  2 |7

mysql>from4 *8 OUT1

from7from8from9 OUT5 transaction_types ;1 transaction_types ;2

from7transaction_types ;4transaction_types ;5 transaction_types ;6transaction_types ;7transaction_types ;8

from7|  1 |0|  1 |1 |  1 |2transaction_types ;1 |  1 |4

from7|  1 |0|  1 |7 select13

from7IN0IN1 IN2 IN3IN4 IN5 select21

from7IN8IN2 IN3| BARANG MASUK  |1 IN5 select28

from7| BARANG MASUK  |5|  1 |7 select32

from7IN0IN1 IN2 IN3IN4 IN5 IN6

from7IN8IN2 IN3| BARANG MASUK  |1 IN5 | BARANG MASUK  |3

from7| BARANG MASUK  |5|  1 |7 | BARANG MASUK  |7

from0from1 select54

DELETE Data Transaksi

Untuk proses DELETE, sama seperti proses INSERT, trigger akan berjalan FOR EACH ROW, namun row yang sedang kita hapus ada di variable OLD. Logikanya adalah seperti ini,

  • Setiap kali ada penghapusan data transaksi barang masuk, maka field stok barang di table items akan kita kurangi, 
  • Sebaliknya, setiap kali ada penghapusan data transaksi barang keluar, maka field stok barang di table items akan kita tambahkan,

maka trigger DELETE akan seperti ini,

mysql>*7 *8 select58

from0from1 |  2 |7

mysql>from4 *8 select65

from7from8from9 select69 transaction_types ;1 transaction_types ;2

from7transaction_types ;4transaction_types ;5 transaction_types ;6transaction_types ;7transaction_types ;8

from7|  1 |0|  1 |1 |  1 |2transaction_types ;1 |  1 |4

from7|  1 |0|  1 |7 select13

from7IN0IN1 IN2 IN3IN4 IN5 select21

from7IN8IN2 IN3| BARANG MASUK  |1 IN5 select28

from7| BARANG MASUK  |5|  1 |7 select32

from0from1 *09

Simpulan

Setelah kita perhatikan hasil test di atas, maka proses pengerjaan coding di aplikasi akan jauh lebih mudah karena tidak perlu lagi memikirkan code untuk mengubah status stok barang, karena perubahan status stok barang seluruhnya sudah ditangani oleh trigger yang kita buat ini.