Aplikasi Penjualan Menggunakan Web Service



Artikel berikut merupakan artikel berseri dari artikel sebelumnya yaitu :
  1. Membuat API Server - Membuat API data Produk
  2. Membuat API Client - Menampilkan data Produk
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 :
  1. Membuat Tabel Penjualan
  2. Membuat API Server aplikasi penjualan,
  3. Membuat Aplikasi Client.

Membuat Tabel Penjualan

Tabel penjualan dipecah menjadi dua bagian yaitu :
  1. penjualan_master, digunakan untuk menyimpan data transaksi berupa nomor transaksi, tanggal dan status
  2. 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 :

  1. index_get, digunakan untuk menampilkan data transaksi penjualan, merupakan join tabel dari tabel penjualan master dan penjualan detil.
  2. pilihbarang_get, digunakan untuk menampilkan data produk pada dropdown saat akan melakukan penjualan.
  3. nomor_transaksi_post, digunakan untuk membuat penomoran otomatis untuk transaksi baru, penomoran otomatis dibuat dengan menggunakan kombinasi tanggal dan waktu saat beli.
  4. simpan_master_post, digunakan untuk menyimpan nomor transaksi baru pada tabel penjualan_master.
  5. simpan_penjualan_post,digunakan untuk melakukan penyimpanan kepada tabel penjualan_detil.
  6. 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



aplikasi penjualan rest client

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


aplikasi penjualan rest client
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


aplikasi penjualan rest client

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

penjualan sederhana

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

penjualan sederhana

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

penjualan sederhana
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 :

  1. contstruct, digunakan untuk mengaktifkan library yang kita butuhkan dalam pembuatan aplikasi penjualan.
  2. index(),digunakan untuk menampilkan data penjualan berdasarkan nomor transaksi,dengan mengakses resource dari API server.
  3. transaksi_baru(), digunakan untuk membuat nomor transaksi baru dengan mengakses resource dari API server. sekalian menyimpan nomor tersebut kedalam tabel penjualan master.
  4. tambah_barang(),digunakan untuk memanggil form penjualan
  5. 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 :
  1. v_list.php,digunakan untuk menampilkan data penjualan berdasarkan nomor transaksi.
  2. v_form.php,digunakan untuk menambahkan data penjualan.
berikut adalah coding pada masing - masing file teserbut :

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

aplikasi 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

aplikasi penjualan
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.

Posting Komentar untuk "Aplikasi Penjualan Menggunakan Web Service"