bab iv hasil dan pembahasan 4.1. perancangan sistemrepository.unika.ac.id/20052/5/14.n1.0015 thomas...
TRANSCRIPT
11
BAB IV
HASIL DAN PEMBAHASAN
4.1. Perancangan sistem
Berikut adalah hasil dan pembahasan dari tahap awal merancang hingga
pembuatan sistem.
A. Metode waterfall
Gambar 4.1. Metode Pengembangan Sistem Invetory Barang
Dimulai dari menganalisakan kebutuhan sistem dengan metode pengumpulan
data yang dibutuhkan. Setelah itu dibentuklah usecase diagram, diagram ER, alur
barang, dan tabel database sistem seperti yang akan dijelaskan poin berikutnya.
Penulisan beberapa kode program juga akan dilampirkan pada poin berikutnya.
Pengujian sistem dilakukan untuk mengetahui apakah masih ada kesalahan. Setelah
semua tahap selesai barulah penerapan sistem.
B. Hasil analisa kebutuhan sistem
Dari hasil wawancara awal kepada 5 responden (1 pemilik, 2 karyawan
gudang, dan 2 karyawan penjualan) didapatkan data adanya kebutuhan: sistem
informasi
12
barang, informasidata pembelian, mempersingkat penjualan barang,
otomatisasi penjualan, pemasukan data penjualan secara cepat dan ringkas, informasi
laporan penjualan, informasi stok barang baru, ketersedian data penjualan secara
cepat dan jelas, dan informasi mengenai gudang dan penjualan. Diharapkan juga di
dalam sistem databasenya mengadopsi jenis barang, merk, jumlah, warna, no imei,
harga beli, harga jual, nomor nota, nama distributor, dan tanggal pembelian.
C. Usecase diagram
Berikut adalah Usecase Diagram dari karyawan pada aplikasi sistem informasi
inventory.
13
Gambar 4.2 UseCase Diagram Sistem
Rancangan UseCase Diagram diatas menjelaskan bahwa karyawan gudang
dapat mengakses input data barang masuk, melihat data barang, mengubah data
barang, mencetak qrcode menginput dan menghapus data pelanggan.
D. Context Diagram Sistem Informasi Inventory
Berikut adalah gambar Context Diagram Sistem Informasi Inventory
Gambar 4.3. Context Diagram Sistem Informasi
Rancangan Context Diagram Sistem Informasi Inventory di atas menjelaskan
bahwa, Vendor memberi data barang, harga barang, dan jumlah barang. Pemilik dapat
menerima laporan barang masuk, laporan penjualan, selain itu pemilik juga dapat
menginput data barang, edit barang, cetak Qrcode. Pelanggan memilih barang,
pembayaran dan menerima bukti transaksi.
E. Alur barang masuk
Gambar 4.4. menunjukan alur barang baru masuk kegudang.
14
Gambar 4.4. Alur barang baru masuk
Gambar diatas menunjukkan proses masuknya barang baru hingga cetak
qrcode yang akan ditempelkan pada barang baru masuk. Qrcode itulah yang nantinya
akan digunakan pada proses penjualan barang.
F. Alur penjualan
Gambar 4.5. menunjukan alur penjualan ke pelanggan.
15
Gambar 4.5. Alur penjualan barang
Gambar diatas menunjukan alur penjualan kepada pelanggan yang berawal
dari input data diri lengkap pelanggan. Tanda bukti pembelian barang akan dikirim
melalui email pelanggan dan diberikan bentuk fisik transaksi kepada pelanggan.
4.2. Pembuatan Aplikasi
Pembuatan aplikasi dibagi menjadi 3, yaitu desain database, script sistem,
yang terakhir menu pada aplikasi web.
4.3.1 Desain Database
Gambar 4.6. adalah tabel yang digunakan dalam pembuatan sistem informasi
inventory barang menggunakan qrcode.
Gambar 4.6. Table Database
Database digunakan dalam pembuatan sistem informasi inventory
menggunakan qrcode. Nama database “invent_hp” yang terdiri dari 10 table. Tabel
vendor untuk menyimpan data dari vendor handphone. Tabel leasing digunakan
untuk menambahkan leasing. Tabel jenis hp digunakan untuk menyimpan jenis
handphone seperti S7 edge, iPhone 5, Vibe Shot, dan sejenisnya. Tabel merk
digunakan untuk menyimpan merk dari handphone seperti Samsung, Lenovo, iPhone,
dan lain-lain. Tabel pembelian digunakan untuk menampung pembelian barang.
16
Tabel stok hp digunakan untuk menampung berbagai merk dan jenis barang. Tabel
penjualan adalah tabel untuk mencatat data penjualan barang. Tabel pelanggan
digunakan untuk menampung data diri pelanggan. Tabel v stok hp adalah tabel
sementara untuk menampung stok barang. Tabel penjualan detail digunakan untuk
menampung data penjualan secara rinci. Penjualan temp digunakan untuk
menampung data sementara penjualan yang akan nantinya akan berpindah ke tabel
penjualan detail.
Gambar 4.7. Struktur Database dalam Pembuatan sistem
4.3.2 Script pembuatan sistem
Script untuk pembuatan sistem informasi inventory barang menggunakan
qrcode ini tidak sebanyak aplikasi lainnya. Aplikasi berbasis Web menggunakan
framework Code Igniter. Aplikasi Web digunakan oleh karyawan bagian penyediaan
barang gudang.
Script Kelola.php yang terletak pada Controllers Code Igniter. Semua
pemrosesan sistem berpusat pada script Kelola.php ini. Semua querry yang digunakan
juga berpusat pada Kelola.php.
17
Masih didalam Kelola.php fungsi merk, digunakan untuk memproses
menampilkan barang baru.
Gambar 4.8. Halaman Tampilan merk
Gambar 4.8. menampilkan isi dari merk barang yang ada di database. Menu
merk ini juga bisa menambah, menghapus, dan mengedit sesuai dengan keinginan
pengguna (karyawan).
public function merk()
{
$crud = new grocery_CRUD();
$crud->set_table('merk');
$crud->set_subject('Merk');
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.1 Fungsi merk
Fungsi script merk digunakan untuk menambah, menghapus, dan mengedit.
18
Gambar 4.9. Halaman Tampilan Jenis
Gambar 4.9. adalah tampilan menu jenis handphone. Menu ini juga bisa
menambah, menghapus, dan mengedit sesuai dengan keinginan pengguna (karyawan)
public function jenis_hp()
{
$crud = new grocery_CRUD();
$crud->set_table('jenis_hp');
$crud->set_subject('Jenis');
$crud->set_relation('id_merk','merk','merk');
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.2 Fungsi jenis_hp
Fungsi script jenis_hp digunakan untuk menambah, menghapus, dan mengedit
dari jenis-jenis handphone.
19
Gambar 4.10. Halaman Tampilan Stok
Gambar 4.10. ini adalah tampilan dari stok barang yang diambil dari databse.
Menu stok memberikan informasi-informasi yang dibutuhkan pengguna (karyawan)
untuk mengecek barang yang berada digudang.
public function stok_hp()
{
$crud = new grocery_CRUD();
$crud->set_table('stok_hp');
$crud->set_subject('Stok');
$crud->set_relation('id_jenis','jenis_hp','jenis');
$crud->set_relation('id_pembelian','pembelian','nomor_nota');
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.3 Fungsi stok_hp
Fungsi script stok_hp digunakan untuk menampilkan dan menghapus stok
barang (handphone).
20
Gambar 4.11. Halaman Tampilan Pelanggan
Gambar 4.11. adalah pengisian data diri dan email pelanggan. Bertujuan
untuk memenuhi syarat jalannya proses aplikasi.
public function pelanggan()
{
$crud = new grocery_CRUD();
$crud->set_table('pelanggan');
$crud->set_subject('Pelanggan');
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.4 Fungsi pelanggan
Fungsi script pelanggan untuk menambah, menghapus, mengedit data diri
pelanggan.
21
Gambar 4.12. Halaman Pembelian Barang
Gambar 4.12. adalah pengisian dan membuat qrcode barang. Pengisian barang
akan langsung masuk kedalam database. Pembuatan qrcode akan masuk ke menu
tampil stok yang nantinya akan dicetak sebagai pemindai barang keluar.
public function simpan_pembelian()
{
$this->load->library('ciqrcode');
$nomor_nota=$_POST["nomor_nota"];
$tanggal_pembelian=$_POST["tanggal_pembelian"];
$id_vendor=$_POST["id_vendor"];
$this->db->trans_start();
$data = array(
'nomor_nota'=>$nomor_nota,
'tanggal_pembelian'=>$tanggal_pembelian,
'id_vendor'=>$id_vendor,
);
$this->db->insert('pembelian', $data);
$id_pembelian=$this->db->insert_id();
$jsond = json_decode($_POST["txt_vue_data"]);
foreach($jsond as $o)
22
{
$id_stok=round(microtime(true) * 1000);
$data = array(
'id_stok'=>$id_stok,
'id_pembelian'=>$id_pembelian,
'nomor_seri'=>$o->nomor_seri,
'id_jenis'=>$o->id_jenis,
'status_stok'=>"Baru",
'keterangan'=>$o->keterangan,
'harga_beli'=>$o->harga_beli,
'harga_jual'=>$o->harga_jual,
);
$this->db->insert('stok_hp', $data);
$params['data'] = $id_stok;
$params['level'] = 'H';
$params['size'] = 10;
$params['savename'] = FCPATH."assets/qrcode/".$id_stok.".png";
$this->ciqrcode->generate($params);
}
$db_error = $this->db->error();
$this->db->trans_complete();
if(!empty($db_error["message"])) {
$this->session->set_flashdata('flsh_msg', 'Simpan Pembelian Gagal, cek nomor seri...');
$this->session->set_flashdata('flsh_msg_class', 'alert-danger');
}
else {
$this->session->set_flashdata('flsh_msg', 'Simpan Pembelian sukses...');
$this->session->set_flashdata('flsh_msg_class', 'alert-success');
}
redirect("kelola/pembelian","refresh");
}
23
Script PHP 4.5 Fungsi simpan_pembelian
Fungsi script pembelian digunakan untuk memasukkan barang baru kedalam
database server sekaligun fungsi untuk pembuatan qrcode pada tabel No Seri di web.
Sehingga nantinya akan dilekatkan pada barang masuk. Terdapat juga fungsi untuk
total harga beli dari vendor. Fungsi script bisa menambahkan barang satuan maupun
beberapa barang. Adapun fungsi nomor nota dan tanggal pembelian secara auto.
Gambar 4.13. Halaman Penjualan
Gambar 4.13. adalah tampilan untuk penjualan ke pelanggan. Menu ini pada
no note dan tanggal penjualan akan berubah auto sesuai tanggal, hari, dan tahun.
Pelanggan juga akan diberi pilihan tipe penjualan seperti pembayaran secara tunai
atau kredit. Dan jika pelanggan akan memilih kredit maka akan diberi pilihan lagi
untuk DP dan leasing yang nantinya untuk pembayaran jatuh tempo.
public function simpan_penjualan()
{
$nomor_nota=$_POST["nomor_nota"];
$tanggal_penjualan=$_POST["tanggal_penjualan"];
$nomor_id=$_POST["nomor_id"];
$tipe_penjualan=$_POST["tipe_penjualan"];
24
$this->db->trans_start();
$this->db->where('nomor_id', $nomor_id);
$this->db->delete('penjualan_temp');
if($tipe_penjualan=="Tunai")
{
$data = array(
'nomor_nota'=>$nomor_nota,
'tanggal_penjualan'=>$tanggal_penjualan,
'nomor_id'=>$nomor_id,
'tipe_penjualan'=>$tipe_penjualan,
);
}
else
{
$id_leasing=$_POST["id_leasing"];
$dp=$_POST["dp"];
$dp=str_replace(".","",$dp);
$dp=str_replace(",","",$dp);
$data = array(
'nomor_nota'=>$nomor_nota,
'tanggal_penjualan'=>$tanggal_penjualan,
'nomor_id'=>$nomor_id,
'tipe_penjualan'=>$tipe_penjualan,
'id_leasing'=>$id_leasing,
'dp'=>$dp,
);
}
$this->db->insert('penjualan', $data);
$id_penjualan=$this->db->insert_id();
25
$jsond = json_decode($_POST["txt_vue_data"]);
$nota="<table>";
$nota="<tr><th>NO</th><th>ITEM</th><th>HARGA</th></tr>";
$no=0;
$total=0;
foreach($jsond as $o)
{
$no++;
$query=$this->db->query("select j.id_jenis,concat(m.merk,' ',j.jenis) as jenis,s.id_stok from jenis_hp j,merk m,stok_hp s where j.id_merk=m.id_merk and s.id_jenis=j.id_jenis and id_stok='".$o->id_stok."'")->result();
$nota.="<tr><td>$no</td><td>".$query[0]->jenis."</td><td>Rp. ".number_format($o->harga,0,",",".")."</td></tr>";
$total+=$o->harga;
$data = array(
'id_penjualan'=>$id_penjualan,
'id_stok'=>$o->id_stok,
'harga'=>$o->harga,
);
$this->db->insert('penjualan_detail', $data);
$data = array(
'status_stok'=>'Terjual',
);
$this->db->where('id_stok', $o->id_stok);
$this->db->update('stok_hp', $data);
}
$nota.="<tr><th
colspan='2'>TOTAL</th><th>Rp. ".number_format($total,0,",",".")."</th></tr>";
$nota.="</table>";
if($tipe_penjualan=="Tunai")
26
{
$info_tipe_pembelian="Pembelian: Tunai";
}
else
{
$query=$this->db->query("select p.*,l.nama as nama_leasing from penjualan p,leasing l where p.id_leasing=l.id_leasing and id_penjualan=$id_penjualan")->result();
$info_tipe_pembelian="Pembelian: Kredit, Leasing: ".$query[0]->nama_leasing.", DP: ".number_format($query[0]->dp,0,",",".");
}
$query=$this->db->query("select nama, email from pelanggan where nomor_id='$nomor_id'")->result();
$config['protocol']='smtp';
$config['smtp_host']='ssl://smtp.gmail.com';
$config['smtp_port']='465';
$config['smtp_timeout']='7';
$config['smtp_user']='[email protected]';
$config['smtp_pass']='katasandi123';
$config['charset']='utf-8';
$config['newline']="\r\n";
$config['mailtype']='html';
$this->email->initialize($config);
$this->email->from('[email protected]', 'Guffy Cell');
$this->email->to($query[0]->email);
$this->email->subject("Nota Pembelian $nomor_nota");
$this->email->message('<p>Yth
'.$query[0]->nama.',</p><p>'.$info_tipe_pembelian.'</p><p>Terlampir note pembelian anda:</p>'.$nota);
if($this->email->send())
{
$this->session->set_flashdata('flsh_msg', 'Penjualan sukses, nota sudah dikirim ke '.$query[0]->email.'...');
$this->session->set_flashdata('flsh_msg_class', 'alert-success');
27
}
else
{
show_error($this->email->print_debugger());
}
$this->db->trans_complete();
redirect("kelola/penjualan","refresh");
}
Script PHP 4.6 Fungsi simpan_penjualan
Fungsi script simpan_penjualan digunakan untuk penjualan pada pelanggan
dan pengiriman nota penjualan kepada pelanggan melalui email dan juga sebagai
barang keluar.
Gambar 4.14. Halaman Vendor
Gambar 4.14. adalah daftar data dari vendor handphone. Menu ini juga bisa
menambah, menghapus, dan mengedit data vendor.
public function vendor()
{
$crud = new grocery_CRUD();
$crud->set_table('vendor');
28
$crud->set_subject('Vendor');
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.7 Fungsi vendor
Fungsi script vendor digunakan untuk menambah, menghapus, dan mengedit
vendor.
Gambar 4.15. Halaman Leasing
Gambar 4.15. adalah data dari leasing untuk yang memilih pembayaran secara
kredit. Menu ini juga bisa menambah, menghapus, dan mengedit data.
public function leasing()
{
$crud = new grocery_CRUD();
$crud->set_table('leasing');
$crud->set_subject('Leasing');
$output = $crud->render();
$this->_example_output($output);
}
29
Script PHP 4.8 Fungsi leasing
Fungsi script leasing digunakan untuk menambah, menghapus, dan mengedit
vendor.
Gambar 4.16. Halaman Kelola Retur
Gambar 4.16. adalah menu untuk meretur barang yang sudah terjual namun
ada kerusakan. Maka pada menu ini akan mencatat barang yang rusak untuk ditukar
dan menghubungi pihak vendor.
public function kelola_retur()
{
$crud = new grocery_CRUD();
$crud->set_table('stok_hp');
$crud->set_subject('Pengguna');
$crud->fields('is_retur','keterangan');
$crud->columns('id_stok', 'id_pembelian', 'nomor_seri', 'id_jenis', 'status_stok', 'keterangan', 'harga_jual', 'is_retur');
$query=$this->db->query("select p.*,v.nama as nama_vendor from pembelian p,vendor v where p.id_vendor=v.id_vendor")->result();
$pembelian=array();
$i=0;
30
foreach($query as $r)
{
$pembelian[$r->id_pembelian]=$r->nama_vendor." (".$r->nomor_nota.")";
$i++;
}
$crud->field_type('id_pembelian','dropdown',$pembelian);
$query=$this->db->query("select j.id_jenis,concat(m.merk,' ',j.jenis) as jenis,s.id_stok from jenis_hp j,merk m,stok_hp s where j.id_merk=m.id_merk and s.id_jenis=j.id_jenis")->result();
$jenis=array();
$i=0;
foreach($query as $r)
{
$jenis[$r->id_jenis]=$r->jenis;
$i++;
}
$crud->field_type('id_stok','readonly');
$crud->field_type('id_jenis','dropdown',$jenis);
$crud->callback_column('harga_beli',array($this,'tampilan_uang_readonly'));
$crud->callback_column('harga_jual',array($this,'tampilan_uang_readonly'));
$crud->unset_add();
$crud->unset_delete();
$output = $crud->render();
$this->_example_output($output);
}
Script PHP 4.9 Fungsi kelola_retur
Fungsi script kelola_retur digunakan untuk mengajukan barang baru yang
rusak kepada vendor.
31
Gambar 4.17. Halaman Print Qrcode
Gambar 4.17. adalah untuk mencetak (print) qrcode dan dilekatkan pada
barang baru (smartphone). Sebagai informasi barang saat penjualan.
public function cetak_qrcode()
{
$this->load->library("fpdf");
define('FPDF_FONTPATH',$this->config->item('fonts_path'));
$query = $this->db->query("SELECT sh.*,concat(v.nama,'-',p.nomor_nota) as pembelian,concat(m.merk,'-',jh.jenis) as jenis FROM stok_hp sh,pembelian p,vendor v,jenis_hp jh, merk m where p.id_pembelian=sh.id_pembelian and p.id_vendor=v.id_vendor and sh.id_jenis=jh.id_jenis and jh.id_merk=m.id_merk")->result();
$pdf = new FPDF('P','cm','A4');
$pdf->AddPage();
$pdf->SetFont('times','',7);
$pdf->Ln(0);
$jumlah_per_baris=10;
$i=1;
$j=0;
$turun=0;
foreach($query as $row)
32
{
$baris=floor(($i-1)/$jumlah_per_baris);
if($i<=$jumlah_per_baris)
{
$kolom=$j;
}
else
{
$kolom=$j-1;
}
if($i>0)
{
$turun=$i%$jumlah_per_baris==0?1:0; //CEK TURUN
}
$pdf->Cell(1.9, 2.4, $pdf->Image(base_url("assets/qrcode/".$row->id_stok.".png"), $pdf->GetX(), $pdf->GetY(), 1.9, 1.9), 1, $turun, 'C');
$pdf->Text(1.15+(1.9*($kolom)), 3.1+(2.4*$baris), $row->id_stok);
$pdf->Text(1.15+(1.9*($kolom)), 3.3+(2.4*$baris), $row->jenis);
$i++;
if($i%$jumlah_per_baris==1)
{
$j=0;
}
$j++;
if(($i-1)%110==0)
{
$pdf->AddPage();
$i=1;
$j=0;
$turun=0;
}
}
33
$pdf->Output("QRCodeStok.pdf","D");
}
Script PHP 4.10 Fungsi cetak_qrcode
Fungsi script cetak_qrcode untuk menyetak qrcode yang akan digunakan
untuk memindai barang yang akan keluar.
Gambar 4.18. Halaman Stok Baru
Gambar diatas menunjukan jumlah stok barang baru yang masih tersedia
digudang.
public function jumlah_stok_hp()
{
$query = $this->db->query("SELECT merk,jenis,count(id_stok) as jumlah FROM v_stok_hp where status_stok='Baru' group by merk,jenis ")->result();
$data["stok_hp"]= $query;
$this->load->view('header');
$this->load->view('jumlah_stok_hp',$data);
$this->load->view('footer');
}
34
Script PHP 5.11 Fungsi jumlah_stok_hp
Fungsi script jumlah_stok_hp untuk menampilkan stok barang yang masih
ada digudang.
Gambar 4.19. Halaman Tampil Laporan Penjualan
Gambar 4.19. adalah tampilan cetak laporan penjualan kecil. Laporan
menginformasikan laba penjualan dan tanggal pembelian barang hingga tanggal
penjualan barang serta harga beli dan harga jual.
public function tampil_report()
{
$boleh=true;
$session_data = $this->session->userdata('logged_in');
if($session_data["role"]!==null || $boleh)
{
$tipe_periode=$_GET["tipe_periode"];
$tipe_report=$_GET["tipe_report"];
$tanggal_awal=$_GET["tanggal_awal"];
$tanggal_akhir=$_GET["tanggal_akhir"];
$date_start=date_create($tanggal_awal);
$date_end=date_create($tanggal_akhir);
35
$bln=array("","Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember");
$session_data = $this->session->userdata('logged_in'); $add_where="1=1";
/*
if($session_data["role"]=="Administrator")
{
$add_where="1=1";
}
if($session_data["role"]=="Pengelola")
{
$add_where="id_barber=".$session_data["id_barber"];
}
*/
$output="<style>td{font-size: 10px} th{font-size: 11px} h2{font-size: 12px}</style>";
if($tipe_report=="PENJUALAN")
{
if($tipe_periode=="R")
{
$query = $this->db->query("SELECT p.tanggal_penjualan,pd.*,v.jenis,v.merk,v.harga_beli,v.tanggal_pembelian,v.laba FROM penjualan p,penjualan_detail pd,v_stok_hp v where $add_where and p.id_penjualan=pd.id_penjualan and pd.id_stok=v.id_stok and p.tanggal_penjualan between '$tanggal_awal' and '$tanggal_akhir' order by p.tanggal_penjualan")->result();
$judul="Rentang ".date_format($date_start,"d-M-Y")." s.d ".date_format($date_end,"d-M-Y");
}
if($tipe_periode=="H")
{
$query = $this->db->query("SELECT p.tanggal_penjualan,pd.*,v.jenis,v.merk,v.harga_beli,v.tanggal_pembelian,v.laba FROM penjualan p,penjualan_detail pd,v_stok_hp v where $add_where and p.id_penjualan=pd.id_penjualan and pd.id_stok=v.id_stok and p.tanggal_penjualan='$tanggal_awal' order by p.tanggal_penjualan")->result();
$judul="Harian ".date_format($date_start,"d-M-Y");
}
36
if($tipe_periode=="B")
{
$query = $this->db->query("SELECT p.tanggal_penjualan,pd.*,v.jenis,v.merk,v.harga_beli,v.tanggal_pembelian,v.laba FROM penjualan p,penjualan_detail pd,v_stok_hp v where $add_where and p.id_penjualan=pd.id_penjualan and pd.id_stok=v.id_stok and month(p.tanggal_penjualan)=".date_format($date_start,"m")." order by p.tanggal_penjualan")->result();
$judul="Bulan ".$bln[intval(date_format($date_start,"m"))]." ".date_format($date_start,"Y");
}
if($tipe_periode=="T")
{
$query = $this->db->query("SELECT p.tanggal_penjualan,pd.*,v.jenis,v.merk,v.harga_beli,v.tanggal_pembelian,v.laba FROM penjualan p,penjualan_detail pd,v_stok_hp v where $add_where and p.id_penjualan=pd.id_penjualan and pd.id_stok=v.id_stok and year(p.tanggal_penjualan)=".date_format($date_start,"Y")." order by p.tanggal_penjualan")->result();
$judul="Tahun ".date_format($date_start,"Y");
}
if(count($query)==0)
{
$output.="Data tidak ditemukan...";
}
else
{
$i=0;
$grand_total_beli=0;
$grand_total_jual=0;
$grand_total_laba=0;
$output.="<div id='printThis' name='printThis' style='width: 100%'>";
//$output.="<img src='".base_url("assets/images/logo.png")."' width='200'>";
$output.="<center><h2>Report RUGI LABA $judul</h2></center>";
$output.="<table class='table table-stripped'>";
//header
37
$output.="<tr><th>#</th><th>Merk</th><th>Jenis</th><th>Tanggal Penjualan</th><th style='text-align: right'>Harga Jual</th><th>Tanggal Pembelian</th><th style='text-align: right'>Harga Beli</th><th style='text-align: right'>Laba</th></tr>";
foreach($query as $row)
{
$i++;
$grand_total_beli+=$row->harga_beli;
$grand_total_jual+=$row->harga;
$grand_total_laba+=$row->laba;
$tanggal_pembelian=date_create($row->tanggal_pembelian);
$tanggal_penjualan=date_create($row->tanggal_penjualan);
//isi
$output.="<tr><td>$i</td><td>".$row->merk."</td><td>".$row->jenis."</td><td>".date_format($tanggal_penjualan,"d-M-Y")."</td><td align='right'>Rp. ".number_format($row->harga,"0",",",".")."</td><td>".date_format($tanggal_pembelian,"d-M-Y")."</td><td align='right'>Rp. ".number_format($row->harga_beli,"0",",",".")."</td><td align='right'>Rp. ".number_format($row->laba,"0",",",".")."</td></tr>";
}
//footer
$output.="<tr><th style='text-align: right'>Total</th><th colspan='4' style='text-align: right'>Rp. ".number_format($grand_total_jual,"0",",",".")."</th><th colspan='2' style='text-align: right'>Rp. ".number_format($grand_total_beli,"0",",",".")."</th><th style='text-align: right'>Rp. ".number_format($grand_total_laba,"0",",",".")."</th></tr>";
$output.="</table>";
//$output.="<table width='100%'><tr><td align='center'>Diajukan Oleh,<br/><br/><br/><br/><br/>(....................)</td><td align='center'>Diperiksa Oleh,<br/><br/><br/><br/><br/>(....................)</td><td align='center'>Disetujui Oleh,<br/><br/><br/><br/><br/>(....................)</td></tr></table>";
$output.="</div>";
$output.="<button type='button' class='btn btn-default' onclick='printElementNonModal()'>Cetak</button>";
//$output.="<button type='button' class='btn btn-default' onclick='printElementJSPrint()'>Cetak</button>";
}
}
echo json_encode(['hasil' => $output]);
38
}
else
{
redirect("/","refresh");
}
}
Script PHP 4.12 Fungsi tampil_report
Fungsi script tampil_report digunakan untuk menampilkan dan mencetak
laporan laba dengan berbagai rentang waktu yaitu harian, mingguan, bulanan, dan
tahunan. Dan juga menampilkan tanggal pembelian, tanggal penjualan, harga beli,
harga jual, dan total laba yang didapat.
Gambar 4.20. Proses Pembacaan Qrcode
Gambar 4.20. adalah proses membaca kode qr (qrcode) barang yang akan
terhubung dengan database.
String[] permissions = new String[]{android.Manifest.permission.CAMERA}; private static final int REQUEST_MULTIPLE_PERMISSIONS = 117;
39
private ZXingScannerView mScannerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan); mScannerView = new ZXingScannerView(this); setContentView(mScannerView); } private boolean checkPermissions() { int result; List<String> listPermissionsNeeded = new ArrayList<>(); for (String p : permissions) { result = ContextCompat.checkSelfPermission(this, p); if (result != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(p); } } if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_MULTIPLE_PERMISSIONS); return false; } return true; } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUEST_MULTIPLE_PERMISSIONS: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //granted } else { finish(); Toast.makeText(ScanActivity.this, "Please run again, and make sure you've grant all permission", Toast.LENGTH_LONG).show(); } return; } } }
40
@Override public void onResume() { super.onResume(); mScannerView.setResultHandler(this); mScannerView.startCamera(); } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); } @Override public void handleResult(Result rawResult) { finish(); CheckStokActivity.id_stok=rawResult.getText(); startActivity(new Intent(getApplicationContext(), CheckStokActivity.class));
}
Script Android 4.13 Fungsi ScanActivity
Fungsi dari ScanActivity digunakan untuk membaca qrcode
Gambar 4.21. Tampilan Hasil Scanner
Gambar diatas adalah proses menampilkan hasil dari membaca kode qr
(qrcode). Ditampilan ini akan muncul id, jenis, merk, status, keterangan, harga jual,
41
nomor seri, dan set penjualan. Setting penjualan adalah pemilihan nama pelanggan
yang sebelumnya sudah mengisi data diri. Maka akan muncul nama pelanggan dan
akan masuk secara otomatis ke proses selanjutnya yaitu proses penjualan.
public class CheckStokActivity extends AppCompatActivity { public static String id_stok; String[] spinnerArray = new String[100]; HashMap<Integer,String> spinnerMap = new HashMap<Integer, String>(); List<String> sIds = new ArrayList<String>();//add ids in this list List<String> names = new ArrayList<String>();//add names in this list Spinner spin; EditText etIdStok,etJenis,etMerk,etStatus_stok,etKeterangan,etHarga_beli,etHarga_jual,etNomor_seri; TextView txtIdPelanggan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_check_stok); etIdStok = (EditText) findViewById(R.id.editTextIdStok); etIdStok.setText(id_stok); etJenis = (EditText) findViewById(R.id.editTextJenis); etMerk = (EditText) findViewById(R.id.editTextMerk); etStatus_stok = (EditText) findViewById(R.id.editTextStatus_stok); etKeterangan = (EditText) findViewById(R.id.editTextKeterangan); etHarga_beli = (EditText) findViewById(R.id.editTextHarga_beli); etHarga_jual = (EditText) findViewById(R.id.editTextHarga_jual); etNomor_seri = (EditText) findViewById(R.id.editTextNomor_seri); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(MainActivity.BASE_URL + "stok_join/" + id_stok); try { HttpResponse response = client.execute(request); String result = ""; try { InputStream in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(in)); StringBuilder str = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { str.append(line + "\n"); } in.close(); result = str.toString(); } catch (Exception ex) { result = "Error"; }
42
JSONObject object_rows = null; JSONArray array_rows; object_rows = new JSONObject(result); String hasil = "DATA STOK:\r\n"; array_rows = object_rows.getJSONArray("content"); for (int i = 0; i < array_rows.length(); i++) { HashMap<String, String> map = new HashMap<String, String>(); JSONObject object_elements = array_rows.getJSONObject(i); String id_stok = object_elements.getString("id_stok"); etIdStok.setText(id_stok); String jenis = object_elements.getString("jenis"); etJenis.setText(jenis); String merk = object_elements.getString("merk"); etMerk.setText(merk); String status_stok = object_elements.getString("status_stok"); etStatus_stok.setText(status_stok); String keterangan = object_elements.getString("keterangan"); etKeterangan.setText(keterangan); String harga_beli = object_elements.getString("harga_beli"); etHarga_beli.setText(harga_beli); etHarga_beli.setVisibility(View.GONE); String harga_jual = object_elements.getString("harga_jual"); etHarga_jual.setText(harga_jual); String nomor_seri = object_elements.getString("nomor_seri"); etNomor_seri.setText(nomor_seri); } } catch (Exception ex) { Toast.makeText(getApplicationContext(), "Gagal Get: " + ex.getMessage(), Toast.LENGTH_LONG).show(); } request = new HttpGet(MainActivity.BASE_URL + "pelanggan"); try { HttpResponse response = client.execute(request); String result = ""; try { InputStream in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(in)); StringBuilder str = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { str.append(line + "\n"); } in.close(); result = str.toString(); } catch (Exception ex) { result = "Error"; } JSONObject object_rows = null; JSONArray array_rows; object_rows = new JSONObject(result);
43
array_rows = object_rows.getJSONArray("content"); for (int i = 0; i < array_rows.length(); i++) { JSONObject object_elements = array_rows.getJSONObject(i); String nomor_id = object_elements.getString("nomor_id"); String nama = object_elements.getString("nama"); sIds.add(nomor_id); names.add(nama); } //untuk tampilkan nama pelanggan ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(CheckStokActivity.this, android.R.layout.simple_spinner_item, names); spin = (Spinner) findViewById(R.id.spinnerPelanggan); spin.setAdapter(arrayAdapter); spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String pos=sIds.get(spin.getSelectedItemPosition()); txtIdPelanggan=(TextView)findViewById(R.id.textViewIdPelanggan); txtIdPelanggan.setText(pos); //Toast.makeText(getApplicationContext(), pos, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // sometimes you need nothing here } }); } catch (Exception ex) { Toast.makeText(getApplicationContext(), "Gagal Get: " + ex.getMessage(), Toast.LENGTH_LONG).show(); } Button btnPost = (Button) findViewById(R.id.buttonJual); btnPost.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { HttpClient client = new DefaultHttpClient(); HttpPost rest = new HttpPost(MainActivity.BASE_URL+"penjualan_temp"); try { JSONObject params = new JSONObject(); params.put("nomor_id", txtIdPelanggan.getText().toString()); params.put("id_stok", etIdStok.getText().toString()); params.put("harga", etHarga_jual.getText().toString()); StringEntity entity = new StringEntity(params.toString()); rest.setEntity(entity); HttpResponse response = client.execute(rest);
44
Toast.makeText(getApplicationContext(),"Sudah masuk ke keranjang belanja di web...",Toast.LENGTH_LONG).show(); finish(); startActivity(new Intent(getApplicationContext(), ScanActivity.class)); } catch(Exception e){ } } catch(Exception e){ } } }); }
Script Android 4.14 Fungsi CheckStokActivity
Script CheckStokActivity digunakan untuk membaca stok barang dan
menampilkan nama pelanggan dari database.
4.3 Pengujian aplikasi
Aplikasi telah diuji kepada 5 responden (1 pemilik, 2 karyawan gudang, dan 2
karyawan penjualan) sebagai calon pengguna dengan menggunakan pertanyaan
berikut:
Apakah system yang saya buat sudah memenuhi harapan?
Apakah system ini mudah digunakan dan dipelajari?
Menurut anda setelah melihat sistem penjualan barang menggunakan
qrcode lebih mudah dan cepat?
Menurut anda system ini saat menampilkan laporan penjualan sudah
cukup akurat ?
Hasil pengolahan jawaban responden terhadap pertanyaan yang diberikan dapat
dikelompokkan seperti berikut:
Sistem Input
Sesuai harapan untuk memenuhi kebutuhan inventaris stok (5 responden)
Mudah memasukkan barang dari distributor kegudang (5 responden)
Ringkas saat inventaris (4 responden)
45
Agak ribet saat input data barang (1 responden)
Kebutuhan Informasi
Bisa mengetahui penjualan bulan lalu (5 responden)
Mudah mengetahui informasi barang baru (5 responden)
Sistem Penjualan
Penjualan jadi mudah, cepat, dan ringkas (5 responden)
Sudah bisa mengurangi human error saat penjualan (5 responden)
Sistem Pelaporan
Laporan akurat (5 responden)
Laporan detail (5 responden)
Dari hasil wawancara terlihat bahwa calon pengguna (empat responden)
menerima baik sistem inputan inventaris barang yang diujikan. Satu responden masih
merasa ribet dalam menginput barang. Hal ini bisa disebabkan oleh kurangnya
frekuensi pengujian ke responden (1 – 2 pengujian) atau karena perubahan sistem dari
manual ke aplikasi.
Dalam hal kebutuhan informasi juga terlihat bahwa calon pengguna (lima
responden) juga menerima baik sistem informasi barang. Sedangkan untuk sistem
penjualan terlihat bahwa semua calon pengguna responden mengatakan sistem
penjualan mempercepat, mempermudah, dan ringkas saat menjual barang. Yang
terakhir terlihat bahwa semua calon pengguna responden mengatakan sistem
pelaporan sudah akurat dan detail.