A. Deskripsi
Fitur transaksi pada aplikasi project yang kita kerjakan merupakan fitur utama atau
biasa disebut dengan istilah core dari bisnis yang dikelola oleh aplikasi. Seperti dengan
judulnya aplikasi laundry, berarti transaksi yang akan dikerjakan merupakan fitur transaksi
untuk pekerjaan jasa laundry. Pernahkah kalian menggunakan jasa laundry sebelumnya?
Sebaiknya kalian cari referensi bagaimana jasa laundry itu bekerja. Dengan wawasan
bagaimana sebuah bisnis dijalankan secara manual akan menambah pemahaman kita ketika
ingin mengembangkannya dalam sebuah bentuk aplikasi digital.
Kenapa pada project kali ini bagian fitur transaksi menjadi bagian fitur utama? Hal ini
dikarenakan aplikasi yang kita kembangkan pada dasarnya adalah bagian pencatatan data
transaksi pengelolaan sebuah jasa laundry. Maka dari itu jika diperhatikan secara teknis,
ketika membuat desain database saja terlihat bahwa pada tabel transaksi berhubungan dengan
semua tabel yang ada dalam system database.
Sebagai persiapan sebelum mengembangkan fitur pada bagian transaksi, silakan
diperhatikan kembali mengenai struktur data pada tabel transaksi dalam database. Hal ini
diperlukan karena beberapa data yang terdapat dalam tabel transaksi saling terhubung dengan
data yang ada pada tabel lainnya. Meskipun begitu, secara prinsip konsep CRUD tetap
digunakan sama seperti pada saat membuat pada tabel lainnya.
Dalam materi kali ini kita akan membahas segala sesuatu yang ada dalam alur data
transaksi. Fitur-fitur yang berhubungan dengan transaksi tersebut yaitu, menampilkan data
transaksi, menambahkan data transaksi (input data transaksi dan input data pakaian sesuai
transaksi yang dilakukan), melakukan edit serta update pada tabel transaksi, menghapus atau
membatalkan transaksi, dan mencetak atau membuat invoice dari transaksi yang dilakukan.
Silakan dapat kalian ikuti instruksi untuk membuat semua fitur tersebut pada modul materi
kali ini.
<div class="container">
<div class="panel">
<div class="panel-heading">
<h4>Data Transaksi</h4>
</div>
<div class="panel-body">
<a href="transaksi_add" class="btn btn-sm btn-info pull-right">Tambah Transaksi</a>
<br/>
<br/>
<div class="table-responsive">
<table class="table table-bordered table-striped"
id="table-datatable">
<thead>
<tr>
<th width="1%">NO</th>
<th>Nama Outlet</th>
<!-- <th>Nama User</th> -->
<th>Nama Pelanggan</th>
<th>Nama Paket</th>
<th>Tanggal Masuk</th>
<th>Tanggal Selesai</th>
<th>Berat (KG)</th>
<th>Total Harga</th>
<th>Status Bayar</th>
<th>Status Transaksi</th>
<th width="20%">OPSI</th>
</tr>
</thead>
<tbody>
<?php
include '../koneksi.php';
$no=1;
$data = mysqli_query($koneksi,"SELECT * FROM tb_transaksi, tb_user,
tb_outlet, tb_paket, tb_pelanggan where tb_outlet.outlet_id=tb_transaksi.transaksi_outlet
&&
tb_paket.paket_id=tb_transaksi.transaksi_paket &&
tb_pelanggan.pelanggan_id=tb_transaksi.transaksi_pelanggan &&
tb_user.user_id=tb_transaksi.transaksi_user");
while($d = mysqli_fetch_array($data)){
?>
<tr>
<td><?php echo $no++; ?></td>
<td><?php echo $d['outlet_nama']; ?></td>
<!-- <td><?php echo $d['user_nama']; ?></td> -->
<td><?php echo $d['pelanggan_nama']; ?></td>
<td><?php echo $d['paket_jenis']; ?></td>
<td><?php echo $d['transaksi_masuk']; ?></td>
<td><?php echo $d['transaksi_selesai']; ?></td>
<td><?php echo $d['transaksi_berat']; ?></td>
<td><?php echo "Rp.
".number_format($d['transaksi_harga']) .""; ?></td>
<td>
<?php
if($d['transaksi_bayar']=="belum"){
echo "<div class='label label-
danger'>BELUM</div>";
}else if($d['transaksi_bayar']=="lunas"){
echo "<div class='label label-
success'>LUNAS</div>";
}
?>
</td>
<td>
<?php
if($d['transaksi_status']=="proses"){
echo "<div class='label label-
warning'>PROSES</div>";
}else if($d['transaksi_status']=="selesai"){
echo "<div class='label label-
info'>SELESAI</div>";
}else if($d['transaksi_status']=="diambil"){
echo "<div class='label label-
success'>DIAMBIL</div>";
}
?>
</td>
<td>
<a href="transaksi_invoice.php?id=<?php echo
$d['transaksi_id']; ?>" target="_blank" class="btn btn-sm btn-success">Invoice</a>
<a href="transaksi_edit.php?id=<?php echo
$d['transaksi_id']; ?>" class="btn btn-sm btn-warning">Edit</a>
<a href="#" onClick =
"confirm_modal('transaksi_delete.php?id=<?php echo $d['transaksi_id']; ?>');" class="btn
btn-sm btn-danger">Batal</a>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
Ketika materi ini dibuat, pada database telah berisi data dummy mengenai transaksi
sehingga ketika menjalankan file transaksi.php maka akan kita dapati tampilan sebagai
berikut.
Perhatikan pada gambar 1, struktur tabel yang ditampilkan cukup banyak dan panjang
dibandingkan data yang telah kita buat sebelumnya pada menu lainnya. Hal ini dikarenakan
memang banyak informasi yang perlu kita tampilkan dari data transaksi itu sendiri. Untuk
memanggil data tersebut kita melakukan sebuah kondisi pada saat memanggil data, hal ini
dikarenakan kita perlu mempresentasikan data yang bisa dibaca oleh user dengan mudah.
Jika kita menggunakan cara biasa seperti saat menampilkan pada data tabel lainnya maka
hasilnya adalah sebagai berikut.
Perhatikan gambar 2, jika kita langsung memanggil data hanya menggunakan tabel
transaksi saja maka hasilnya akan seperti pada gambar. Jika diperhatikan ada beberapa data
yang sulit dibaca atau dimengerti oleh pengguna. Oleh karena itu, pada sourcecode diatas kita
memanggil data pada tabel dengan kondisi menggabungkan beberapa tabel menjadi satu
kondisi. Perhatikan pada syntax berikut ini.
Syntax diatas adalah syntax untuk menampilkan data dengan membuat kondisi
menggabungkan beberapa tabel untuk dijadikan dalam 1 tampilan. Selain dengan cara ini
kalian bisa menggunakan fitur join atau view dari mysql, silakan kalian eksplorasi secara
mandiri untuk penggunaannya.
pilihan berdasarkan data yang ada dalam database. Untuk lebih detailnya silakan kalian buat
terlebih dahulu file transaksi_add.php. Setelah itu tuliskan sourcecode sebagai berikut.
<div class="container">
<div class="col-md-8 col-md-offset-2">
<div class="panel">
<div class="panel-heading">
<h4>Tambah Transaksi Baru</h4>
<a href="transaksi" class="btn btn-warning btn-sm pull-right"><i class="fa
fa-reply"></i>  
Kembali</a>
</div>
<div class="panel-body">
<?php
// koneksi database
include '../koneksi.php';
?>
<div class="form-group">
<label>Nama Outlet</label>
<select class="form-control" name="outlet" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Nama Petugas</label>
<select class="form-control" name="user" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Nama Pelanggan</label>
<select class="form-control" name="pelanggan" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Jenis Paket</label>
<select class="form-control" name="paket" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Tanggal Selesai</label>
<input type="date" class="form-control" name="tgl_selesai"
required="required"
placeholder="Masukkan Tanggal Selesai ..">
</div>
<div class="form-group">
<label>Total Berat</label>
<input type="text" class="form-control" name="berat"
required="required"
placeholder="Masukkan Total Berat Pakaian ..">
</div>
<div class="col-md-12">
<h4 class="box-title">Detail Transaksi Pakaian</h4>
<table class="table table-hover" id="dinamis">
<thead>
<tr>
<th>Jenis Pakaian</th>
<th>Jumlah</th>
<th><button type="button" class="btn btn-blue add-
row">+</button></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" class="form-control"
name="jenis_pakaian[]"></td>
<td><input type="number" class="form-control"
name="jumlah_pakaian[]"></td>
<td><button type="button" class="btn btn-danger delete-
row">-</button></td>
</tr>
</tbody>
</table>
</div>
<div class="form-group">
<input type="submit" class="btn btn-sm btn-primary" value="Simpan">
</div>
</form>
</div>
</div>
</div>
</div>
Sekarang coba jalankan file tersebut. Setelah dijalankan kita akan mendapati tampilan
transaksi add seperti pada gambar 3 dibawah. Pada transaksi kita akan melakukan 2 proses
input data, pertama adalah data transaksi lalu kedua adalah data detail pakaian. Maka ketika
diperhatikan pada gambar 3 kita memiliki tampilan 2 bagian yang tergabung menjadi 1.
Pada gambar 4 merupakan bentuk multiform dinamis, kita bisa menambahkan dan
mengurangi jumlah form sesuai dengan kebutuhan kita. Form tersebut ditujukan untuk
merekam data dari detail pakaian. Data pakaian akan dimasukan kedalam tabel tb_pakaian
dengan data transaksi sesuai dengan transaksi yang sedang berlangsung atau transaksi
terakhir. Untuk membuat form seperti itu kita menggunakan javascript sebagai berikut.
Function javascript untuk form dinamis tersebut kita panggil kedalam form yang kita
buat pada file transaksi_add.php yaitu pada bagian berikut ini.
Dengan memadukan function tersebut kedalam form yang kita buat maka
dihasilkanlah form dinamis seperti pada gambar 4. Hal ini diperlukan karena kita tidak
mengetahui seberapa banyak dan variatifnya data pakaian yang akan diinput pada suatu kali
transaksi.
Jika form untuk melakukan input data telah siap, selanjutnya kita akan membuat file
untuk mengeksekusi perintah sql input data transaksi. Untuk itu, silakan buat file
transakasi_addAction.php lalu tuliskan syntax berikut ini.
<?php
include '../koneksi.php';
$paket = $_POST['paket'];
$tgl_masuk = date('Y-m-d');
$tgl_selesai = $_POST['tgl_selesai'];
$berat = $_POST['berat'];
$status_bayar = 'belum';
$status_transaksi = 'proses';
}
}
Setelah selesai menyiapkan seluruh file untuk melakukan tambah data transaksi,
silakan kalian coba untuk melakukan penambahan data baru untuk transaksi. Perhatikan cara
kerja dan sourcecodenya lalu pahami baik-baik.
<div class="container">
<div class="panel">
<div class="panel-heading">
<h4>Edit Transaksi</h4>
<a href="transaksi" class="btn btn-warning btn-sm pull-right"><i class="fa
fa-reply"></i>  
Kembali</a>
</div>
<div class="panel-body">
<?php
// koneksi database
include '../koneksi.php';
?>
<!-- menyimpan id transaksi yang di edit dalam form hidden berikut -->
<input type="hidden" name="id" value="<?php echo $d['transaksi_id']; ?>">
<div class="form-group">
<label>Nama Outlet</label>
<select class="form-control" name="outlet" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Nama Pelanggan</label>
<select class="form-control" name="pelanggan" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Jenis Paket</label>
<select class="form-control" name="paket" required="required">
<?php } ?>
</select>
</div>
<div class="form-group">
<label>Berat</label>
<div class="form-group">
<label>Tgl. Selesai</label>
<input type="date" class="form-control" name="tgl_selesai"
required="required" value="<?php echo $d['transaksi_selesai']; ?>">
</div>
<br/>
<?php
// menyimpan id transaksi ke variabel id_transaksi
$id_transaksi = $d['transaksi_id'];
while($p=mysqli_fetch_array($pakaian)){
?>
<tr>
<td><input type="text" class="form-control"
name="jenis_pakaian[]" value="<?php echo $p['pakaian_jenis']; ?>"></td>
<td><input type="number" class="form-control"
name="jumlah_pakaian[]" value="<?php echo $p['pakaian_jumlah']; ?>"></td>
</tr>
<?php } ?>
<tr>
<td><input type="text" class="form-control"
name="jenis_pakaian[]"></td>
<td><input type="number" class="form-control"
name="jumlah_pakaian[]"></td>
<th><button type="button" class="btn btn-blue add-
row">+</button></th>
</tr>
<tr>
<td><input type="text" class="form-control"
name="jenis_pakaian[]"></td>
<td><input type="number" class="form-control"
name="jumlah_pakaian[]"></td>
<td><button type="button" class="btn btn-danger delete-
row">-</button></td>
</tr>
</table>
<label>Bayar</label>
<select class="form-control" name="bayar" required="required">
</select>
</div>
</select>
</div>
</div>
</div>
</div>
</div>
Perhatikan pada sourcecode diatas, dengan susunan seperti itu nanti kita akan
menghasilkan sebuah tampilan halaman edit transaksi yang terdiri dari 4 bagian segmen.
Segmen pertama adalah segmen untuk data pelanggan mulai dari nama, total berat, outlet,
jenis paket, dan tanggal selesai nantinya. Segmen kedua berisikan data pakaian yang
dimasukan dalam jasa laundry sesuai data pelanggan tersebut. Segmen ketiga berikan
perubahan untuk detail status pembayaran. Lalu segmen terakhir yaitu keempat berisikan
detail proses pengerjaan dari transaksi yang berlangsung. Cukup banyak hal yang dapat
dilakukan didalam proses transaksi, beberapa pekerjaan perlu dilakukan update sesuai jangka
waktu tertentu. Maka dari itu, untuk menu edit transaksi kita bagi menjadi beberapa segmen
guna memenuhi kebutuhan tersebut. Contoh, ketika pertama kali barang masuk (pakaian)
maka status pengerjaanya adalah ‘proses’ lalu ketika sudah dicuci maka perlu dilakukan
update statusnya menjadi ‘selesai’ dan ketika sudah diambil maka perlu diupdate lagi
menjadi ‘diambil’. Untuk lebih detailnya terkait tampilan edit transaksi dapat dilihat pada
gambar berikut.
Setelah menyiapkan tampilan halaman edit, langkah berikutnya adalah membuat file
untuk melakukan eksekusi update data transaksi. Untuk itu, silakan buat file
transaksi_update.php lalu tuliskan sourcecode sebagai berikut.
<?php
// menghubungkan dengan koneksi
include '../koneksi.php';
$bayar = $_POST['bayar'];
$status = $_POST['status'];
// menangkap data form input array (jenis pakaian dan jumlah pakaian)
$jenis_pakaian = $_POST['jenis_pakaian'];
$jumlah_pakaian = $_POST['jumlah_pakaian'];
}
}
// echo "$update_transaksi";
header("location:transaksi?alert=update");
?>
Pada proses update data transaksi ini, terdapat 2 rangkaian perintah sql yang harus
dieksekusi oleh program. Perintah pertama adalah melakukan update data pada tabel
transaksi, hal ini sama halnya dengan yang biasa dilakukan pada menu update tabel lainnya.
Lalu perintah kedua adalah melakukan update pada tabel pakaian. Untuk perintah kedua ini,
kita tidak menggunakan update melainkan dengan cara menghapus terlebih dahulu semua
data pakaian yang telah tersimpan sesuai transaksi_id yang akan diedit baru setelah itu
melakukan input ulang data pakaian sesuai inputan saat edit data yang dilakukan. Jika sudah
selesai menyiapkan semua filenya, silakan melakukan ujicoba untuk edit data transaksi.
Pahami alur kerja dan sourcecode yang telah dibuat.
Cara yang dilakukan diatas memang berbeda jika dikatakan update seperti tabel
sebelumnya, akan tetapi hal ini dilakukan dengan tujuan untuk memudahkan kita dalam
melakukan proses pengembangan. Sebagai catatan, seorang programmer bebas melakukan
atau menemukan cara dalam menyelesaikan masalah, dan ini dianggap oleh penulis sebagai
salah satu cara untuk mengeksekusi edit data transaksi pada project kali ini. Bagi para siswa,
diperbolehkan melakukan eksplorasi mandiri dengan cara berbeda. Yang terpenting fitur dari
aplikasi tetap dapat dieksekusi dengan baik.
Jika sudah melakukan perubahan seperti pada penjelasan diatas, selanjutnya kita
siapkan file untuk eksekusi perintah hapus/batalkan transaksi. Silakan buat file dengan nama
transaksi_delete.php lalu tuliskan syntax sebagau berikut.
<?php
include '../koneksi.php';
//catatan ketika kita menghapus transaksi maka data pakaian yang menggunakan transaksi_id
yang sama akan ikut terhapus otomatis
Untuk mengaktifkan eksekusi pada fitur batalkan jangan lupa untuk menambahkan
akses link pada file transaksi_delete.php dimenunya. Pastikan dalam file transaksi.php sudah
terdapat syntax sebagai berikut.
Setelah semua file telah selesai disiapkan, silakan lakukan percobaan untuk
melakukan pembatalan transaksi. Jika fitur berjalan dengan benar, maka periksa pada tabel
database seharusnya data pada transaksi_id yang dihapus baik didalam tb_transaksi maupun
data pakaian pada tb_pakaian yang menggunakan transaksi_id yang sama seharusnya telah
terhapus semua. Pahami cara kerja dan sourcecode dari fitur ini seteleh semua berjalan, jika
menemui error pada saat penerapan silakan lakukan eksplorasi mandiri untuk perbaikan.
Setelah link siap, selanjutnya kita buat file transaksi_invoice.php lalu tuliskan syntax
sebagai berikut.
<!DOCTYPE html>
<html>
<head>
<title>Aplikasi LyJo</title>
</head>
<body>
<!-- cek apakah sudah login -->
<?php
session_start();
if($_SESSION['status']!="admin_login"){
header("location:../index.php?pesan=belum_login");
}
?>
<?php
// koneksi database
include '../koneksi.php';
?>
<div class="container">
<?php
// menangkap id yang dikirim melalui url
$id = $_GET['id'];
<!-- membuat tombol print invoice memanggil function dalam javascript -->
<a href="#" onclick="printPage()" class="btn btn-primary
pull-right hidden-print"><i class="glyphicon glyphicon-print"></i> CETAK</a>
<br/>
<br/>
<table class="table">
<tr>
<th width="20%">No. Invoice</th>
<th>:</th>
<td>INVOICE-<?php echo $t['transaksi_id']; ?
></td>
</tr>
<tr>
<th>Nama Outlet</th>
<th>:</th>
<td><?php echo $t['outlet_nama']; ?></td>
</tr>
<tr>
<th width="20%">Tgl. Laundry</th>
<th>:</th>
<td><?php echo $t['transaksi_masuk']; ?></td>
</tr>
<tr>
<th>Nama Pelanggan</th>
<th>:</th>
<td><?php echo $t['transaksi_pelanggan']; ?
></td>
</tr>
<tr>
<th>HP</th>
<th>:</th>
<td><?php echo $t['pelanggan_telp']; ?></td>
</tr>
<tr>
<th>Alamat</th>
<th>:</th>
<td><?php echo $t['pelanggan_alamat']; ?></td>
</tr>
<tr>
<th>Berat Cucian (Kg)</th>
<th>:</th>
<td><?php echo $t['transaksi_berat']; ?></td>
</tr>
<tr>
<th>Jenis Paket</th>
<th>:</th>
<td><?php echo $t['paket_jenis']; ?></td>
</tr>
<tr>
<th>Tgl. Selesai</th>
<th>:</th>
<td><?php echo $t['transaksi_selesai']; ?></td>
</tr>
<tr>
<th>Total Harga</th>
<th>:</th>
<td><?php echo "Rp.
".number_format($t['transaksi_harga'])." ,-"; ?></td>
</tr>
<tr>
<th>Status Bayar</th>
<th>:</th>
<td>
<?php
if($t['transaksi_bayar']=="belum"){
echo "<div class='label label-
danger'>BELUM BAYAR</div>";
}else
if($t['transaksi_status']=="lunas"){
echo "<div class='label label-
success'>SUDAH LUNAS</div>";
}
?>
</td>
</tr>
<tr>
<th>Status Jasa</th>
<th>:</th>
<td>
<?php
if($t['transaksi_status']=="proses"){
echo "<div class='label label-
warning'>PROSES</div>";
}else
if($t['transaksi_status']=="selesai"){
echo "<div class='label label-
info'>SELESAI</div>";
}else
if($t['transaksi_status']=="diambil"){
echo "<div class='label label-
success'>DIAMBIL</div>";
}
?>
</td>
</tr>
</table>
<br/>
<?php
// menyimpan id transaksi ke variabel id_transaksi
$id = $t['transaksi_id'];
while($p=mysqli_fetch_array($pakaian)){
?>
<tr>
<td><?php echo $p['pakaian_jenis']; ?
></td>
<td width="5%"><?php echo
$p['pakaian_jumlah']; ?></td>
</tr>
<?php } ?>
</table>
<br/>
<p><center><i>" Terima kasih telah mempercayakan
cucian anda pada kami ".</i></center></p>
<?php
}
?>
</div>
</div>
</body>
</html>
<!-- membuat tombol print invoice memanggil function dalam javascript -->
<a href="#" onclick="printPage()" class="btn btn-primary pull-right hidden-print"><i
class="glyphicon glyphicon-print"></i> CETAK</a>
Pada saat mengakses tombol cetak, sebenarnya kita diarahkan untuk memanggil
function javascript yang terdapat didalam file invoice. Function tersebut adalah sebuah
function untuk menggunakan print dari browser yang digunakan untuk membuka aplikasi
project ini. Jika diperhatikan pada syntax diatas kita mengarahkan tombol untuk mengakses
function “printPage()”. Dimana function tersebut berisikan syntax sebagai berikut.
Perhatikan pada syntax diatas, ketika mengakses function printPage() maka program
akan menjalankan perintah javascript yaitu window.print(). Perintah tersebut adalah
menggunakan fitur print pada browser dengan javascript. Jika dijalankan maka hasilnya
adalah sebagai berikut.
Aplikasi akan menampilkan tampilan default print dari browser yang kita gunakan
untuk mengakses project kita. Dengan cara seperti ini kita telah melakukan pembuatan fitur
print secara sederhana, adapun cara lainnya semisal mengubah cetak menjadi download
dalam file bentuk lain semisal pdf akan kita coba pada materi saat membuat fitur laporan pada
modul berikutnya. Untuk kali ini, jika aplikasi yang kalian buat sudah sampai pada fitur cetak
invoice transaksi maka materi pada modul kali ini sudah selesai dikerjakan semua. Silakan
pahami dan teliti cara kerja dari aplikasi yang dikembangkan beserta sourcecodenya.