Aplikasi Penjualan Menggunakan Web Service
Artikel berikut merupakan artikel berseri dari artikel sebelumnya yaitu :
pada kesempata saat ini kita akan menambahkan fitur aplikasi penjualan
sederhana sehingga kita perlu menambah atau memodifikasi projek yang sudah
kita buat sebelumnya. berikut adalah beberapa hal yang perlu kita lakukan
pada projek saat ini :
- Membuat Tabel Penjualan
- Membuat API Server aplikasi penjualan,
- Membuat Aplikasi Client.
Membuat Tabel Penjualan
Tabel penjualan dipecah menjadi dua bagian yaitu :
- penjualan_master, digunakan untuk menyimpan data transaksi berupa nomor transaksi, tanggal dan status
- penjualan_detil, digunakan untuk menyimpan data penjualan detil berupa barang yang dibeli beserta jumlah nya,
berikut adalah rancangan dari tabel tersebut :
tabel penjualan master :
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Waktu pembuatan: 29 Apr 2020 pada 07.33
-- Versi server: 10.4.11-MariaDB
-- Versi PHP: 7.3.16
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `dbrest`
--
-- --------------------------------------------------------
--
-- Struktur dari tabel `penjualan_master`
--
CREATE TABLE `penjualan_master` (
`id` int(11) NOT NULL,
`nomor_transaksi` varchar(100) NOT NULL,
`tanggal` date NOT NULL,
`status` tinyint(1) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Indexes for dumped tables
--
--
-- Indeks untuk tabel `penjualan_master`
--
ALTER TABLE `penjualan_master`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT untuk tabel yang dibuang
--
--
-- AUTO_INCREMENT untuk tabel `penjualan_master`
--
ALTER TABLE `penjualan_master`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Sedangkan untuk tabel penjualan detil adalah sebagai berikut :
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Waktu pembuatan: 29 Apr 2020 pada 07.36
-- Versi server: 10.4.11-MariaDB
-- Versi PHP: 7.3.16
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `dbrest`
--
-- --------------------------------------------------------
--
-- Struktur dari tabel `penjualan_detil`
--
CREATE TABLE `penjualan_detil` (
`id` int(11) NOT NULL,
`nomor_transaksi` varchar(200) NOT NULL,
`id_produk` int(11) NOT NULL,
`jumlah` int(11) NOT NULL,
`harga` float NOT NULL,
`subtotal` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Indexes for dumped tables
--
--
-- Indeks untuk tabel `penjualan_detil`
--
ALTER TABLE `penjualan_detil`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT untuk tabel yang dibuang
--
--
-- AUTO_INCREMENT untuk tabel `penjualan_detil`
--
ALTER TABLE `penjualan_detil`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Tambahkan kedua tabel tersebut kedalam database anda, jika sudah langkah berikutnya kita akan membuat API untuk apikasi penjualan.
Membuat API Server aplikasi penjualan
Pembuatan API dilakukan pada project pertama jadi jangan salah buat yaa, untuk
membuat API aplikasi penjualan kita perlu menambahkan sebuah Controller baru
pada folder /application/controller/Penjualan.php pada project
rest-server (aplikasi yang pertama kali kita buat). jika sudah tambahkan
coding seperti berikut :
<?php
defined('BASEPATH') or exit('No direct script access allowed');
use Restserver\Libraries\REST_Controller;
defined('BASEPATH') or exit('No direct script access allowed');
require APPPATH . '/libraries/REST_Controller.php';
class Penjualan extends REST_Controller
{
public function __construct()
{
parent::__construct();
}
public function index_get(){
$id = $this->get('nomor_transaksi');
$this->db->where('nomor_transaksi', $id);
$this->db->join('produk','produk.id=penjualan_detil.id_produk','left');
$produk = $this->db->get('penjualan_detil')->result();
$this->response($produk, REST_Controller::HTTP_OK);
}
public function barang_get()
{
$id = $this->get('id_produk');
$this->db->where('id', $id);
$produk = $this->db->get('produk')->row();
$this->response($produk, REST_Controller::HTTP_OK);
}
public function pilihbarang_get(){
$produk = $this->db->get('produk')->result();
$this->response($produk, REST_Controller::HTTP_OK);
}
public function nomor_transaksi_post()
{
$timestamp = mt_rand(1, time());
$no = date('dmy' . $timestamp);
$nomor=array('nomor_transaksi'=>$no);
$this->response($nomor, REST_Controller::HTTP_OK);
}
public function simpan_master_post()
{
$data = array(
'nomor_transaksi' => $this->post('nomor_transaksi'),
'tanggal' => date('d-m-y'),
);
$insert = $this->db->insert('penjualan_master', $data);
if ($insert) {
$this->response($data, REST_Controller::HTTP_OK);
} else {
$this->response(array('status' => 'failed', 502));
}
}
public function simpan_penjualan_post()
{
$data = array(
'nomor_transaksi' => $this->post('nomor_transaksi'),
'id_produk' => $this->post('id_produk'),
'jumlah' => $this->post('jumlah'),
'harga' => $this->post('harga'),
'subtotal' => floatval($this->post('jumlah')*$this->post('harga')),
);
$insert = $this->db->insert('penjualan_detil', $data);
if ($insert) {
$this->response($data, REST_Controller::HTTP_OK);
} else {
$this->response(array('status' => 'failed', 502));
}
}
public function hapus_penjualan_delete(){
$id = $this->delete('id');
$this->db->where('id', $id);
$delete = $this->db->delete('penjualan_detil');
if ($delete) {
$this->response(array('status' => 'success'), 201);
} else {
$this->response(array('status' => 'failed'), 502);
}
}
}
/* End of file Penjualan.php */
Jika kita perhatikan pada coding diatas terdapat beberapa fungsi/function yaitu
:- index_get, digunakan untuk menampilkan data transaksi penjualan, merupakan join tabel dari tabel penjualan master dan penjualan detil.
- pilihbarang_get, digunakan untuk menampilkan data produk pada dropdown saat akan melakukan penjualan.
- nomor_transaksi_post, digunakan untuk membuat penomoran otomatis untuk transaksi baru, penomoran otomatis dibuat dengan menggunakan kombinasi tanggal dan waktu saat beli.
- simpan_master_post, digunakan untuk menyimpan nomor transaksi baru pada tabel penjualan_master.
- simpan_penjualan_post,digunakan untuk melakukan penyimpanan kepada tabel penjualan_detil.
- hapus_penjualan_delete(), digunakan untuk melakukan hapus data berdasarkan id penjualan.
jika sudah selesai membuat anda dapat melakukan pengetesan terhadap API yang
sudah dibuat dengan menggunakan aplikasi Postman. pastikan API yang dibuat
dapat berjalan dengan benar, berikut ini adalah hasil ekseskusi menggunakan
postman :
# index_get
untuk mengakses fungsi ini gunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan?nomor_transaksi=2904201172479803
nomor_transaksi merupakan data yang telah diinnput secara manual di database, yaitu pada tabel penjualan_master dan penjualan_detil, perlu diingat bahwa pengisian nomor transaksi pada kedua tabel tersebut harus sama agar dapat dilakukan join tabel.
# pilihbarang_get
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/pilihbarang
Jika hasil eksekusi berhasil maka akan menampilkan semua data produk, data tersebut akan digunakan untuk menampilkan data pada dropdown ketika melakukan pemilihan barang yang akan dijual.
# nomor_transaksi_post
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/nomor_transaksi
# index_get
untuk mengakses fungsi ini gunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan?nomor_transaksi=2904201172479803
nomor_transaksi merupakan data yang telah diinnput secara manual di database, yaitu pada tabel penjualan_master dan penjualan_detil, perlu diingat bahwa pengisian nomor transaksi pada kedua tabel tersebut harus sama agar dapat dilakukan join tabel.
# pilihbarang_get
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/pilihbarang
Jika hasil eksekusi berhasil maka akan menampilkan semua data produk, data tersebut akan digunakan untuk menampilkan data pada dropdown ketika melakukan pemilihan barang yang akan dijual.
# nomor_transaksi_post
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/nomor_transaksi
Ketika dieksekusi akan menghasilkan nomor transaksi baru, nomor transaksi merupakan penomoran secara otomatis hasil generate berdasarkan tanggal dan waktu.
# simpan_master
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/simpan_master
Ketika dieksekusi akan melakukan penyimpanan data nomor transaksi dan tanggal kedalam tabel penjualan_master.
# simpan_penjualan_post
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/simpan_penjualan
http://localhost/rest-server/index.php/penjualan/simpan_penjualan
jika kita lakukan eksekusi akan melakukan penyimpanan data kepada tabel penjualan_detil, perlu jadi catatan ketika melakukan tes menggunakan postman yaitu id_produk harus sesuai dengan tabel produk, dan nomor_transaksi harus sesuai dengan nomor transaksi yang ada pada penjualan_master
# hapus_penjualan
untuk mengakses fungsi ini digunakan url sebagai berikut :
http://localhost/rest-server/index.php/penjualan/hapus_penjualan
http://localhost/rest-server/index.php/penjualan/hapus_penjualan
digunakan untuk menghapus item penjualau/menghapus record pada tabel penjualan_detil.
Membuat Aplikasi Client
Pembuatan Aplikasi Client dilakukan pada project kedua yaitu project
ci-client , untuk membuat aplikasi penjualan client kita akan
menambahkan beberapa file pada folder controller dan view, pada
controller akan menambahkan file dengan nama Penjualan.php pada
folder /application/controller/Penjualan.php berikut adalah coding nya
:
<?php
class Penjualan extends CI_Controller
{
var $api = "";
function __construct()
{
parent::__construct();
$this->api = "http://localhost/rest-server/index.php";
$this->load->library('session');
$this->load->library('curl');
$this->load->helper('form');
$this->load->helper('url');
}
function index()
{
$params = array('nomor_transaksi' => $this->session->userdata('s_nomor_transaksi'));
$data['data_penjualan'] = json_decode($this->curl->simple_get($this->api . '/penjualan', $params));
$this->load->view('penjualan/v_list', $data);
}
function transaksi_baru()
{
$this->session->set_userdata('s_nomor_transaksi', "");
if ($this->session->userdata('s_nomor_transaksi') == "") {
$nomor = json_decode($this->curl->simple_post($this->api . '/penjualan/nomor_transaksi'));
$this->session->set_userdata('s_nomor_transaksi', $nomor->nomor_transaksi);
$data = array(
'nomor_transaksi' => $this->session->userdata('s_nomor_transaksi'),
'tanggal' => date('d-m-y'),
);
$insert = $this->curl->simple_post($this->api . '/penjualan/simpan_master', $data, array(CURLOPT_BUFFERSIZE => 10));
if ($insert) {
$this->session->set_flashdata('info', 'data berhasil disimpan.');
} else {
$this->session->set_flashdata('info', 'data gagal disimpan.');
}
}
redirect('penjualan/index', 'refresh');
}
function tambah_barang()
{
if ($this->session->userdata('s_nomor_transaksi') != "") {
$data['pilih_barang'] = json_decode($this->curl->simple_get($this->api . '/penjualan/pilihbarang'));
$this->load->view('penjualan/v_form', $data);
}
}
public function simpan()
{
if (isset($_POST['submit'])) {
$nomor_transaksi = $this->session->userdata('s_nomor_transaksi');
$params = array('id' => $this->input->post('id_produk'));
$apis = $this->api . '/produk';
$produk = json_decode($this->curl->simple_get($apis, $params));
$data = array(
'nomor_transaksi' => $nomor_transaksi,
'id_produk' => $this->input->post('id_produk'),
'jumlah' => $this->input->post('jumlah'),
'harga' => $produk[0]->harga,
'subtotal' => $this->input->post('jumlah') * $produk[0]->harga,
);
$insert = $this->curl->simple_post($this->api . '/penjualan/simpan_penjualan', $data, array(CURLOPT_BUFFERSIZE => 10));
if ($insert) {
$this->session->set_flashdata('info', 'data berhasil disimpan.');
} else {
$this->session->set_flashdata('info', 'data gagal disimpan.');
}
redirect('penjualan');
} else {
$this->load->view('produk/v_form');
}
}
}
Coding diatas terdapat beberapa fungsi/function sebagai berikut :- contstruct, digunakan untuk mengaktifkan library yang kita butuhkan dalam pembuatan aplikasi penjualan.
- index(),digunakan untuk menampilkan data penjualan berdasarkan nomor transaksi,dengan mengakses resource dari API server.
- transaksi_baru(), digunakan untuk membuat nomor transaksi baru dengan mengakses resource dari API server. sekalian menyimpan nomor tersebut kedalam tabel penjualan master.
- tambah_barang(),digunakan untuk memanggil form penjualan
- simpan(), digunakan untuk melakukan penyimpanan data transaksi penjualan detil.
pada folder view tambahkan sebuah folder baru dengan nama
penjualan pada folder tersebut tambahkan beberapa file
baru sebagai berikut :
- v_list.php,digunakan untuk menampilkan data penjualan berdasarkan nomor transaksi.
- v_form.php,digunakan untuk menambahkan data penjualan.
v_list.php
<font color="orange">
<?php echo $this->session->flashdata('info'); ?>
</font>
<h1>DATA PRODUK</h1>
<b>Nomor Transaksi :</b><?= $this->session->userdata('s_nomor_transaksi'); ?>
<br>
<table border="1">
<tr>
<th>ID</th>
<th>NAMA</th>
<th>TIPE PRODUK</th>
<th>HARGA</th>
<th>SUBTOTAL</th>
<th>AKSI</th>
</tr>
<?php
if (count($data_penjualan) > 0) {
$i = 1;
foreach ($data_penjualan as $produk) {
echo "<tr>
<td>" . $i++ . "</td>
<td>$produk->nama_produk</td>
<td>$produk->tipe_produk</td>
<td>$produk->harga</td>
<td>$produk->subtotal</td>
<td>" . anchor('penjualan/delete/' . $produk->id, 'Delete') . "</td>
</tr>";
}
} else {
echo "<tr><td colspan='7'>Data tidak ditemukan</td> </tr>";
}
?>
</table>
<a href=<?= base_url() ?>index.php/penjualan/transaksi_baru><button>Transaksi Baru</button></a>
<a href=<?= base_url() ?>index.php/penjualan/tambah_barang><button>Tambah Barang</button></a>
Berikut adalah tampilan v_list ketika dieksekusi menggunakan url :http://localhost/ci-client/index.php/penjualan
pada form diatas terdapat dua buah tombol yaitu transaksi baru dan tambah barang, transaksi baru digunakan untuk membuat nomor transaksi yang baru, jika nomor transaksi belum muncul maka tidak akan dapat melakukan penyimpanan data penjualan barang, tombol satunya lagi adalah tambah barang digunakan untuk menampilkan form tambah data penjualan.
v_form.php
<?php
echo form_open_multipart('penjualan/simpan'); ?>
<h1>TAMBAH DATA</h1>
<table>
<tr>
<td>NOMOR TRANSAKSI</td>
<td><?php echo form_input('nomor_transaksi', $this->session->userdata('s_nomor_transaksi'), "disabled"); ?></td>
</tr>
<tr>
<td>TIPE PRODUK</td>
<td>
<select class="form-control" name="id_produk" required>
<option value="">No Selected</option>
<?php foreach ($pilih_barang as $row) : ?>
<option value="<?php echo $row->id; ?>"><?php echo $row->nama_produk; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<td>Jumlah</td>
<td><?php echo form_input('jumlah'); ?></td>
</tr>
<tr>
<td></td>
<td colspan="2">
<?php echo form_submit('submit', 'Simpan'); ?>
<?php echo anchor('penjualan', '| Kembali | '); ?>
<?php echo anchor('produk', 'Produk | '); ?>
</td>
</tr>
</table>
<?php
echo form_close();
?>
Berikut adalah tampilan v_list ketika dieksekusi menggunakan url :
http://localhost/ci-client/index.php/tambah_barang
pada form diatas terdapat tiga buah tombol yaitu tombol simpan digunakan untuk melakukan penyimpanan data penjualan, tombol kembali digunakan untuk kembali kehalaman sebelumnya dan satu lagi tombol produk untuk masuk kehalaman produk.
Demikian pembuatan Aplikasi Penjualan Sederhana menggunakan Webservice, jika ada pertanyaan silahkan komentar dibawah.
Terimakasih.
Baca juga :
- 30+ Latihan Soal dan Jawaban PAS Fisika Kelas XI K13 Terbaru
- 30+ Latihan Soal dan Jawaban PAS Kimia Kelas XI K13 Terbaru
- 30+ Latihan Soal dan Jawaban PAS Matematika Kelas XI K13 Terbaru
- 30+ Latihan Soal dan Jawaban PAS Matematika Peminatan Kelas XI K13 Terbaru
- 40 Latihan Soal dan Jawaban Bahasa Indonesia PAS Ganjil Kelas XI K13 Terbaru
- 40 Latihan Soal dan Jawaban PAI PAS Ganjil Kelas XI K13 Terbaru
- 40 Soal dan Jawaban Bahasa Inggris PAS Ganjil Kelas XI K13 Terbaru
Posting Komentar untuk "Aplikasi Penjualan Menggunakan Web Service"