Membuat form penjualan dengan php

Membuat form penjualan dengan php

Assalamualaikum warahmatullahi wabarakaatuh, Alhamdulillah segala puji bagi Allah ta'ala yang telah melimpahkan nikmat dan rezekinya sehingga admin dapat kembali hadir memberikan tutorial yang InsyaAllah bermanfaat bagi kita semua.

Ok, kali ini admin ingin membagikan tutorial membuat aplikasi pembelian barang sederhana tanpa menggunakan database. Aplikasi ini adalah implementasi lanjut dari fungsi array dan looping pada PHP. Tidak hanya itu, tutorial kali ini admin akan menggabungkan form html dengan array dan looping. Mudah-mudahan tutorial kali ini dapat memberikan pengetahuan yang lebih luas tentang penggunaan array dan looping pada PHP. Ok langsung saja kita masuk ke tutorial

Pada tutorial kali ini kita akan membuat form 3 tahap, pertama kita akan menentukan jumlah item yang kedua kita akan mengisi nama barang, harga, dan jumlah di sejumlah item dan terakhir halaman akan menampilkan seluruh item yang akan kita beli beserta total dan subtotalnya.

  • Buatlah file latihan34.php, kita akan membuat halaman input jumlah item. Copy dan pastekan script di bawah ini ke dalam editor kalian
  • Jika Berhasil maka tampilannya akan seperti gambar di bawah ini
Membuat form penjualan dengan php
tutorial array dan looping 1
  • Buatlah file latihan35.php, kita akan membuat halaman input nama barang, harga dan jumlah pada sejumlah form item yang telah kita tentukan sebelumnya. Copy dan pastekan script di bawah ini ke dalam editor kalian
  • Jika Berhasil maka tampilannya akan seperti gambar di bawah ini
Membuat form penjualan dengan php
tutorial array dan looping 2
  • Buatlah file latihan36.php, kita akan membuat halaman yang menampilkan data nama barang, harga, jumlah beserta total dan grandtotal  untuk menghitung berapa total harga belanjaan kita. Copy dan pastekan script di bawah ini ke dalam editor kalian

  • Jika Berhasil maka tampilannya akan seperti gambar di bawah ini

Membuat form penjualan dengan php
tutorial array dan looping 3

Ini adalah contoh penggunaan array dan looping pada php, bisa dibilang ini adalah implementasi lanjutan dari penggunaan fungsi keduanya. Kombinasi-kombinasi seperti penambahan html dapat memperluas pemahaman kita tentang array dan looping jika anda masih bingung dengan array dan looping coba anda pahami betul dasar-dasarnya, kemudian kalian ulang-ulangi hingga benar-benar menguasai. Ok, cukup sekian tutorial kali ini, mudah-mudahan bermanfaat ...

Membuat form penjualan dengan php

Artikel berikut merupakan artikel berseri dari artikel sebelumnya yaitu :

  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

Membuat form penjualan dengan php

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

Membuat form penjualan dengan php

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

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


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>
<h2>DATA PRODUK</h2>
<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'); ?>
<h2>TAMBAH DATA</h2>
<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.