Sunday, October 18, 2009

Reference Magic[2]

PHP-er,

Nah baru ketemu lagi nehh, kasus dimana reference itu jadi kunci utama, key player. Kasus nya adalah tampilin stock report,
dimana saya tidak menyimpan beginning balance nya (walaupun ini salah),
saya mengakali nya dengan stock akhir dikurang dengan mutasi dari tanggal hari ini
hingga tanggal sebelum nya. Contoh: 01-01-2009 s/d saat ini,
maka stock saat ini dikurang atau ditambah sesuai dengan kode mutasi, hingga tanggal
01-01-2009, mudah bukan?

Masalah nya adalah report generator saya mengharuskan data yg ditampilkan seblumnya
harus di array_push. Kebayangkan kalau saya menampilkan data beginning balance
diharuskan utk menghitung terlebih dahulu brp beginning balance nya. Dan catatan
mutasi adalah setelah nya. Terbalik? iya krn rumus kita adalah akhir - mutasi = awal.
Maka solusi nya adalah,

$data = array();
$awal = 0;
$akhir = $warehouse->getEndingBalanceOfThis($modelId);
$saatIni = $akhir;

/* awal */
array_push($data, &$awal);

/* Loop sebyk mutasi */
foreach($mutasiX as $mutasi){

if($kodeTransaksi == _MASUK){

$saatIni -= $mutasi->qty;
}else{

$saatIni += $mutasi->qty;
}
array_push($data, $mutasi->qty);
}

/* Ending */
array_push($data, $akhir);

/* maka awal adalah */
$awal = $current;

Hasil Output:
35 |<-- awal
20 |
35 |
23 | Mutasi
77 |
11 |
102|<-- akhir


Kondisi diatas akan berbeda jika $awal tidak pass-by-reference,
krn pasti value $awal adalah 0, ini adalah value inisialisasi awal.
Happy coding.

No comments: